From 4c4f5854c1503cfabee09d1c12679aaa8a080580 Mon Sep 17 00:00:00 2001 From: almeidx Date: Sun, 29 Aug 2021 11:37:33 +0100 Subject: [PATCH] added use_inline_reply option to the reply action --- backend/src/plugins/Automod/actions/reply.ts | 31 ++++++++++++++------ 1 file changed, 22 insertions(+), 9 deletions(-) diff --git a/backend/src/plugins/Automod/actions/reply.ts b/backend/src/plugins/Automod/actions/reply.ts index d40681e3..4d6efe66 100644 --- a/backend/src/plugins/Automod/actions/reply.ts +++ b/backend/src/plugins/Automod/actions/reply.ts @@ -1,4 +1,4 @@ -import { MessageOptions, Permissions, Snowflake, TextChannel, ThreadChannel, User } from "discord.js"; +import { Message, MessageOptions, Permissions, Snowflake, TextChannel, ThreadChannel, User } from "discord.js"; import * as t from "io-ts"; import { userToTemplateSafeUser } from "../../../utils/templateSafeObjects"; import { LogType } from "../../../data/LogType"; @@ -25,6 +25,7 @@ export const ReplyAction = automodAction({ t.type({ text: tMessageContent, auto_delete: tNullable(t.union([tDelayString, t.number])), + use_inline_reply: t.boolean, }), ]), @@ -51,7 +52,7 @@ export const ReplyAction = automodAction({ const users = unique(Array.from(new Set(_contexts.map(c => c.user).filter(Boolean)))) as User[]; const user = users[0]; - const renderReplyText = async str => + const renderReplyText = async (str: string) => renderTemplate( str, new TemplateSafeValueContainer({ @@ -94,16 +95,28 @@ export const ReplyAction = automodAction({ } const messageContent = validateAndParseMessageContent(formatted); - const replyMsg = await channel.send({ - ...messageContent, - allowedMentions: { - users: [user.id], - }, - }); + let replyMsg: Message; + + if (typeof actionConfig !== "string" && actionConfig.use_inline_reply) { + const originalMsg = await channel.messages.fetch(_contexts[0].message!.id); + replyMsg = await originalMsg.reply({ + ...messageContent, + allowedMentions: { + users: [user.id], + }, + }); + } else { + replyMsg = await channel.send({ + ...messageContent, + allowedMentions: { + users: [user.id], + }, + }); + } if (typeof actionConfig === "object" && actionConfig.auto_delete) { const delay = convertDelayStringToMS(String(actionConfig.auto_delete))!; - setTimeout(() => replyMsg.delete().catch(noop), delay); + setTimeout(() => !replyMsg.deleted && replyMsg.delete().catch(noop), delay); } } }