xernerx 0.1.120-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/main.cjs ADDED
@@ -0,0 +1,353 @@
1
+ 'use strict';
2
+
3
+ var Discord = require('discord.js');
4
+ var zod = require('zod');
5
+ var sharpyy2 = require('sharpyy');
6
+ var fs = require('fs');
7
+ var path = require('path');
8
+
9
+ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
10
+
11
+ function _interopNamespace(e) {
12
+ if (e && e.__esModule) return e;
13
+ var n = Object.create(null);
14
+ if (e) {
15
+ Object.keys(e).forEach(function (k) {
16
+ if (k !== 'default') {
17
+ var d = Object.getOwnPropertyDescriptor(e, k);
18
+ Object.defineProperty(n, k, d.get ? d : {
19
+ enumerable: true,
20
+ get: function () { return e[k]; }
21
+ });
22
+ }
23
+ });
24
+ }
25
+ n.default = e;
26
+ return Object.freeze(n);
27
+ }
28
+
29
+ var Discord__namespace = /*#__PURE__*/_interopNamespace(Discord);
30
+ var sharpyy2__default = /*#__PURE__*/_interopDefault(sharpyy2);
31
+ var fs__namespace = /*#__PURE__*/_interopNamespace(fs);
32
+ var path__namespace = /*#__PURE__*/_interopNamespace(path);
33
+
34
+ var __defProp = Object.defineProperty;
35
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
36
+ var XernerxLog_default = new class XernerxLog {
37
+ static {
38
+ __name(this, "XernerxLog");
39
+ }
40
+ constructor() {
41
+ this.baseText = `${sharpyy2__default.default("XERNERX", "txRainbow", "bold")} | ${(/* @__PURE__ */ new Date()).toLocaleTimeString().split(/ /gim).map(
42
+ (str) => str.split(":").map((str2) => isNaN(Number(str2)) ? str2 : sharpyy2__default.default(str2, "txCyan")).join(":")
43
+ ).join(" ")} | ${sharpyy2__default.default(String(Math.round(process.memoryUsage().rss / 1e4) / 100), "txCyan")}mb |`;
44
+ }
45
+ info(message) {
46
+ return console.info(`\u2714\uFE0F |`, this.baseText, message);
47
+ }
48
+ async error(message, error) {
49
+ const { default: boxen } = await import('boxen');
50
+ const errorMessage = boxen(error?.stack, { padding: 1, margin: 1, borderStyle: "round", borderColor: "red" });
51
+ if (error) return console.error(`\u2757 |`, this.baseText, message, errorMessage);
52
+ else return console.error(`\u2757 |`, this.baseText, message);
53
+ }
54
+ warn(message, url) {
55
+ console.warn(`\u26A0\uFE0F |`, this.baseText, message, url ? `Read more here ${sharpyy2.link("here", url)}` : "");
56
+ }
57
+ debug(message) {
58
+ return console.debug(`\u{1F41B} |`, this.baseText, message);
59
+ }
60
+ async box(message, color, title) {
61
+ const { default: boxen } = await import('boxen');
62
+ const time = (/* @__PURE__ */ new Date()).toLocaleTimeString().split(/ /gim).map(
63
+ (str) => str.split(":").map((str2) => isNaN(Number(str2)) ? str2 : sharpyy2__default.default(str2, "txCyan")).join(":")
64
+ ).join(" ");
65
+ return console.info(boxen(message, { padding: 1, margin: 1, borderStyle: "round", borderColor: color, title: `${time} - ${sharpyy2__default.default("XERNERX", "txRainbow", "bold")} - ${title || ""}` }));
66
+ }
67
+ }();
68
+
69
+ // src/util/prompts.ts
70
+ var init = false;
71
+ async function start(client) {
72
+ if (init) return;
73
+ if (client.settings.debug) XernerxLog_default.info("Debug mode enabled, preventing console clear and logging all handlings...");
74
+ else console.clear();
75
+ const { default: ora, spinners } = await import('ora');
76
+ const { default: boxen } = await import('boxen');
77
+ console.info(
78
+ boxen(sharpyy2__default.default("XERNERX", "txRainbow", "bold", "underlines"), {
79
+ padding: 1,
80
+ margin: 1,
81
+ borderStyle: "round",
82
+ height: 3,
83
+ align: "center",
84
+ borderColor: "magenta",
85
+ fullscreen: /* @__PURE__ */ __name((width, height) => [width - 5, height], "fullscreen")
86
+ })
87
+ );
88
+ if (!client.options.intents.has("Guilds"))
89
+ XernerxLog_default.warn("Your bot is signed in without the Guilds intent, this may cause issues with the bot.", new URL("https://discord.com/developers/docs/topics/gateway#gateway-intents"));
90
+ const spinner = ora();
91
+ spinner.spinner = spinners.dots12;
92
+ spinner.start();
93
+ let index = 0;
94
+ setInterval(async () => {
95
+ calculateStats(client);
96
+ const time = (/* @__PURE__ */ new Date()).toLocaleTimeString().split(/ /gim).map(
97
+ (str) => str.split(":").map((str2) => isNaN(Number(str2)) ? str2 : sharpyy2__default.default(str2, "txCyan")).join(":")
98
+ ).join(" "), ram = `${sharpyy2__default.default(String(Math.round(process.memoryUsage().rss / 1e4) / 100), "txCyan")}mb`;
99
+ const colors = ["red", "green", "yellow", "blue", "magenta", "cyan"];
100
+ const baseText = `${sharpyy2__default.default("XERNERX", "txRainbow", "bold")} | ${time} | ${ram} | `;
101
+ if (client.user) {
102
+ spinner.color = colors[index];
103
+ const counts = {
104
+ local: client.commands.stats.slash.local + client.commands.stats.message.local + client.commands.stats.context.local,
105
+ global: client.commands.stats.slash.global + client.commands.stats.message.global + client.commands.stats.context.global
106
+ };
107
+ spinner.text = boxen(
108
+ Object.entries({
109
+ "Name": sharpyy2__default.default(client.user.tag, "txBlue"),
110
+ "Status": `${sharpyy2__default.default("Online", "txGreen")} | ${client.settings.global ? sharpyy2__default.default("Global", "txGreen") : sharpyy2__default.default("Local", "txRed")}`,
111
+ "Uptime": client.util.uptime(client.uptime).split("").map((c) => isNaN(Number(c)) ? c : sharpyy2__default.default(c, "txCyan")).join(""),
112
+ "Commands": client.settings.global ? `${counts.local ? `local: ${counts.local}` : ""}|${counts.global ? `global: ${counts.global}` : ""}` : counts.local + counts.global,
113
+ "RAM Usage": ram,
114
+ "Guilds": (await Promise.all(client.settings.guilds.map(async (id) => sharpyy2__default.default((await client.guilds.fetch(id))?.name || id, "txBlue")))).join(", "),
115
+ "Owners": (await Promise.all(client.settings.owners.map(async (id) => sharpyy2__default.default((await client.users.fetch(id))?.username || id, "txBlue")))).join(", "),
116
+ "GuildCount": sharpyy2__default.default(String(client.stats.guilds), "txCyan"),
117
+ "UserCount": sharpyy2__default.default(String(client.stats.users), "txCyan"),
118
+ "ShardCount": sharpyy2__default.default(String(client.stats.shardCount), "txCyan")
119
+ }).map(([key, value]) => `${key}: ${value}`).join("\n"),
120
+ {
121
+ padding: 1,
122
+ margin: 1,
123
+ borderStyle: "round",
124
+ borderColor: "magenta",
125
+ title: time + " - " + sharpyy2__default.default("XERNERX", "txRainbow", "bold") + "\x1B[35m",
126
+ height: 15,
127
+ fullscreen: /* @__PURE__ */ __name((width, height) => [width - 5, height], "fullscreen")
128
+ }
129
+ );
130
+ } else {
131
+ spinner.color = "green";
132
+ spinner.text = baseText + `Connecting to Discord${index == 0 ? "." : index == 1 ? ".." : index == 2 ? "..." : ""}`;
133
+ }
134
+ index++;
135
+ if (index == colors.length - 1) index = 0;
136
+ }, 250);
137
+ init = true;
138
+ }
139
+ __name(start, "start");
140
+ function calculateStats(client) {
141
+ client.stats.guilds = client.guilds.cache.size;
142
+ client.stats.users = client.users.cache.size;
143
+ client.stats.shardCount = client.options.shardCount || null;
144
+ }
145
+ __name(calculateStats, "calculateStats");
146
+ var Handler = class {
147
+ static {
148
+ __name(this, "Handler");
149
+ }
150
+ constructor(client) {
151
+ this.client = client;
152
+ }
153
+ async readdir(directory) {
154
+ const dirpath = path__namespace.resolve(directory);
155
+ if (this.client.settings.debug) XernerxLog_default.debug(`Attempting to read directory ${sharpyy2.link(directory, new URL(dirpath))}`);
156
+ try {
157
+ const files = fs__namespace.readdirSync(dirpath);
158
+ return files.filter((file) => file.endsWith(".js") || file.endsWith(".mjs") || file.endsWith(".cjs"));
159
+ } catch (error) {
160
+ XernerxLog_default.error(`Error reading directory ${sharpyy2.link(directory, new URL(dirpath))}:`, error);
161
+ return [];
162
+ }
163
+ }
164
+ async load(filepath) {
165
+ if (this.client.settings.debug) XernerxLog_default.debug(`Attempting to load ${sharpyy2.link(filepath, new URL(filepath))}`);
166
+ try {
167
+ const file = (await import(`file://${filepath}`))?.default || await import(`file://${filepath}`);
168
+ const openFile = new file();
169
+ const [collection, group] = openFile.collection.split(".");
170
+ group ? this.client[group][collection].set(openFile._id, openFile) : this.client[collection].set(openFile._id, openFile);
171
+ if (this.client.settings.debug) XernerxLog_default.debug(`Loaded ${sharpyy2.link(openFile._id, new URL(filepath))}`);
172
+ return openFile;
173
+ } catch (error) {
174
+ XernerxLog_default.error(`Error loading ${sharpyy2.link(filepath, new URL(filepath))}:`, error);
175
+ return null;
176
+ }
177
+ }
178
+ };
179
+ var CommandHandler = class extends Handler {
180
+ static {
181
+ __name(this, "CommandHandler");
182
+ }
183
+ constructor(client) {
184
+ super(client);
185
+ }
186
+ async loadSlashCommands(options) {
187
+ if (!this.client.modules.options.slash) this.client.modules.options.slash = {};
188
+ this.client.modules.options.slash.global = options.global ?? this.client.settings.global;
189
+ for (const file of await this.readdir(options.directory)) {
190
+ const command = await this.load(path__namespace.default.resolve(`${options.directory}/${file}`));
191
+ if (!command) continue;
192
+ if (command.filetype == "XernerxMessageCommand" || command.filetype == "XernerxSlashCommand" || command.filetype == "XernerxContextCommand") {
193
+ if (!this.client.modules.options.slash.global) this.client.commands.stats.slash.local++;
194
+ else if (!command.global) this.client.commands.stats.slash.local++;
195
+ else this.client.commands.stats.slash.global++;
196
+ }
197
+ }
198
+ }
199
+ async loadMessageCommands(options) {
200
+ }
201
+ async loadContextCommands(options) {
202
+ }
203
+ };
204
+
205
+ // src/util/Util.ts
206
+ var Util = class {
207
+ static {
208
+ __name(this, "Util");
209
+ }
210
+ constructor(client) {
211
+ this.client = client;
212
+ }
213
+ };
214
+
215
+ // src/util/ClientUtil.ts
216
+ var ClientUtil = class extends Util {
217
+ static {
218
+ __name(this, "ClientUtil");
219
+ }
220
+ constructor(client) {
221
+ super(client);
222
+ }
223
+ uptime(timestamp) {
224
+ if (!timestamp) timestamp = this.client.uptime || 0;
225
+ let totalSeconds = timestamp / 1e3;
226
+ let years = Math.floor(totalSeconds / 31536e3);
227
+ totalSeconds %= 31536e3;
228
+ let days = Math.floor(totalSeconds / 86400);
229
+ totalSeconds %= 86400;
230
+ let hours = Math.floor(totalSeconds / 3600);
231
+ totalSeconds %= 3600;
232
+ let minutes = Math.floor(totalSeconds / 60);
233
+ let seconds = Math.floor(totalSeconds % 60);
234
+ if (years >= 1) return `${years}y ${days}d ${hours}h ${minutes}m`;
235
+ else if (days >= 1) return `${days}d ${hours}h ${minutes}m`;
236
+ else if (hours >= 1) return `${hours}h ${minutes}m`;
237
+ else if (minutes >= 1) return `${minutes}m ${seconds}s`;
238
+ else return `${seconds}s`;
239
+ }
240
+ };
241
+
242
+ // src/client/XernerxClient.ts
243
+ var XernerxClient = class extends Discord__namespace.Client {
244
+ static {
245
+ __name(this, "XernerxClient");
246
+ }
247
+ constructor(DiscordOptions, XernerxOptions, config) {
248
+ super(DiscordOptions);
249
+ this.settings = zod.z.object({
250
+ // required settings
251
+ token: zod.z.string(),
252
+ // optional settings
253
+ global: zod.z.boolean().default(false),
254
+ owners: zod.z.array(zod.z.string()).default([]),
255
+ guilds: zod.z.array(zod.z.string()).default([]),
256
+ // dev settings
257
+ debug: zod.z.boolean().default(false)
258
+ }).parse({ ...XernerxOptions, ...config });
259
+ this.stats = {
260
+ guilds: null,
261
+ users: null,
262
+ shardId: null,
263
+ shardCount: null,
264
+ shards: null,
265
+ voteCount: null,
266
+ votes: null
267
+ };
268
+ this.util = new ClientUtil(this);
269
+ start(this);
270
+ this.modules = {
271
+ commandHandler: new CommandHandler(this),
272
+ options: {}
273
+ };
274
+ this.commands = {
275
+ message: new Discord__namespace.Collection(),
276
+ slash: new Discord__namespace.Collection(),
277
+ context: new Discord__namespace.Collection(),
278
+ stats: {
279
+ slash: {
280
+ local: 0,
281
+ global: 0
282
+ },
283
+ message: {
284
+ local: 0,
285
+ global: 0
286
+ },
287
+ context: {
288
+ local: 0,
289
+ global: 0
290
+ }
291
+ }
292
+ };
293
+ this.events = new Discord__namespace.Collection();
294
+ this.inhibitors = new Discord__namespace.Collection();
295
+ this.connect();
296
+ }
297
+ async connect() {
298
+ this.deploy();
299
+ this.login(this.settings.token);
300
+ }
301
+ async deploy() {
302
+ this.once("ready", async (client) => {
303
+ const commands = { local: [], global: [] };
304
+ if (this.settings.global) {
305
+ if (!this.modules.options.slash?.global) commands.global.push(...this.commands.slash);
306
+ else {
307
+ commands.global.push(...this.commands.slash.filter((c) => c.global));
308
+ commands.local.push(...this.commands.slash.filter((c) => !c.global));
309
+ }
310
+ if (!this.modules.options.context?.global) commands.global.push(...this.commands.context);
311
+ else {
312
+ commands.global.push(...this.commands.context.filter((c) => c.global));
313
+ commands.local.push(...this.commands.context.filter((c) => !c.global));
314
+ }
315
+ } else commands.local.push(...this.commands.context, ...this.commands.slash);
316
+ for (const id of this.settings.guilds) {
317
+ const guild = await this.guilds.fetch(id);
318
+ if (!commands.local.length) break;
319
+ if (this.settings.debug) XernerxLog_default.debug(`Attempting to deploy commands to guild: ${sharpyy2__default.default(guild.name, "txBlue")}`);
320
+ this.rest.put(Discord__namespace.Routes.applicationGuildCommands(client.user.id, id), { body: commands.local.map(([id2, command]) => command.toJSON()) });
321
+ await XernerxLog_default.box(
322
+ commands.local.map(([id2]) => sharpyy2__default.default(id2, "txYellow")).join(", "),
323
+ "red",
324
+ `Deployed ${sharpyy2__default.default("local", "txRed", "bold")} commands in ${sharpyy2__default.default(guild.name, "txBlue")}`
325
+ );
326
+ }
327
+ if (this.settings.global) {
328
+ if (this.settings.debug) XernerxLog_default.debug(`Attempting to deploy commands globally`);
329
+ this.rest.put(Discord__namespace.Routes.applicationCommands(client.user.id), { body: [] });
330
+ await XernerxLog_default.box(commands.global.map(([id]) => sharpyy2__default.default(id, "txYellow")).join(", "), "green", `Deployed ${sharpyy2__default.default("global", "txGreen", "bold")} commands`);
331
+ }
332
+ });
333
+ }
334
+ };
335
+ var XernerxSlashCommand = class extends Discord__namespace.SlashCommandBuilder {
336
+ static {
337
+ __name(this, "XernerxSlashCommand");
338
+ }
339
+ constructor(options) {
340
+ super();
341
+ this._id = options.id;
342
+ this.setName(options.name);
343
+ this.setDescription(options.description);
344
+ this.global = options.global ?? true;
345
+ this.filetype = "XernerxSlashCommand";
346
+ this.collection = "slash.commands";
347
+ }
348
+ };
349
+
350
+ exports.XernerxClient = XernerxClient;
351
+ exports.XernerxSlashCommand = XernerxSlashCommand;
352
+ //# sourceMappingURL=main.cjs.map
353
+ //# sourceMappingURL=main.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/tools/XernerxLog.ts","../src/util/prompts.ts","../src/handlers/Handler.ts","../src/handlers/CommandHandler.ts","../src/util/Util.ts","../src/util/ClientUtil.ts","../src/client/XernerxClient.ts","../src/base/XernerxSlashCommand.ts"],"names":["sharpyy","str","link","path","fs","Discord","z","id","Discord2"],"mappings":"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","file":"main.cjs","sourcesContent":["/** @format */\r\n\r\nimport sharpyy, { link } from 'sharpyy';\r\n\r\nexport default new (class XernerxLog {\r\n\tpublic declare readonly baseText;\r\n\r\n\tconstructor() {\r\n\t\tthis.baseText = `${sharpyy('XERNERX', 'txRainbow', 'bold')} | ${new Date()\r\n\t\t\t.toLocaleTimeString()\r\n\t\t\t.split(/ /gim)\r\n\t\t\t.map((str) =>\r\n\t\t\t\tstr\r\n\t\t\t\t\t.split(':')\r\n\t\t\t\t\t.map((str) => (isNaN(Number(str)) ? str : sharpyy(str, 'txCyan')))\r\n\t\t\t\t\t.join(':')\r\n\t\t\t)\r\n\t\t\t.join(' ')} | ${sharpyy(String(Math.round(process.memoryUsage().rss / 10000) / 100), 'txCyan')}mb |`;\r\n\t}\r\n\r\n\tinfo(message: string) {\r\n\t\treturn console.info(`✔️ |`, this.baseText, message);\r\n\t}\r\n\r\n\tasync error(message: string, error?: Error) {\r\n\t\tconst { default: boxen } = await import('boxen');\r\n\r\n\t\tconst errorMessage = boxen(error?.stack as string, { padding: 1, margin: 1, borderStyle: 'round', borderColor: 'red' });\r\n\r\n\t\tif (error) return console.error(`❗ |`, this.baseText, message, errorMessage);\r\n\t\telse return console.error(`❗ |`, this.baseText, message);\r\n\t}\r\n\r\n\twarn(message: string, url?: URL) {\r\n\t\tconsole.warn(`⚠️ |`, this.baseText, message, url ? `Read more here ${link('here', url)}` : '');\r\n\t}\r\n\r\n\tdebug(message: string) {\r\n\t\treturn console.debug(`🐛 |`, this.baseText, message);\r\n\t}\r\n\r\n\tasync box(message: string, color?: string, title?: string) {\r\n\t\tconst { default: boxen } = await import('boxen');\r\n\r\n\t\tconst time = new Date()\r\n\t\t\t.toLocaleTimeString()\r\n\t\t\t.split(/ /gim)\r\n\t\t\t.map((str) =>\r\n\t\t\t\tstr\r\n\t\t\t\t\t.split(':')\r\n\t\t\t\t\t.map((str) => (isNaN(Number(str)) ? str : sharpyy(str, 'txCyan')))\r\n\t\t\t\t\t.join(':')\r\n\t\t\t)\r\n\t\t\t.join(' ');\r\n\r\n\t\treturn console.info(boxen(message, { padding: 1, margin: 1, borderStyle: 'round', borderColor: color, title: `${time} - ${sharpyy('XERNERX', 'txRainbow', 'bold')} - ${title || ''}` }));\r\n\t}\r\n})();\r\n","/** @format */\r\n\r\nimport sharpyy from 'sharpyy';\r\nimport { Color } from 'ora';\r\n\r\nimport { XernerxClient } from '../client/XernerxClient.js';\r\nimport XernerxLog from '../tools/XernerxLog.js';\r\n\r\nlet init = false;\r\n\r\nexport async function start(client: XernerxClient) {\r\n\tif (init) return;\r\n\r\n\tif (client.settings.debug) XernerxLog.info('Debug mode enabled, preventing console clear and logging all handlings...');\r\n\telse console.clear();\r\n\r\n\tconst { default: ora, spinners } = await import('ora');\r\n\tconst { default: boxen } = await import('boxen');\r\n\r\n\tconsole.info(\r\n\t\tboxen(sharpyy('XERNERX', 'txRainbow', 'bold', 'underlines'), {\r\n\t\t\tpadding: 1,\r\n\t\t\tmargin: 1,\r\n\t\t\tborderStyle: 'round',\r\n\t\t\theight: 3,\r\n\t\t\talign: 'center',\r\n\t\t\tborderColor: 'magenta',\r\n\t\t\tfullscreen: (width, height) => [width - 5, height],\r\n\t\t})\r\n\t);\r\n\r\n\tif (!client.options.intents.has('Guilds'))\r\n\t\tXernerxLog.warn('Your bot is signed in without the Guilds intent, this may cause issues with the bot.', new URL('https://discord.com/developers/docs/topics/gateway#gateway-intents'));\r\n\r\n\tconst spinner = ora();\r\n\r\n\tspinner.spinner = spinners.dots12;\r\n\r\n\tspinner.start();\r\n\r\n\tlet index = 0;\r\n\r\n\tsetInterval(async () => {\r\n\t\t// Update Discord stats\r\n\t\tcalculateStats(client);\r\n\r\n\t\t// Update commandline\r\n\r\n\t\tconst time = new Date()\r\n\t\t\t\t.toLocaleTimeString()\r\n\t\t\t\t.split(/ /gim)\r\n\t\t\t\t.map((str) =>\r\n\t\t\t\t\tstr\r\n\t\t\t\t\t\t.split(':')\r\n\t\t\t\t\t\t.map((str) => (isNaN(Number(str)) ? str : sharpyy(str, 'txCyan')))\r\n\t\t\t\t\t\t.join(':')\r\n\t\t\t\t)\r\n\t\t\t\t.join(' '),\r\n\t\t\tram = `${sharpyy(String(Math.round(process.memoryUsage().rss / 10000) / 100), 'txCyan')}mb`;\r\n\r\n\t\tconst colors = ['red', 'green', 'yellow', 'blue', 'magenta', 'cyan'];\r\n\r\n\t\tconst baseText = `${sharpyy('XERNERX', 'txRainbow', 'bold')} | ${time} | ${ram} | `;\r\n\r\n\t\tif (client.user) {\r\n\t\t\tspinner.color = colors[index] as Color;\r\n\r\n\t\t\tconst counts = {\r\n\t\t\t\tlocal: client.commands.stats.slash.local + client.commands.stats.message.local + client.commands.stats.context.local,\r\n\t\t\t\tglobal: client.commands.stats.slash.global + client.commands.stats.message.global + client.commands.stats.context.global,\r\n\t\t\t};\r\n\r\n\t\t\tspinner.text = boxen(\r\n\t\t\t\tObject.entries({\r\n\t\t\t\t\t'Name': sharpyy(client.user.tag, 'txBlue'),\r\n\t\t\t\t\t'Status': `${sharpyy('Online', 'txGreen')} | ${client.settings.global ? sharpyy('Global', 'txGreen') : sharpyy('Local', 'txRed')}`,\r\n\t\t\t\t\t'Uptime': client.util\r\n\t\t\t\t\t\t.uptime(client.uptime)\r\n\t\t\t\t\t\t.split('')\r\n\t\t\t\t\t\t.map((c) => (isNaN(Number(c)) ? c : sharpyy(c, 'txCyan')))\r\n\t\t\t\t\t\t.join(''),\r\n\t\t\t\t\t'Commands': client.settings.global ? `${counts.local ? `local: ${counts.local}` : ''}|${counts.global ? `global: ${counts.global}` : ''}` : counts.local + counts.global,\r\n\t\t\t\t\t'RAM Usage': ram,\r\n\t\t\t\t\t'Guilds': (await Promise.all(client.settings.guilds.map(async (id) => sharpyy((await client.guilds.fetch(id))?.name || id, 'txBlue')))).join(', '),\r\n\t\t\t\t\t'Owners': (await Promise.all(client.settings.owners.map(async (id) => sharpyy((await client.users.fetch(id))?.username || id, 'txBlue')))).join(', '),\r\n\t\t\t\t\t'GuildCount': sharpyy(String(client.stats.guilds), 'txCyan'),\r\n\t\t\t\t\t'UserCount': sharpyy(String(client.stats.users), 'txCyan'),\r\n\t\t\t\t\t'ShardCount': sharpyy(String(client.stats.shardCount), 'txCyan'),\r\n\t\t\t\t})\r\n\t\t\t\t\t.map(([key, value]) => `${key}: ${value}`)\r\n\t\t\t\t\t.join('\\n'),\r\n\t\t\t\t{\r\n\t\t\t\t\tpadding: 1,\r\n\t\t\t\t\tmargin: 1,\r\n\t\t\t\t\tborderStyle: 'round',\r\n\t\t\t\t\tborderColor: 'magenta',\r\n\t\t\t\t\ttitle: time + ' - ' + sharpyy('XERNERX', 'txRainbow', 'bold') + '\\x1B[35m',\r\n\t\t\t\t\theight: 15,\r\n\t\t\t\t\tfullscreen: (width, height) => [width - 5, height],\r\n\t\t\t\t}\r\n\t\t\t);\r\n\t\t} else {\r\n\t\t\tspinner.color = 'green';\r\n\r\n\t\t\tspinner.text = baseText + `Connecting to Discord${index == 0 ? '.' : index == 1 ? '..' : index == 2 ? '...' : ''}`;\r\n\t\t}\r\n\r\n\t\tindex++;\r\n\r\n\t\tif (index == colors.length - 1) index = 0;\r\n\t}, 250);\r\n\r\n\tinit = true;\r\n}\r\n\r\nfunction calculateStats(client: XernerxClient) {\r\n\tclient.stats.guilds = client.guilds.cache.size;\r\n\tclient.stats.users = client.users.cache.size;\r\n\tclient.stats.shardCount = client.options.shardCount || null;\r\n}\r\n","/** @format */\r\n// import * as inquirer from '@inquirer/prompts';\r\n// import { link } from 'sharpyy';\r\n\r\nimport { XernerxClient } from '../client/XernerxClient.js';\r\nimport * as fs from 'fs';\r\nimport * as path from 'path';\r\n\r\nimport { XernerxFile } from '../types/types.js';\r\nimport XernerxLog from '../tools/XernerxLog.js';\r\nimport { link } from 'sharpyy';\r\n\r\nexport class Handler {\r\n\tpublic declare readonly client: XernerxClient;\r\n\r\n\tconstructor(client: XernerxClient) {\r\n\t\tthis.client = client;\r\n\t}\r\n\r\n\tprotected async readdir(directory: string) {\r\n\t\tconst dirpath = path.resolve(directory);\r\n\r\n\t\tif (this.client.settings.debug) XernerxLog.debug(`Attempting to read directory ${link(directory, new URL(dirpath))}`);\r\n\r\n\t\ttry {\r\n\t\t\tconst files = fs.readdirSync(dirpath);\r\n\r\n\t\t\treturn files.filter((file) => file.endsWith('.js') || file.endsWith('.mjs') || file.endsWith('.cjs'));\r\n\t\t} catch (error) {\r\n\t\t\tXernerxLog.error(`Error reading directory ${link(directory, new URL(dirpath))}:`, error as Error);\r\n\t\t\treturn [];\r\n\t\t}\r\n\t}\r\n\r\n\tprotected async load(filepath: string) {\r\n\t\tif (this.client.settings.debug) XernerxLog.debug(`Attempting to load ${link(filepath, new URL(filepath))}`);\r\n\r\n\t\ttry {\r\n\t\t\tconst file = ((await import(`file://${filepath}`))?.default || (await import(`file://${filepath}`))) as XernerxFile;\r\n\r\n\t\t\tconst openFile = new (file as any)() as XernerxFile;\r\n\r\n\t\t\tconst [collection, group] = openFile.collection.split('.');\r\n\r\n\t\t\tgroup\r\n\t\t\t\t? this.client[group as 'commands'][collection as 'message' | 'slash' | 'context'].set(openFile._id, openFile as never)\r\n\t\t\t\t: this.client[collection as 'events' | 'inhibitors'].set(openFile._id, openFile as never);\r\n\r\n\t\t\tif (this.client.settings.debug) XernerxLog.debug(`Loaded ${link(openFile._id, new URL(filepath))}`);\r\n\r\n\t\t\treturn openFile as XernerxFile;\r\n\t\t} catch (error) {\r\n\t\t\tXernerxLog.error(`Error loading ${link(filepath, new URL(filepath))}:`, error as Error);\r\n\t\t\treturn null;\r\n\t\t}\r\n\t}\r\n}\r\n","/** @format */\r\n\r\nimport { XernerxClient } from '../client/XernerxClient.js';\r\nimport { XernerxContextCommandHandlerOptions, XernerxMessageCommandHandlerOptions, XernerxSlashCommandHandlerOptions } from '../types/interfaces.js';\r\nimport { Handler } from './Handler.js';\r\nimport path from 'path';\r\n\r\nexport class CommandHandler extends Handler {\r\n\tconstructor(client: XernerxClient) {\r\n\t\tsuper(client);\r\n\t}\r\n\r\n\tprotected async loadSlashCommands(options: XernerxSlashCommandHandlerOptions) {\r\n\t\tif (!this.client.modules.options.slash) this.client.modules.options.slash = {};\r\n\t\tthis.client.modules.options.slash.global = options.global ?? this.client.settings.global;\r\n\r\n\t\tfor (const file of await this.readdir(options.directory)) {\r\n\t\t\tconst command = await this.load(path.resolve(`${options.directory}/${file}`));\r\n\r\n\t\t\tif (!command) continue;\r\n\r\n\t\t\tif (command.filetype == 'XernerxMessageCommand' || command.filetype == 'XernerxSlashCommand' || command.filetype == 'XernerxContextCommand') {\r\n\t\t\t\tif (!this.client.modules.options.slash.global) this.client.commands.stats.slash.local++;\r\n\t\t\t\telse if (!command.global) this.client.commands.stats.slash.local++;\r\n\t\t\t\telse this.client.commands.stats.slash.global++;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\tprotected async loadMessageCommands(options: XernerxMessageCommandHandlerOptions) {}\r\n\tprotected async loadContextCommands(options: XernerxContextCommandHandlerOptions) {}\r\n}\r\n","/** @format */\r\n\r\nimport { XernerxClient } from '../main.js';\r\n\r\nexport class Util {\r\n\tpublic declare readonly client: XernerxClient;\r\n\r\n\tconstructor(client: XernerxClient) {\r\n\t\tthis.client = client;\r\n\t}\r\n}\r\n","/** @format */\r\n\r\nimport { XernerxClient } from '../main.js';\r\nimport { Util } from './Util.js';\r\n\r\nexport class ClientUtil extends Util {\r\n\tconstructor(client: XernerxClient) {\r\n\t\tsuper(client);\r\n\t}\r\n\r\n\tpublic uptime(timestamp?: number | null) {\r\n\t\tif (!timestamp) timestamp = this.client.uptime || 0;\r\n\t\tlet totalSeconds = timestamp / 1000;\r\n\t\tlet years = Math.floor(totalSeconds / 31536000);\r\n\t\ttotalSeconds %= 31536000;\r\n\t\tlet days = Math.floor(totalSeconds / 86400);\r\n\t\ttotalSeconds %= 86400;\r\n\t\tlet hours = Math.floor(totalSeconds / 3600);\r\n\t\ttotalSeconds %= 3600;\r\n\t\tlet minutes = Math.floor(totalSeconds / 60);\r\n\t\tlet seconds = Math.floor(totalSeconds % 60);\r\n\r\n\t\tif (years >= 1) return `${years}y ${days}d ${hours}h ${minutes}m`;\r\n\t\telse if (days >= 1) return `${days}d ${hours}h ${minutes}m`;\r\n\t\telse if (hours >= 1) return `${hours}h ${minutes}m`;\r\n\t\telse if (minutes >= 1) return `${minutes}m ${seconds}s`;\r\n\t\telse return `${seconds}s`;\r\n\t}\r\n}\r\n","/** @format */\r\n\r\nimport * as Discord from 'discord.js';\r\nimport { z } from 'zod';\r\n\r\nimport { start } from '../util/prompts.js';\r\nimport { XernerxStats } from '../types/interfaces.js';\r\nimport { CommandHandler } from '../handlers/CommandHandler.js';\r\nimport { XernerxMessageCommand } from '../base/XernerxMessageCommand.js';\r\nimport { XernerxSlashCommand } from '../main.js';\r\nimport { XernerxContextCommand } from '../base/XernerxContextCommand.js';\r\nimport { XernerxEvent } from '../base/XernerxEvent.js';\r\nimport { XernerxInhibitor } from '../base/XernerxInhibitor.js';\r\nimport XernerxLog from '../tools/XernerxLog.js';\r\nimport sharpyy from 'sharpyy';\r\nimport { ClientUtil } from '../util/ClientUtil.js';\r\n\r\nexport class XernerxClient<T = {}> extends Discord.Client {\r\n\tpublic declare readonly settings;\r\n\tpublic declare readonly stats: XernerxStats;\r\n\tpublic declare readonly modules: {\r\n\t\tcommandHandler: CommandHandler;\r\n\t\toptions: {\r\n\t\t\tmessage?: { global?: boolean };\r\n\t\t\tslash?: { global?: boolean };\r\n\t\t\tcontext?: { global?: boolean };\r\n\t\t};\r\n\t};\r\n\tpublic declare readonly util: ClientUtil;\r\n\tpublic declare readonly commands;\r\n\tpublic declare readonly events;\r\n\tpublic declare readonly inhibitors;\r\n\r\n\tconstructor(DiscordOptions: any, XernerxOptions: any, config: T) {\r\n\t\tsuper(DiscordOptions);\r\n\r\n\t\tthis.settings = z\r\n\t\t\t.object({\r\n\t\t\t\t// required settings\r\n\t\t\t\ttoken: z.string(),\r\n\r\n\t\t\t\t// optional settings\r\n\t\t\t\tglobal: z.boolean().default(false),\r\n\t\t\t\towners: z.array(z.string()).default([]),\r\n\t\t\t\tguilds: z.array(z.string()).default([]),\r\n\r\n\t\t\t\t// dev settings\r\n\t\t\t\tdebug: z.boolean().default(false),\r\n\t\t\t})\r\n\t\t\t.parse({ ...XernerxOptions, ...config });\r\n\r\n\t\tthis.stats = {\r\n\t\t\tguilds: null,\r\n\t\t\tusers: null,\r\n\t\t\tshardId: null,\r\n\t\t\tshardCount: null,\r\n\t\t\tshards: null,\r\n\t\t\tvoteCount: null,\r\n\t\t\tvotes: null,\r\n\t\t};\r\n\r\n\t\tthis.util = new ClientUtil(this);\r\n\r\n\t\tstart(this);\r\n\r\n\t\tthis.modules = {\r\n\t\t\tcommandHandler: new CommandHandler(this),\r\n\r\n\t\t\toptions: {},\r\n\t\t};\r\n\r\n\t\tthis.commands = {\r\n\t\t\tmessage: new Discord.Collection() as Discord.Collection<string, XernerxMessageCommand>,\r\n\t\t\tslash: new Discord.Collection() as Discord.Collection<string, XernerxSlashCommand>,\r\n\t\t\tcontext: new Discord.Collection() as Discord.Collection<string, XernerxContextCommand>,\r\n\t\t\tstats: {\r\n\t\t\t\tslash: {\r\n\t\t\t\t\tlocal: 0,\r\n\t\t\t\t\tglobal: 0,\r\n\t\t\t\t},\r\n\t\t\t\tmessage: {\r\n\t\t\t\t\tlocal: 0,\r\n\t\t\t\t\tglobal: 0,\r\n\t\t\t\t},\r\n\t\t\t\tcontext: {\r\n\t\t\t\t\tlocal: 0,\r\n\t\t\t\t\tglobal: 0,\r\n\t\t\t\t},\r\n\t\t\t},\r\n\t\t};\r\n\r\n\t\tthis.events = new Discord.Collection() as Discord.Collection<string, XernerxEvent>;\r\n\t\tthis.inhibitors = new Discord.Collection() as Discord.Collection<string, XernerxInhibitor>;\r\n\r\n\t\tthis.connect();\r\n\t}\r\n\r\n\tprivate async connect() {\r\n\t\t// slash cmds\r\n\t\tthis.deploy();\r\n\r\n\t\t// login\r\n\t\tthis.login(this.settings.token);\r\n\t}\r\n\r\n\tprivate async deploy() {\r\n\t\tthis.once('ready', async (client) => {\r\n\t\t\tconst commands: { local: Array<XernerxSlashCommand | XernerxContextCommand>; global: Array<XernerxSlashCommand | XernerxContextCommand> } = { local: [], global: [] };\r\n\r\n\t\t\tif (this.settings.global) {\r\n\t\t\t\tif (!this.modules.options.slash?.global) commands.global.push(...(this.commands.slash as any));\r\n\t\t\t\telse {\r\n\t\t\t\t\tcommands.global.push(...(this.commands.slash.filter((c) => c.global) as any));\r\n\r\n\t\t\t\t\tcommands.local.push(...(this.commands.slash.filter((c) => !c.global) as any));\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (!this.modules.options.context?.global) commands.global.push(...(this.commands.context as any));\r\n\t\t\t\telse {\r\n\t\t\t\t\tcommands.global.push(...(this.commands.context.filter((c) => c.global) as any));\r\n\r\n\t\t\t\t\tcommands.local.push(...(this.commands.context.filter((c) => !c.global) as any));\r\n\t\t\t\t}\r\n\t\t\t} else commands.local.push(...(this.commands.context as any), ...(this.commands.slash as any));\r\n\r\n\t\t\tfor (const id of this.settings.guilds) {\r\n\t\t\t\tconst guild = await this.guilds.fetch(id);\r\n\r\n\t\t\t\tif (!commands.local.length) break;\r\n\r\n\t\t\t\tif (this.settings.debug) XernerxLog.debug(`Attempting to deploy commands to guild: ${sharpyy(guild.name, 'txBlue')}`);\r\n\r\n\t\t\t\tthis.rest.put(Discord.Routes.applicationGuildCommands(client.user.id, id), { body: (commands.local as any).map(([id, command]: any) => command.toJSON()) });\r\n\r\n\t\t\t\tawait XernerxLog.box(\r\n\t\t\t\t\t(commands.local as any).map(([id]: [string]) => sharpyy(id, 'txYellow')).join(', '),\r\n\t\t\t\t\t'red',\r\n\t\t\t\t\t`Deployed ${sharpyy('local', 'txRed', 'bold')} commands in ${sharpyy(guild.name, 'txBlue')}`\r\n\t\t\t\t);\r\n\t\t\t}\r\n\r\n\t\t\tif (this.settings.global) {\r\n\t\t\t\tif (this.settings.debug) XernerxLog.debug(`Attempting to deploy commands globally`);\r\n\r\n\t\t\t\tthis.rest.put(Discord.Routes.applicationCommands(client.user.id), { body: [] });\r\n\r\n\t\t\t\tawait XernerxLog.box((commands.global as any).map(([id]: [string]) => sharpyy(id, 'txYellow')).join(', '), 'green', `Deployed ${sharpyy('global', 'txGreen', 'bold')} commands`);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n}\r\n","/** @format */\r\n\r\nimport * as Discord from 'discord.js';\r\n\r\nexport class XernerxSlashCommand extends Discord.SlashCommandBuilder {\r\n\tpublic declare readonly _id: string;\r\n\tpublic declare readonly global: boolean;\r\n\tpublic declare readonly filetype: 'XernerxSlashCommand';\r\n\tpublic declare readonly collection: 'slash.commands';\r\n\r\n\tconstructor(options: any) {\r\n\t\tsuper();\r\n\r\n\t\tthis._id = options.id;\r\n\r\n\t\tthis.setName(options.name);\r\n\r\n\t\tthis.setDescription(options.description);\r\n\r\n\t\tthis.global = options.global ?? true;\r\n\r\n\t\tthis.filetype = 'XernerxSlashCommand';\r\n\r\n\t\tthis.collection = 'slash.commands';\r\n\t}\r\n}\r\n"]}
@@ -0,0 +1,167 @@
1
+ import * as Discord from 'discord.js';
2
+
3
+ /** @format */
4
+ interface XernerxStats {
5
+ guilds: null | number;
6
+ users: null | number;
7
+ shardId: null | number;
8
+ shardCount: null | number;
9
+ shards: null | number;
10
+ voteCount: null | number;
11
+ votes: null | number;
12
+ }
13
+ interface XernerxSlashCommandHandlerOptions {
14
+ directory: string;
15
+ global: boolean;
16
+ }
17
+ interface XernerxMessageCommandHandlerOptions {
18
+ directory: string;
19
+ global: boolean;
20
+ }
21
+ interface XernerxContextCommandHandlerOptions {
22
+ directory: string;
23
+ global: boolean;
24
+ }
25
+
26
+ /** @format */
27
+ declare class XernerxContextCommand {
28
+ readonly _id: string;
29
+ readonly name: string;
30
+ readonly description: string;
31
+ readonly global: boolean;
32
+ readonly filetype: 'XernerxContextCommand';
33
+ readonly collection: 'context.commands';
34
+ constructor(options: any);
35
+ }
36
+
37
+ /** @format */
38
+ declare class XernerxEvent {
39
+ readonly _id: string;
40
+ readonly name: string;
41
+ readonly description: string;
42
+ readonly filetype: 'XernerxEvent';
43
+ readonly collection: 'events';
44
+ constructor(options: any);
45
+ }
46
+
47
+ /** @format */
48
+ declare class XernerxInhibitor {
49
+ readonly _id: string;
50
+ readonly name: string;
51
+ readonly description: string;
52
+ readonly filetype: 'XernerxInhibitor';
53
+ readonly collection: 'inhibitors';
54
+ constructor(options: any);
55
+ }
56
+
57
+ /** @format */
58
+ declare class XernerxMessageCommand {
59
+ readonly _id: string;
60
+ readonly name: string;
61
+ readonly description: string;
62
+ readonly global: boolean;
63
+ readonly filetype: 'XernerxMessageCommand';
64
+ readonly collection: 'message.commands';
65
+ constructor(options: any);
66
+ }
67
+
68
+ /** @format */
69
+
70
+ declare class XernerxSlashCommand extends Discord.SlashCommandBuilder {
71
+ readonly _id: string;
72
+ readonly global: boolean;
73
+ readonly filetype: 'XernerxSlashCommand';
74
+ readonly collection: 'slash.commands';
75
+ constructor(options: any);
76
+ }
77
+
78
+ /** @format */
79
+
80
+ type XernerxFileType = 'XernerxSlashCommand' | 'XernerxMessageCommand' | 'XernerxContextCommand' | 'XernerxEvent' | 'XernerxInhibitor';
81
+ type XernerxFile<T = XernerxFileType> = T extends 'XernerxSlashCommand' ? XernerxSlashCommand : T extends 'XernerxMessageCommand' ? XernerxMessageCommand : T extends 'XernerxContextCommand' ? XernerxContextCommand : T extends 'XernerxEvent' ? XernerxEvent : T extends 'XernerxInhibitor' ? XernerxInhibitor : XernerxSlashCommand | XernerxMessageCommand | XernerxSlashCommand | XernerxEvent | XernerxInhibitor;
82
+
83
+ /** @format */
84
+
85
+ declare class Handler {
86
+ readonly client: XernerxClient;
87
+ constructor(client: XernerxClient);
88
+ protected readdir(directory: string): Promise<string[]>;
89
+ protected load(filepath: string): Promise<XernerxFile | null>;
90
+ }
91
+
92
+ /** @format */
93
+
94
+ declare class CommandHandler extends Handler {
95
+ constructor(client: XernerxClient);
96
+ protected loadSlashCommands(options: XernerxSlashCommandHandlerOptions): Promise<void>;
97
+ protected loadMessageCommands(options: XernerxMessageCommandHandlerOptions): Promise<void>;
98
+ protected loadContextCommands(options: XernerxContextCommandHandlerOptions): Promise<void>;
99
+ }
100
+
101
+ /** @format */
102
+
103
+ declare class Util {
104
+ readonly client: XernerxClient;
105
+ constructor(client: XernerxClient);
106
+ }
107
+
108
+ /** @format */
109
+
110
+ declare class ClientUtil extends Util {
111
+ constructor(client: XernerxClient);
112
+ uptime(timestamp?: number | null): string;
113
+ }
114
+
115
+ /** @format */
116
+
117
+ declare class XernerxClient<T = {}> extends Discord.Client {
118
+ readonly settings: {
119
+ token: string;
120
+ global: boolean;
121
+ owners: string[];
122
+ guilds: string[];
123
+ debug: boolean;
124
+ };
125
+ readonly stats: XernerxStats;
126
+ readonly modules: {
127
+ commandHandler: CommandHandler;
128
+ options: {
129
+ message?: {
130
+ global?: boolean;
131
+ };
132
+ slash?: {
133
+ global?: boolean;
134
+ };
135
+ context?: {
136
+ global?: boolean;
137
+ };
138
+ };
139
+ };
140
+ readonly util: ClientUtil;
141
+ readonly commands: {
142
+ message: Discord.Collection<string, XernerxMessageCommand>;
143
+ slash: Discord.Collection<string, XernerxSlashCommand>;
144
+ context: Discord.Collection<string, XernerxContextCommand>;
145
+ stats: {
146
+ slash: {
147
+ local: number;
148
+ global: number;
149
+ };
150
+ message: {
151
+ local: number;
152
+ global: number;
153
+ };
154
+ context: {
155
+ local: number;
156
+ global: number;
157
+ };
158
+ };
159
+ };
160
+ readonly events: Discord.Collection<string, XernerxEvent>;
161
+ readonly inhibitors: Discord.Collection<string, XernerxInhibitor>;
162
+ constructor(DiscordOptions: any, XernerxOptions: any, config: T);
163
+ private connect;
164
+ private deploy;
165
+ }
166
+
167
+ export { XernerxClient, XernerxSlashCommand };