diff options
author | IRONM00N <64110067+IRONM00N@users.noreply.github.com> | 2021-07-30 13:04:24 -0400 |
---|---|---|
committer | IRONM00N <64110067+IRONM00N@users.noreply.github.com> | 2021-07-30 13:04:24 -0400 |
commit | f5c2b7b946487c2828365cc63bc6f471dd6cfc2f (patch) | |
tree | b225533c2858105b85ba118588954d9cb1ee9781 /src/listeners/message | |
parent | 1c6d451ffd63f9805b978e8565807e8a6b528681 (diff) | |
download | tanzanite-f5c2b7b946487c2828365cc63bc6f471dd6cfc2f.tar.gz tanzanite-f5c2b7b946487c2828365cc63bc6f471dd6cfc2f.tar.bz2 tanzanite-f5c2b7b946487c2828365cc63bc6f471dd6cfc2f.zip |
clean up and fix stuff
Diffstat (limited to 'src/listeners/message')
-rw-r--r-- | src/listeners/message/automodCreate.ts | 95 | ||||
-rw-r--r-- | src/listeners/message/automodUpdate.ts | 10 |
2 files changed, 98 insertions, 7 deletions
diff --git a/src/listeners/message/automodCreate.ts b/src/listeners/message/automodCreate.ts index b6718fc..0321aca 100644 --- a/src/listeners/message/automodCreate.ts +++ b/src/listeners/message/automodCreate.ts @@ -1,5 +1,8 @@ import { BushListener, BushMessage } from '@lib'; -import { ClientEvents } from 'discord.js'; +import { MessageEmbed, TextChannel } from 'discord.js'; +import _badLinks from '../../lib/badlinks.json'; // Stolen from https://github.com/nacrt/SkyblockClient-REPO/blob/main/files/scamlinks.json +import badWords from '../../lib/badwords.json'; +import { BushClientEvents } from '../../lib/extensions/discord.js/BushClientEvents'; export default class AutomodMessageCreateListener extends BushListener { public constructor() { @@ -10,7 +13,93 @@ export default class AutomodMessageCreateListener extends BushListener { }); } - async exec(...[message]: ClientEvents['messageCreate']): Promise<unknown> { - return await util.automod(message as BushMessage); + async exec(...[message]: BushClientEvents['messageCreate']): Promise<unknown> { + return await AutomodMessageCreateListener.automod(message); + } + + public static async automod(message: BushMessage): Promise<unknown> { + if (message.guild.id !== client.consts.mappings.guilds.bush) return; // just temporary + /* await message.guild.getSetting('autoModPhases'); */ + const badLinks = {}; + _badLinks.forEach((link) => { + badLinks[link] = 3; + }); + + // client.console.debug(badLinks, 1); + // client.console.debug(badWords, 1); + + const wordArray = [...Object.keys(badWords), ...Object.keys(badLinks)]; + const offences: { [key: string]: number } = {}; + + // client.console.debug(wordArray); + wordArray.forEach((word) => { + const cleanMessageContent = message.content?.toLowerCase().replace(/ /g, ''); + const cleanWord = word.toLowerCase().replace(/ /g, ''); + + // client.console.debug(cleanMessageContent); + // client.console.debug(cleanWord); + if (cleanMessageContent.includes(cleanWord)) { + if (offences[word]) offences[word] = wordArray[word]; + } + }); + if (!Object.keys(offences)?.length) return; + + const highestOffence = Object.values(offences).sort((a, b) => b - a)[0]; + + switch (highestOffence) { + case 0: { + if (message.deletable) void message.delete(); + break; + } + case 1: { + if (message.deletable) void message.delete(); + void message.member.warn({ + moderator: message.guild.me, + reason: 'Saying a blacklisted word.' + }); + break; + } + case 2: { + if (message.deletable) void message.delete(); + void message.member.mute({ + moderator: message.guild.me, + reason: 'Saying a blacklisted word.', + duration: 900_000 // 15 minutes + }); + break; + } + case 3: { + if (message.deletable) void message.delete(); + void message.member.mute({ + moderator: message.guild.me, + reason: 'Saying a blacklisted word.', + duration: 0 // perm + }); + break; + } + } + + const color = + highestOffence === 0 + ? util.colors.lightGray + : highestOffence === 1 + ? util.colors.yellow + : highestOffence === 2 + ? util.colors.orange + : util.colors.red; + void (message.guild.channels.cache.get('783088333055066212') as TextChannel).send({ + embeds: [ + new MessageEmbed() + .setTitle(`[Severity ${highestOffence}] Automod Action Performed`) + .setDescription( + `**User:** ${message.author} (${message.author.tag})\n**Blacklisted Words:** ${util + .surroundArray(Object.keys(offences), '`') + .join()}` + ) + .addField('Message Content', `${util.codeblock(message.content, 1024)}`) + .setColor(color) + .setTimestamp() + ] + }); } } diff --git a/src/listeners/message/automodUpdate.ts b/src/listeners/message/automodUpdate.ts index e455a3d..7b9e01a 100644 --- a/src/listeners/message/automodUpdate.ts +++ b/src/listeners/message/automodUpdate.ts @@ -1,5 +1,6 @@ import { BushListener, BushMessage } from '@lib'; -import { ClientEvents, Message } from 'discord.js'; +import { BushClientEvents } from '../../lib/extensions/discord.js/BushClientEvents'; +import AutomodMessageCreateListener from './automodCreate'; export default class AutomodMessageUpdateListener extends BushListener { public constructor() { @@ -10,8 +11,9 @@ export default class AutomodMessageUpdateListener extends BushListener { }); } - async exec(...[message]: ClientEvents['messageUpdate']): Promise<unknown> { - const fullMessage = message.partial ? await message.fetch() : (message as Message); - return await util.automod(fullMessage as BushMessage); + // eslint-disable-next-line @typescript-eslint/no-unused-vars + async exec(...[_, newMessage]: BushClientEvents['messageUpdate']): Promise<unknown> { + const fullMessage = newMessage.partial ? await newMessage.fetch() : (newMessage as BushMessage); + return await AutomodMessageCreateListener.automod(fullMessage); } } |