/[sudobot]/trunk/src/client/Client.ts
ViewVC logotype

Contents of /trunk/src/client/Client.ts

Parent Directory Parent Directory | Revision Log Revision Log


Revision 393 - (show annotations)
Mon Jul 29 17:29:59 2024 UTC (8 months, 1 week ago) by rakin
File MIME type: application/typescript
File size: 6833 byte(s)
style: add license comments (#77)

* style: add license commits

* fix: shebang errors
1 /**
2 * This file is part of SudoBot.
3 *
4 * Copyright (C) 2021-2022 OSN Inc.
5 *
6 * SudoBot is free software; you can redistribute it and/or modify it
7 * under the terms of the GNU Affero General Public License as published by
8 * the Free Software Foundation, either version 3 of the License, or
9 * (at your option) any later version.
10 *
11 * SudoBot is distributed in the hope that it will be useful, but
12 * WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU Affero General Public License for more details.
15 *
16 * You should have received a copy of the GNU Affero General Public License
17 * along with SudoBot. If not, see <https://www.gnu.org/licenses/>.
18 */
19
20 import { Client, ClientOptions, Collection, Interaction, Message } from 'discord.js';
21 import BaseEvent from '../utils/structures/BaseEvent';
22 import BaseCommand from '../utils/structures/BaseCommand';
23 import { Config } from './Config';
24 import Database from './Database';
25 import path from 'path';
26 import { appendFile } from "fs/promises";
27 import Logger from '../automod/Logger';
28 import SnippetManager from '../services/SnippetManager';
29 import AFKEngine from '../services/AFKEngine';
30 import Auth from '../services/Auth';
31 import MessageFilter from '../automod/MessageFilter';
32 import AntiRaid from '../automod/AntiRaid';
33 import Starboard from '../services/Starboard';
34 import Server from '../api/Server';
35 import StartupManager from '../services/StartupManager';
36 import AutoClear from '../automod/AutoClear';
37 import RandomStatus from '../services/RandomStatus';
38 import DebugLogger from '../services/DebugLogger';
39 import BaseCLICommand from '../utils/structures/BaseCLICommand';
40 import discordModals from 'discord-modals';
41 import SpamFilter from '../automod/SpamFilter';
42 import Verification from '../services/Verification';
43 import Welcomer from '../services/Welcomer';
44 import Antijoin from '../automod/Antijoin';
45 import Automute from '../automod/Automute';
46 import ServiceManager from './ServiceManager';
47 import ChannelLockManager from '../services/ChannelLockManager';
48
49 export default class DiscordClient extends Client {
50 private _commands = new Collection<string, BaseCommand>();
51 private _cliCommands = new Collection<string, BaseCLICommand>();
52 private _events = new Collection<string, BaseEvent>();
53
54 rootdir: string;
55 msg: Message | Interaction | null = null;
56
57 config: Config;
58 db: Database;
59 server: Server;
60 serviceManager: ServiceManager;
61
62 logger: Logger = {} as Logger;
63 snippetManager: SnippetManager = {} as SnippetManager;
64 afkEngine: AFKEngine = {} as AFKEngine;
65 auth: Auth = {} as Auth;
66 spamFilter: SpamFilter = {} as SpamFilter;
67 messageFilter: MessageFilter = {} as MessageFilter;
68 antiraid: AntiRaid = {} as AntiRaid;
69 starboard: Starboard = {} as Starboard;
70 startupManager: StartupManager = {} as StartupManager;
71 autoClear: AutoClear = {} as AutoClear;
72 randomStatus: RandomStatus = {} as RandomStatus;
73 debugLogger: DebugLogger = {} as DebugLogger;
74 verification: Verification = {} as Verification;
75 welcomer: Welcomer = {} as Welcomer;
76 antijoin: Antijoin = {} as Antijoin;
77 automute: Automute = {} as Automute;
78 channelLock: ChannelLockManager = {} as ChannelLockManager;
79
80 aliases = {
81 automod: path.resolve(__dirname, '..', 'automod'),
82 services: path.resolve(__dirname, '..', 'services'),
83 };
84
85 services = {
86 "@services/DebugLogger": "debugLogger",
87 "@automod/Logger": "logger",
88 "@services/SnippetManager": "snippetManager",
89 "@services/AFKEngine": "afkEngine",
90 "@services/Auth": "auth",
91 "@automod/SpamFilter": "spamFilter",
92 "@automod/MessageFilter": "messageFilter",
93 "@automod/AntiRaid": "antiraid",
94 "@services/Starboard": "starboard",
95 "@services/StartupManager": "startupManager",
96 "@automod/AutoClear": "autoClear",
97 "@services/RandomStatus": "randomStatus",
98 "@services/Verification": "verification",
99 "@services/Welcomer": "welcomer",
100 "@services/ChannelLockManager": "channelLock",
101 "@automod/Antijoin": "antijoin",
102 "@automod/Automute": "automute",
103 };
104
105 static client: DiscordClient;
106
107 constructor(options: ClientOptions, rootdir: string = __dirname) {
108 super({
109 ws: {
110 properties: {
111 browser: "Discord iOS"
112 }
113 },
114 ...options
115 });
116
117 process.on('uncaughtException', (error, origin) => {
118 console.log('Uncaught', error);
119 this.handleCrash(error, origin).then(() => process.exit(-1)).catch(err => {
120 console.log(err);
121 process.exit(-1);
122 });
123 });
124
125 console.log('init');
126
127 this.rootdir = rootdir;
128
129 DiscordClient.client = this;
130
131 this.config = new Config(this);
132 this.db = new Database(this);
133 this.serviceManager = new ServiceManager(this, this.aliases);
134 this.serviceManager.load(this.services);
135
136 // this.logger = new Logger(this);
137 // this.snippetManager = new SnippetManager(this);
138 // this.afkEngine = new AFKEngine(this);
139 // this.auth = new Auth(this);
140 // this.spamFilter = new SpamFilter(this);
141 // this.messageFilter = new MessageFilter(this);
142 // this.antiraid = new AntiRaid(this);
143 // this.starboard = new Starboard(this);
144 // this.cooldown = new Cooldown(this);
145 // this.startupManager = new StartupManager(this);
146 // this.autoClear = new AutoClear(this);
147 // this.randomStatus = new RandomStatus(this);
148 // this.debugLogger = new DebugLogger(this);
149 // this.verification = new Verification(this);
150 // this.welcomer = new Welcomer(this);
151 // this.antijoin = new Antijoin(this);
152 // this.automute = new Automute(this);
153
154 this.server = new Server(this);
155
156 discordModals(this);
157 }
158
159 get commands(): Collection<string, BaseCommand> {
160 return this._commands;
161 }
162
163 get cliCommands(): Collection<string, BaseCLICommand> {
164 return this._cliCommands;
165 }
166
167 get events(): Collection<string, BaseEvent> {
168 return this._events;
169 }
170
171 setMessage(msg: Message | Interaction) {
172 this.msg = msg;
173 }
174
175 async handleCrash(error: Error, origin: NodeJS.UncaughtExceptionOrigin) {
176 console.log('here');
177 await appendFile(path.join(process.env.SUDO_PREFIX ?? (__dirname + "/../../"), "logs", "error.log"), `Uncaught ${error.name}: ${error.message}\n+ ${error.stack}`);
178 await this.debugLogger.logToHomeServer(`Uncaught ${error.name}: ${error.message}\n${error.stack}`);
179 }
180 }

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26