generated from nhcarrigan/template
feat: migrate from github
This commit is contained in:
90
src/utils/sendLogMessage.ts
Normal file
90
src/utils/sendLogMessage.ts
Normal file
@ -0,0 +1,90 @@
|
||||
import { Guild, EmbedBuilder, User } from "discord.js";
|
||||
|
||||
import { EmbedColours } from "../config/EmbedColours";
|
||||
import { Action, ActionToPastTense } from "../interfaces/Action";
|
||||
import { ExtendedClient } from "../interfaces/ExtendedClient";
|
||||
import { getConfig } from "../modules/data/getConfig";
|
||||
|
||||
import { customSubstring } from "./customSubstring";
|
||||
import { errorHandler } from "./errorHandler";
|
||||
|
||||
/**
|
||||
* Sends a manual moderation log.
|
||||
*
|
||||
* @param {ExtendedClient} bot The bot's Discord instance.
|
||||
* @param {Guild} guild The guild the action was taken in.
|
||||
* @param {User} user The user that was actioned.
|
||||
* @param {Action} action The action that was taken.
|
||||
* @param {string} reason The reason for the action.
|
||||
* @param {string} moderatorId The moderator that took the action.
|
||||
* @param {string[]} evidence The evidence for the action.
|
||||
* @param {boolean} notified Whether the user was notified of the action.
|
||||
* @param {number} caseNum The number assigned to the case.
|
||||
* @returns {string | null} The URL of the log message, or null if not sent.
|
||||
*/
|
||||
export const sendLogMessage = async (
|
||||
bot: ExtendedClient,
|
||||
guild: Guild,
|
||||
user: User,
|
||||
action: Action,
|
||||
reason: string,
|
||||
moderatorId: string,
|
||||
evidence: string[],
|
||||
notified: boolean,
|
||||
caseNum: number
|
||||
): Promise<{ url: string; embed: EmbedBuilder } | null> => {
|
||||
try {
|
||||
const config = await getConfig(bot, guild.id);
|
||||
if (!config.modLogChannel) {
|
||||
return null;
|
||||
}
|
||||
|
||||
const channel =
|
||||
guild.channels.cache.get(config.modLogChannel) ||
|
||||
(await guild.channels.fetch(config.modLogChannel));
|
||||
|
||||
if (!channel || !("send" in channel)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
const embed = new EmbedBuilder();
|
||||
embed.setTitle(`Case ${caseNum}: User ${ActionToPastTense[action]}!`);
|
||||
embed.setDescription(customSubstring(reason, 4000));
|
||||
embed.addFields(
|
||||
{
|
||||
name: "Moderator",
|
||||
value: `<@!${moderatorId}>`,
|
||||
inline: true
|
||||
},
|
||||
{
|
||||
name: "User",
|
||||
value: `<@${user.id}>`,
|
||||
inline: true
|
||||
},
|
||||
{
|
||||
name: "Evidence",
|
||||
value: evidence.length > 0 ? evidence.join(", ") : "None",
|
||||
inline: false
|
||||
},
|
||||
{
|
||||
name: "DM sent?",
|
||||
value: notified ? "Yes" : "No",
|
||||
inline: true
|
||||
}
|
||||
);
|
||||
embed.setColor(EmbedColours[action]);
|
||||
embed.setAuthor({
|
||||
name: user.tag,
|
||||
iconURL: user.displayAvatarURL()
|
||||
});
|
||||
embed.setFooter({
|
||||
text: `User ID: ${user.id}`
|
||||
});
|
||||
|
||||
const caseLog = await channel.send({ embeds: [embed] });
|
||||
return { url: caseLog.url, embed };
|
||||
} catch (err) {
|
||||
await errorHandler(bot, "send log message", err);
|
||||
return null;
|
||||
}
|
||||
};
|
Reference in New Issue
Block a user