Remove sims when the Discord user leaves
This commit is contained in:
@@ -65,7 +65,7 @@ test("message2event components: pk question mark output", async t => {
|
||||
+ "<hr>"
|
||||
+ "<blockquote><p><strong>System:</strong> INX (<code>xffgnx</code>)"
|
||||
+ "<br><strong>Member:</strong> Lillith (<code>pphhoh</code>)"
|
||||
+ "<br><strong>Sent by:</strong> infinidoge1337 (@unknown-user:)"
|
||||
+ "<br><strong>Sent by:</strong> infinidoge1337 (<a href=\"https://matrix.to/#/@_ooye_infinidoge1337:cadence.moe\">@unknown-user</a>)"
|
||||
+ "<br><br><strong>Account Roles (7)</strong>"
|
||||
+ "<br>§b, !, ‼, Ears Port Ping, Ears Update Ping, Yttr Ping, unsup Ping</p>"
|
||||
+ `🖼️ <a href="https://files.inx.moe/p/cdn/lillith.webp">https://files.inx.moe/p/cdn/lillith.webp</a>`
|
||||
|
||||
@@ -0,0 +1,38 @@
|
||||
// @ts-check
|
||||
|
||||
const passthrough = require("../../passthrough")
|
||||
const {db, select, from} = passthrough
|
||||
|
||||
/**
|
||||
* @param {string} userID discord user ID that left
|
||||
* @param {string} guildID discord guild ID that they left
|
||||
*/
|
||||
function removeMemberMxids(userID, guildID) {
|
||||
// Get sims for user and remove
|
||||
let membership = from("sim").join("sim_member", "mxid").join("channel_room", "room_id")
|
||||
.select("room_id", "mxid").where({user_id: userID, guild_id: guildID}).and("ORDER BY room_id, mxid").all()
|
||||
membership = membership.concat(from("sim_proxy").join("sim", "user_id").join("sim_member", "mxid").join("channel_room", "room_id")
|
||||
.select("room_id", "mxid").where({proxy_owner_id: userID, guild_id: guildID}).and("ORDER BY room_id, mxid").all())
|
||||
|
||||
// Get user installed apps and remove
|
||||
/** @type {string[]} */
|
||||
let userAppDeletions = []
|
||||
// 1. Select apps that have 1 user remaining
|
||||
/** @type {Set<string>} */
|
||||
const appsWithOneUser = new Set(db.prepare("SELECT app_bot_id FROM app_user_install WHERE guild_id = ? GROUP BY app_bot_id HAVING count(*) = 1").pluck().all(guildID))
|
||||
// 2. Select apps installed by this user
|
||||
const appsFromThisUser = new Set(select("app_user_install", "app_bot_id", {guild_id: guildID, user_id: userID}).pluck().all())
|
||||
if (appsFromThisUser.size) userAppDeletions.push(userID)
|
||||
// Then remove user installed apps if this was the last user with them
|
||||
const appsToRemove = appsWithOneUser.intersection(appsFromThisUser)
|
||||
for (const botID of appsToRemove) {
|
||||
// Remove sims for user installed app
|
||||
const appRemoval = removeMemberMxids(botID, guildID)
|
||||
membership = membership.concat(appRemoval.membership)
|
||||
userAppDeletions = userAppDeletions.concat(appRemoval.userAppDeletions)
|
||||
}
|
||||
|
||||
return {membership, userAppDeletions}
|
||||
}
|
||||
|
||||
module.exports.removeMemberMxids = removeMemberMxids
|
||||
@@ -0,0 +1,43 @@
|
||||
// @ts-check
|
||||
|
||||
const {test} = require("supertape")
|
||||
const {removeMemberMxids} = require("./remove-member-mxids")
|
||||
|
||||
test("remove member mxids: would remove mxid for all rooms in this server", t => {
|
||||
t.deepEqual(removeMemberMxids("772659086046658620", "112760669178241024"), {
|
||||
userAppDeletions: [],
|
||||
membership: [{
|
||||
mxid: "@_ooye_cadence:cadence.moe",
|
||||
room_id: "!fGgIymcYWOqjbSRUdV:cadence.moe"
|
||||
}, {
|
||||
mxid: "@_ooye_cadence:cadence.moe",
|
||||
room_id: "!kLRqKKUQXcibIMtOpl:cadence.moe"
|
||||
}]
|
||||
})
|
||||
})
|
||||
|
||||
test("remove member mxids: removes sims too", t => {
|
||||
t.deepEqual(removeMemberMxids("196188877885538304", "112760669178241024"), {
|
||||
userAppDeletions: [],
|
||||
membership: [{
|
||||
mxid: '@_ooye_ampflower:cadence.moe',
|
||||
room_id: '!qzDBLKlildpzrrOnFZ:cadence.moe'
|
||||
}, {
|
||||
mxid: '@_ooye__pk_zoego:cadence.moe',
|
||||
room_id: '!qzDBLKlildpzrrOnFZ:cadence.moe'
|
||||
}]
|
||||
})
|
||||
})
|
||||
|
||||
test("remove member mxids: removes apps too", t => {
|
||||
t.deepEqual(removeMemberMxids("197126718400626689", "66192955777486848"), {
|
||||
userAppDeletions: ["197126718400626689"],
|
||||
membership: [{
|
||||
mxid: '@_ooye_infinidoge1337:cadence.moe',
|
||||
room_id: '!BnKuBPCvyfOkhcUjEu:cadence.moe'
|
||||
}, {
|
||||
mxid: '@_ooye_evil_lillith_sheher:cadence.moe',
|
||||
room_id: '!BnKuBPCvyfOkhcUjEu:cadence.moe'
|
||||
}]
|
||||
})
|
||||
})
|
||||
Reference in New Issue
Block a user