diff options
| author | Fuwn <[email protected]> | 2025-09-28 20:09:35 -0700 |
|---|---|---|
| committer | Fuwn <[email protected]> | 2025-09-28 20:09:35 -0700 |
| commit | bc1d4d164caa7c67fb578b618d3c2c34a7ab0067 (patch) | |
| tree | 42028ff9b95fa7d6be903dbecfb9ed79e65a1fdc /packages/gateway/src/commands | |
| parent | feat(listeners): Join voice channel on startup (diff) | |
| download | umabotdiscord-bc1d4d164caa7c67fb578b618d3c2c34a7ab0067.tar.xz umabotdiscord-bc1d4d164caa7c67fb578b618d3c2c34a7ab0067.zip | |
feat(commands): Add pin command
Diffstat (limited to 'packages/gateway/src/commands')
| -rw-r--r-- | packages/gateway/src/commands/commandHandler.ts | 2 | ||||
| -rw-r--r-- | packages/gateway/src/commands/pin.ts | 51 |
2 files changed, 53 insertions, 0 deletions
diff --git a/packages/gateway/src/commands/commandHandler.ts b/packages/gateway/src/commands/commandHandler.ts index e985e11..c9b4ee9 100644 --- a/packages/gateway/src/commands/commandHandler.ts +++ b/packages/gateway/src/commands/commandHandler.ts @@ -4,6 +4,7 @@ import { handleStartCommand } from "./start"; import { handleCrpCommand } from "./crp"; import { handleReactCommand } from "./react"; import { handleDeleteCommand } from "./delete"; +import { handlePinCommand } from "./pin"; export const handleCommandHandler = (client: Client) => { client.on(Events.MessageCreate, async (message: Message) => { @@ -15,6 +16,7 @@ export const handleCommandHandler = (client: Client) => { handleCrpCommand(message), handleReactCommand(message), handleDeleteCommand(message), + handlePinCommand(message), ]); }); }; diff --git a/packages/gateway/src/commands/pin.ts b/packages/gateway/src/commands/pin.ts new file mode 100644 index 0000000..da89cf1 --- /dev/null +++ b/packages/gateway/src/commands/pin.ts @@ -0,0 +1,51 @@ +import { Message } from "discord.js"; + +export const handlePinCommand = async (message: Message) => { + if (message.author.bot) return; + + if (!message.content.startsWith("uma!pin")) return; + + const application = await message.client.application?.fetch(); + const ownerId = application?.owner?.id; + + if (message.author.id !== ownerId) return; + + const parameters = message.content.split(" "); + + if (parameters.length < 2) { + await message.reply("❌ Usage: `uma!pin <message_id>`"); + + return; + } + + const messageId = parameters[1]; + + try { + const targetMessage = await message.channel.messages.fetch(messageId); + + if (!targetMessage) { + await message.reply("❌ Message not found."); + + return; + } + + if (targetMessage.pinned) { + await message.reply("❌ Message is already pinned."); + + return; + } + + await message.delete(); + await targetMessage.pin(); + } catch (error) { + console.error("Error pinning message:", error); + + if (error instanceof Error && error.message.includes("Missing Permissions")) { + await message.reply("❌ Missing permissions to pin messages in this channel."); + } else if (error instanceof Error && error.message.includes("Maximum number of pins")) { + await message.reply("❌ Channel has reached maximum number of pinned messages (50). Unpin another message first."); + } else { + await message.reply("❌ Failed to pin the message. Message ID may be invalid."); + } + } +}; |