-
Notifications
You must be signed in to change notification settings - Fork 0
/
index.js
174 lines (159 loc) · 6.79 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
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
const Discord = require('discord.js');
const { Client, GatewayIntentBits, ActivityType, EmbedBuilder } = require('discord.js');
const fs = require('node:fs');
const tokenFile = require('./token.json');
const configFile = require('./config.json');
const ping = require('./commands/ping.js');
const whyBlacklist = require('./commands/whyBlacklist.js');
const help = require('./commands/help.js');
const dataAccess = require('./dataAccess.js')
const changelog = fs.readFileSync('changelog.txt');
const client = new Client({
intents: [
GatewayIntentBits.Guilds,
GatewayIntentBits.GuildMessages,
GatewayIntentBits.GuildMembers,
GatewayIntentBits.MessageContent,
GatewayIntentBits.GuildMessageReactions,
GatewayIntentBits.DirectMessages,
GatewayIntentBits.DirectMessageReactions
]
});
const blacklist = require('../data/blacklist.json');
client.on('ready', () => {
console.log('Bot ready!')
client.user.setStatus('available')
if (configFile.mode === 'production')
client.user.setActivity(
'r.help | https://discord.gg/9MHJppvmma',
{ type: ActivityType.Playing }
);
else if (configFile.mode === 'test')
client.user.setActivity(
'RustyBot in Test Mode. Please report any bugs you find!',
{ type: ActivityType.Watching }
);
});
client.on('messageCreate', message => {
if (message.author.bot) return;
if (message.guildId in blacklist.guilds ||
message.author.id in blacklist.users) {
return;
}
if ((message.mentions.users.length > 0 && message.mentions.users.first().id === client.user.id) ||
message.content === `<@${client.user.id}>` ) {
var emBuilder = new EmbedBuilder()
.setTitle('Hi, welcome to RustyBot!')
.setDescription('Type r.help to get started!')
message.channel.send({
'content': `If you can\'t see anything below this message, you need to turn go to \`Settings\` -> \`Text & Images\` and enable \`Embeds and Link Previews\`.`,
'embeds': [ emBuilder ] });
return;
}
const prefix = dataAccess.guild.get(message.guildId).get('config.prefix') || `<@${client.user.id}> `;
if (message.content.startsWith(prefix)) {
const command = message.content.slice(prefix.length);
const splits = command.split(' ');
const base = splits[0];
const argv = splits.slice(1);
const argc = argv.length;
if (base === 'ping') {
ping.command(message, client.ws.ping);
} else if (base === 'status') {
const embuilder = new EmbedBuilder()
.setTitle('RustyBot Status')
.setDescription(`
Current bot version: ${configFile.version}
**[Support Server](https://discord.gg/9MHJppvmma)**
`);
message.channel.send({ embeds: [ embuilder ] });
} else if (base === 'help') {
if (argc > 0) {
help.docs(message, argv[0]);
} else {
help.command(message);
}
} else if (base === 'invite') {
const embuilder = new EmbedBuilder()
.setTitle('Invites:')
.setDescription(`
**Invite RustyBot**: [here](https://discord.com/api/oauth2/authorize?client_id=1058133233763627159&permissions=8&scope=bot)
**Join our support server**: [here](https://discord.gg/9MHJppvmma)
`);
message.channel.send({ embeds: [ embuilder ] });
} else if (base === 'config') {
if (argc == 0) {
message.channel.send('Syntax is as follows:\n \`r.config (user|guild|channel) <key> [value]\`')
}
else if (argc == 1) {
let mode = argv[0];
let embuilder = new EmbedBuilder();
switch(mode) {
case 'user':
embuilder = new EmbedBuilder()
.setTitle(`Configuration for user \`${message.user.id}\``)
.setDescription(`\`\`\`json\n${dataAccess.user.get(message.user.id).toJSON()}\`\`\``);
message.channel.send({ embeds: [ embuilder ] });
break;
case 'guild':
embuilder = new EmbedBuilder()
.setTitle(`Configuration for server \`${message.guildId}\``)
.setDescription(`\`\`\`json\n${dataAccess.guild.get(message.guildId).toJSON()}\`\`\``);
message.channel.send({ embeds: [ embuilder ] });
break;
}
}
else if (argc == 2) {
if (argv[0] === 'guild' && argv[1] === 'reload') {
dataAccess.guild.reload(message.guildId).then(() => {
message .channel.send(`Data for server \`${message.guildId}\` has successfully been reloaded!`);
}).catch((error) => {
message.channel.send(`An error occurred whilst reloading server data for \`${message.guildId}\`.`);
});
return;
}
let embuilder;
try {
embuilder = new EmbedBuilder()
.setTitle(`Value of key \`${argv[1]}\``)
.setDescription(`
\`\`\`${JSON.stringify(dataAccess.guild.get(message.guildId).get(argv[1]))}\`\`\`
`);
} catch (TypeError) {
embuilder = new EmbedBuilder().setTitle('An error occurred. Please try again.')
}
message.channel.send({ embeds: [ embuilder ] });
}
} else if (base === 'whyBlacklist') {
whyBlacklist.info(message);
} else if (base === 'changelog') {
const embuilder = new EmbedBuilder()
.setDescription(changelog);
message.channel.send({ embeds: [ embuilder ] });
} else {
const embuilder = new EmbedBuilder()
.setDescription(`Command \`${base}\` is not a valid command.`);
message.channel.send({ embeds: [ embuilder ] });
}
}
});
client.on('guildMemberAdd', async (member) => {
try {
let wel_chan = dataAccess.guild.get(member.guild.id).get('config.welcome_channel');
if (!wel_chan) return;
let c = await client.channels.fetch(wel_chan.toString());
c.send(`Welcome <@${member.user.id}> to <@${member.guild.name}>!`);
} catch (e) {
console.error(e);
}
});
client.on('messageReactionAdd', (reaction, user) => {
if (user.bot) return;
})
if (process.argv.length > 2) {
console.log('Logging in using test mode...');
client.login(tokenFile.test_token);
} else {
console.log('Logging in...');
client.login(tokenFile.production_token);
}