summaryrefslogtreecommitdiff
path: root/bot_discord.js
diff options
context:
space:
mode:
Diffstat (limited to 'bot_discord.js')
-rw-r--r--bot_discord.js218
1 files changed, 128 insertions, 90 deletions
diff --git a/bot_discord.js b/bot_discord.js
index 991a294..b32e018 100644
--- a/bot_discord.js
+++ b/bot_discord.js
@@ -1,7 +1,7 @@
/** **************************************
*
* AleeBot: Made for discord servers
- * Copyright (C) 2017-2020 Alee Productions
+ * Copyright (C) 2017-2022 Andrew Lee Projects
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -18,43 +18,54 @@
*
* *************************************/
const Discord = require('discord.js');
+const client = new Discord.Client({
+ allowedMentions: {
+ parse: ['users', 'roles'],
+ repliedUser: true
+ },
+ intents: ['GUILDS', 'GUILD_MESSAGES', 'GUILD_MEMBERS', 'GUILD_MESSAGE_REACTIONS']
+});
const moment = require('moment');
+const express = require('express');
+const fs = require('fs');
const readline = require('readline');
const colors = require('colors');
-const DBL = require('dblapi.js');
//const i18next = require('i18next');
-const client = new Discord.Client({
- disableEveryone: true,
-});
+const web = express();
const settings = require('./storage/settings.json');
-const fs = require('fs');
const api = require('./tokens.json');
-const dbl = new DBL(api.dbltoken, client);
+const { activity } = require('./storage/activities');
const active = new Map();
-const ownerID = '242775871059001344';
let autoRole = true;
+let readyEmbedMessage = true;
+const ownerID = '242775871059001344';
let logChannel = '318874545593384970';
let statusChannelID = '606602551634296968';
-let readyEmbedMessage = true;
-const activities = [
- 'AleeBot ' + settings.abVersion + ' | ' + settings.prefix + 'help',
- 'Coding bytes',
- 'Drawing shapes',
- 'Fighting Quad',
- 'Ultra Jump Mania!'
-];
+let serverWhitelist = "243022206437687296";
+let roleWhitelist = "657426918416580614";
const log = (message) => {
console.log(`[${moment().format('YYYY-MM-DD HH:mm:ss')}] ${message}`.white);
};
+function botPresence() {
+ client.user.setPresence({
+ activities: [{
+ name: activity[Math.floor(Math.random() * activity.length)]
+ }],
+ status: 'online',
+ afk: false,
+ });
+ log(`[>] Updated bot presence to "${client.user.presence.activities[0].name}"`.green);
+}
+
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
prompt: '> '.gray,
});
-console.log(`AleeBot ${settings.abVersion}: Copyright (C) 2017-2020 Alee Productions`.gray);
+console.log(`AleeBot ${settings.abVersion}: Copyright (C) 2017-2023 Andrew Lee Projects`.gray);
console.log('This program comes with ABSOLUTELY NO WARRANTY; for details type `show w\'.'.gray);
console.log('This is free software, and you are welcome to redistribute it'.gray);
console.log('under certain conditions; type `show c\' for details.\n'.gray);
@@ -103,8 +114,7 @@ fs.readdir('./commands', (err, files) => {
console.log(err.stack);
}
});
- log('[>] Command Loading complete!'.green);
- console.log('\n');
+ log('[>] Command loading complete!\n'.green);
});
rl.on('line', function(cmd) {
@@ -114,29 +124,20 @@ rl.on('line', function(cmd) {
if (client.guilds.size === 0) {
console.log(('[!] No guilds found.'.yellow));
} else {
- console.log('[i] Here\'s the servers that AleeBot is connected to:');
+ console.log('[i] These are the servers that AleeBot is connected to:');
for ([id, guild] of client.guilds) {
console.log(` Guild Name: ${guild.name} - ID: ${guild.id}`.blue);
}
}
break;
- case 'channels':
- if (!args[1]) {
- console.log('[!] Please insert the guild\'s ID.'.yellow);
- } else {
- var guild = client.guilds.get(args[1]);
- console.log('[i] Here\'s the channels that this guild have:'.blue);
- for ([id, channel, guild] of guild && client.channels) {
- console.log(` Channel: #${channel.name} - ID: ${channel.id}`.blue);
- }
- }
- break;
case 'leave':
if (!args[1]) {
console.log('[!] Please insert the guild\'s ID.'.yellow);
} else {
- var guild = client.guilds.get(args[1]);
- guild.leave();
+ let guild = client.guilds.cache.get(args[1]);
+ guild.leave().then(guild => {
+ console.log(`AleeBot has left ${guild.name}`)
+ });
}
break;
case 'broadcast':
@@ -144,12 +145,14 @@ rl.on('line', function(cmd) {
console.log('[!] Usage: broadcast [guildID] [channelID].'.yellow);
} else {
const broadcast = args.join(' ').slice(48);
- var guild = null;
- guild = client.guilds.get(args[1]);
- var channel = null;
- channel = guild.channels.get(args[2]);
+ let guild = null;
+ guild = client.guilds.cache.get(args[1]);
+ let channel = null;
+ channel = guild.channels.cache.get(args[2]);
if (channel != null) {
- channel.send(broadcast);
+ channel.send(`**[Broadcast]** ${broadcast}`);
+ } else {
+ console.log('[X] Broadcast cannot be blank'.red)
}
}
break;
@@ -159,12 +162,21 @@ rl.on('line', function(cmd) {
let uptimeMinutes = Math.floor(uptime / 60);
const minutes = uptime % 60;
let hours = 0;
+ let days = 0;
while (uptimeMinutes >= 60) {
hours++;
uptimeMinutes = uptimeMinutes - 60;
}
+ while (hours >= 24) {
+ days++;
+ hours = hours - 24;
+ }
const uptimeSeconds = minutes % 60;
- console.log(`[i] AleeBot has been up for ${hours} hours, ${uptimeMinutes} minutes, and ${uptimeSeconds} seconds.`.blue);
+ console.log(`[i] AleeBot has been up for ${days} days, ${hours} hours, ${uptimeMinutes} minutes, and ${uptimeSeconds} seconds.`);
+ break;
+ case 'activity':
+ console.log('[i] Generating new activity'.blue);
+ botPresence();
break;
case 'exit':
console.log('[i] AleeBot will now exit!'.blue);
@@ -184,10 +196,10 @@ rl.on('line', function(cmd) {
case 'help':
let msg = ('AleeBot '+ settings.abVersion +' Console Help\n\n');
msg += ('guilds - Shows all guilds that AleeBot\'s on.\n');
- msg += ('channels - Shows all the channels that the guilds have.\n');
msg += ('leave - Leaves a guild.\n');
msg += ('broadcast - Broadcasts a message to a server.\n');
msg += ('uptime - Shows the uptime for AleeBot.\n');
+ msg += ('activity - Generates new activity\n');
msg += ('help - Shows this command.\n');
msg += ('exit - Exits AleeBot.\n');
console.log(msg.cyan);
@@ -198,71 +210,70 @@ rl.on('line', function(cmd) {
rl.prompt();
});
-client.on('ready', () => {
+client.on('ready', async () => {
log('[>] AleeBot is now ready!'.green);
log(`[i] Logged in as ${client.user.tag}`.green);
log(`[i] Default Prefix: ${settings.prefix}`.green);
log(`[i] Bot ID: ${client.user.id}`.green);
- log(`[i] Token: ${api.abtoken}`.green);
- log(`[i] Running version ${settings.abVersion} and in ${client.guilds.cache.size} guilds`.green);
-
- client.setInterval(function() {
- /*
- setInterval(() => {
- dbl.postStats(client.guilds.size, client.shards.Id, client.shards.total);
- }, 1800000);*/
- client.user.setPresence({
- activity: {
- name: activities[Math.floor(Math.random() * activities.length)]
- },
- status: 'online',
- afk: false,
- });
+ log(`[i] Running version ${settings.abVersion} | Serving in ${client.guilds.cache.size} guilds`.green);
+
+ botPresence();
+
+ web.get('/', (req, res) => {
+ res.send("Hello World! This is going to become the AleeBot dashboard...");
+ });
+
+ web.listen(api.port, () => {
+ console.log(`Listening at https://localhost:${api.port}`)
+ })
+
+ setInterval(function() {
+ botPresence();
}, 200000);
if (readyEmbedMessage === true) {
const readyEmbed = new Discord.MessageEmbed()
.setAuthor('AleeBot Status', client.user.avatarURL())
.setDescription('AleeBot has started')
- .addField('Prefix', `\`${settings.prefix}\``, true)
+ .addField('Version', settings.abVersion, true)
+ .addField('Discord.JS Version', Discord.version, true)
+ .addField('Prefix', `\`${settings.prefix}\``)
.setColor('#5cd65c');
let statusChannel = client.channels.cache.get(statusChannelID);
if (!statusChannel) return console.error('The status channel does not exist! Skipping.');
- statusChannel.send(readyEmbed);
+ statusChannel.send({ embeds: [readyEmbed]});
}
rl.prompt();
});
client.on('guildMemberAdd', (member) => {
- if (member.guild.id !== '243022206437687296') return;
+ if (member.guild.id !== serverWhitelist) return;
const logEmbed = new Discord.MessageEmbed()
.setAuthor('AleeBot Logging', client.user.avatarURL())
.setDescription(`A user has joined this server!`)
- .addField('Username: ', `${member.displayName}`, true)
+ .addField('Username: ', `${member.user.tag}`, true)
.addField('User ID: ', `${member.id}`, true)
.addField('Created At: ', `${member.user.createdAt.toUTCString()}`)
- //.addField('Invite Code: ', `${member.invite.code}`)
.setColor('#4bff31')
.setTimestamp();
let guildMember = client.channels.cache.get(logChannel);
if (!guildMember) return;
- guildMember.send(logEmbed);
+ guildMember.send({ embeds: [logEmbed]});
if (autoRole === true) {
- if (member.guild.id !== '243022206437687296') return;
- const role = member.guild.roles.cache.get('657426918416580614');
+ if (member.guild.id !== serverWhitelist) return;
+ const role = member.guild.roles.cache.get(roleWhitelist);
member.roles.add(role);
- log(`[i] ${member.user.username} joined Alee Productions.`.green);
- log(`[i] I gave ${member.user.username} the "Member" role.`.green);
+ log(`[i] ${member.user.username} joined Andrew Lee Projects, automatically giving them role.`.green);
}
});
client.on('guildMemberRemove', (member) => {
- if (member.guild.id !== '243022206437687296') return;
+ if (member.guild.id !== serverWhitelist) return;
const logEmbed = new Discord.MessageEmbed()
.setAuthor('AleeBot Logging', client.user.avatarURL())
.setDescription(`A user has left this server!`)
- .addField('Username: ', `${member.displayName}`, true)
+ .addField('Username: ', `${member.user.tag}`, true)
.addField('User ID: ', `${member.id}`, true)
.setColor('#ec2727')
.setTimestamp();
@@ -270,12 +281,12 @@ client.on('guildMemberRemove', (member) => {
let guildMember = client.channels.cache.get(logChannel);
if (!guildMember) return;
- guildMember.send(logEmbed);
+ guildMember.send({ embeds: [logEmbed]});
})
client.on('messageUpdate', async (oldMessage, newMessage) => {
- if (oldMessage.guild.id !== '243022206437687296') return;
+ if (oldMessage.guild.id !== serverWhitelist) return;
if (oldMessage.content === newMessage.content) {
return;
}
@@ -287,15 +298,15 @@ client.on('messageUpdate', async (oldMessage, newMessage) => {
.setColor('#ffff1a')
.setTimestamp()
.setFooter(`Author ID: ${oldMessage.author.id}`);
-
+
let editMessage = client.channels.cache.get(logChannel);
if (!editMessage) return;
- editMessage.send(logEmbed);
+ editMessage.send({ embeds: [logEmbed]});
});
client.on('messageDelete', (message) => {
- if (message.guild.id !== '243022206437687296') return;
+ if (message.guild.id !== serverWhitelist) return;
const logEmbed = new Discord.MessageEmbed()
.setAuthor('AleeBot Logging', client.user.avatarURL())
.setDescription(`A message from ${message.author.username} was deleted in <#${message.channel.id}>`)
@@ -307,11 +318,11 @@ client.on('messageDelete', (message) => {
let deleteMessage = client.channels.cache.get(logChannel);
if (!deleteMessage) return;
- deleteMessage.send(logEmbed);
+ deleteMessage.send({ embeds: [logEmbed]});
});
client.on('guildBanAdd', (guild, user) => {
- if (guild.id !== '243022206437687296') return;
+ if (guild.id !== serverWhitelist) return;
const logEmbed = new Discord.MessageEmbed()
.setAuthor('AleeBot Logging', client.user.avatarURL())
.setDescription(`This user got banned from ${guild.name}`)
@@ -323,11 +334,11 @@ client.on('guildBanAdd', (guild, user) => {
let banMessage = client.channels.cache.get(logChannel);
if (!banMessage) return;
- banMessage.send(logEmbed);
+ banMessage.send({ embeds: [logEmbed]});
});
client.on('guildBanRemove', (guild, user) => {
- if (guild.id !== '243022206437687296') return;
+ if (guild.id !== serverWhitelist) return;
const logEmbed = new Discord.MessageEmbed()
.setAuthor('AleeBot Logging', client.user.avatarURL())
.setDescription(`This user got unbanned from ${guild.name}`)
@@ -339,28 +350,28 @@ client.on('guildBanRemove', (guild, user) => {
let banMessage = client.channels.cache.get(logChannel);
if (!banMessage) return;
- banMessage.send(logEmbed);
+ banMessage.send({ embeds: [logEmbed]});
});
client.on('guildCreate', (guild) => {
- log(`[i] New guild joined: ${guild.name} (id: ${guild.id}). This guild has ${guild.memberCount} members!`.blue);
+ log(`[i] New guild joined: ${guild.name} (${guild.id}). This guild has ${guild.memberCount} members!`.blue);
const logEmbed = new Discord.MessageEmbed()
.setAuthor('AleeBot', client.user.avatarURL())
.setDescription('I got added to a server!')
.addField('Server Name:', `${guild.name}`, true)
.addField('Server ID:', `${guild.id}`, true)
- .addField('Members', guild.memberCount, true)
+ .addField('Members', `${guild.memberCount}`, true)
.setColor('#5cd65c')
.setFooter(`We now run on ${client.guilds.cache.size} guilds.`);
let statusChannel = client.channels.cache.get(statusChannelID);
if (!statusChannel) return;
- statusChannel.send(logEmbed);
+ statusChannel.send({ embeds: [logEmbed]});
});
client.on('guildDelete', (guild) => {
- log(`[i] I have been removed from: ${guild.name} (id: ${guild.id})`.red);
+ log(`[i] I have been removed from: ${guild.name} (${guild.id})`.red);
const logEmbed = new Discord.MessageEmbed()
.setAuthor('AleeBot', client.user.avatarURL())
.setDescription('I got removed from a server...')
@@ -371,18 +382,30 @@ client.on('guildDelete', (guild) => {
let statusChannel = client.channels.cache.get(statusChannelID);
if (!statusChannel) return;
- statusChannel.send(logEmbed);
+ statusChannel.send({ embeds: [logEmbed]});
});
-dbl.on('posted', () => {
- log('Server count posted!'.blue);
-});
+client.on("messageReactionAdd", async (reaction, user) => {
+ // When a reaction is received, check if the structure is partial
+ if (reaction.partial) {
+ // If the message this reaction belongs to was removed, the fetching might result in an API error which should be handled
+ try {
+ await reaction.fetch();
+ } catch (error) {
+ console.error('Something went wrong when fetching the message:', error);
+ // Return as `reaction.message.author` may be undefined/null
+ return;
+ }
+ }
-dbl.on('error', (e) => {
- log(`[X | DBL ERROR] ${e}`.red);
+ // Now the message has been cached and is fully available
+ console.log(`${reaction.message.author}'s message "${reaction.message.content}" gained a reaction!`);
+ // The reaction is now also fully available and the properties will be reflected accurately:
+ console.log(`${reaction.count} user(s) have given the same reaction to this message!`);
});
-client.on('message', (msg) => {
+client.on('messageCreate', async(msg) => {
+ if (!client.application?.owner) await client.application?.fetch();
if (msg.author.bot) return;
const prefixes = JSON.parse(fs.readFileSync('./storage/prefixes.json', 'utf8'));
@@ -410,7 +433,7 @@ client.on('message', (msg) => {
if (cmd) {
if (cmd.conf.guildOnly === true) {
if (!msg.channel.guild) {
- return msg.channel.createMessage('This command can only be ran in a guild.');
+ return msg.channel.send('This command can only be ran in a guild.');
}
}
try {
@@ -427,9 +450,24 @@ client.on('message', (msg) => {
}
});
+client.on('interactionCreate', async (interaction) => {
+ if (!interaction.isCommand()) return;
+
+ if (!client.commands.has(interaction.commandName)) return;
+
+ try {
+ await client.commands.get(interaction.commandName).execute(interaction);
+ } catch (error) {
+ console.error(error);
+ await interaction.reply({ content: 'There was an error while executing this command!', ephemeral: true });
+ }
+
+});
+
process.on('unhandledRejection', function(err, p) {
log('[X | UNCAUGHT PROMISE] ' + err.stack.red);
});
+
client.on('reconnecting', function() {
log('[!] AleeBot has disconnected from Discord and is now attempting to reconnect.'.yellow);
});