mirror of
https://github.com/ZeppelinBot/Zeppelin.git
synced 2025-07-08 03:27:20 +00:00
Migrate Spam to new Plugin structure
This commit is contained in:
parent
140ba84544
commit
4f831f6bf6
14 changed files with 622 additions and 0 deletions
86
backend/src/plugins/Spam/util/onMessageCreate.ts
Normal file
86
backend/src/plugins/Spam/util/onMessageCreate.ts
Normal file
|
@ -0,0 +1,86 @@
|
|||
import { PluginData } from "knub";
|
||||
import { SpamPluginType, RecentActionType } from "../types";
|
||||
import { SavedMessage } from "src/data/entities/SavedMessage";
|
||||
import { getUserMentions, getRoleMentions, getUrlsInString, getEmojiInString } from "src/utils";
|
||||
import { logAndDetectMessageSpam } from "./logAndDetectMessageSpam";
|
||||
|
||||
export async function onMessageCreate(pluginData: PluginData<SpamPluginType>, savedMessage: SavedMessage) {
|
||||
if (savedMessage.is_bot) return;
|
||||
|
||||
const config = pluginData.config.getMatchingConfig({
|
||||
userId: savedMessage.user_id,
|
||||
channelId: savedMessage.channel_id,
|
||||
});
|
||||
|
||||
const maxMessages = config.max_messages;
|
||||
if (maxMessages) {
|
||||
logAndDetectMessageSpam(pluginData, savedMessage, RecentActionType.Message, maxMessages, 1, "too many messages");
|
||||
}
|
||||
|
||||
const maxMentions = config.max_mentions;
|
||||
const mentions = savedMessage.data.content
|
||||
? [...getUserMentions(savedMessage.data.content), ...getRoleMentions(savedMessage.data.content)]
|
||||
: [];
|
||||
if (maxMentions && mentions.length) {
|
||||
logAndDetectMessageSpam(
|
||||
pluginData,
|
||||
savedMessage,
|
||||
RecentActionType.Mention,
|
||||
maxMentions,
|
||||
mentions.length,
|
||||
"too many mentions",
|
||||
);
|
||||
}
|
||||
|
||||
const maxLinks = config.max_links;
|
||||
if (maxLinks && savedMessage.data.content && typeof savedMessage.data.content === "string") {
|
||||
const links = getUrlsInString(savedMessage.data.content);
|
||||
logAndDetectMessageSpam(pluginData, savedMessage, RecentActionType.Link, maxLinks, links.length, "too many links");
|
||||
}
|
||||
|
||||
const maxAttachments = config.max_attachments;
|
||||
if (maxAttachments && savedMessage.data.attachments) {
|
||||
logAndDetectMessageSpam(
|
||||
pluginData,
|
||||
savedMessage,
|
||||
RecentActionType.Attachment,
|
||||
maxAttachments,
|
||||
savedMessage.data.attachments.length,
|
||||
"too many attachments",
|
||||
);
|
||||
}
|
||||
|
||||
const maxEmojis = config.max_emojis;
|
||||
if (maxEmojis && savedMessage.data.content) {
|
||||
const emojiCount = getEmojiInString(savedMessage.data.content).length;
|
||||
logAndDetectMessageSpam(pluginData, savedMessage, RecentActionType.Emoji, maxEmojis, emojiCount, "too many emoji");
|
||||
}
|
||||
|
||||
const maxNewlines = config.max_newlines;
|
||||
if (maxNewlines && savedMessage.data.content) {
|
||||
const newlineCount = (savedMessage.data.content.match(/\n/g) || []).length;
|
||||
logAndDetectMessageSpam(
|
||||
pluginData,
|
||||
savedMessage,
|
||||
RecentActionType.Newline,
|
||||
maxNewlines,
|
||||
newlineCount,
|
||||
"too many newlines",
|
||||
);
|
||||
}
|
||||
|
||||
const maxCharacters = config.max_characters;
|
||||
if (maxCharacters && savedMessage.data.content) {
|
||||
const characterCount = [...savedMessage.data.content.trim()].length;
|
||||
logAndDetectMessageSpam(
|
||||
pluginData,
|
||||
savedMessage,
|
||||
RecentActionType.Character,
|
||||
maxCharacters,
|
||||
characterCount,
|
||||
"too many characters",
|
||||
);
|
||||
}
|
||||
|
||||
// TODO: Max duplicates check
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue