summaryrefslogtreecommitdiff
path: root/packages/gateway/src/commands
diff options
context:
space:
mode:
authorFuwn <[email protected]>2025-09-28 20:09:35 -0700
committerFuwn <[email protected]>2025-09-28 20:09:35 -0700
commitbc1d4d164caa7c67fb578b618d3c2c34a7ab0067 (patch)
tree42028ff9b95fa7d6be903dbecfb9ed79e65a1fdc /packages/gateway/src/commands
parentfeat(listeners): Join voice channel on startup (diff)
downloadumabotdiscord-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.ts2
-rw-r--r--packages/gateway/src/commands/pin.ts51
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.");
+ }
+ }
+};