mirror of
https://github.com/ReVanced/revanced-bots.git
synced 2026-01-18 08:43:57 +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
|
type PresetKey = string
|
||||||
|
|
||||||
export const applyRolePreset = async (member: GuildMember, presetName: PresetKey, untilMs: number | null) => {
|
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
|
const until = untilMs ? Math.ceil(untilMs / 1000) : null
|
||||||
|
|
||||||
await database
|
await database
|
||||||
@@ -26,7 +26,7 @@ export const applyRolePreset = async (member: GuildMember, presetName: PresetKey
|
|||||||
}
|
}
|
||||||
|
|
||||||
export const removeRolePreset = 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
|
await database
|
||||||
.delete(appliedPresets)
|
.delete(appliedPresets)
|
||||||
@@ -41,11 +41,7 @@ export const removeRolePreset = async (member: GuildMember, presetName: PresetKe
|
|||||||
.then(afterDelete)
|
.then(afterDelete)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
export const applyRolesUsingPreset = async (presetName: string, member: GuildMember, applying: boolean) => {
|
||||||
* 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) => {
|
|
||||||
const preset = config.rolePresets?.guilds[member.guild.id]?.[presetName]
|
const preset = config.rolePresets?.guilds[member.guild.id]?.[presetName]
|
||||||
if (!preset) throw new Error(`The preset "${presetName}" does not exist for this server`)
|
if (!preset) throw new Error(`The preset "${presetName}" does not exist for this server`)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user