bot.js 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. /**
  2. * Instanciation des dépendances discord et création du client discord
  3. */
  4. const Discord = require('discord.js');
  5. const client = new Discord.Client();
  6. /**
  7. * Fichier stockant les informations variables du BOT
  8. */
  9. const config = require('./config');
  10. /**
  11. * Authentification du BOT grâce au token DISCORD
  12. */
  13. client.login(config.discordtoken);
  14. /**
  15. * Instanciation des données nécéssaires à l'utilisation de SQLITE3 et de sa DB
  16. */
  17. const sqlite3 = require('sqlite3').verbose();
  18. const db = new sqlite3.Database('./db/data.db');
  19. /**
  20. * Fonction permettant d'envoyer des "embed" => forme de blocs markdown sur discord
  21. */
  22. const embed = require('./embed');
  23. /**
  24. * Instanciation de toutes les commandes déportées sous formes de fonctions pour simplifier le fichier
  25. */
  26. const call = require('./commands/call');
  27. const usercmd = require('./commands/user');
  28. const secret = require('./commands/secret');
  29. const help = require('./commands/help');
  30. /**
  31. * Création des constantes permettant le fonctionnement du bot
  32. */
  33. const prefix = config.discordprefix;
  34. const ADMIN = 0;
  35. const USER = 1;
  36. /**
  37. * Dès que le bot est "ready" (prêt), l'annoncer en console et mettre comme status !help
  38. */
  39. client.on('ready', () => {
  40. console.log(`Logged in as ${client.user.tag}!`);
  41. client.user.setActivity(`${prefix}help`);
  42. });
  43. /**
  44. * Lorsqu'un message est reçu, lancer le code contenu dans la fonction
  45. */
  46. client.on("message", function(message) {
  47. /**
  48. * Si l'auteur du message est un bot, finir la fonction
  49. */
  50. if (message.author.bot) return;
  51. /**
  52. * Si le message ne commence pas par le préfix défini, alors ce n'est pas une commande et finir la fonction
  53. */
  54. if (!message.content.startsWith(prefix)) return;
  55. /**
  56. * Instanciation de toutes les variables permettant l'utilisation du bot et des informations fournies
  57. */
  58. const commandBody = message.content.slice(prefix.length).toLowerCase();
  59. const args = commandBody.split(' ');
  60. const command = args.shift().toLowerCase();
  61. const user = "@" + message.author.username + '#' + message.author.discriminator;
  62. const all = { commandBody, args, command, message, user };
  63. /**
  64. * Vérification des permissions de l'utilisateur lors de la commande
  65. */
  66. db.get('SELECT permissions FROM users WHERE userid = ?', [message.author.id], (err, row) => {
  67. if (err) console.log(err.message);
  68. /**
  69. * Système stockant les commandes authorisées selon le grade
  70. */
  71. const ADMIN_CMD = ['user', 'calltest'];
  72. const USER_CMD = ['call', 'secret', 'help'];
  73. /**
  74. * Vérification de si la est admin où utilisateur, si non alors elle n'existe pas et retourne une erreur
  75. */
  76. if(!ADMIN_CMD.includes(command) && !USER_CMD.includes(command)) {
  77. embed(message, 'Bad command', 15158332, "This command doesn't exist. Please ask help to an admin.", user)
  78. }
  79. /**
  80. * Si l'utilisateur n'est pas déjà dans la db, alors il n'a pas de permissions et les set à null
  81. */
  82. if(row != undefined) perms = row.permissions;
  83. else perms = null;
  84. /**
  85. * Si l'utilisateur rentre une commande admin mais n'a pas les droits, alors un message disant qu'il n'as pas les droits est envoyé
  86. * Si il est admin et lance une commande Admin, alors l'éxécuter
  87. */
  88. if(perms != ADMIN && ADMIN_CMD.includes(command)) {
  89. embed(message, 'Permissions', 15158332, "You don't have the permissions to use this command. Please ask help to an admin.", user);
  90. } else if(perms == ADMIN && ADMIN_CMD.includes(command)) {
  91. usercmd(all);
  92. call(all);
  93. }
  94. /**
  95. * Si l'utilisateur n'a pas les droits utilisateur ni admin, et lance une commande utilisateur (sauf secret et help qui sont des exceptions)
  96. * Alors lui dire qu'il n'as pas les droits/
  97. *
  98. * Si c'est un USER / ADMIN et qu'il fait bien une fonction stockée, la lancer.
  99. * Si il n'est ni user ni admin mais que la commande est secret ou help, alors quand même autoriser la commande :
  100. * help permet d'aider n'importe qui, et secret est une fonction de sécuritée permettant de mettre admin n'importe qui grâce à un mot de passe de récupération
  101. */
  102. if(perms != USER && USER_CMD.includes(command) && perms != ADMIN && command != 'secret' && command != 'help') {
  103. embed(message, 'Permissions', 15158332, "You don't have the permissions to use this command. Please ask help to an admin.", user);
  104. } else if(perms == USER || perms == ADMIN && USER_CMD.includes(command)) {
  105. call(all);
  106. secret(all);
  107. help(all);
  108. } else {
  109. secret(all);
  110. help(all);
  111. }
  112. });
  113. });