From d85a2dad5ddb3003f875184449680f4e44525721 Mon Sep 17 00:00:00 2001 From: Dragory <2606411+Dragory@users.noreply.github.com> Date: Mon, 17 Aug 2020 00:39:39 +0300 Subject: [PATCH] Add !message --- docs/commands.md | 7 +++++++ src/modules/id.js | 28 ++++++++++++++++++++++++++++ 2 files changed, 35 insertions(+) diff --git a/docs/commands.md b/docs/commands.md index ae2037e..fc838cd 100644 --- a/docs/commands.md +++ b/docs/commands.md @@ -75,6 +75,13 @@ This is mainly useful when reporting messages to Discord's Trust & Safety team. ### `!id` Prints the user's ID. +### `!dm_channel_id` +Prints the ID of the current DM channel with the user + +### `!message ` +Shows the DM channel ID, DM message ID, and message link of the specified user reply. +`` is the message number shown in brackets before the user reply in the thread. + ## Anywhere on the inbox server These commands can be used anywhere on the inbox server, even outside Modmail threads. diff --git a/src/modules/id.js b/src/modules/id.js index ceced1b..abc09a8 100644 --- a/src/modules/id.js +++ b/src/modules/id.js @@ -1,3 +1,6 @@ +const ThreadMessage = require("../data/ThreadMessage"); +const utils = require("../utils"); + module.exports = ({ bot, knex, config, commands }) => { commands.addInboxThreadCommand("id", [], async (msg, args, thread) => { thread.postSystemMessage(thread.user_id); @@ -7,4 +10,29 @@ module.exports = ({ bot, knex, config, commands }) => { const dmChannel = await thread.getDMChannel(); thread.postSystemMessage(dmChannel.id); }); + + commands.addInboxThreadCommand("message", "", async (msg, args, thread) => { + /** @type {ThreadMessage} */ + const threadMessage = await thread.findThreadMessageByMessageNumber(args.messageNumber); + if (! threadMessage) { + thread.postSystemMessage("No message in this thread with that number"); + return; + } + + const channelId = threadMessage.dm_channel_id; + // In specific rare cases, such as createThreadOnMention, a thread message may originate from a main server + const channelIdServer = utils.getMainGuilds().find(g => g.channels.has(channelId)); + const messageLink = channelIdServer + ? `https://discord.com/channels/${channelIdServer.id}/${channelId}/${threadMessage.dm_message_id}` + : `https://discord.com/channels/@me/${channelId}/${threadMessage.dm_message_id}`; + + const parts = [ + `Details for message \`[${threadMessage.message_number}]\`:`, + `Channel ID: \`${channelId}\``, + `Message ID: \`${threadMessage.dm_message_id}\``, + `Link: <${messageLink}>`, + ]; + + thread.postSystemMessage(parts.join("\n")); + }); };