From fde796782e4915691dddb2e816feccd842bd04e2 Mon Sep 17 00:00:00 2001 From: Dragory <2606411+Dragory@users.noreply.github.com> Date: Sun, 11 Oct 2020 14:17:41 +0300 Subject: [PATCH] Fix crash in ReactionRoles emoji validation --- .../commands/InitReactionRolesCmd.ts | 28 ++++++++----------- backend/src/utils.ts | 4 +++ 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/backend/src/plugins/ReactionRoles/commands/InitReactionRolesCmd.ts b/backend/src/plugins/ReactionRoles/commands/InitReactionRolesCmd.ts index d1eab7f3..423633fd 100644 --- a/backend/src/plugins/ReactionRoles/commands/InitReactionRolesCmd.ts +++ b/backend/src/plugins/ReactionRoles/commands/InitReactionRolesCmd.ts @@ -3,7 +3,7 @@ import { commandTypeHelpers as ct } from "../../../commandTypes"; import { sendErrorMessage, sendSuccessMessage } from "../../../pluginUtils"; import { TextChannel } from "eris"; import { RecoverablePluginError, ERRORS } from "../../../RecoverablePluginError"; -import { canUseEmoji, isDiscordRESTError, noop } from "../../../utils"; +import { canUseEmoji, isDiscordRESTError, isValidEmoji, noop } from "../../../utils"; import { applyReactionRoleReactionsToMessage } from "../util/applyReactionRoleReactionsToMessage"; import { canReadChannel } from "../../../utils/canReadChannel"; @@ -69,22 +69,18 @@ export const InitReactionRolesCmd = reactionRolesCmd({ return; } - try { - if (!canUseEmoji(pluginData.client, pair[0])) { - sendErrorMessage( - pluginData, - msg.channel, - "I can only use regular emojis and custom emojis from servers I'm on", - ); - return; - } - } catch (e) { - if (e instanceof RecoverablePluginError && e.code === ERRORS.INVALID_EMOJI) { - sendErrorMessage(pluginData, msg.channel, `Invalid emoji: ${pair[0]}`); - return; - } + if (!isValidEmoji(pair[0])) { + sendErrorMessage(pluginData, msg.channel, `Invalid emoji: ${pair[0]}`); + return; + } - throw e; + if (!canUseEmoji(pluginData.client, pair[0])) { + sendErrorMessage( + pluginData, + msg.channel, + "I can only use regular emojis and custom emojis from servers I'm on", + ); + return; } if (!pluginData.guild.roles.has(pair[1])) { diff --git a/backend/src/utils.ts b/backend/src/utils.ts index f3df648f..a91caacf 100644 --- a/backend/src/utils.ts +++ b/backend/src/utils.ts @@ -1255,6 +1255,10 @@ export async function renderRecursively(value, fn: RecursiveRenderFn) { return value; } +export function isValidEmoji(emoji: string): boolean { + return isUnicodeEmoji(emoji) || isSnowflake(emoji); +} + export function canUseEmoji(client: Client, emoji: string): boolean { if (isUnicodeEmoji(emoji)) { return true;