import DiscordEvent from "../../util/DiscordEvent"; import { MessageReaction, PartialMessageReaction, PartialUser, User, Events } from "discord.js"; import MemberUtil from "../../util/MemberUtil"; const PUSH_PIN_EMOJI = "📌"; // Unicode export default class MessageReactionAdd extends DiscordEvent { constructor(client) { super(Events.MessageReactionAdd, client); } public async execute(reaction: MessageReaction | PartialMessageReaction, user: User | PartialUser): Promise { try { // Fetch partials if necessary if (reaction.partial) await reaction.fetch(); // Condensed check for guild existence and emoji name if (!reaction.message.guild || reaction.emoji.name !== PUSH_PIN_EMOJI) return; const guild = reaction.message.guild; const member = await guild.members.fetch(user.id); // Combine all partner roles from PartnerDiscordRoleMap const allPartnerRoles = Object.values(MemberUtil.PartnerDiscordRoleMap).flat(); // Check if the user has any of the partner roles if (!member.roles.cache.some(role => allPartnerRoles.includes(role.id))) return; // Attempt to pin the message await reaction.message.pin(); const channel = reaction.message.channel; await channel.send(`Pinned message: ${reaction.message.id}`); } catch (error) { const channel = reaction.message.channel; await channel.send(`Error pinning message: ${error}`); } } }