forked from r-webdev/webdev-bot
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdetectors.ts
More file actions
51 lines (43 loc) · 1.74 KB
/
Copy pathdetectors.ts
File metadata and controls
51 lines (43 loc) · 1.74 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
import type { Message } from 'discord.js';
import { jaccardSimilarity } from '@/util/text.js';
import { replaceSpoilerHack } from '@/util/text.js';
import { stripCode } from '@/util/text.js';
import { MESSAGE_SIMILARITY_THRESHOLD } from './constants.js';
export const containsLink = (message: Message): boolean => {
const withoutCode = stripCode(message.content);
return withoutCode.includes('http://') || withoutCode.includes('https://');
};
export const containsBannedTag = (message: Message): boolean => {
const withoutCode = stripCode(message.content);
return withoutCode.includes('@everyone') || withoutCode.includes('@here');
};
export const containsDiscordInvite = (message: Message): boolean => {
const withoutCode = stripCode(message.content);
const keywords = [
'discord.gg/',
'discord.com/invite/',
'discordapp.com/invite/',
];
return keywords.some((keyword) => withoutCode.includes(keyword));
};
export const containsSpoilerHack = (message: Message) => {
const withoutCode = stripCode(message.content);
return withoutCode !== replaceSpoilerHack(withoutCode, '');
};
export const isDuplicate = (message: Message, oldMessage: Message) => {
// cheaper comparison first
const content = message.content.toLowerCase().trim();
const oldContent = oldMessage.content.toLowerCase().trim();
if (content === oldContent) {
return true;
}
// followed by jaccard for catching reordered/slightly altered messages with high similarity
return jaccardSimilarity(content, oldContent) > MESSAGE_SIMILARITY_THRESHOLD;
};
export const isCrossPost = (message: Message, oldMessage: Message) => {
return (
message.channelId !== oldMessage.channelId &&
isDuplicate(message, oldMessage)
);
};
export const anyMessage = () => true;