ala89

TUTO DEV #14 - CREER UN BOT DISCORD : USER-INFO, ROLE-INFO ET SERVER-INFO

Nov 3rd, 2020 (edited)
4,810
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // index.js
  2. const Discord = require('discord.js'),
  3.     client = new Discord.Client({
  4.         partials: ['MESSAGE', 'REACTION'],
  5.         fetchAllMembers: true
  6.     }),
  7.     config = require('./config.json'),
  8.     fs = require('fs'),
  9.     humanizeDuration = require('humanize-duration'),
  10.     cooldown = new Set()
  11.  
  12. client.login(config.token)
  13. client.commands = new Discord.Collection()
  14. client.db = require('./db.json')
  15.  
  16. fs.readdir('./commands', (err, files) => {
  17.     if (err) throw err
  18.     files.forEach(file => {
  19.         if (!file.endsWith('.js')) return
  20.         const command = require(`./commands/${file}`)
  21.         client.commands.set(command.name, command)
  22.     })
  23. })
  24.  
  25. client.on('message', message => {
  26.     if (message.type !== 'DEFAULT' || message.author.bot) return
  27.  
  28.     if (message.guild) {
  29.         if (!message.member.hasPermission('MANAGE_CHANNELS') && client.db.lockedChannels.includes(message.channel.id)) return message.delete()
  30.  
  31.         if (!message.member.hasPermission('MANAGE_MESSAGES')) {
  32.             const duration = config.cooldown[message.channel.id]
  33.             if (duration) {
  34.                 const id = `${message.channel.id}_${message.author.id}`
  35.                 if (cooldown.has(id)) {
  36.                     message.delete()
  37.                     return message.channel.send(`Ce salon est soumis a un cooldown de ${humanizeDuration(duration, {language: 'fr'})}.`).then(sent => sent.delete({timeout: 5e3}))
  38.                 }
  39.                 cooldown.add(id)
  40.                 setTimeout(() => cooldown.delete(id), duration)
  41.             }
  42.         }
  43.     }
  44.  
  45.     const args = message.content.trim().split(/ +/g)
  46.     const commandName = args.shift().toLowerCase()
  47.     if (!commandName.startsWith(config.prefix)) return
  48.     const command = client.commands.get(commandName.slice(config.prefix.length))
  49.     if (!command) return
  50.     if (command.guildOnly && !message.guild) return message.channel.send('Cette commande ne peut être utilisée que dans un serveur.')
  51.     command.run(message, args, client)
  52. })
  53.  
  54. client.on('guildMemberAdd', member => {
  55.     member.guild.channels.cache.get(config.greeting.channel).send(`${member}`, new Discord.MessageEmbed()
  56.         .setDescription(`${member} a rejoint le serveur. Nous sommes désormais ${member.guild.memberCount} ! 🎉`)
  57.         .setColor('#00ff00'))
  58.     member.roles.add(config.greeting.role)
  59. })
  60.  
  61. client.on('guildMemberRemove', member => {
  62.     member.guild.channels.cache.get(config.greeting.channel).send(new Discord.MessageEmbed()
  63.         .setDescription(`${member.user.tag} a quitté le serveur... 😢`)
  64.         .setColor('#ff0000'))
  65. })
  66.  
  67. client.on('messageReactionAdd', (reaction, user) => {
  68.     if (!reaction.message.guild || user.bot) return
  69.     const reactionRoleElem = config.reactionRole[reaction.message.id]
  70.     if (!reactionRoleElem) return
  71.     const prop = reaction.emoji.id ? 'id' : 'name'
  72.     const emoji = reactionRoleElem.emojis.find(emoji => emoji[prop] === reaction.emoji[prop])
  73.     if (emoji) reaction.message.guild.member(user).roles.add(emoji.roles)
  74.     else reaction.users.remove(user)
  75. })
  76.  
  77. client.on('messageReactionRemove', (reaction, user) => {
  78.     if (!reaction.message.guild || user.bot) return
  79.     const reactionRoleElem = config.reactionRole[reaction.message.id]
  80.     if (!reactionRoleElem || !reactionRoleElem.removable) return
  81.     const prop = reaction.emoji.id ? 'id' : 'name'
  82.     const emoji = reactionRoleElem.emojis.find(emoji => emoji[prop] === reaction.emoji[prop])
  83.     if (emoji) reaction.message.guild.member(user).roles.remove(emoji.roles)
  84. })
  85.  
  86. client.on('ready', () => {
  87.     const statuses = [
  88.         () => `${client.guilds.cache.size} serveurs`,
  89.         () => `${client.guilds.cache.reduce((acc, guild) => acc + guild.memberCount, 0)} utilisateurs`
  90.     ]
  91.     let i = 0
  92.     setInterval(() => {
  93.         client.user.setActivity(statuses[i](), {type: 'PLAYING'})
  94.         i = ++i % statuses.length
  95.     }, 1e4)
  96.     setInterval(() => {
  97.         const [bots, humans] = client.guilds.cache.first().members.cache.partition(member => member.user.bot)
  98.         client.channels.cache.get(config.serverStats.humans).setName(`Humains : ${humans.size}`)
  99.         client.channels.cache.get(config.serverStats.bots).setName(`🤖 Bots : ${bots.size}`)
  100.         client.channels.cache.get(config.serverStats.total).setName(`Total : ${client.guilds.cache.first().memberCount}`)
  101.     }, 3e4)
  102. })
  103.  
  104. client.on('channelCreate', channel => {
  105.     if (!channel.guild) return
  106.     const muteRole = channel.guild.roles.cache.find(role => role.name === 'Muted')
  107.     if (!muteRole) return
  108.     channel.createOverwrite(muteRole, {
  109.         SEND_MESSAGES: false,
  110.         CONNECT: false,
  111.         ADD_REACTIONS: false
  112.     })
  113. })
  114.  
  115. // user-info.js
  116. const Discord = require('discord.js'),
  117.     moment = require('moment')
  118.  
  119. module.exports = {
  120.     run: (message, args, client) => {
  121.         const member = message.mentions.members.first() || message.member
  122.         message.channel.send(new Discord.MessageEmbed()
  123.             .addField('Membre', member, true)
  124.             .addField('Tag', member.user.tag, true)
  125.             .addField('Date de création du compte', moment(member.user.createdAt).format('[Le] DD/MM/YYYY [à] HH:mm:ss'), true)
  126.             .addField('Date d\'arrivée sur le serveur', moment(member.joinedAt).format('[Le] DD/MM/YYYY [à] HH:mm:ss'), true)
  127.             .addField('Date de début de boost', member.premiumSince ? moment(member.premiumSince).format('[Le] DD/MM/YYYY [à] HH:mm:ss') : 'Ne boost pas', true)
  128.             .addField('Infractions', client.db.warns[member.id] ? client.db.warns[member.id].length : 'Aucune', true)
  129.             .setThumbnail(member.user.displayAvatarURL())
  130.             .setFooter(`ID : ${member.id}`))
  131.     },
  132.     name: 'user-info',
  133.     guildOnly: true
  134. }
  135.  
  136. // role-info.js
  137. const Discord = require('discord.js'),
  138.     moment = require('moment')
  139.  
  140. module.exports = {
  141.     run: message => {
  142.         const role = message.mentions.roles.first()
  143.         if (!role) return message.channel.send('Veuillez mentionner le rôle dont vous voulez voir les infos.')
  144.         message.channel.send(new Discord.MessageEmbed()
  145.             .addField('Rôle', role, true)
  146.             .addField('Membres le possédant', role.members.size, true)
  147.             .addField('Couleur', role.hexColor, true)
  148.             .addField('Date de création', moment(role.createdAt).format('[Le] DD/MM/YYYY [à] HH:mm:ss'), true)
  149.             .addField('Affiché séparément', role.hoist ? 'Oui' : 'Non', true)
  150.             .addField('Mentionnable', role.mentionable ? 'Oui' : 'Non', true)
  151.             .setFooter(`ID : ${role.id}`)
  152.             .setColor(role.hexColor))
  153.     },
  154.     name: 'role-info',
  155.     guildOnly: true
  156. }
  157.  
  158. // server-info.js
  159. const Discord = require('discord.js'),
  160.     moment = require('moment')
  161.  
  162. module.exports = {
  163.     run: message => {
  164.         message.channel.send(new Discord.MessageEmbed()
  165.             .addField('Nom', message.guild.name, true)
  166.             .addField('Région', message.guild.region, true)
  167.             .addField('Membres', `${message.guild.memberCount} membres\n${message.guild.members.cache.filter(member => !member.user.bot).size} humains\n${message.guild.members.cache.filter(member => member.user.bot).size} bots`, true)
  168.             .addField('Salons', `${message.guild.channels.cache.size} salons\n${message.guild.channels.cache.filter(channel => channel.type === 'text').size} salons textuels\n${message.guild.channels.cache.filter(channel => channel.type === 'voice').size} salons vocaux\n${message.guild.channels.cache.filter(channel => channel.type === 'category').size} catégories`, true)
  169.             .addField('Emojis', `${message.guild.emojis.cache.size} emojis\n${message.guild.emojis.cache.filter(emoji => !emoji.animated).size} emojis statiques\n${message.guild.emojis.cache.filter(emoji => emoji.animated).size} emojis animés`, true)
  170.             .addField('Rôles', message.guild.roles.cache.size, true)
  171.             .addField('Propriétaire', message.guild.owner, true)
  172.             .addField('Date de création', moment(message.guild.createdAt).format('[Le] DD/MM/YYYY [à] HH:mm:ss'), true)
  173.             .addField('Nitro boost', `Tier : ${message.guild.premiumTier}\nNombre de boosts : ${message.guild.premiumSubscriptionCount}`, true)
  174.             .setFooter(`ID : ${message.guild.id}`)
  175.             .setThumbnail(message.guild.iconURL())
  176.             .setImage(message.guild.bannerURL()))
  177.     },
  178.     name: 'server-info',
  179.     guildOnly: true
  180. }
Add Comment
Please, Sign In to add comment