This repository has been archived by the owner on Jun 20, 2022. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.js
146 lines (121 loc) · 4.12 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
134
135
136
137
138
139
140
141
142
143
144
145
146
const fs = require("fs");
const Discord = require("discord.js");
const token = process.env.BOTTOKEN;
const { default_role, prefix } = require("./config.json");
// Change role color to rainbow
// const rainbow = require('./advanced/rainbow');
// Extend Structure
Discord.Structures.extend("Guild", (Guild) => {
class Music extends Guild {
constructor(client, data) {
super(client, data);
this.music = {
queue: [],
isPlaying: false,
currentPlay: null,
dispatcher: null,
connection: null,
volume: 1,
};
}
}
return Music;
});
// Advanced utils
const Logger = new (require("./utils").Logger)();
const client = new Discord.Client();
client.commands = new Discord.Collection();
const cooldowns = new Discord.Collection();
// Check for *.js files in ./commands/
const commandModules = fs
.readdirSync("./commands/modules/")
.filter((module_) =>
fs.lstatSync(`./commands/modules/${module_}`).isDirectory()
);
// Set it to Discord.Collection
for (const module of commandModules) {
const moduleFiles = fs
.readdirSync(`./commands/modules/${module}`)
.filter((fileName) => !fileName.startsWith("_"));
for (const file of moduleFiles) {
const command = require(`./commands/modules/${module}/${file}`);
command.module = module;
client.commands.set(command.name, command);
}
}
client.once("ready", () => {
console.log(`Logged in as ${client.user.tag}!`);
// const setRoleRainbowColor = new rainbow.Rainbow(client);
// setRoleRainbowColor.start();
});
client.on("message", (message) => {
if (
!message.content.startsWith(prefix) ||
message.author.bot ||
message.content.length === 1
) {
return;
}
// [PREFIX][COMMAND] [ARGUMENTS]
const args = message.content.slice(prefix.length).split(/ +/);
if (!args.length) return;
const commandName = args.shift().toLowerCase();
// Find command by name or alias
const command =
client.commands.get(commandName) ||
client.commands.find(
(cmd) => cmd.aliases && cmd.aliases.includes(commandName)
);
if (!command) {
return Logger.error(`Command not exists: ${commandName}`);
}
// If we must not use this in DM
if (command.guildOnly && message.channel.type !== "text") {
return message.reply("I can't execute that command inside DMs!");
}
// If we must enter args, but we didn't
if (command.args && !args.length) {
const reply = `Your command would be: \`${prefix}${command.name} ${command.usage}\``;
return message.reply(reply);
}
// Cooldowns
if (!cooldowns.has(command.name)) {
cooldowns.set(command.name, new Discord.Collection());
}
const now = Date.now();
const timestamps = cooldowns.get(command.name);
const cooldownAmount = (command.cooldown || 3) * 1000;
if (timestamps.has(message.author.id)) {
const expirationTime =
timestamps.get(message.author.id) + cooldownAmount;
if (now < expirationTime) {
const timeLeft = (expirationTime - now) / 1000;
return message.reply(
`please wait ${timeLeft.toFixed(
1
)} more second(s) before reusing the \`${
command.name
}\` command.`
);
}
timestamps.set(message.author.id, now);
setTimeout(() => timestamps.delete(message.author.id), cooldownAmount);
}
try {
command.execute(message, args);
} catch (error) {
Logger.error(error);
message.reply(
"There was an error while executing this command, sorry!"
);
}
});
client.on("guildMemberAdd", async (member) => {
const channel = member.guild.channels.find((ch) => ch.name === "welcome");
if (!channel) return;
channel.send(`Welcome to the server, ${member}`);
await member.addRole(
member.guild.roles.find((role) => role.name === default_role)
);
});
client.login(token);