diff options
Diffstat (limited to 'bot_discord.js')
| -rw-r--r-- | bot_discord.js | 218 |
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); }); |
