Skip to content

Commit 82087ea

Browse files
committed
fix: catch reaction invalid emoji errors
1 parent 4e23036 commit 82087ea

File tree

3 files changed

+19
-4
lines changed

3 files changed

+19
-4
lines changed

backend/src/plugins/AutoReactions/events/AddReactionsEvt.ts

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { GuildTextBasedChannel, PermissionsBitField } from "discord.js";
22
import { AutoReaction } from "../../../data/entities/AutoReaction.js";
3-
import { isDiscordAPIError } from "../../../utils.js";
3+
import { isDiscordAPIError, isDiscordJsTypeError } from "../../../utils.js";
44
import { getMissingChannelPermissions } from "../../../utils/getMissingChannelPermissions.js";
55
import { missingPermissionError } from "../../../utils/missingPermissionError.js";
66
import { readChannelPermissions } from "../../../utils/readChannelPermissions.js";
@@ -53,7 +53,12 @@ export const AddReactionsEvt = autoReactionsEvt({
5353
try {
5454
await message.react(reaction);
5555
} catch (e) {
56-
if (isDiscordAPIError(e)) {
56+
if (isDiscordJsTypeError(e)) {
57+
const logs = pluginData.getPlugin(LogsPlugin);
58+
logs.logBotAlert({
59+
body: `Could not apply auto-reactions in <#${channel.id}> for message \`${message.id}\`: ${e.message}.`,
60+
});
61+
} else if (isDiscordAPIError(e)) {
5762
const logs = pluginData.getPlugin(LogsPlugin);
5863
if (e.code === 10008) {
5964
logs.logBotAlert({

backend/src/plugins/ReactionRoles/util/applyReactionRoleReactionsToMessage.ts

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { Snowflake } from "discord.js";
22
import { GuildPluginData } from "vety";
33
import { ReactionRole } from "../../../data/entities/ReactionRole.js";
4-
import { isDiscordAPIError, sleep } from "../../../utils.js";
4+
import { isDiscordAPIError, isDiscordJsTypeError, sleep } from "../../../utils.js";
55
import { LogsPlugin } from "../../Logs/LogsPlugin.js";
66
import { ReactionRolesPluginType } from "../types.js";
77

@@ -72,7 +72,12 @@ export async function applyReactionRoleReactionsToMessage(
7272
await targetMessage.react(rawEmoji);
7373
await sleep(750); // Make sure we don't hit rate limits
7474
} catch (e) {
75-
if (isDiscordAPIError(e)) {
75+
if (isDiscordJsTypeError(e)) {
76+
errors.push(e.message);
77+
logs.logBotAlert({
78+
body: `Error ${e.code} while applying reaction role reactions to ${channelId}/${messageId}: ${e.message}.`,
79+
});
80+
} else if (isDiscordAPIError(e)) {
7681
if (e.code === 10014) {
7782
pluginData.state.reactionRoles.removeFromMessage(messageId, rawEmoji);
7883
errors.push(`Unknown emoji: ${rawEmoji}`);

backend/src/utils.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import {
33
ChannelType,
44
Client,
55
DiscordAPIError,
6+
DiscordjsTypeError,
67
EmbedData,
78
EmbedType,
89
Emoji,
@@ -83,6 +84,10 @@ export function isDiscordAPIError(err: Error | string): err is DiscordAPIError {
8384
return err instanceof DiscordAPIError;
8485
}
8586

87+
export function isDiscordJsTypeError(err: unknown): err is DiscordjsTypeError {
88+
return err instanceof DiscordjsTypeError;
89+
}
90+
8691
// null | undefined -> undefined
8792
export function zNullishToUndefined<T extends z.ZodTypeAny>(
8893
type: T,

0 commit comments

Comments
 (0)