Helper to create valid messages
This commit is contained in:
parent
bf6ee92613
commit
416384c8fa
@ -457,13 +457,15 @@ router.post(
|
||||
for (const action of alertActions) {
|
||||
const alertChannel = await Channel.findOne({ where: { id: action.metadata.channel_id } });
|
||||
if (!alertChannel) continue;
|
||||
const msg = Message.create({
|
||||
const msg = await Message.createWithDefaults({
|
||||
channel_id: alertChannel.id,
|
||||
content: `Automod Alert: Message ${message.id} by <@${message.author_id}> in <#${channel.id}> triggered automod rule "${rule.name}".\nMatched terms: ${matches
|
||||
.map((x) => `\`${x![0]}\``)
|
||||
.join(", ")}`,
|
||||
author: message.author,
|
||||
guild_id: message.guild_id,
|
||||
member_id: message.member_id,
|
||||
author_id: message.author_id
|
||||
});
|
||||
await Promise.all([
|
||||
Message.insert(message),
|
||||
|
||||
@ -254,4 +254,45 @@ export class Message extends BaseClass {
|
||||
attachments: this.attachments?.map((attachment: Attachment) => Attachment.prototype.signUrls.call(attachment, data)),
|
||||
};
|
||||
}
|
||||
|
||||
static async createWithDefaults(opts: Partial<Message>): Promise<Message> {
|
||||
const message = new Message();
|
||||
if (!opts.author) {
|
||||
if (!opts.author_id) throw new Error("Either author or author_id must be provided to create a Message");
|
||||
message.author = await User.findOneOrFail({ where: { id: opts.author_id! } });
|
||||
}
|
||||
|
||||
if (!opts.member) {
|
||||
if (opts.member_id) message.member = await Member.findOneOrFail({ where: { id: opts.member_id! } });
|
||||
else if (message.author && opts.guild_id) message.member = await Member.findOneOrFail({ where: { id: message.author.id, guild_id: opts.guild_id! } });
|
||||
}
|
||||
|
||||
if (!opts.channel) {
|
||||
if (!opts.channel_id) throw new Error("Either channel or channel_id must be provided to create a Message");
|
||||
message.channel = await Channel.findOneOrFail({ where: { id: opts.channel_id! } });
|
||||
}
|
||||
|
||||
if (!opts.guild) {
|
||||
if (opts.guild_id) message.guild = await Guild.findOneOrFail({ where: { id: opts.guild_id! } });
|
||||
else if (opts.channel?.guild) message.guild = opts.channel.guild;
|
||||
else if (opts.channel?.guild_id) message.guild = await Guild.findOneOrFail({ where: { id: opts.channel.guild_id! } });
|
||||
else if (opts.member?.guild) message.guild = opts.member.guild;
|
||||
else if (opts.member?.guild_id) message.guild = await Guild.findOneOrFail({ where: { id: opts.member.guild_id! } });
|
||||
else throw new Error("Either guild, guild_id, channel.guild, channel.guild_id, member.guild or member.guild_id must be provided to create a Message");
|
||||
}
|
||||
|
||||
// try 2 now that we have a guild
|
||||
if (!opts.member) message.member = await Member.findOneOrFail({ where: { id: message.author!.id, guild_id: message.guild!.id } });
|
||||
|
||||
Object.assign(message, {
|
||||
tts: false,
|
||||
embeds: [],
|
||||
reactions: [],
|
||||
flags: 0,
|
||||
type: 0,
|
||||
timestamp: new Date(),
|
||||
...opts,
|
||||
});
|
||||
return message;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user