Plugin

LoadingQuotes

Replace Discords loading quotes

Appearance Fun Customisation
index.ts
Download

Source

src/plugins/loadingQuotes/index.ts
1/*
2 * FiveCord — a Discord client mod
3 * Copyright (c) 2025 FiveCord
4 * SPDX-License-Identifier: GPL-3.0-or-later
5 */
6
7import { definePluginSettings } from "@api/Settings";
8import { Devs } from "@utils/constants";
9import { Logger } from "@utils/Logger";
10import definePlugin, { OptionType } from "@utils/types";
11import presetQuotesText from "file:class="ts-cmt">//quotes.txt";
12
13const presetQuotes = presetQuotesText.split("\n").map(quote => /^\s*[^#\s]/.test(quote) && quote.trim()).filter(Boolean) as string[];
14const noQuotesQuote = "Did you really disable all loading quotes? What a buffoon you are...";
15
16const settings = definePluginSettings({
17 replaceEvents: {
18 description: "Should this plugin also apply during events with special event themed quotes? (e.g. Halloween)",
19 type: OptionType.BOOLEAN,
20 default: true
21 },
22 enablePluginPresetQuotes: {
23 description: "Enable the quotes preset by this plugin",
24 type: OptionType.BOOLEAN,
25 default: true
26 },
27 enableDiscordPresetQuotes: {
28 description: "Enable Discord's preset quotes (including event quotes, during events)",
29 type: OptionType.BOOLEAN,
30 default: false
31 },
32 additionalQuotes: {
33 description: "Additional custom quotes to possibly appear, separated by the below delimiter",
34 type: OptionType.STRING,
35 default: "",
36 multiline: true
37 },
38 additionalQuotesDelimiter: {
39 description: "Delimiter for additional quotes",
40 type: OptionType.STRING,
41 default: "|",
42 },
43});
44
45export default definePlugin({
46 name: "LoadingQuotes",
47 description: "Replace Discords loading quotes",
48 tags: ["Appearance", "Fun", "Customisation"],
49 authors: [Devs.Ven, Devs.KraXen72, Devs.UlyssesZhan],
50
51 settings,
52
53 patches: [
54 {
55 find: "#{intl::LOADING_DID_YOU_KNOW}",
56 replacement: [
57 {
58 match: /_loadingText.+?(?=(\i)\[.{0,10}\.random)/,
59 replace: "$&$self.mutateQuotes($1),"
60 },
61 {
62 match: /_eventLoadingText.+?(?=(\i)\[.{0,10}\.random)/,
63 replace: "$&$self.mutateQuotes($1),",
64 predicate: () => settings.store.replaceEvents
65 }
66 ]
67 },
68 ],
69
70 mutateQuotes(quotes: string[]) {
71 try {
72 const { enableDiscordPresetQuotes, additionalQuotes, additionalQuotesDelimiter, enablePluginPresetQuotes } = settings.store;
73
74 if (!enableDiscordPresetQuotes)
75 quotes.length = 0;
76
77
78 if (enablePluginPresetQuotes)
79 quotes.push(...presetQuotes);
80
81 quotes.push(...additionalQuotes.split(additionalQuotesDelimiter).filter(Boolean));
82
83 if (!quotes.length)
84 quotes.push(noQuotesQuote);
85 } catch (e) {
86 new Logger("LoadingQuotes").error("Failed to mutate quotes", e);
87 }
88 }
89});
90