This repository was archived by the owner on Dec 1, 2023. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathbot.js
105 lines (95 loc) · 3.99 KB
/
bot.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
require('dotenv').config();
const fs = require('fs');
const path = require('path');
const TOML = require('@iarna/toml');
const envsubst = require('env-subst');
const { Client } = require('discord.js');
const query = require('./jobs');
const files = fs.readdirSync('./config', { withFileTypes: true }).filter(file => file.name.endsWith('.toml'));
let servers = [];
files.filter(file => !file.name.includes('default')).map(file => {
const contents = fs.readFileSync(`./config/${file.name}`, 'utf-8');
const config = TOML.parse(envsubst(contents));
if (!config.server.enabled) return;
const server = config.server;
const bot = server.bot;
if (!server.name || !server.ip || !bot.token) {
if (!server.name) console.log('[ERROR]', `Server name is required! (${file.name})`);
if (!server.ip) console.log('[ERROR]', `Server IP is required! (${file.name})`);
if (!bot.token) console.log('[ERROR]', `Discord bot token is required! (${file.name})`);
process.exit();
}
server.abbr = path.parse(file.name).name;
let optionalSettings;
if (server.optional) {
optionalSettings = {
connectURL: (server.optional.connect_url) ? server.optional.connect_url : false,
rules: (server.optional.rules_url) ? server.optional.rules_url : false,
content: (server.optional.content_url) ? server.optional.content_url : false,
discords: (server.optional.discords) ? server.optional.discords : false
}
}
servers.push({
name: server.name || 'Game Server',
abbr: server.abbr,
color: server.bot.color || '#00ADFF',
...(optionalSettings && optionalSettings)
})
const client = new Client();
client.on('ready', () => {
client.user.setPresence({
activity: { name: 'Fetching Info..', type: server.bot.status.type },
status: 'idle'
});
let loop = () => {
query(client.user.id, server).then(res => {
client.user.setPresence({
activity: { name: res.activity, type: server.bot.status.type },
status: res.status
}).catch((err) => console.log(err));
});
setTimeout(loop, 5000);
};
loop();
if (client.user.username !== server.name) {
console.log('[EVENT]', `Setting username/nicknames of ${client.user.username} to: ${server.name}`);
client.user.setUsername(server.name).then(() => {
console.log('[EVENT]', `${client.user.username} is ready!`);
client.guilds.cache.map(guild => {
guild.member(client.user).setNickname(server.name, 'Updated server username.')
});
}).catch(error => {
console.log('[ERROR]', `(${client.user.username}) ${error}`);
console.log('[EVENT]', `${client.user.username} is ready!`);
});
} else {
console.log('[EVENT]', `${client.user.username} is ready!`);
}
console.log('[INFO]', `Bot Invite URL: https://discord.com/api/oauth2/authorize?client_id=${client.user.id}&permissions=0&scope=bot`)
});
client.login(bot.token);
});
// Slash Commands Bot
if (process.env.COMMAND_BOT_TOKEN && servers.length !== 0) {
module.exports.servers = servers;
const Slash = require('da-slash');
const client = new Client();
const slash = new Slash.Client(client, { commands: { directory: 'commands' }});
client.on('ready', () => {
if (process.env.COMMAND_GUILD_IDS) {
slash.deleteCommands(false, true);
} else {
slash.deleteCommands(client.guilds.cache.map(guild => guild.id));
}
slash.postCommands();
console.log('[EVENT]', `${client.user.username} is ready!`);
console.log('[INFO]', `Bot Invite URL: https://discord.com/api/oauth2/authorize?client_id=${client.user.id}&permissions=280576&scope=applications.commands%20bot`)
});
client.ws.on('INTERACTION_CREATE', async request => {
const interaction = new Slash.Interaction(client, request);
slash.matchCommand(interaction);
});
client.login(process.env.COMMAND_BOT_TOKEN);
} else {
if (!process.env.COMMAND_BOT_TOKEN) console.log('[WARN]', 'No bot token provided in the .env, commands disabled! (COMMAND_BOT_TOKEN)');
}