├── config.json ├── events ├── guildCreate.js ├── guildDelete.js ├── message.js ├── ready.js └── guildMemberAdd.js ├── commands ├── ping.js ├── 8ball.js ├── kick.js ├── reload.js ├── delete.js └── help.js └── index.js /config.json: -------------------------------------------------------------------------------- 1 | { 2 | "token" : "TOKEN", 3 | "prefix" : "!" 4 | } -------------------------------------------------------------------------------- /events/guildCreate.js: -------------------------------------------------------------------------------- 1 | module.exports = (client, guild) => { 2 | client.logger.cmd(`[GUILD JOIN] ${guild.name} (${guild.id}) adicinou o bot. Owner: ${guild.owner.user.tag} (${guild.owner.user.id})`); 3 | }; -------------------------------------------------------------------------------- /events/guildDelete.js: -------------------------------------------------------------------------------- 1 | module.exports = (client, guild) => { 2 | client.logger.cmd(`[GUILD LEAVE] ${guild.name} (${guild.id}) Removeu o bot.`); 3 | 4 | if (client.settings.has(guild.id)) { 5 | client.settings.delete(guild.id); 6 | } 7 | }; -------------------------------------------------------------------------------- /commands/ping.js: -------------------------------------------------------------------------------- 1 | exports.run = async (client, message) => { 2 | const ms = await message.channel.send("Ping?"); 3 | const clientms = ms.createdTimestamp - message.createdTimestamp; 4 | ms.edit('📡 Seu ping é: ' + clientms + 'ms / 🖥 Ping do bot com Server:' + Math.floor(client.ping) + 'ms'); 5 | } -------------------------------------------------------------------------------- /events/message.js: -------------------------------------------------------------------------------- 1 | module.exports = (client, message) => { 2 | if (message.author.bot) return; 3 | 4 | const args = message.content.slice(client.config.prefix.length).trim().split(/ +/g); 5 | const command = args.shift().toLowerCase(); 6 | 7 | const cmd = client.commands.get(command); 8 | 9 | if (message.content.indexOf(client.config.prefix) !== 0) return; 10 | 11 | if (!cmd) return; 12 | cmd.run(client, message, args); 13 | }; -------------------------------------------------------------------------------- /commands/8ball.js: -------------------------------------------------------------------------------- 1 | exports.run = async (client, message) => { 2 | 3 | let respostas = [ 4 | 'Sim.', 5 | 'Pergunte mais tarde.', 6 | 'Melhor você não saber.', 7 | 'Não.' 8 | ] 9 | 10 | const BallNum = Math.floor(Math.random() * respostas.length); 11 | const delay = (msec) => new Promise((resolve) => setTimeout(resolve, msec)); 12 | 13 | msg = await message.channel.send('Pergunta difícil, vamos ver ...'); 14 | await delay(3000); 15 | msg.edit(respostas[BallNum]); 16 | 17 | } 18 | -------------------------------------------------------------------------------- /events/ready.js: -------------------------------------------------------------------------------- 1 | module.exports = async client => { 2 | console.log('Bot logado com ' + client.users.cache.size + ' usuários, em ' + client.channels.cache.size + ' canais de ' + client.guilds.cache.size + ' servidores.'); 3 | 4 | let contador = 0; 5 | 6 | setInterval(function(){ 7 | client.user.setPresence({ 8 | status: "online", 9 | activity: { 10 | name: "Contando " + contador, 11 | type: "PLAYING" 12 | } 13 | }) 14 | console.log('Contando ' + contador); 15 | contador++; 16 | 17 | }, 1 * 60 * 1000) 18 | } 19 | -------------------------------------------------------------------------------- /events/guildMemberAdd.js: -------------------------------------------------------------------------------- 1 | module.exports = async (client, member) =>{ 2 | const Discord = require("discord.js"); 3 | 4 | const embed = new Discord.MessageEmbed() 5 | .setTitle(member.user.username + " Bem vindo(a) ao servidor!") 6 | .setAuthor(client.user.username, client.user.displayAvatarURL()) 7 | .setImage(member.user.avatarURL()) 8 | .setColor('#ffv800') 9 | .setDescription('Leia as <#ID_DO_CANAL_DE_REGRAS> antes de postar!') 10 | .setTimestamp(new Date()) 11 | 12 | member.guild.channels.cache.get('ID_DO_CANAL_PARA_MENSAGEM').send({embed}); 13 | } 14 | -------------------------------------------------------------------------------- /commands/kick.js: -------------------------------------------------------------------------------- 1 | exports.run = (client, message, [mention, ...reason]) => { 2 | if (!message.guild.me.hasPermission("KICK_MEMBERS")) 3 | return message.reply("⚠️ Você não tem este poder!"); 4 | 5 | if (message.mentions.members.size === 0) 6 | return message.reply("⚠️ Você deve mencionar o usuário a levar Kick"); 7 | 8 | const kickMember = message.mentions.members.first(); 9 | 10 | kickMember.kick(reason.join(" ")).then(member => { 11 | message.reply(`✔️ ${member.user.username} Levou um belo de um Kick 👍.`); 12 | }); 13 | }; -------------------------------------------------------------------------------- /commands/reload.js: -------------------------------------------------------------------------------- 1 | exports.run = (client, message, args) => { 2 | if (!args || args.length < 1) 3 | return message.reply("⚠️ Escreva o comando que deseja dar reload!"); 4 | 5 | const commandName = args[0]; 6 | 7 | if(!client.commands.has(commandName)) { 8 | return message.reply("⚠️ Comando inexistente!"); 9 | } 10 | 11 | delete require.cache[require.resolve(`./${commandName}.js`)]; 12 | 13 | client.commands.delete(commandName); 14 | const props = require(`./${commandName}.js`); 15 | client.commands.set(commandName, props); 16 | message.reply(`✔️ O comando ${commandName} foi recarregado com sucesso!`); 17 | }; -------------------------------------------------------------------------------- /commands/delete.js: -------------------------------------------------------------------------------- 1 | exports.run = async (client, message, args) => { 2 | if (!message.guild.me.hasPermission("MANAGE_MESSAGES")) 3 | return message.reply("⚠️ Comando apenas para admins!"); 4 | 5 | let totalDelMsg = parseInt(args[0]) + 1; 6 | let apagadas = totalDelMsg - 1; 7 | 8 | async function clear() { 9 | try { 10 | message.delete(); 11 | const fetched = await message.channel.fetchMessages({limit: totalDelMsg}); 12 | message.channel.bulkDelete(fetched); 13 | message.reply(`✔️ ${apagadas} Mensagens apagadas.`); 14 | } catch(e) { 15 | return message.reply("🤔 Algo de errado não está certo!"); 16 | } 17 | } 18 | clear(); 19 | } 20 | //O bot apaga apenas mensagens de até 2 semanas (pode ser contornado com um código mais completo). -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | const Discord = require("discord.js"); 2 | const Enmap = require("enmap"); 3 | const fs = require("fs"); 4 | const client = new Discord.Client(); 5 | const config = require("./config.json"); 6 | client.config = config; 7 | 8 | fs.readdir("./events/", (err, files) => { 9 | if (err) return console.error(err); 10 | files.forEach(file => { 11 | const event = require(`./events/${file}`); 12 | let eventName = file.split(".")[0]; 13 | client.on(eventName, event.bind(null, client)); 14 | }); 15 | }); 16 | 17 | client.commands = new Enmap(); 18 | 19 | fs.readdir("./commands/", (err, files) => { 20 | if (err) return console.error(err); 21 | files.forEach(file => { 22 | if (!file.endsWith(".js")) return; 23 | let props = require(`./commands/${file}`); 24 | let commandName = file.split(".")[0]; 25 | console.log(`carregando ${commandName}`); 26 | client.commands.set(commandName, props); 27 | }); 28 | }); 29 | 30 | client.login(config.token); -------------------------------------------------------------------------------- /commands/help.js: -------------------------------------------------------------------------------- 1 | exports.run = async (client, message) => { 2 | const Discord = require("discord.js"); 3 | 4 | const embed = new Discord.RichEmbed() 5 | .setColor('#ff0000') // cor da barra 6 | .setTitle('Titulo da mensagem') // Titulo 7 | .setURL('https://link-do-titulo.com') // Link do titulo 8 | .setAuthor('Autor da mensagem', 'https://i.imgur.com/wSTFkRM.png', 'https://discord.js.org') // Autor / Imagem do autor / Link do autor 9 | .setDescription('Descrição') // Descrição da mensagem 10 | .setThumbnail('https://i.imgur.com/wSTFkRM.png') // Miniatura a direita (thumb) 11 | .addField('Titulo', 'texto') // Titulo e texto simples 12 | .addBlankField() // Linha em branco 13 | .addField('Coluna 1', 'Texto 1', true) //Titulo e texto em coluna 14 | .addField('Coluna 2', 'Texto 2', true) //Titulo e texto em coluna 15 | .addField('Coluna 3', 'Texto 3', true) //Titulo e texto em coluna 16 | .setImage('https://i.imgur.com/wSTFkRM.png') // Imagem 17 | .setTimestamp() // Hora 18 | .setFooter('dbr', 'https://i.imgur.com/wSTFkRM.png'); //Texto do rodapé e imagem 19 | 20 | message.reply({embed}); 21 | } --------------------------------------------------------------------------------