-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathindex.js
133 lines (123 loc) · 3.51 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
const { Client } = require("revolt.js");
const fs = require("fs");
const { token, prefix, logging } = require("./config.js");
const { Logger } = require("./lib/Logging");
const { Message } = require("./lib/Message");
const message = new Message("0.1.2");
const SympactEmbedBuilder = require("./lib/EmbedBuilder");
class Command {
constructor(name, description, execute) {
this.name = name;
this.description = description;
this.execute = execute;
}
}
class MyRevoltBot {
constructor() {
this.logger = new Logger(logging);
this.client = new Client();
this.commands = new Map();
this.setupListeners();
this.loadCommands();
}
setupListeners() {
this.client.on("ready", () =>
this.logger.info(
`Logged in as ${this.client.user.username}!`,
"MyRevoltBot"
)
);
this.client.on("message", this.handleMessage.bind(this));
message.start();
}
async handleMessage(message) {
try {
if (
!message ||
!message.content ||
!message.content.startsWith(prefix) ||
message.author.bot
)
return;
const args = message.content.slice(prefix.length).trim().split(/ +/);
const commandName = args.shift().toLowerCase();
const command = this.commands.get(commandName);
if (!command) {
this.logger.warn(
`Command ${commandName} executed but not found in the commands folder.`,
"MyRevoltBot"
);
return;
}
command.execute(message, args);
this.logger.info(`Command ${commandName} executed.`, "MyRevoltBot");
} catch (err) {
this.logger.error("Error handling message:", err, "MyRevoltBot");
}
}
loadCommands() {
const commandFiles = fs
.readdirSync("./commands")
.filter((file) => file.endsWith(".js"));
for (const file of commandFiles) {
try {
const { name, description, execute } = require(`./commands/${file}`);
const command = new Command(name, description, execute);
this.commands.set(name, command);
} catch (err) {
this.logger.error(
`Error loading command file '${file}':`,
err,
"MyRevoltBot"
);
}
}
}
async login() {
try {
await this.client.loginBot(token);
} catch (err) {
this.logger.error("Error logging in:", err, "MyRevoltBot");
}
}
async help(message) {
const commandList = Array.from(this.commands.values()).reduce(
(categories, command) => {
const category = command.category || "General";
if (!categories[category]) {
categories[category] = [];
}
categories[category].push(
`\`${prefix}${command.name}\`: ${command.description}`
);
return categories;
},
{}
);
const embedBuilder = new SympactEmbedBuilder()
.setTitle("Available Commands")
.setColor("#0099ff");
for (const [category, commands] of Object.entries(commandList)) {
const categoryString = `**${category}**`;
const commandsString = commands.join("\n");
embedBuilder.setDescription(
`${
embedBuilder.embed.description
? `${embedBuilder.embed.description}\n\n`
: ""
}${categoryString}\n${commandsString}`
);
}
await message.reply({ embeds: [embedBuilder.build()] });
}
}
const myBot = new MyRevoltBot();
myBot.login();
myBot.commands.set(
"help",
new Command(
"help",
"Displays a list of available commands.",
myBot.help.bind(myBot)
)
);