@spatulox/simplediscordbot 1.0.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/.env.example +2 -0
- package/LICENSE.md +21 -0
- package/README.md +1 -0
- package/dist/bot/Bot.js +107 -0
- package/dist/bot/BotEnv.js +29 -0
- package/dist/bot/BotLog.js +90 -0
- package/dist/bot/BotMessage.js +79 -0
- package/dist/cli/BaseCLI.js +165 -0
- package/dist/cli/GenerationCLI/ContextMenuGeneratorCLI.js +109 -0
- package/dist/cli/GenerationCLI/GenerationCLI.js +25 -0
- package/dist/cli/GenerationCLI/InteractionGeneratorCLI.js +20 -0
- package/dist/cli/GenerationCLI/ModalGeneratorCLI.js +166 -0
- package/dist/cli/GenerationCLI/SlashCommandsGeneratorCLI.js +221 -0
- package/dist/cli/GenerationCLI.js +36 -0
- package/dist/cli/GuildListManager.js +61 -0
- package/dist/cli/InputCLI.js +25 -0
- package/dist/cli/InteractionCLI/InteractionCLI.js +30 -0
- package/dist/cli/InteractionCLI/InteractionCLIManager.js +80 -0
- package/dist/cli/InteractionCLI.js +109 -0
- package/dist/cli/MainCLI.js +32 -0
- package/dist/cli/type/ContextMenuConfig.js +2 -0
- package/dist/cli/type/InteractionType.js +14 -0
- package/dist/cli/type/SlashCommandConfig.js +2 -0
- package/dist/index.js +31 -0
- package/dist/manager/FileManager.js +136 -0
- package/dist/manager/direct/UserManager.js +76 -0
- package/dist/manager/discord/ChannelManager.js +48 -0
- package/dist/manager/discord/DiscordRegex.js +114 -0
- package/dist/manager/discord/GuildManager.js +67 -0
- package/dist/manager/discord/InviteManager.js +89 -0
- package/dist/manager/discord/RoleManager.js +83 -0
- package/dist/manager/discord/UserManager.js +69 -0
- package/dist/manager/guild/ChannelManager/ForumChannelManager.js +33 -0
- package/dist/manager/guild/ChannelManager/GuildChannelList.js +20 -0
- package/dist/manager/guild/ChannelManager/GuildChannelManager.js +91 -0
- package/dist/manager/guild/ChannelManager/GuildMessageManager.js +85 -0
- package/dist/manager/guild/ChannelManager/GuildTextChannelManager.js +33 -0
- package/dist/manager/guild/ChannelManager/GuildVoiceChannelManager.js +33 -0
- package/dist/manager/guild/ChannelManager/NewsChannelManager.js +33 -0
- package/dist/manager/guild/ChannelManager/StageChannelManager.js +33 -0
- package/dist/manager/guild/ChannelManager/ThreadChannelManager.js +34 -0
- package/dist/manager/guild/GuildManager.js +134 -0
- package/dist/manager/guild/GuildUserManager.js +212 -0
- package/dist/manager/guild/InviteManager.js +68 -0
- package/dist/manager/guild/InviteManager_old.js +89 -0
- package/dist/manager/guild/RoleManager.js +83 -0
- package/dist/manager/hadlers_old/builder/ModalManager.js +111 -0
- package/dist/manager/hadlers_old/builder/delete.js +49 -0
- package/dist/manager/hadlers_old/builder/deploy.js +225 -0
- package/dist/manager/hadlers_old/builder/interactions/CommandManager.js +14 -0
- package/dist/manager/hadlers_old/builder/interactions/ContextMenuManager.js +14 -0
- package/dist/manager/hadlers_old/builder/interactions/InteractionBase.js +341 -0
- package/dist/manager/hadlers_old/builder/interactions/InteractionManager.js +65 -0
- package/dist/manager/hadlers_old/builder/list.js +166 -0
- package/dist/manager/messages/EmbedManager.js +131 -0
- package/dist/manager/messages/ReactionManager.js +99 -0
- package/dist/manager/messages/WebhookManager.js +105 -0
- package/dist/type/FolderName.js +9 -0
- package/dist/utils/DiscordRegex.js +116 -0
- package/dist/utils/Log.js +28 -0
- package/dist/utils/SimpleMutex.js +39 -0
- package/dist/utils/network/InternetChecker.js +54 -0
- package/dist/utils/times/UnitTime.js +85 -0
- package/package.json +40 -0
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Log = void 0;
|
|
4
|
+
class Log {
|
|
5
|
+
static getPrefix(level) {
|
|
6
|
+
const now = new Date();
|
|
7
|
+
const timestamp = `[${now.toLocaleDateString()} - ${now.toLocaleTimeString()}]`;
|
|
8
|
+
return `${timestamp} [${level.toUpperCase()}]`;
|
|
9
|
+
}
|
|
10
|
+
static info(message) {
|
|
11
|
+
console.info(`${this.getPrefix('info')} ${message}`);
|
|
12
|
+
}
|
|
13
|
+
static warn(message) {
|
|
14
|
+
console.warn(`${this.getPrefix('warn')} ${message}`);
|
|
15
|
+
}
|
|
16
|
+
static error(message) {
|
|
17
|
+
console.error(`${this.getPrefix('error')} ${message}`);
|
|
18
|
+
}
|
|
19
|
+
static debug(message) {
|
|
20
|
+
console.debug(`${this.getPrefix('debug')} ${message}`);
|
|
21
|
+
}
|
|
22
|
+
static table(data) {
|
|
23
|
+
const prefix = this.getPrefix('table');
|
|
24
|
+
console.info(`${prefix} Table output:`);
|
|
25
|
+
console.table(data);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
exports.Log = Log;
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SimpleMutex = void 0;
|
|
4
|
+
class SimpleMutex {
|
|
5
|
+
constructor() {
|
|
6
|
+
this._locked = false;
|
|
7
|
+
this.queue = [];
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Verrouille le mutex. Si le mutex est déjà verrouillé, la méthode retourne une promesse qui sera résolue une fois que le mutex sera disponible.
|
|
11
|
+
* @returns Une promesse résolue lorsque le mutex est verrouillé.
|
|
12
|
+
*/
|
|
13
|
+
async lock() {
|
|
14
|
+
if (this._locked) {
|
|
15
|
+
return new Promise((resolve) => {
|
|
16
|
+
this.queue.push(resolve);
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
this._locked = true;
|
|
20
|
+
return Promise.resolve();
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Déverrouille le mutex. Si une file d'attente existe, débloque le prochain élément dans la file.
|
|
24
|
+
*/
|
|
25
|
+
unlock() {
|
|
26
|
+
if (this.queue.length > 0) {
|
|
27
|
+
const nextResolve = this.queue.shift();
|
|
28
|
+
if (nextResolve) {
|
|
29
|
+
nextResolve(); // Résout la promesse du prochain élément dans la file
|
|
30
|
+
}
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
this._locked = false; // Déverrouille complètement si la file d'attente est vide
|
|
34
|
+
}
|
|
35
|
+
get locked() {
|
|
36
|
+
return this._locked;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
exports.SimpleMutex = SimpleMutex;
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.InternetChecker = void 0;
|
|
4
|
+
const Log_1 = require("../Log");
|
|
5
|
+
const UnitTime_1 = require("../times/UnitTime");
|
|
6
|
+
class InternetChecker {
|
|
7
|
+
/**
|
|
8
|
+
* Check internet connection towards 1.1.1.1 (Cloudflare DNS)
|
|
9
|
+
* @param tries Number of attempts (0 = infini)
|
|
10
|
+
*/
|
|
11
|
+
static async checkConnection(tries = 0) {
|
|
12
|
+
let attempt = 0;
|
|
13
|
+
Log_1.Log.info(tries > 0
|
|
14
|
+
? `HTTP ping ${this.TARGET} (max ${tries} attempts)...`
|
|
15
|
+
: `HTTP ping ${this.TARGET} (infinite attempts)...`);
|
|
16
|
+
while (tries === 0 || attempt < tries) {
|
|
17
|
+
try {
|
|
18
|
+
const controller = new AbortController();
|
|
19
|
+
const timeoutId = setTimeout(() => controller.abort(), 5000); // 5s timeout
|
|
20
|
+
const response = await fetch(this.TARGET, {
|
|
21
|
+
method: 'HEAD',
|
|
22
|
+
signal: controller.signal,
|
|
23
|
+
cache: 'no-store'
|
|
24
|
+
});
|
|
25
|
+
clearTimeout(timeoutId);
|
|
26
|
+
if (response.ok) {
|
|
27
|
+
const latency = response.headers.get('x-response-time') || '<1ms';
|
|
28
|
+
Log_1.Log.info(`Internet connection OK (${latency})`);
|
|
29
|
+
return true;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
catch (error) {
|
|
33
|
+
attempt++;
|
|
34
|
+
const errorMsg = error.name === 'AbortError'
|
|
35
|
+
? 'Timeout (5s)'
|
|
36
|
+
: error.message || 'Unknown';
|
|
37
|
+
Log_1.Log.warn(tries > 0
|
|
38
|
+
? `Ping failed (${errorMsg}) - Attempt ${attempt}/${tries}`
|
|
39
|
+
: `Ping failed (${errorMsg}) - Retrying in ${this.RETRY_TIME.toSeconds()} seconds...`);
|
|
40
|
+
try {
|
|
41
|
+
await new Promise(resolve => setTimeout(resolve, this.RETRY_TIME.toMilliseconds()));
|
|
42
|
+
}
|
|
43
|
+
catch {
|
|
44
|
+
Log_1.Log.error('Retry delay failed.');
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
Log_1.Log.error(`No response from ${this.TARGET} after all attempts.`);
|
|
49
|
+
return false;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
exports.InternetChecker = InternetChecker;
|
|
53
|
+
InternetChecker.TARGET = 'https://1.1.1.1'; // Cloudflare DNS HTTPS
|
|
54
|
+
InternetChecker.RETRY_TIME = UnitTime_1.Time.second.SEC_30;
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Time = void 0;
|
|
4
|
+
class UnitTime {
|
|
5
|
+
constructor(val) {
|
|
6
|
+
this.val = val;
|
|
7
|
+
}
|
|
8
|
+
toMilliseconds() { return this.val; }
|
|
9
|
+
toSeconds() { return this.val / 1000; }
|
|
10
|
+
toMinutes() { return this.val / (60 * 1000); }
|
|
11
|
+
toHours() { return this.val / (60 * 60 * 1000); }
|
|
12
|
+
toDays() { return this.val / (24 * 60 * 60 * 1000); }
|
|
13
|
+
toString() { return this.val.toString(); }
|
|
14
|
+
valueOf() { return this.val; }
|
|
15
|
+
value() { return this.val; }
|
|
16
|
+
}
|
|
17
|
+
const Milliseconds = {
|
|
18
|
+
MS_100: new UnitTime(100),
|
|
19
|
+
MS_200: new UnitTime(200),
|
|
20
|
+
MS_500: new UnitTime(500),
|
|
21
|
+
MS_800: new UnitTime(800),
|
|
22
|
+
MS_1000: new UnitTime(1000),
|
|
23
|
+
};
|
|
24
|
+
const Seconds = {
|
|
25
|
+
SEC_01: new UnitTime(1000), SEC_02: new UnitTime(2000), SEC_03: new UnitTime(3000), SEC_04: new UnitTime(4000), SEC_05: new UnitTime(5000),
|
|
26
|
+
SEC_06: new UnitTime(6000), SEC_07: new UnitTime(7000), SEC_08: new UnitTime(8000), SEC_09: new UnitTime(9000), SEC_10: new UnitTime(10000),
|
|
27
|
+
SEC_11: new UnitTime(11000), SEC_12: new UnitTime(12000), SEC_13: new UnitTime(13000), SEC_14: new UnitTime(14000), SEC_15: new UnitTime(15000),
|
|
28
|
+
SEC_16: new UnitTime(16000), SEC_17: new UnitTime(17000), SEC_18: new UnitTime(18000), SEC_19: new UnitTime(19000), SEC_20: new UnitTime(20000),
|
|
29
|
+
SEC_21: new UnitTime(21000), SEC_22: new UnitTime(22000), SEC_23: new UnitTime(23000), SEC_24: new UnitTime(24000), SEC_25: new UnitTime(25000),
|
|
30
|
+
SEC_26: new UnitTime(26000), SEC_27: new UnitTime(27000), SEC_28: new UnitTime(28000), SEC_29: new UnitTime(29000), SEC_30: new UnitTime(30000),
|
|
31
|
+
SEC_31: new UnitTime(31000), SEC_32: new UnitTime(32000), SEC_33: new UnitTime(33000), SEC_34: new UnitTime(34000), SEC_35: new UnitTime(35000),
|
|
32
|
+
SEC_36: new UnitTime(36000), SEC_37: new UnitTime(37000), SEC_38: new UnitTime(38000), SEC_39: new UnitTime(39000), SEC_40: new UnitTime(40000),
|
|
33
|
+
SEC_41: new UnitTime(41000), SEC_42: new UnitTime(42000), SEC_43: new UnitTime(43000), SEC_44: new UnitTime(44000), SEC_45: new UnitTime(45000),
|
|
34
|
+
SEC_46: new UnitTime(46000), SEC_47: new UnitTime(47000), SEC_48: new UnitTime(48000), SEC_49: new UnitTime(49000), SEC_50: new UnitTime(50000),
|
|
35
|
+
SEC_51: new UnitTime(51000), SEC_52: new UnitTime(52000), SEC_53: new UnitTime(53000), SEC_54: new UnitTime(54000), SEC_55: new UnitTime(55000),
|
|
36
|
+
SEC_56: new UnitTime(56000), SEC_57: new UnitTime(57000), SEC_58: new UnitTime(58000), SEC_59: new UnitTime(59000), SEC_60: new UnitTime(60000),
|
|
37
|
+
};
|
|
38
|
+
const Minutes = {
|
|
39
|
+
MIN_01: new UnitTime(60000), MIN_02: new UnitTime(120000), MIN_03: new UnitTime(180000), MIN_04: new UnitTime(240000), MIN_05: new UnitTime(300000),
|
|
40
|
+
MIN_06: new UnitTime(360000), MIN_07: new UnitTime(420000), MIN_08: new UnitTime(480000), MIN_09: new UnitTime(540000), MIN_10: new UnitTime(600000),
|
|
41
|
+
MIN_11: new UnitTime(660000), MIN_12: new UnitTime(720000), MIN_13: new UnitTime(780000), MIN_14: new UnitTime(840000), MIN_15: new UnitTime(900000),
|
|
42
|
+
MIN_16: new UnitTime(960000), MIN_17: new UnitTime(1020000), MIN_18: new UnitTime(1080000), MIN_19: new UnitTime(1140000), MIN_20: new UnitTime(1200000),
|
|
43
|
+
MIN_21: new UnitTime(1260000), MIN_22: new UnitTime(1320000), MIN_23: new UnitTime(1380000), MIN_24: new UnitTime(1440000), MIN_25: new UnitTime(1500000),
|
|
44
|
+
MIN_26: new UnitTime(1560000), MIN_27: new UnitTime(1620000), MIN_28: new UnitTime(1680000), MIN_29: new UnitTime(1740000), MIN_30: new UnitTime(1800000),
|
|
45
|
+
MIN_31: new UnitTime(1860000), MIN_32: new UnitTime(1920000), MIN_33: new UnitTime(1980000), MIN_34: new UnitTime(2040000), MIN_35: new UnitTime(2100000),
|
|
46
|
+
MIN_36: new UnitTime(2160000), MIN_37: new UnitTime(2220000), MIN_38: new UnitTime(2280000), MIN_39: new UnitTime(2340000), MIN_40: new UnitTime(2400000),
|
|
47
|
+
MIN_41: new UnitTime(2460000), MIN_42: new UnitTime(2520000), MIN_43: new UnitTime(2580000), MIN_44: new UnitTime(2640000), MIN_45: new UnitTime(2700000),
|
|
48
|
+
MIN_46: new UnitTime(2760000), MIN_47: new UnitTime(2820000), MIN_48: new UnitTime(2880000), MIN_49: new UnitTime(2940000), MIN_50: new UnitTime(3000000),
|
|
49
|
+
MIN_51: new UnitTime(3060000), MIN_52: new UnitTime(3120000), MIN_53: new UnitTime(3180000), MIN_54: new UnitTime(3240000), MIN_55: new UnitTime(3300000),
|
|
50
|
+
MIN_56: new UnitTime(3360000), MIN_57: new UnitTime(3420000), MIN_58: new UnitTime(3480000), MIN_59: new UnitTime(3540000), MIN_60: new UnitTime(3600000),
|
|
51
|
+
};
|
|
52
|
+
const Hours = {
|
|
53
|
+
HOUR_01: new UnitTime(3600000), HOUR_02: new UnitTime(7200000), HOUR_03: new UnitTime(10800000), HOUR_04: new UnitTime(14400000),
|
|
54
|
+
HOUR_05: new UnitTime(18000000), HOUR_06: new UnitTime(21600000), HOUR_07: new UnitTime(25200000), HOUR_08: new UnitTime(28800000),
|
|
55
|
+
HOUR_09: new UnitTime(32400000), HOUR_10: new UnitTime(36000000), HOUR_11: new UnitTime(39600000), HOUR_12: new UnitTime(43200000),
|
|
56
|
+
HOUR_13: new UnitTime(46800000), HOUR_14: new UnitTime(50400000), HOUR_15: new UnitTime(54000000), HOUR_16: new UnitTime(57600000),
|
|
57
|
+
HOUR_17: new UnitTime(61200000), HOUR_18: new UnitTime(64800000), HOUR_19: new UnitTime(68400000), HOUR_20: new UnitTime(72000000),
|
|
58
|
+
HOUR_21: new UnitTime(75600000), HOUR_22: new UnitTime(79200000), HOUR_23: new UnitTime(82800000), HOUR_24: new UnitTime(86400000),
|
|
59
|
+
};
|
|
60
|
+
const Days = {
|
|
61
|
+
DAY_01: new UnitTime(86400000),
|
|
62
|
+
DAY_02: new UnitTime(172800000),
|
|
63
|
+
DAY_03: new UnitTime(259200000),
|
|
64
|
+
DAY_04: new UnitTime(345600000),
|
|
65
|
+
DAY_05: new UnitTime(432000000),
|
|
66
|
+
DAY_06: new UnitTime(518400000),
|
|
67
|
+
DAY_07: new UnitTime(604800000),
|
|
68
|
+
DAY_08: new UnitTime(691200000),
|
|
69
|
+
DAY_09: new UnitTime(777600000),
|
|
70
|
+
DAY_10: new UnitTime(864000000),
|
|
71
|
+
};
|
|
72
|
+
exports.Time = {
|
|
73
|
+
milisecond: Milliseconds,
|
|
74
|
+
second: Seconds,
|
|
75
|
+
minute: Minutes,
|
|
76
|
+
hour: Hours,
|
|
77
|
+
day: Days,
|
|
78
|
+
get DAY() {
|
|
79
|
+
const h = new Date().getHours();
|
|
80
|
+
return h >= 7 && h < 23;
|
|
81
|
+
},
|
|
82
|
+
get NIGHT() {
|
|
83
|
+
return !this.DAY;
|
|
84
|
+
}
|
|
85
|
+
};
|
package/package.json
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@spatulox/simplediscordbot",
|
|
3
|
+
"version": "1.0.1",
|
|
4
|
+
"author": "Spatulox",
|
|
5
|
+
"description": "Simple discord bot framework to set up a bot under 30 secondes",
|
|
6
|
+
"main": "./dist/index.js",
|
|
7
|
+
"bin": {
|
|
8
|
+
"sdb": "dist/cli/MainCLI.js"
|
|
9
|
+
},
|
|
10
|
+
"scripts": {
|
|
11
|
+
"build": "tsc",
|
|
12
|
+
"dev": "nodemon --exec tsx src/test/index.ts",
|
|
13
|
+
"cli": "node dist/cli/MainCLI.js"
|
|
14
|
+
},
|
|
15
|
+
"license": "MIT",
|
|
16
|
+
"dependencies": {
|
|
17
|
+
"discord.js": "^14.25.1",
|
|
18
|
+
"dotenv": "^17.2.0",
|
|
19
|
+
"fs": "^0.0.1-security"
|
|
20
|
+
},
|
|
21
|
+
"devDependencies": {
|
|
22
|
+
"@types/node": "^22.14.0",
|
|
23
|
+
"@types/node-schedule": "^2.1.7",
|
|
24
|
+
"nodemon": "^3.1.9",
|
|
25
|
+
"tsx": "^4.20.3",
|
|
26
|
+
"typescript": "^5.9.3"
|
|
27
|
+
},
|
|
28
|
+
"keywords": [
|
|
29
|
+
"discord",
|
|
30
|
+
"framework",
|
|
31
|
+
"bot",
|
|
32
|
+
"client",
|
|
33
|
+
"discordjs",
|
|
34
|
+
"discord.js",
|
|
35
|
+
"node"
|
|
36
|
+
],
|
|
37
|
+
"bugs": {
|
|
38
|
+
"url": "https://github.com/Spatulox/SimpleDiscordBot/issues"
|
|
39
|
+
}
|
|
40
|
+
}
|