diff --git a/src/discord/Settings/Language.ts b/src/discord/Settings/Language.ts index a712c8b..4c51cda 100644 --- a/src/discord/Settings/Language.ts +++ b/src/discord/Settings/Language.ts @@ -14,12 +14,15 @@ import { import { COMMON_EMBEDS } from '.'; import Locale from '../../providers/Locale'; +import { checkMemberPermissions } from '../../utils/DiscordPermission'; const EMBEDS = { LANGUAGE_INFO: (data: HybridInteractionMessage, locale: I18n, currentLocale: string) => { return makeInfoEmbed({ - title: locale.__('settings_language.info', { LANGUAGE: currentLocale}), - description: locale.__('settings_language.info_description', { LANGUAGES: Locale.getLocaleProvider('en').getLocales().join(', ') }), + title: locale.__('settings_language.info', { LANGUAGE: currentLocale }), + description: locale.__('settings_language.info_description', { + LANGUAGES: Locale.getLocaleProvider('en').getLocales().join(', ') + }), user: data.getUser() }); }, @@ -33,7 +36,10 @@ const EMBEDS = { LANGUAGE_UPDATED: (data: HybridInteractionMessage, locale: I18n, newLanguage: string) => { return makeSuccessEmbed({ title: locale.__({ phrase: 'settings_language.language_updated', locale: newLanguage }), - description: locale.__({ phrase: 'settings_language.language_updated_description', locale: newLanguage }, { LANGUAGE: newLanguage }), + description: locale.__( + { phrase: 'settings_language.language_updated_description', locale: newLanguage }, + { LANGUAGE: newLanguage } + ), user: data.getUser() }); } @@ -44,15 +50,11 @@ export default async (data: HybridInteractionMessage, args: any, guild: Guild, l if (!member) return; const GuildCache = await Cache.getCachedGuild(guild.id); - if (!GuildCache) return; + if (!GuildCache) return; const language = GuildCache.locale; - const requiredPermissions = [PermissionsBitField.Flags.ManageGuild]; - - if (!member.permissions.has(requiredPermissions)) - return await sendHybridInteractionMessageResponse(data, { - embeds: [COMMON_EMBEDS.NO_PERMISSION(data, locale, requiredPermissions)] - }); + if (!(await checkMemberPermissions({ member, data, locale, permissions: [PermissionsBitField.Flags.ManageGuild] }))) + return; let newLanguage: string | null | undefined; if (data.isMessage()) { @@ -66,7 +68,8 @@ export default async (data: HybridInteractionMessage, args: any, guild: Guild, l __name.shift(); _name = __name.join(' '); newLanguage = _name; - } else if (data.isApplicationCommand()) newLanguage = data.getSlashCommand().options.get('language', true).value?.toString(); + } else if (data.isApplicationCommand()) + newLanguage = data.getSlashCommand().options.get('language', true).value?.toString(); if (!newLanguage) return await sendHybridInteractionMessageResponse(data, { diff --git a/src/discord/Settings/Prefix.ts b/src/discord/Settings/Prefix.ts index 6b8ce60..e4c5a37 100644 --- a/src/discord/Settings/Prefix.ts +++ b/src/discord/Settings/Prefix.ts @@ -14,6 +14,7 @@ import { } from '../../utils/DiscordMessage'; import { COMMON_EMBEDS } from '.'; +import { checkMemberPermissions } from '../../utils/DiscordPermission'; const EMBEDS = { PREFIX_INFO: (data: HybridInteractionMessage, locale: I18n, currentPrefix: string) => { @@ -54,12 +55,8 @@ export default async (data: HybridInteractionMessage, args: any, guild: Guild, l if (!GuildCache) return; const prefix = GuildCache.prefix; - const requiredPermissions = [PermissionsBitField.Flags.ManageGuild]; - - if (!member.permissions.has(requiredPermissions)) - return await sendHybridInteractionMessageResponse(data, { - embeds: [COMMON_EMBEDS.NO_PERMISSION(data, locale, requiredPermissions)] - }); + if (!(await checkMemberPermissions({ member, data, locale, permissions: [PermissionsBitField.Flags.ManageGuild] }))) + return; let newPrefix: string | null | undefined; if (data.isMessage()) { diff --git a/src/discord/Settings/ServiceAnnouncement.ts b/src/discord/Settings/ServiceAnnouncement.ts index f25181b..f524a5c 100644 --- a/src/discord/Settings/ServiceAnnouncement.ts +++ b/src/discord/Settings/ServiceAnnouncement.ts @@ -13,6 +13,7 @@ import { } from '../../utils/DiscordMessage'; import { COMMON_EMBEDS } from '.'; +import { checkMemberPermissions } from '../../utils/DiscordPermission'; const EMBEDS = { SERVICE_ANNOUNCEMENT_INVALID_STATUS: (data: HybridInteractionMessage, locale: I18n) => { @@ -103,12 +104,8 @@ export const setEnableServiceAnnouncement = async ( let member = data.getMember(); if (!member) return; - const requiredPermissions = [PermissionsBitField.Flags.Administrator]; - - if (!member.permissions.has(requiredPermissions)) - return await sendHybridInteractionMessageResponse(data, { - embeds: [COMMON_EMBEDS.NO_PERMISSION(data, locale, requiredPermissions)] - }); + if (!(await checkMemberPermissions({ member, data, locale, permissions: [PermissionsBitField.Flags.Administrator] }))) + return; let GuildCache = await Cache.getCachedGuild(guild.id); if(!GuildCache) return; @@ -185,12 +182,8 @@ export const setServiceAnnouncementChannel = async ( let member = data.getMember(); if (!member) return; - const requiredPermissions = [PermissionsBitField.Flags.Administrator]; - - if (!member.permissions.has(requiredPermissions)) - return await sendHybridInteractionMessageResponse(data, { - embeds: [COMMON_EMBEDS.NO_PERMISSION(data, locale, requiredPermissions)] - }); + if (!(await checkMemberPermissions({ member, data, locale, permissions: [PermissionsBitField.Flags.Administrator] }))) + return; let channel; if (data.isMessage()) { diff --git a/src/utils/DiscordPermission.ts b/src/utils/DiscordPermission.ts new file mode 100644 index 0000000..b067082 --- /dev/null +++ b/src/utils/DiscordPermission.ts @@ -0,0 +1,26 @@ +import { GuildMember } from 'discord.js'; +import { I18n } from 'i18n'; +import { COMMON_EMBEDS } from '../discord/Settings'; +import { sendHybridInteractionMessageResponse } from './DiscordMessage'; +import { HybridInteractionMessage } from './DiscordModule'; + +export async function checkMemberPermissions({ + member, + permissions, + data, + locale +}: { + member: GuildMember; + permissions: bigint[]; + data?: HybridInteractionMessage; + locale?: I18n; +}): Promise { + const hasPermissions = member.permissions.has(permissions); + + if (!hasPermissions && data && locale) + await sendHybridInteractionMessageResponse(data, { + embeds: [COMMON_EMBEDS.NO_PERMISSION(data, locale, permissions)] + }); + + return hasPermissions; +}