This repository has been archived by the owner on Sep 8, 2021. It is now read-only.
-
-
Notifications
You must be signed in to change notification settings - Fork 1
/
index.js
149 lines (110 loc) · 4.69 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
147
148
149
const Discord = require("discord.js");
const client = new Discord.Client();
client.commands = new Discord.Collection();
const cooldowns = new Discord.Collection();
const Keyv = require('keyv');
const keyv = new Keyv();
const chalk = require('chalk');
const moment = require('moment');
const fs = require('fs');
const fetch = require('node-fetch');
const {
token,
prefix,
ownerID
} = require('./config.json');
const activities_list = [
"Flame Development",
"-help for help",
"https://github.com/goldentg/Flame",
"Flame Development"
];
client.once('ready', () => {
var dt = new Date();
var utcDate = dt.toUTCString();
const promises = [
client.shard.fetchClientValues('guilds.cache.size'),
client.shard.broadcastEval('this.guilds.cache.reduce((acc, guild) => acc + guild.memberCount, 0)'),
];
return Promise.all(promises)
.then(results => {
const totalGuilds = results[0].reduce((acc, guildCount) => acc + guildCount, 0);
const totalMembers = results[1].reduce((acc, memberCount) => acc + memberCount, 0);
console.log(chalk.green(`${utcDate}\nServer Count: ${totalGuilds}, Member Count: ${totalMembers}, Channel Count: ${client.channels.cache.size}`))
client.guilds.cache.forEach(guild => {
console.log(chalk.yellow(`Guild Name: ${guild.name} | Guild ID: ${guild.id} | Guild Member Count: ${guild.memberCount}`));
})
})
.catch(console.error);
});
//log stats when bot is added to new server
client.on("guildCreate", guild => {
var dt = new Date();
var utcDate = dt.toUTCString();
console.log(chalk.green(`${utcDate}\nJoined a new guild: ` + guild.name));
console.log(chalk.green(`Flame is now in ${client.guilds.cache.size} servers`));
})
//log stats when bot is removed from a server
client.on("guildDelete", guild => {
var dt = new Date();
var utcDate = dt.toUTCString();
console.log(chalk.red(`${utcDate}\nLeft a guild: ` + guild.name));
console.log(chalk.yellow(`Flame is now in ${client.guilds.cache.size} servers`));
})
//set bot presence
client.on('ready', () => {
setInterval(() => {
const index = Math.floor(Math.random() * (activities_list.length - 1) + 1); // generates a random number between 1 and the length of the activities array list (in this case 5).
client.user.setActivity(activities_list[index], {
type: 'WATCHING'
}); // sets bot's activities to one of the phrases in the arraylist.
}, 10000); // Runs this every 10 seconds.
});
//command handler framework
client.commands = new Discord.Collection();
const commandFiles = fs.readdirSync('./Commands').filter(file => file.endsWith('.js'));
for (const file of commandFiles) {
const command = require(`./Commands/${file}`);
client.commands.set(command.name, command);
}
client.on('message', message => {
if (!message.content.startsWith(prefix) || message.author.bot) return;
const args = message.content.slice(prefix.length).split(/ +/);
const commandName = args.shift().toLowerCase();
const command = client.commands.get(commandName) ||
client.commands.find(cmd => cmd.aliases && cmd.aliases.includes(commandName));
if (!command) return;
if (command.guildOnly && message.channel.type !== 'text') {
return message.reply('I can\'t execute that command inside DMs!');
}
if (command.args && !args.length) {
let reply = `You didn't provide any arguments, ${message.author}!`;
if (command.usage) {
reply += `\nThe proper usage would be: \`${prefix}${command.name} ${command.usage}\``;
}
return message.channel.send(reply);
}
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) {
console.error(error);
message.reply('there was an error trying to execute that command!');
}
});
keyv.on('error', err => console.error('Keyv connection error:', err));
client.login(token);