68 lines
2.2 kB
1
import { MarkdownRule, Ruleset, SlateRule } from "@moonlight-mod/types/coreExtensions/markdown";
2
3
export const rules: Record<string, (rules: Record<string, MarkdownRule>) => MarkdownRule> = {};
4
export const slateRules: Record<string, (rules: Record<string, SlateRule>) => SlateRule> = {};
5
export const slateDecorators: Record<string, string> = {};
6
export const ruleBlacklists: Record<Ruleset, Record<string, boolean>> = {
7
RULES: {},
8
CHANNEL_TOPIC_RULES: {},
9
VOICE_CHANNEL_STATUS_RULES: {},
10
EMBED_TITLE_RULES: {},
11
INLINE_REPLY_RULES: {},
12
GUILD_VERIFICATION_FORM_RULES: {},
13
GUILD_EVENT_RULES: {},
14
PROFILE_BIO_RULES: {},
15
AUTO_MODERATION_SYSTEM_MESSAGE_RULES: {},
16
NATIVE_SEARCH_RESULT_LINK_RULES: {}
17
};
18
19
export function addRule(
20
name: string,
21
markdown: (rules: Record<string, MarkdownRule>) => MarkdownRule,
22
slate: (rules: Record<string, SlateRule>) => SlateRule,
23
decorator?: string
24
) {
25
rules[name] = markdown;
26
slateRules[name] = slate;
27
if (decorator != null) slateDecorators[name] = decorator;
28
}
29
30
export function blacklistFromRuleset(ruleset: Ruleset, name: string) {
31
if (ruleBlacklists[ruleset] == null) ruleBlacklists[ruleset] = {};
32
ruleBlacklists[ruleset][name] = true;
33
}
34
35
export function _addRules(originalRules: Record<string, MarkdownRule>) {
36
for (const name in rules) {
37
originalRules["__moonlight_" + name] = rules[name](originalRules);
38
}
39
40
return originalRules;
41
}
42
43
export function _addSlateRules(originalRules: Record<string, SlateRule>) {
44
for (const name in slateRules) {
45
originalRules["__moonlight_" + name] = slateRules[name](originalRules);
46
}
47
48
return originalRules;
49
}
50
51
export function _addSlateDecorators(originalRules: Record<string, string>) {
52
for (const name in slateDecorators) {
53
originalRules["__moonlight_" + name] = slateDecorators[name];
54
}
55
56
return originalRules;
57
}
58
59
export function _applyRulesetBlacklist(rulesets: Record<Ruleset, Record<string, MarkdownRule>>) {
60
for (const ruleset of Object.keys(rulesets) as Ruleset[]) {
61
if (ruleset === "RULES") continue;
62
63
const rules = rulesets[ruleset];
64
for (const rule in ruleBlacklists[ruleset] || {}) {
65
delete rules["__moonlight_" + rule];
66
}
67
}
68
}
69