Advertisement
ala89

TUTO DEV #12 - CREER UN BOT DISCORD : SERVER STATS, LOCK ET UNLOCK

Sep 9th, 2020 (edited)
5,655
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // db.json
  2. {"warns":{},"tickets":{},"lockedChannels":[]}
  3.  
  4. // config.json
  5. {
  6.     "token": "votre token",
  7.     "prefix": "!",
  8.     "greeting": {
  9.         "channel": "718970110164992041",
  10.         "role": "718970160647635056"
  11.     },
  12.     "reactionRole": {
  13.         "721812281347932311": {
  14.             "emojis": [{
  15.                 "id": "719563468008718348",
  16.                 "roles": "722404495371534358"
  17.             }]
  18.         },
  19.         "721812680763244596": {
  20.             "removable": true,
  21.             "emojis": [{
  22.                 "name": "💻",
  23.                 "roles": ["722088168458813584", "722088234963828747"]
  24.             }, {
  25.                 "name": "🎮",
  26.                 "roles": "722088255402672139"
  27.             }]
  28.         }
  29.     },
  30.     "cooldown": {
  31.         "723998402395767288": 1e4,
  32.         "723998419986808883": 3e4
  33.     },
  34.     "ticket": {
  35.         "category": "741691177807380552",
  36.         "roles": ["741690852719460463", "741690932164034670"]
  37.     },
  38.     "serverStats": {
  39.         "humans": "753290521094520963",
  40.         "bots": "753290543395635260",
  41.         "total": "753290560181108886"
  42.     }
  43. }
  44.  
  45. // index.js
  46. const Discord = require('discord.js'),
  47.     client = new Discord.Client({
  48.         fetchAllMembers: true,
  49.         partials: ['MESSAGE', 'REACTION']
  50.     }),
  51.     config = require('./config.json'),
  52.     fs = require('fs'),
  53.     humanizeDuration = require('humanize-duration'),
  54.     cooldown = new Set()
  55.  
  56. client.login(config.token)
  57. client.commands = new Discord.Collection()
  58. client.db = require('./db.json')
  59.  
  60. fs.readdir('./commands', (err, files) => {
  61.     if (err) throw err
  62.     files.forEach(file => {
  63.         if (!file.endsWith('.js')) return
  64.         const command = require(`./commands/${file}`)
  65.         client.commands.set(command.name, command)
  66.     })
  67. })
  68.  
  69. client.on('message', message => {
  70.     if (message.type !== 'DEFAULT' || message.author.bot) return
  71.  
  72.     if (!message.member.hasPermission('MANAGE_CHANNELS') && client.db.lockedChannels.includes(message.channel.id)) return message.delete()
  73.  
  74.     if (!message.member.hasPermission('MANAGE_MESSAGES')) {
  75.         const duration = config.cooldown[message.channel.id]
  76.         if (duration) {
  77.             const id = `${message.channel.id}_${message.author.id}`
  78.             if (cooldown.has(id)) {
  79.                 message.delete()
  80.                 return message.channel.send(`Ce salon est soumis a un cooldown de ${humanizeDuration(duration, {language: 'fr'})}.`).then(sent => sent.delete({timeout: 5e3}))
  81.             }
  82.             cooldown.add(id)
  83.             setTimeout(() => cooldown.delete(id), duration)
  84.         }
  85.     }
  86.  
  87.     const args = message.content.trim().split(/ +/g)
  88.     const commandName = args.shift().toLowerCase()
  89.     if (!commandName.startsWith(config.prefix)) return
  90.     const command = client.commands.get(commandName.slice(config.prefix.length))
  91.     if (!command) return
  92.     if (command.guildOnly && !message.guild) return message.channel.send('Cette commande ne peut être utilisée que dans un serveur.')
  93.     command.run(message, args, client)
  94. })
  95.  
  96. client.on('guildMemberAdd', member => {
  97.     member.guild.channels.cache.get(config.greeting.channel).send(`${member}`, new Discord.MessageEmbed()
  98.         .setDescription(`${member} a rejoint le serveur. Nous sommes désormais ${member.guild.memberCount} ! 🎉`)
  99.         .setColor('#00ff00'))
  100.     member.roles.add(config.greeting.role)
  101. })
  102.  
  103. client.on('guildMemberRemove', member => {
  104.     member.guild.channels.cache.get(config.greeting.channel).send(new Discord.MessageEmbed()
  105.         .setDescription(`${member.user.tag} a quitté le serveur... 😢`)
  106.         .setColor('#ff0000'))
  107. })
  108.  
  109. client.on('messageReactionAdd', (reaction, user) => {
  110.     if (!reaction.message.guild || user.bot) return
  111.     const reactionRoleElem = config.reactionRole[reaction.message.id]
  112.     if (!reactionRoleElem) return
  113.     const prop = reaction.emoji.id ? 'id' : 'name'
  114.     const emoji = reactionRoleElem.emojis.find(emoji => emoji[prop] === reaction.emoji[prop])
  115.     if (emoji) reaction.message.guild.member(user).roles.add(emoji.roles)
  116.     else reaction.users.remove(user)
  117. })
  118.  
  119. client.on('messageReactionRemove', (reaction, user) => {
  120.     if (!reaction.message.guild || user.bot) return
  121.     const reactionRoleElem = config.reactionRole[reaction.message.id]
  122.     if (!reactionRoleElem || !reactionRoleElem.removable) return
  123.     const prop = reaction.emoji.id ? 'id' : 'name'
  124.     const emoji = reactionRoleElem.emojis.find(emoji => emoji[prop] === reaction.emoji[prop])
  125.     if (emoji) reaction.message.guild.member(user).roles.remove(emoji.roles)
  126. })
  127.  
  128. client.on('ready', () => {
  129.     const statuses = [
  130.         () => `${client.guilds.cache.size} serveurs`,
  131.         () => `${client.guilds.cache.reduce((acc, guild) => acc + guild.memberCount, 0)} utilisateurs`
  132.     ]
  133.     let i = 0
  134.     setInterval(() => {
  135.         client.user.setActivity(statuses[i](), {type: 'PLAYING'})
  136.         i = ++i % statuses.length
  137.     }, 1e4)
  138.     setInterval(() => {
  139.         const [bots, humans] = client.guilds.cache.first().members.cache.partition(member => member.user.bot)
  140.         client.channels.cache.get(config.serverStats.humans).setName(`Humains : ${humans.size}`)
  141.         client.channels.cache.get(config.serverStats.bots).setName(`🤖 Bots : ${bots.size}`)
  142.         client.channels.cache.get(config.serverStats.total).setName(`Total : ${client.guilds.cache.first().memberCount}`)
  143.     }, 3e4)
  144. })
  145.  
  146. client.on('channelCreate', channel => {
  147.     if (!channel.guild) return
  148.     const muteRole = channel.guild.roles.cache.find(role => role.name === 'Muted')
  149.     if (!muteRole) return
  150.     channel.createOverwrite(muteRole, {
  151.         SEND_MESSAGES: false,
  152.         CONNECT: false,
  153.         ADD_REACTIONS: false
  154.     })
  155. })
  156.  
  157. // lock.js
  158. const fs = require('fs')
  159.  
  160. module.exports = {
  161.     run: (message, args, client) => {
  162.         if (!message.member.hasPermission('MANAGE_CHANNELS')) return message.channel.send('Vous n\'avez pas la permission d\'utiliser cette commande.')
  163.         const channel = message.mentions.channels.first() || message.channel
  164.         if (client.db.lockedChannels.includes(channel.id)) return message.channel.send('Ce salon est déjà vérrouillé.')
  165.         client.db.lockedChannels.push(channel.id)
  166.         fs.writeFileSync('./db.json', JSON.stringify(client.db))
  167.         message.channel.send('Ce salon a été verrouillé !')
  168.     },
  169.     name: 'lock',
  170.     guildOnly: true
  171. }
  172.  
  173. // unlock.js
  174. const fs = require('fs')
  175.  
  176. module.exports = {
  177.     run: (message, args, client) => {
  178.         if (!message.member.hasPermission('MANAGE_CHANNELS')) return message.channel.send('Vous n\'avez pas la permission d\'utiliser cette commande.')
  179.         const channel = message.mentions.channels.first() || message.channel
  180.         if (!client.db.lockedChannels.includes(channel.id)) return message.channel.send('Ce salon n\'est pas vérrouillé.')
  181.         client.db.lockedChannels.splice(client.db.lockedChannels.indexOf(channel.id), 1)
  182.         fs.writeFileSync('./db.json', JSON.stringify(client.db))
  183.         message.channel.send('Ce salon a été déverrouillé !')
  184.     },
  185.     name: 'unlock',
  186.     guildOnly: true
  187. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement