diff --git a/src/BaseClient/Other/constants/settingsEditorTypes.ts b/src/BaseClient/Other/constants/settingsEditorTypes.ts index 2c55160e..ce909920 100644 --- a/src/BaseClient/Other/constants/settingsEditorTypes.ts +++ b/src/BaseClient/Other/constants/settingsEditorTypes.ts @@ -68,6 +68,7 @@ export default { wlchannelid: CT.EditorTypes.Channels, wlroleid: CT.EditorTypes.Roles, wluserid: CT.EditorTypes.Users, + pingUser: CT.EditorTypes.Boolean, }, [CT.SettingNames.MultiChannels]: { channels: CT.EditorTypes.Channels, diff --git a/src/Commands/SlashCommands/settings/leveling/level-up.ts b/src/Commands/SlashCommands/settings/leveling/level-up.ts index 9ae7d7fc..60c2f6cc 100644 --- a/src/Commands/SlashCommands/settings/leveling/level-up.ts +++ b/src/Commands/SlashCommands/settings/leveling/level-up.ts @@ -70,6 +70,11 @@ export const getEmbeds: CT.SettingsFile['getEmbeds'] = async ( value: embedParsers.time(Number(settings.lvlupdeltimeout) * 1000, language), inline: true, }, + { + name: lan.fields.pingUser.name, + value: embedParsers.boolean(settings.pingUser, language), + inline: true, + }, { name: lan.fields.lvlupchannels.name, value: embedParsers.channels(settings.lvlupchannels, language), @@ -139,6 +144,7 @@ export const getComponents: CT.SettingsFile['getComponents'] = ( components[1].components.push( buttonParsers.specific(language, settings.embed, 'embed', name, undefined), buttonParsers.specific(language, settings.lvlupdeltimeout, 'lvlupdeltimeout', name, undefined), + buttonParsers.specific(language, settings.pingUser, 'pingUser', name, undefined), buttonParsers.specific( language, settings.lvlupchannels, diff --git a/src/Events/BotEvents/messageEvents/messageCreate/levelling.ts b/src/Events/BotEvents/messageEvents/messageCreate/levelling.ts index a7313f0c..dd531126 100644 --- a/src/Events/BotEvents/messageEvents/messageCreate/levelling.ts +++ b/src/Events/BotEvents/messageEvents/messageCreate/levelling.ts @@ -603,13 +603,14 @@ const doEmbed = async ( } if (!embed) return; - send(msg, embed, setting); + send(msg, embed, setting, user); }; -const send = async ( - msg: Discord.Message | Discord.BaseGuildVoiceChannel, +const send = async | Discord.BaseGuildVoiceChannel>( + msg: T, embed: Discord.APIEmbed, setting: Prisma.leveling, + user: T extends Discord.Message ? undefined : Discord.User, ) => { const channelId = msg instanceof Discord.Message ? msg.channelId : msg.id; @@ -619,7 +620,14 @@ const send = async ( id: setting.lvlupchannels.length ? setting.lvlupchannels : [channelId], guildId: msg.guildId, }, - { embeds: [embed] }, + { + embeds: [embed], + content: + setting.pingUser && setting.lvlupchannels.length + ? `<@${(msg instanceof Discord.Message ? msg.author : user)!.id}>` + : undefined, + allowed_mentions: { replied_user: setting.pingUser }, + }, ) .then((m) => m?.filter((ms): ms is Discord.Message => !!ms)); diff --git a/src/Languages/en-GB.json b/src/Languages/en-GB.json index a1d1b196..de8132a4 100644 --- a/src/Languages/en-GB.json +++ b/src/Languages/en-GB.json @@ -3348,6 +3348,10 @@ "text": "Text specific" }, "fields": { + "pingUser": { + "name": "Ping User", + "desc": "Whether to Ping the User when they Level-Up" + }, "textenabled": { "name": "Text-XP Enabled", "desc": "Whether to award XP for Text Messages"