mirror of
https://github.com/ReVanced/revanced-bots.git
synced 2026-01-11 13:56:15 +00:00
fix(bots/discord): apply active role presets if members rejoin
This commit is contained in:
@@ -0,0 +1,16 @@
|
||||
import { appliedPresets } from '$/database/schemas'
|
||||
import { on } from '$/utils/discord/events'
|
||||
import { applyRolesUsingPreset } from '$/utils/discord/rolePresets'
|
||||
import { and, eq, gt } from 'drizzle-orm'
|
||||
|
||||
on('guildMemberAdd', async ({ database }, member) => {
|
||||
const applieds = await database.query.appliedPresets.findMany({
|
||||
where: and(
|
||||
eq(appliedPresets.memberId, member.id),
|
||||
eq(appliedPresets.guildId, member.guild.id),
|
||||
gt(appliedPresets.until, Date.now() / 1000),
|
||||
),
|
||||
})
|
||||
|
||||
for (const { preset } of applieds) await applyRolesUsingPreset(preset, member, true)
|
||||
})
|
||||
@@ -7,7 +7,7 @@ import { and, eq } from 'drizzle-orm'
|
||||
type PresetKey = string
|
||||
|
||||
export const applyRolePreset = async (member: GuildMember, presetName: PresetKey, untilMs: number | null) => {
|
||||
const afterInsert = await commonOperations(presetName, member, true)
|
||||
const afterInsert = await applyRolesUsingPreset(presetName, member, true)
|
||||
const until = untilMs ? Math.ceil(untilMs / 1000) : null
|
||||
|
||||
await database
|
||||
@@ -26,7 +26,7 @@ export const applyRolePreset = async (member: GuildMember, presetName: PresetKey
|
||||
}
|
||||
|
||||
export const removeRolePreset = async (member: GuildMember, presetName: PresetKey) => {
|
||||
const afterDelete = await commonOperations(presetName, member, false)
|
||||
const afterDelete = await applyRolesUsingPreset(presetName, member, false)
|
||||
|
||||
await database
|
||||
.delete(appliedPresets)
|
||||
@@ -41,11 +41,7 @@ export const removeRolePreset = async (member: GuildMember, presetName: PresetKe
|
||||
.then(afterDelete)
|
||||
}
|
||||
|
||||
/**
|
||||
* Inserts (if not already present) an entry in the database, sets the member's roles
|
||||
* @returns The currently applied presets AND a callback function to run after correcting the presets in the database
|
||||
*/
|
||||
const commonOperations = async (presetName: string, member: GuildMember, applying: boolean) => {
|
||||
export const applyRolesUsingPreset = async (presetName: string, member: GuildMember, applying: boolean) => {
|
||||
const preset = config.rolePresets?.guilds[member.guild.id]?.[presetName]
|
||||
if (!preset) throw new Error(`The preset "${presetName}" does not exist for this server`)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user