├── .gitignore ├── commands ├── extra │ ├── say.js │ ├── joke.js │ ├── wasted.js │ ├── gay.js │ ├── avatar.js │ ├── black.js │ ├── meme.js │ ├── fake-youtube-comment.js │ ├── hug.js │ └── rank.js ├── bot │ ├── ping.js │ ├── invite.js │ └── bot_info.js ├── admin │ ├── restart.js │ ├── eval.js │ ├── set-avatar.js │ ├── set-username.js │ ├── set-presence.js │ └── reload.js ├── tickets │ ├── delete-ticket.js │ └── create-ticket.js └── mods │ ├── unlock.js │ ├── unban.js │ ├── lock.js │ ├── clear.js │ ├── all-roles.js │ ├── setnick.js │ ├── kick.js │ ├── userinfo.js │ ├── ban.js │ ├── role.js │ └── serverinfo.js ├── events ├── client │ └── ready.js └── guild │ └── message.js ├── handlers ├── events.js └── handlers.js ├── package.json ├── index.js ├── README.md └── LICENSE /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | config.json -------------------------------------------------------------------------------- /commands/extra/say.js: -------------------------------------------------------------------------------- 1 | const Discord = require('discord.js') 2 | 3 | module.exports = { 4 | name: "say", 5 | run: async(client, message, args) => { 6 | message.channel.send(args.join(" ")) 7 | } 8 | } -------------------------------------------------------------------------------- /commands/bot/ping.js: -------------------------------------------------------------------------------- 1 | const Discord = require('discord.js') 2 | 3 | module.exports = { 4 | name: 'ping', 5 | run: async(client, message) => { 6 | const msg = await message.channel.send('Pinging...') 7 | const ping = "```js\nLatency Ping is : " + Math.floor(msg.createdTimestamp - message.createdTimestamp) + " ms" + "\nAPI Ping : " + Math.round(client.ws.ping) + " ms" + "```" 8 | msg.edit(ping) 9 | } 10 | } -------------------------------------------------------------------------------- /events/client/ready.js: -------------------------------------------------------------------------------- 1 | module.exports = client => { 2 | let botStatus = [ 3 | 'instagram: @bcoq', 4 | 'Discord: Fnr#0017', 5 | 'Github: FnrDev' 6 | ] 7 | setInterval(function() { 8 | let status = botStatus[Math.floor(Math.random() * botStatus.length)] 9 | client.user.setActivity(status, {type: 'WATCHING'}) 10 | }, 20000) 11 | console.log(`Logged in as ${client.user.username}`); 12 | }; -------------------------------------------------------------------------------- /handlers/events.js: -------------------------------------------------------------------------------- 1 | const { readdirSync } = require("fs"); 2 | module.exports = (client) => { 3 | const load = dirs => { 4 | const events = readdirSync(`./events/${dirs}/`).filter(d => d.endsWith("js") ); 5 | for (let file of events) { 6 | let evt = require(`../events/${dirs}/${file}`); 7 | let eName = file.split('.')[0]; 8 | client.on(eName, evt.bind(null,client)); 9 | } 10 | }; 11 | ["client", "guild"].forEach((x) => load(x)); 12 | }; -------------------------------------------------------------------------------- /handlers/handlers.js: -------------------------------------------------------------------------------- 1 | const { readdirSync } = require('fs'); 2 | module.exports = (bot) => { 3 | readdirSync("./commands/").map(dir => { 4 | const commands = readdirSync(`./commands/${dir}/`).map(cmd=> { 5 | let pull = require(`../commands/${dir}/${cmd}`) 6 | bot.commands.set(pull.name, pull) 7 | if (pull.aliases) { 8 | pull.aliases.map(p => bot.aliases.set(p, pull)) 9 | } 10 | }) 11 | }) 12 | } -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "fnr-assaist", 3 | "version": "1.0.0", 4 | "description": "Bot for developing", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "author": "", 10 | "license": "ISC", 11 | "dependencies": { 12 | "axios": "^0.21.0", 13 | "canvacord": "^5.0.8", 14 | "discord.js": "^12.4.1", 15 | "fs": "0.0.1-security", 16 | "mongoose": "^5.11.8", 17 | "ms": "^2.1.2", 18 | "nodemailer": "^6.4.16" 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /commands/admin/restart.js: -------------------------------------------------------------------------------- 1 | const Discord = require('discord.js') 2 | const Fnr = '596227913209217024' 3 | 4 | module.exports = { 5 | name: "restart", 6 | run: async(client, message, args) => { 7 | if (!Fnr.includes(message.author.id)) return 8 | const setting = require('../../config.json') 9 | message.channel.send('Restarting...') 10 | client.destroy() 11 | client.login(setting.token) 12 | return message.channel.send(`**Successfully restarting ${client.user.username}**`) 13 | } 14 | } -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | const Discord = require("discord.js"); 2 | const fs = require("fs"); 3 | const moment = require('moment'); 4 | const client = new Discord.Client({ 5 | disableEveryone: true, 6 | }); 7 | const config = require('./config.json'); 8 | const token = config.token; 9 | client.commands = new Discord.Collection(); 10 | client.aliases = new Discord.Collection(); 11 | client.categories = fs.readdirSync("./commands/"); 12 | client.prefix = config.prefix; 13 | 14 | 15 | ["handlers", "events"].forEach(handler => { 16 | require(`./handlers/${handler}`)(client); 17 | }); 18 | 19 | 20 | client.login(token); -------------------------------------------------------------------------------- /commands/bot/invite.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed } = require('discord.js') 2 | 3 | module.exports = { 4 | name: "invite", 5 | run: (client, message) => { 6 | const embed = new MessageEmbed() 7 | .setAuthor(client.user.username, client.user.displayAvatarURL({ dynamic: true })) 8 | .setDescription(`[Invite Link](https://discord.com/api/oauth2/authorize?client_id=${client.user.id}&permissions=8&scope=bot)`) 9 | .setColor('RANDOM') 10 | .setFooter(`Requested by ${message.author.tag}`, message.author.displayAvatarURL({ dynamic: true })) 11 | message.channel.send(embed) 12 | } 13 | } -------------------------------------------------------------------------------- /commands/tickets/delete-ticket.js: -------------------------------------------------------------------------------- 1 | const Discord = require('discord.js') 2 | 3 | module.exports = { 4 | name: "close", 5 | run: async(client, message, args) => { 6 | // You need to replace "Your mod role id" to mod role id 7 | if (!message.guild.roles.cache.get('Your mod role id')) { 8 | // if someone try to use this command will return this message 9 | return message.channel.send('You dont have permission to do this command!') 10 | } 11 | // You need to do this command in ticket only - dont try this is public chat 12 | message.channel.delete() 13 | } 14 | } -------------------------------------------------------------------------------- /commands/admin/eval.js: -------------------------------------------------------------------------------- 1 | // You can put more than 2 ids 2 | const ownerID = ['ownerid1', 'OwnerID2'] 3 | 4 | module.exports = { 5 | name: "eval", 6 | run: async(client, message, args) => { 7 | if (!ownerID.includes(message.author.id)) return 8 | let incode = args.join(" ") 9 | let code = eval(incode) 10 | try { 11 | if (typeof incode !== 'string') 12 | code = require('util').inspect(code, { depth: 0}) 13 | message.channel.send(`\`\`\`js\n${code}\n\`\`\``) 14 | } catch (e) { 15 | message.channel.send(`\`\`\`js\n${e}\n\`\`\``) 16 | } 17 | } 18 | } -------------------------------------------------------------------------------- /commands/admin/set-avatar.js: -------------------------------------------------------------------------------- 1 | const Discord = require('discord.js') 2 | 3 | module.exports = { 4 | name: "setav", 5 | run: async(client, message, args) => { 6 | if (!message.member.hasPermission('ADMINISTRATOR')) return message.channel.send('You dont have permission to do this command!') 7 | let avatar = args[0] 8 | if (!avatar) return message.channel.send('You need to input avatar url!') 9 | client.user.setAvatar(avatar) 10 | .then(message.channel.send('Successfully changed avatar')) 11 | .catch(err => { 12 | return message.channel.send('There was an error') 13 | }) 14 | } 15 | } -------------------------------------------------------------------------------- /commands/admin/set-username.js: -------------------------------------------------------------------------------- 1 | const Discord = require('discord.js') 2 | 3 | module.exports = { 4 | name: "setusername", 5 | run: async(client, message, args) => { 6 | if (!message.member.hasPermission('ADMINISTRATOR')) return message.channel.send('You dont have permission to do this command!') 7 | let username = args.join(" ") 8 | if (!username) return message.channel.send('You need to input username!') 9 | client.user.setUsername(username) 10 | .then(message.channel.send(`Successfully changed username to **${username}**`)) 11 | .catch(err => { 12 | return message.channel.send('There was an error') 13 | }) 14 | } 15 | } -------------------------------------------------------------------------------- /commands/extra/joke.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed } = require('discord.js') 2 | const axios = require('axios') 3 | 4 | module.exports = { 5 | name: "joke", 6 | run: async(client, message, args) => { 7 | const url = 'https://some-random-api.ml/joke' 8 | let joke, response; 9 | try { 10 | response = await axios.get(url) 11 | joke = response.data 12 | } catch (e) { 13 | return message.channel.send('There was an error!') 14 | } 15 | const embed = new MessageEmbed() 16 | .setTitle('Joke: ') 17 | .setColor('RANDOM') 18 | .setDescription(`Joke: ${joke.joke}`) 19 | await message.channel.send(embed) 20 | } 21 | } -------------------------------------------------------------------------------- /commands/extra/wasted.js: -------------------------------------------------------------------------------- 1 | const Discord = require('discord.js') 2 | const axios = require('axios') 3 | 4 | module.exports = { 5 | name: "wasted", 6 | run: async(client, message, args) => { 7 | const mentionMember = message.mentions.members.first() 8 | const url = `https://some-random-api.ml/canvas/wasted?avatar=${mentionMember.user.displayAvatarURL({ format: 'png'})}` 9 | let response, data 10 | try { 11 | response = await axios.get(url) 12 | data = response.data 13 | } catch (e) { 14 | return message.channel.send('There was an error') 15 | } 16 | message.channel.send({ 17 | files: 18 | [url] 19 | }) 20 | } 21 | } -------------------------------------------------------------------------------- /commands/extra/gay.js: -------------------------------------------------------------------------------- 1 | const Discord = require('discord.js') 2 | const axios = require('axios') 3 | 4 | module.exports = { 5 | name: "gay", 6 | run: async(client, message, args) => { 7 | const mentionMember = message.mentions.members.first() || message.author 8 | const url = `https://some-random-api.ml/canvas/gay?avatar=${mentionMember.user.displayAvatarURL({ format: 'png'})}` 9 | 10 | let response, data 11 | try { 12 | response = await axios.get(url) 13 | data = response.data 14 | } catch (e) { 15 | return message.channel.send('There was an error!') 16 | } 17 | await message.channel.send({ 18 | files: 19 | [url] 20 | }) 21 | } 22 | } -------------------------------------------------------------------------------- /commands/mods/unlock.js: -------------------------------------------------------------------------------- 1 | const Discord = require('discord.js') 2 | 3 | module.exports = { 4 | name: "unlock", 5 | run: async(client, message, args) => { 6 | if (!message.member.hasPermission('MANAGE_CHANNELS')) return message.channel.send('You dont have permission to do this command!') 7 | const role = message.guild.roles.cache.find(role => role.name == '@everyone') 8 | const mentionChannel = message.mentions.channels.first() || message.channel 9 | mentionChannel.updateOverwrite(role, { 10 | 'SEND_MESSAGES': null, 11 | }) 12 | .then(message.channel.send(`Successfully unlocked ${mentionChannel}`)) 13 | .catch(err => { 14 | return message.channel.send('There was an error!') 15 | }) 16 | } 17 | } -------------------------------------------------------------------------------- /commands/admin/set-presence.js: -------------------------------------------------------------------------------- 1 | const Discord = require('discord.js') 2 | 3 | module.exports = { 4 | name: "status", 5 | run: async(client, message, args) => { 6 | if (!message.member.hasPermission('ADMINISTRATOR')) return message.channel.send('You dont have permission to do this command!') 7 | let status = args.join(" ") 8 | if (!status) return message.channel.send('You need to input status') 9 | client.user.setPresence({ 10 | activity: { 11 | name: status, 12 | type: 0, 13 | } 14 | }) 15 | .then(message.channel.send(`Successfully changed bot status to **${status}**`)) 16 | .catch(err => { 17 | return message.channel.send('There was an error') 18 | }) 19 | } 20 | } -------------------------------------------------------------------------------- /commands/extra/avatar.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed } = require('discord.js'); 2 | 3 | module.exports = { 4 | name: "avatar", 5 | run: async (client, message, args) => { 6 | const mentionMember = message.mentions.members.first() || message.guild.members.cache.get(args[0]) || message.member; 7 | let avatar = mentionMember.user.displayAvatarURL({size: 4096, dynamic: true}); 8 | const embed = new MessageEmbed() 9 | .setTitle(`${mentionMember.user.tag} Avatar`) 10 | .setDescription(`[Avatar URL](${avatar})`) 11 | .setColor('RANDOM') 12 | .setImage(avatar) 13 | .setFooter(`Requested by ${message.author.tag}` , message.author.displayAvatarURL({dynamic: true})) 14 | return message.channel.send(embed); 15 | } 16 | } -------------------------------------------------------------------------------- /commands/extra/black.js: -------------------------------------------------------------------------------- 1 | const { MessageAttachment } = require('discord.js') 2 | const axios = require('axios') 3 | 4 | module.exports = { 5 | name: "change", 6 | run: async(client, message, args) => { 7 | const mentionMember = message.mentions.members.first() || message.author 8 | const url = `https://some-random-api.ml/canvas/color?color=%23000000&avatar=${mentionMember.user.displayAvatarURL({ format: 'png'})}` 9 | 10 | let response, data 11 | try { 12 | response = await axios.get(url) 13 | data = response.data 14 | } catch (e) { 15 | return message.channel.send('There was an error please try again') 16 | } 17 | message.channel.send({ 18 | files: 19 | [url] 20 | }) 21 | } 22 | } -------------------------------------------------------------------------------- /commands/extra/meme.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed } = require('discord.js') 2 | const axios = require('axios') 3 | 4 | module.exports = { 5 | name: "meme", 6 | run: async(client, message, args) => { 7 | const url = 'https://meme-api.herokuapp.com/gimme' 8 | 9 | let data, response; 10 | try { 11 | response = await axios.get(url) 12 | data = response.data 13 | } catch (e) { 14 | return message.channel.send('There was an error') 15 | } 16 | const embed = new MessageEmbed() 17 | .setTitle('Meme URL') 18 | .setURL(data.postLink) 19 | .setDescription(`Meme Title: **${data.title}**`) 20 | .setColor('RANDOM') 21 | .setImage(data.url) 22 | await message.channel.send(embed) 23 | } 24 | } -------------------------------------------------------------------------------- /commands/mods/unban.js: -------------------------------------------------------------------------------- 1 | const Discord = require('discord.js') 2 | 3 | module.exports = { 4 | name: "unban", 5 | run: async(client, message, args) => { 6 | if (!message.member.hasPermission('MANAGE_BANS')) { 7 | return message.channel.send('You dont have permission to do this command!') 8 | } 9 | const mentionMember = args[0] 10 | if (!mentionMember) { 11 | return message.channel.send('Please mention a member to unban!') 12 | } 13 | try { 14 | message.guild.fetchBans().then(bans => { 15 | message.guild.members.unban(mentionMember) 16 | }) 17 | message.channel.send(`Successfully <@${mentionMember}> has been unbanned`) 18 | } catch(e) { 19 | return message.channel.send(`There was an error \n\n ${e}`) 20 | } 21 | } 22 | } -------------------------------------------------------------------------------- /commands/mods/lock.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed } = require('discord.js') 2 | 3 | module.exports = { 4 | name: 'lock', 5 | run: async(client, message, args) => { 6 | if (!message.member.hasPermission('MANAGE_CHANNELS')) { 7 | const embed = new MessageEmbed() 8 | .setTitle('You dont have permission to do this command!') 9 | .setColor('#ff0000') 10 | return message.channel.send(embed) 11 | } 12 | const role = message.guild.roles.cache.find(role => role.name == '@everyone') 13 | const mentionChannel = message.mentions.channels.first() || message.channel 14 | const reason = args.slice(1).join(" ") || 'With no reason' 15 | 16 | mentionChannel.updateOverwrite(role, { 17 | 'SEND_MESSAGES': false, 18 | }) 19 | .then(message.channel.send(`Successfully locked ${mentionChannel}\nwith reason **${reason}**`)) 20 | .catch(err => { 21 | return message.channel.send('There was an error!') 22 | }) 23 | } 24 | } -------------------------------------------------------------------------------- /commands/extra/fake-youtube-comment.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed } = require('discord.js') 2 | const axios = require('axios') 3 | 4 | module.exports = { 5 | name: "yt", 6 | run: async(client, message, args) => { 7 | let comment = args.join(" ") 8 | if (!comment) { 9 | return message.channel.send('You need to input your comment') 10 | } 11 | const url = `https://some-random-api.ml/canvas/youtube-comment?comment=${comment}&username=${message.author.username}&avatar=${message.author.displayAvatarURL({ format: 'png'})}` 12 | 13 | let response, data 14 | try { 15 | response = await axios.get(url) 16 | data = response.data 17 | } catch (e) { 18 | return message.channel.send('There was an error please try again') 19 | } 20 | message.channel.send({ 21 | files: 22 | [url] 23 | }) 24 | } 25 | } -------------------------------------------------------------------------------- /commands/mods/clear.js: -------------------------------------------------------------------------------- 1 | const Discord = require('discord.js') 2 | 3 | module.exports = { 4 | name: "clear", 5 | run: async(client, message, args) => { 6 | if (!message.member.hasPermission('MANAGE_MESSAGES')) return message.channel.send('You dont have permission to do this command!') 7 | 8 | if (!args[0]) return message.channel.send('Please enter a amont from 1 to 100') 9 | message.delete() 10 | let deleteAmont 11 | if (parseInt(args[0]) > 100) { 12 | deleteAmont = 100; 13 | } else { 14 | deleteAmont = parseInt(args[0]) 15 | } 16 | await message.channel.bulkDelete(deleteAmont, true) 17 | await message.channel.send(`Successfully deleted ${deleteAmont} messages`) 18 | .then(m => m.delete({ timeout: 2000})) 19 | .catch(err => { 20 | return message.channel.send('There was an error!') 21 | }) 22 | } 23 | } -------------------------------------------------------------------------------- /commands/mods/all-roles.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed } = require('discord.js') 2 | 3 | module.exports = { 4 | name: "roles", 5 | run: async(client, message, args) => { 6 | if (!message.member.hasPermission('MANAGE_ROLES')) { 7 | const embed = new MessageEmbed() 8 | .setTitle('You dont have permission to do this command!') 9 | .setColor('#ff0000') 10 | return message.channel.send(embed) 11 | } 12 | let rolemap = message.guild.roles.cache.sort((a, b) => b.position - a.position).map(r => r).join(" ,") 13 | if (rolemap.length > 1024) return message.channel.send('To many roles to display') 14 | if (!rolemap) return message.channel.send('No roles in this server') 15 | const embed = new MessageEmbed() 16 | .setTitle(`All roles in guild ${message.guild.name}`) 17 | .addField("Role List: ", rolemap) 18 | message.channel.send(embed) 19 | } 20 | } -------------------------------------------------------------------------------- /commands/extra/hug.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed } = require('discord.js') 2 | const axios = require('axios') 3 | 4 | module.exports = { 5 | name: "hug", 6 | run: async(client, message, args) => { 7 | const url = 'https://some-random-api.ml/animu/hug' 8 | 9 | let response, data 10 | try { 11 | response = await axios.get(url) 12 | data = response.data 13 | } catch (e) { 14 | return message.channel.send('There was an error!') 15 | } 16 | const mentionMember = message.mentions.members.first() 17 | if (!mentionMember) { 18 | return message.channel.send("You can't hug yourself") 19 | } 20 | if (message.author.id == mentionMember.id) { 21 | return message.channel.send("You can't hug yourself") 22 | } 23 | const embed = new MessageEmbed() 24 | .setDescription(`<@${message.author.id}> hugs ${mentionMember}`) 25 | .setImage(data.link) 26 | .setColor('RANDOM') 27 | await message.channel.send(embed) 28 | } 29 | } -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Discord bot made by Fnr#0017 2 | 3 | # If you want your bot support slash commands check this [Repo](https://github.com/FnrDev/slash-commands) 4 | 5 | - get started 6 | 7 | 1- First create file named "config.json" 8 | 2- npm install 9 | 10 | - config.json 11 | ```js 12 | { 13 | "token": "Your discord bot token", 14 | "prefix": "Your discord bot prefix" 15 | } 16 | ``` 17 | 18 | Bot commands: 19 | - ban command 20 | - kick command 21 | - botinfo command 22 | - say command 23 | - change nickname command 24 | - userinfo command 25 | - serverinfo command 26 | - ping command 27 | - avatar command 28 | - set avatar command for bot 29 | - set username command for bot 30 | - set presence command for bot 31 | - restart command 32 | - add role command 33 | - clear command 34 | 35 | - **And alot more..** 36 | 37 | 38 | 39 | --------------------------------------------------------------- 40 | 41 | 42 | في البدايه سو ملف اسمه "config.json" 43 | 44 | بعدها حمل بكجات عن طريق امر "npm install" 45 | 46 | ```js 47 | { 48 | "token": "Your discord bot token", 49 | "prefix": "Your discord bot prefix" 50 | } 51 | ``` 52 | -------------------------------------------------------------------------------- /commands/tickets/create-ticket.js: -------------------------------------------------------------------------------- 1 | const Discord = require('discord.js') 2 | 3 | module.exports = { 4 | name: "new", 5 | run: async(client, message, args) => { 6 | const ticketChannel = await message.guild.channels.create(`ticket-${message.author.username}`, { 7 | permissionOverwrites: [ 8 | { 9 | allow: ['VIEW_CHANNEL', 'SEND_MESSAGES'], 10 | id: message.author.id 11 | }, 12 | { 13 | allow: ['VIEW_CHANNEL', 'SEND_MESSAGES', 'MANAGE_CHANNELS', 'MANAGE_MESSAGES'], 14 | id: '750645386128916482' 15 | }, 16 | { 17 | deny: ['VIEW_CHANNEL', 'SEND_MESSAGES'], 18 | id: message.guild.id 19 | } 20 | ] 21 | }) 22 | const msg = await ticketChannel.send(`You have created a ticket ${message.author}`) 23 | .then(message.channel.send(`Successfully created a new ticket ${ticketChannel}!`)) 24 | .catch(err => { 25 | return message.channel.send('There was an error please contact the developer') 26 | }) 27 | } 28 | } -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Additional Functionality 4 | - Copyright (c) 2021 me@fnrr.dev (Fnr) 5 | 6 | Permission is hereby granted, free of charge, to any person obtaining a copy 7 | of this software and associated documentation files (the "Software"), to deal 8 | in the Software without restriction, including without limitation the rights 9 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | copies of the Software, and to permit persons to whom the Software is 11 | furnished to do so, subject to the following conditions: 12 | 13 | The above copyright notice and this permission notice shall be included in all 14 | copies or substantial portions of the Software. 15 | 16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 22 | SOFTWARE. -------------------------------------------------------------------------------- /commands/mods/setnick.js: -------------------------------------------------------------------------------- 1 | const Discord = require('discord.js'); 2 | 3 | module.exports = { 4 | name: 'setnick', 5 | category: 'mods', 6 | description: 'Change nickname for user', 7 | run: async(client, message, args) => { 8 | if (!message.member.hasPermission('MANAGE_NICKNAMES')) { 9 | return message.channel.send('**⛔ You dont have permission to do this command!**') 10 | } 11 | const mention = message.mentions.members.first() || message.guild.members.cache.get(args[0]); 12 | if (!mention) return message.channel.send('**⛔ You need to mention a user!**') 13 | try { 14 | const nickname = args.slice(1).join(" ") 15 | if (!nickname) { 16 | mention.setNickname('') 17 | return message.channel.send(`✅ ${mention} nickname has been reset`) 18 | } 19 | if (nickname) { 20 | await mention.setNickname(nickname) 21 | message.channel.send(`✅ ${mention} nickname has been set to **${nickname}**`) 22 | } 23 | } catch (e) { 24 | return message.channel.send(':x: i cant change nickname for this member') 25 | } 26 | } 27 | } -------------------------------------------------------------------------------- /commands/bot/bot_info.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed } = require('discord.js'); 2 | 3 | module.exports = { 4 | name: "binfo", 5 | category: "bot", 6 | description: "Get info about bot", 7 | timeout: 3000, 8 | run: async(client, message) => { 9 | const embed = new MessageEmbed() 10 | .setTitle('Bot info') 11 | .setColor('RANDOM') 12 | .setFooter('By Fnr#0017 | Github: FnrDev') 13 | .setThumbnail(client.user.displayAvatarURL()) 14 | .addFields( 15 | { 16 | name: "Total Guilds: ", 17 | value: `${client.guilds.cache.size} Guilds`, 18 | inline: true 19 | }, 20 | { 21 | name: "Total Users: ", 22 | value: `${client.users.cache.size} Users`, 23 | inline: true 24 | }, 25 | { 26 | name: "Total Channels: ", 27 | value: `${client.channels.cache.size} Channels`, 28 | inline: true 29 | }, 30 | { 31 | name: "You can get me for free at: ", 32 | value: `[Link](https://github.com/FnrDev/moderation-discord-bot)`, 33 | inline: true 34 | } 35 | ) 36 | await message.channel.send(embed) 37 | } 38 | } -------------------------------------------------------------------------------- /commands/admin/reload.js: -------------------------------------------------------------------------------- 1 | const fs = require('fs'); 2 | const Developer = ['596227913209217024'] 3 | 4 | module.exports = { 5 | name: "reload", 6 | run: async(client, message, args, msg) => { 7 | if (!Developer.includes(message.author.id)) return; 8 | if (!args[0]) { 9 | return message.channel.send(':x: **Missing file name!**') 10 | } 11 | const cmd = args[0].toLowerCase(); 12 | const command = message.client.commands.get(cmd) 13 | if (!command) { 14 | return message.channel.send(`There is no command with name or alias \`${cmd}\`, ${message.author}!`); 15 | } 16 | const commandFolders = fs.readdirSync('./commands'); 17 | const folderName = commandFolders.find(folder => fs.readdirSync(`./commands/${folder}`).includes(`${cmd}.js`)); 18 | delete require.cache[require.resolve(`../${folderName}/${command.name}.js`)]; 19 | try { 20 | const newCommand = require(`../${folderName}/${command.name}.js`); 21 | message.client.commands.set(newCommand.name, newCommand); 22 | message.channel.send(`Command \`${command.name}\` was reloaded!`); 23 | } catch (error) { 24 | return message.channel.send(`There was an error while reloading a command \`${command.name}\`:\n\`${error.message}\``); 25 | } 26 | }, 27 | }; -------------------------------------------------------------------------------- /commands/mods/kick.js: -------------------------------------------------------------------------------- 1 | const Discord = require('discord.js') 2 | 3 | module.exports = { 4 | name: "kick", 5 | run: async(client, message, args) => { 6 | if (!message.member.hasPermission('KICK_MEMBERS')) return message.channel.send('You dont have permission to do this command!') 7 | const mentionMember = message.mentions.members.first() || message.guild.members.cache.get(args[0]) 8 | if (!mentionMember) return message.channel.send('You need to mention a member!') 9 | if (mentionMember.id == message.author.id) return message.channel.send('You cant kick yourself!') 10 | if (mentionMember.id == client.user.id) return message.channel.send('You cant kick me') 11 | const botRole = message.guild.member(message.guild.me).roles.highest.position; 12 | const role = mentionMember.roles.highest.position; 13 | const authorRole = message.member.roles.highest.position; 14 | if (authorRole <= role) { 15 | return message.channel.send("I can't kick this member because that member has role position is higher than my role or same as you!") 16 | } 17 | if (botRole <= role) { 18 | return message.channel.send("I can't kick this member because that member has role position is higher than my role or same as you!") 19 | } 20 | try { 21 | await mentionMember.kick() 22 | message.channel.send(`Successfully kick ${mentionMember}`) 23 | } catch(e) { 24 | return message.channel.send('There was an error') 25 | } 26 | } 27 | } -------------------------------------------------------------------------------- /commands/extra/rank.js: -------------------------------------------------------------------------------- 1 | const { MessageAttachment } = require('discord.js') 2 | const canvacord = require('canvacord') 3 | 4 | module.exports = { 5 | name: "rank", 6 | run: async(client, message, args) => { 7 | const mentionMember = message.mentions.members.first() || message.guild.members.cache.get(args[0]) || message.member; // Get user mention or message author 8 | const img = mentionMember.user.displayAvatarURL({ format: 'png'}) // format user image to "png" format 9 | if (mentionMember.user.bot) { 10 | return message.channel.send('You cant do that in bots') // You cant get rank about bots 11 | } 12 | message.channel.startTyping(4) // start typing for 4 secounds 13 | const rank = new canvacord.Rank() 14 | .setAvatar(img) // user avatar 15 | .setUsername(mentionMember.user.username) // username for mention member or message author 16 | .setDiscriminator(mentionMember.user.discriminator) // discriminator for mention member or message author 17 | .setProgressBar("#FFFFFF", "COLOR") // progress bar for image 18 | .setCurrentXP(5) // current xp for user 19 | .setRequiredXP(10) // require xp for user 20 | .setStatus(mentionMember.user.presence.status) // user status for user. note you need to enable "PRESENCE INTENT" read https://support.discord.com/hc/en-us/articles/360040720412 for more info 21 | rank.build() // build the image 22 | .then(buffer => { 23 | const image = new MessageAttachment(buffer, 'RankCard.png') 24 | message.channel.send(image) // sending image to channel 25 | message.channel.stopTyping(true) // force stop typing after sending image 26 | }) 27 | } 28 | } -------------------------------------------------------------------------------- /commands/mods/userinfo.js: -------------------------------------------------------------------------------- 1 | const {MessageEmbed, Role} = require('discord.js') 2 | 3 | module.exports = { 4 | name: 'user', 5 | run: async(client, message, args) => { 6 | const mentionMember = message.mentions.members.first() || message.guild.members.cache.get(args[0]) || message.member 7 | const embed = new MessageEmbed() 8 | .setAuthor(mentionMember.user.tag, mentionMember.user.displayAvatarURL({ dynamic: true })) 9 | .setColor('RANDOM') 10 | .setThumbnail(mentionMember.user.displayAvatarURL({dynamic: true})) 11 | .addFields( 12 | { 13 | name: "Account Created At: ", 14 | value: mentionMember.user.createdAt.toLocaleString(), 15 | inline: true 16 | }, 17 | { 18 | name: "Joined At: ", 19 | value: mentionMember.guild.joinedAt.toLocaleString(), 20 | inline: true 21 | }, 22 | { 23 | name: "User ID: ", 24 | value: mentionMember.id, 25 | inline: true 26 | }, 27 | { 28 | name: "Is it a bot?", 29 | value: mentionMember.user.bot, 30 | inline: true 31 | }, 32 | { 33 | name: "Avatar URL: ", 34 | value: `[Avatar Link](${mentionMember.user.displayAvatarURL({dynamic: true})})`, 35 | inline: true 36 | }, 37 | { 38 | name: "Boosted Since:", 39 | value: mentionMember.premiumSince || 'User dont have boost in this server', 40 | inline: true 41 | }, 42 | { 43 | name: "User Roles: ", 44 | value: mentionMember.roles.cache.map(role => role.toString()).join(" ,"), 45 | inline: true 46 | } 47 | ) 48 | await message.channel.send(embed) 49 | } 50 | } -------------------------------------------------------------------------------- /commands/mods/ban.js: -------------------------------------------------------------------------------- 1 | const {MessageEmbed} = require('discord.js') 2 | 3 | module.exports = { 4 | name: "ban", 5 | run: async(client, message, args) => { 6 | if (!message.member.hasPermission('BAN_MEMBERS')) return message.channel.send('You dont have permission to do this command!') 7 | const mentionMember = message.mentions.members.first() || message.guild.members.cache.get(args[0]) 8 | if (!mentionMember) return message.channel.send('You need to mention a user!') 9 | if (mentionMember == message.author.id) return message.channel.send('You cant ban yourself!') 10 | if (mentionMember.id == client.user.id) return message.channel.send('You cant ban me!') 11 | const botRole = message.guild.member(message.guild.me).roles.highest.position; 12 | const role = mentionMember.roles.highest.position; 13 | const authorRole = message.member.roles.highest.position; 14 | if (authorRole <= role) { 15 | return message.channel.send("I can't ban this member because that member has role position is higher than my role or same as you!") 16 | } 17 | if (botRole <= role) { 18 | return message.channel.send("I can't ban this member because that member has role position is higher than my role or same as you!") 19 | } 20 | try { 21 | let reason = args.slice(1).join(" ") || 'There are no reason' 22 | const embed = new MessageEmbed() 23 | .setTitle('You have been banned') 24 | .setDescription(`You have been banned in **${message.guild.name}** for **${reason}** by ${message.author.tag}`) 25 | .setFooter(message.author.tag, message.author.displayAvatarURL({ dynamic: true})) 26 | mentionMember.send(embed) 27 | await mentionMember.ban({ reason: reason, days: 7 }) 28 | message.channel.send(`Successfully ban ${mentionMember} with reason ${reason}`) 29 | } catch(e) { 30 | return message.channel.send('There was an error') 31 | } 32 | } 33 | } -------------------------------------------------------------------------------- /commands/mods/role.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed } = require('discord.js') 2 | 3 | module.exports = { 4 | name: "role", 5 | run: async(client, message, args) => { 6 | if (!message.member.hasPermission('MANAGE_ROLES')) { 7 | return message.channel.send('You dont have permission to do this command!') 8 | } 9 | const mentionMember = message.mentions.members.first() || message.guild.members.cache.get(args[0]); 10 | if (!mentionMember) { 11 | return message.channel.send('You need to mention a member') 12 | } 13 | const roleName = args.slice(1).join(" "); 14 | if (!roleName) { 15 | return message.channel.send('Missing Role Name') 16 | } 17 | const botRole = message.guild.member(message.guild.me).roles.highest.position; 18 | const role = mentionMember.roles.highest.position; 19 | const authorRole = message.member.roles.highest.position; 20 | if (authorRole <= role) { 21 | return message.channel.send("I can't role this member because that member has role position is higher than my role or same as you!") 22 | } 23 | if (botRole <= role) { 24 | return message.channel.send("I can't role this member because that member has role position is higher than my role or same as you!") 25 | } 26 | try { 27 | let msg; 28 | const role = message.guild.roles.cache.get(message.guild.roles.cache.filter(r => r.name.toLowerCase().startsWith(roleName)).map(r => r.id)[0]) || message.mentions.roles.first() || message.guild.roles.cache.get(args[1]); 29 | if (!role) { 30 | return message.channel.send('i can\'t find role with this name!') 31 | } 32 | if (mentionMember._roles.includes(role.id)) { 33 | msg = '-' 34 | mentionMember.roles.remove(role, `By ${message.author.tag}`) 35 | message.channel.send(`✅ | Changed role for ${mentionMember} **${msg}${role.name}**`) 36 | } else { 37 | msg = '+' 38 | mentionMember.roles.add(role, `By ${message.author.tag}`) 39 | message.channel.send(`✅ | Changed role for ${mentionMember} **${msg}${role.name}**`) 40 | } 41 | } catch (e) { 42 | return message.channel.send(`There was an error **${e}**`) 43 | } 44 | } 45 | } -------------------------------------------------------------------------------- /commands/mods/serverinfo.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed, NewsChannel } = require('discord.js') 2 | 3 | module.exports = { 4 | name: 'server', 5 | run: async(client, message, args) => { 6 | const online = message.guild.members.cache.filter(m => m.user.presence.status == 'online').size 7 | const idle = message.guild.members.cache.filter(m => m.user.presence.status == 'idle').size 8 | const dnd = message.guild.members.cache.filter(m => m.user.presence.status == 'dnd').size 9 | const embed = new MessageEmbed() 10 | .setAuthor(message.guild.name, message.guild.iconURL()) 11 | .setColor('RANDOM') 12 | .setFooter(`Requested by ${message.author.tag}`, message.author.displayAvatarURL({ dynamic: true })) 13 | .setThumbnail(message.guild.iconURL({ dynamic: true })) 14 | .addFields( 15 | { 16 | name: 'Server ID: ', 17 | value: message.guild.id, 18 | inline: true 19 | }, 20 | { 21 | name: "Created At: ", 22 | value: message.guild.createdAt.toLocaleString(), 23 | inline: true 24 | }, 25 | { 26 | name: "Channels:", 27 | value: `**${message.guild.channels.cache.filter(c => c.type == 'text').size}** text | **${message.guild.channels.cache.filter(c => c.type == 'voice').size}** voice | **${message.guild.channels.cache.filter(c => c.type == 'category').size}** category` 28 | }, 29 | { 30 | name: "Owned By: ", 31 | value: `<@${message.guild.ownerID}>`, 32 | inline: true 33 | }, 34 | { 35 | name: `Members (${message.guild.memberCount})`, 36 | value: `**${online + idle + dnd}** Online`, 37 | inline: true 38 | }, 39 | { 40 | name: 'Region: ', 41 | value: message.guild.region, 42 | inline: true 43 | }, 44 | { 45 | name: "Verification Level: ", 46 | value: message.guild.verificationLevel, 47 | inline: true 48 | }, 49 | { 50 | name: "Total Boost: ", 51 | value: `${message.guild.premiumSubscriptionCount} Boost`, 52 | inline: true 53 | }, 54 | { 55 | name: "Boost Level: ", 56 | value: message.guild.premiumTier, 57 | inline: true 58 | }, 59 | { 60 | name: "Emojis: ", 61 | value: message.guild.emojis.cache.size >= 1 ? `There are ${message.guild.emojis.cache.size} emojis!` : 'There are no emojis :(', 62 | inline: true 63 | } 64 | ) 65 | await message.channel.send(embed) 66 | } 67 | } -------------------------------------------------------------------------------- /events/guild/message.js: -------------------------------------------------------------------------------- 1 | const Timeout = new Set(); 2 | const { MessageEmbed, WebhookClient } = require('discord.js') 3 | const { prefix } = require('../../config.json') 4 | const ms = require('ms') 5 | 6 | module.exports = async (bot , message) => { 7 | if (message.author.bot) return; 8 | if (!message.content.toLowerCase().startsWith(prefix)) return; 9 | if(!message.member) message.member = await message.guild.fetchMember(message); 10 | if(!message.guild) return; 11 | const args = message.content.slice(prefix.length).trim().split(/ +/g); 12 | const cmd = args.shift().toLowerCase(); 13 | if (cmd.length === 0) return; 14 | let command = bot.commands.get(cmd); 15 | if (!command) command = bot.commands.get(bot.aliases.get(cmd)); 16 | if (command) { 17 | if (command.timeout) { 18 | if (Timeout.has(`${message.author.id}${command.name}`)) { 19 | const embed = new MessageEmbed() 20 | .setTitle('You are in timeout!') 21 | .setDescription(`:x: You need to wait ${ms(command.timeout)} to use command again`) 22 | .setColor('#ff0000') 23 | return message.channel.send(embed) 24 | } else { 25 | command.run(bot, message, args); 26 | Timeout.add(`${message.author.id}${command.name}`) 27 | setTimeout(() => { 28 | Timeout.delete(`${message.author.id}${command.name}`) 29 | }, command.timeout); 30 | const webhook = new WebhookClient('id', 'token') 31 | const embed = new MessageEmbed() 32 | .setAuthor(message.author.tag, message.author.displayAvatarURL({ dynamic: true })) 33 | .setThumbnail(message.guild.iconURL({ dynamic: true })) 34 | .setColor('#fab20a') 35 | .addFields( 36 | { 37 | name: "Guild Name:", 38 | value: message.guild.name 39 | }, 40 | { 41 | name: "Guild ID:", 42 | value: message.guild.id 43 | }, 44 | { 45 | name: "Command Runs:", 46 | value: command.name 47 | }, 48 | { 49 | name: "Channel Name:", 50 | value: message.channel.name 51 | }, 52 | { 53 | name: "Channel ID:", 54 | value: message.channel.id 55 | } 56 | ) 57 | await webhook.send('', { 58 | username: bot.user.username, 59 | avatarURL: bot.user.displayAvatarURL(), 60 | embeds: [embed] 61 | }) 62 | } 63 | } else { 64 | command.run(bot,message,args) 65 | } 66 | } 67 | } --------------------------------------------------------------------------------