MrRobar35

Kaizen

Jul 1st, 2018
142
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. //===CONFIG===//
  2. var config = {
  3.     logDebug: false,
  4.     author: "Iterator",
  5.     version: "1.4.1",
  6.  
  7.     //Bot features (prefix, etc, i think you'll figure it out)
  8.     prefix: "!",
  9.     botName: "Kaizen-85",
  10.     richEmbedColor: 0x9b59b6,
  11.     greenRichEmbedColor: 0x4BB543,
  12.     redRichEmbedColor: 0xcc0000,
  13.  
  14.     emojiOk: "☑",
  15.     emojiError: "⚠",
  16.     emojiAccessDenied: "🔒",
  17.  
  18.     accessDeniedMsgs: [
  19.         "прав не завезли.",
  20.         "вам сегодня не повезло.",
  21.         "ошибка 403.",
  22.         "что-то пошло не так, обратитесь к сисадмину!",
  23.         "вы точно уверены? (д/н)",
  24.         "мне прописали `sudo rm / -rf`, не могу это выполнить.",
  25.         "нажми [сюда](https://youtu.be/dQw4w9WgXcQ) и я выполню это.",
  26.         "отсоси - потом проси!",
  27.         "[ACCESS DENIEEED!](https://youtu.be/2dZy3cd9KFY)",
  28.         "команда не выполнена. Не знаю почему."
  29.     ]
  30. }
  31. //============//
  32.  
  33. //Variables&Libs&Functions&OtherShit
  34. var fs = require("fs");
  35. var ds = require("discord.js");
  36. var bot = new ds.Client;
  37. var viols //for future file loading
  38.  
  39. //Just a basic function to send some information to the console with the date mark.
  40. function log(text) { //Don't want to download some shit loggers. I'll just write my custom function to do that.
  41.     date = new Date; //Get date
  42.     console.log(date.getHours()+":"+date.getMinutes()+":"+date.getSeconds()+" "+text); //Print the text with the date to the console.
  43. }
  44.  
  45. //A function to convert standart process.uptime() format to understandable one.
  46. String.prototype.toHHMMSS = function () { //Don't know how does it works. Just copied from startoverflow xD
  47.     var sec_num = parseInt(this, 10);
  48.     var hours   = Math.floor(sec_num / 3600);
  49.     var minutes = Math.floor((sec_num - (hours * 3600)) / 60);
  50.     var seconds = sec_num - (hours * 3600) - (minutes * 60);
  51.  
  52.     if (hours   < 10) {hours   = "0"+hours;}
  53.     if (minutes < 10) {minutes = "0"+minutes;}
  54.     if (seconds < 10) {seconds = "0"+seconds;}
  55.     var time    = hours+':'+minutes+':'+seconds;
  56.     return time;
  57. }
  58.  
  59. function nickOrName(member) { //function that returns member's discord username if he/she doesn't have nickname.
  60.     return member.nickname || member.user.username;
  61. }
  62.  
  63. function checkRole(member,role) {
  64.     if(member.roles.has(member.guild.roles.find("name",role).id)) {
  65.         return true
  66.     } else {
  67.         return false
  68.     }
  69. }
  70.  
  71. function smallEmbed(client,color,title,text) { //function that returns small info embed with your text, need a client property to show avatar.
  72.     return {embed: {
  73.         color: color,
  74.         author: {
  75.             name: title,
  76.             icon_url: client.user.avatarURL
  77.         },
  78.         description: text
  79.     }}
  80. }
  81.  
  82. //Command list embeds
  83. function helpEveryone(client) {
  84.     return {embed: {
  85.         color: config.richEmbedColor,
  86.         author: {
  87.             name: "Для всех пользователей.",
  88.             icon_url: client.user.avatarURL
  89.         },
  90.         fields: [
  91.             {
  92.                 name: config.prefix+"help <a/mod/everyone>",
  93.                 value: "Вывести список команд."
  94.             },
  95.             {
  96.                 name: config.prefix+"info",
  97.                 value: "Вывести информацию о боте: версию, автора и аптайм."
  98.             },
  99.             {
  100.                 name: config.prefix+"echo <текст>",
  101.                 value: "Отправить сообщение от имени бота."
  102.             },
  103.             {
  104.                 name: config.prefix+"choice <1, 2, 3...>",
  105.                 value: "Выбрать рандомное предложение из перечисленних с помощью пробела с запятой."
  106.             },
  107.             {
  108.                 name: config.prefix+"votemute <@пользователь>",
  109.                 value: "Проголосовать за временный мут @пользователя на **10 минут**. При достижении 5 голосов ему будет выдан мут."
  110.             },
  111.             {
  112.                 name: config.prefix+"pizda",
  113.                 value: \\_(ツ)_/¯"
  114.             },
  115.             {
  116.                 name: config.prefix+"chance <msg>",
  117.                 value: "Рандомная вероятность чего-то в процентах"
  118.             }
  119.         ],
  120.     }}
  121. }
  122.  
  123. function helpMods(client) {
  124.     return {embed: {
  125.         color: config.richEmbedColor,
  126.         author: {
  127.             name: "Для ранга [MOD] и выше.",
  128.             icon_url: client.user.avatarURL
  129.         },
  130.         fields: [
  131.             {
  132.                 name: config.prefix+"mute/ban <@пользователь>",
  133.                 value: "Выдать пожизненный мут/бан @пользователю."
  134.             },
  135.             {
  136.                 name: config.prefix+"tempmute/tempban <@пользователь> <время> <s/m/h/d>",
  137.                 value: "Выдать временный мут/бан @пользователю на указанное время."
  138.             },
  139.             {
  140.                 name: config.prefix+"unmute/unban <@пользователь>",
  141.                 value: "Снять мут/бан @пользователю."
  142.             },
  143.             {
  144.                 name: config.prefix+"purge <1-100>",
  145.                 value: "Удалить заданное кол-во сообщений из канала."
  146.             }
  147.         ],
  148.     }}
  149. }
  150.  
  151. function helpAdmins(client) {
  152.     return {embed: {
  153.         color: config.richEmbedColor,
  154.         author: {
  155.             name: "Для ранга [A] и выше.",
  156.             icon_url: client.user.avatarURL
  157.         },
  158.         fields: [
  159.             {
  160.                 name: config.prefix+"kgbmode <on/off>",
  161.                 value: "Включить боту режим КГБ-следователя."
  162.             },
  163.             {
  164.                 name: config.prefix+"setrang <ранг> <@пользователь>",
  165.                 value: "Выдать любой ранг @пользователю."
  166.             },
  167.             {
  168.                 name: config.prefix+"die",
  169.                 value: "Выключить бота."
  170.             }
  171.         ],
  172.     }}
  173. }
  174.  
  175. function embedCommandInfo(client,rang,description,usage) {
  176.     return {embed: {
  177.         color: config.richEmbedColor,
  178.         author: {
  179.             name: "Информация о команде",
  180.             icon_url: client.user.avatarURL
  181.         },
  182.         fields: [{
  183.                 name: "Ранг команды:",
  184.                 value: rang
  185.             },
  186.             {
  187.                 name: "Описание команды:",
  188.                 value: description
  189.             },
  190.             {
  191.                 name: "Использование команды:",
  192.                 value: usage
  193.         }],
  194.     }}
  195. }
  196.  
  197. //Initialization
  198. log("[INFO] Initialization started...");
  199. if(!fs.existsSync("viols.json")) {
  200.     log("[WARN] File viols.json not found!");
  201.     fs.writeFileSync('viols.json', '{}', function (err) {
  202.         if (err) {
  203.             log("[ERROR] "+err);
  204.             process.exit();
  205.         }
  206.         log("[INFO] Created file viols.json");
  207.     });
  208. }
  209. viols = require("./viols.json");
  210. log("[INFO] Loaded file viols.json");
  211.  
  212.  
  213. //Main Part
  214. bot.on("ready", () => {
  215.     //Printing that the bot is succesfully logged in and started working.
  216.     log("[INFO] Bot login completed as \""+bot.user.username+"\" in "+bot.guilds.size+" guilds.");
  217.     //Timer to update uptime in the bot's game
  218.     bot.user.setPresence({//first going without uptime
  219.         game: {
  220.             name: '>> Помощь: !help',
  221.             type: "STREAMING",
  222.             url: "https://www.twitch.tv/dreamfinity"
  223.         }
  224.     });
  225.     bot.setInterval(() => {
  226.         var time = process.uptime();
  227.         var uptime = (time + "").toHHMMSS();
  228.         bot.user.setPresence({//update bot's uptime
  229.             game: {
  230.                 name: '>> Помощь: !help | >> Аптайм: '+uptime,
  231.                 type: "STREAMING",
  232.                 url: "https://www.twitch.tv/dreamfinity"
  233.             }
  234.         });
  235.     },10000)
  236.     //Violations handler
  237. });
  238.  
  239. bot.on("debug", info => {
  240.     //Printing any debug messages.
  241.     if(!config.logDebug) return;
  242.     log("[DEBUG] "+info);
  243. });
  244.  
  245. bot.on("guildMemberAdd", member => {
  246.     if(viols[member.user.id]) {
  247.         if(viols[member.user.id]["mute"] || viols[member.user.id]["tempmute"]) {
  248.             member.addRole(member.guild.roles.find("name","Muted").id)
  249.         } else if(viols[member.user.id]["ban"] || viols[member.user.id]["tempban"]) {
  250.             member.addRole(member.guild.roles.find("name","Banned").id)
  251.         }
  252.     }
  253. })
  254.  
  255. bot.on("message", message => {
  256.     //The main command handler.
  257.     if(message.content.indexOf(config.prefix,0)) return;
  258.     var args = message.content.trim().slice('1').split(' ');
  259.     var cmd = args.shift().toLowerCase()
  260.     switch(cmd) {
  261.         case 'help': //Some basic function too, says the user about commands containing in this bot.
  262.             if(args.length < 1 || args[0] == "help") {
  263.                 message.channel.send(embedCommandInfo(bot,helpEveryone(bot).embed.author.name,helpEveryone(bot).embed.fields[0].value,helpEveryone(bot).embed.fields[0].name));
  264.                 message.react(config.emojiError);
  265.                 return
  266.             }
  267.  
  268.             if(args[0] == "a") {
  269.                 message.channel.send(helpAdmins(bot));
  270.             } else if(args[0] == "mod") {
  271.                 message.channel.send(helpMods(bot));
  272.             } else if(args[0] == "everyone") {
  273.                 message.channel.send(helpEveryone(bot));
  274.             }
  275.             message.react(config.emojiOk);
  276.             break;
  277.         case 'info': // The standart 'info' command, says the user about bot uptime, version and creator.
  278.             if(args.length > 0) {
  279.                 message.channel.send(embedCommandInfo(bot,helpEveryone(bot).embed.author.name,helpEveryone(bot).embed.fields[0].value,helpEveryone(bot).embed.fields[0].name));
  280.                 message.react(config.emojiError);
  281.                 return
  282.             }
  283.             var time = process.uptime();
  284.             var uptime = (time + "").toHHMMSS();    
  285.             message.channel.send({embed: {
  286.                 color: config.richEmbedColor,
  287.                 author: {
  288.                     name: "Информация о боте "+config.botName,
  289.                     icon_url: bot.user.avatarURL
  290.                 },
  291.                 fields: [{
  292.                         name: "Автор",
  293.                         value: config.author
  294.                     },
  295.                     {
  296.                         name: "Версия",
  297.                         value: config.version
  298.                     },
  299.                     {
  300.                         name: "Аптайм",
  301.                         value: uptime
  302.                 }],
  303.             }});
  304.             message.react(config.emojiOk);
  305.             break;
  306.         case 'echo':
  307.             if(!args[0] || args[0] == "help") {
  308.                 message.channel.send(embedCommandInfo(bot,helpEveryone(bot).embed.author.name,helpEveryone(bot).embed.fields[2].value,helpEveryone(bot).embed.fields[2].name));
  309.                 message.react(config.emojiError);
  310.                 return
  311.             }
  312.             var text = message.content.split(' ').splice('1');
  313.           message.delete();
  314.             message.channel.send(smallEmbed(bot,config.richEmbedColor,"Анонимное сообщение",text.join(" ")));
  315.             log("[INFO] "+nickOrName(message.member)+" issued command \""+config.prefix+"echo "+text.join(" ")+"\"");
  316.             break
  317.      case 'choice':
  318.             if(!args[0] || args[0] == "help") {
  319.                 message.channel.send(embedCommandInfo(bot,helpEveryone(bot).embed.author.name,helpEveryone(bot).embed.fields[3].value,helpEveryone(bot).embed.fields[3].name));
  320.                 message.react(config.emojiError);
  321.                 return
  322.             }
  323.             var choices = message.content.split(', ').splice('1');
  324.             if(choices.length < 1) {
  325.                 message.channel.send(embedCommandInfo(bot,helpEveryone(bot).embed.author.name,helpEveryone(bot).embed.fields[3].value,helpEveryone(bot).embed.fields[3].name));
  326.                 message.react(config.emojiError);
  327.                 return
  328.             }
  329.             var rand = choices[Math.floor(Math.random() * choices.length)];
  330.             message.channel.send(smallEmbed(bot,config.richEmbedColor,"Рандом",nickOrName(message.member)+", я выбираю `"+rand+"`."));
  331.             message.react(config.emojiOk);
  332.             break
  333.         case 'pizda':
  334.             if(args.length > 0) {
  335.             message.channel.send(embedCommandInfo(bot,helpEveryone(bot).embed.author.name,helpEveryone(bot).embed.fields[5].value,helpEveryone(bot).embed.fields[5].name));
  336.                 message.react(config.emojiError);
  337.                 return
  338.             }
  339.             const embed = new ds.RichEmbed()
  340.                 .setAuthor("\"Буква Пизда\"", bot.user.avatarURL)
  341.                 .setColor(config.richEmbedColor)
  342.                 .setImage("http://city17.xyz/pizda.webp")
  343.  
  344.             message.channel.send({embed});
  345.             message.react(config.emojiOk);
  346.             break;
  347.         case 'chance':
  348.             if(!args[0] || args[0] == "help") {
  349.                 message.channel.send(embedCommandInfo(bot,helpEveryone(bot).embed.author.name,helpEveryone(bot).embed.fields[6].value,helpEveryone(bot).embed.fields[6].name));
  350.                 message.react(config.emojiError);
  351.                 return
  352.             }
  353.             var percent = Math.floor(Math.random() * 101);
  354.             var text = "Шанс есть";
  355.             if(percent < 20) {
  356.                 text = "Вероятность довольно-таки низкая";
  357.             } else if(percent < 50) {
  358.                 text = "Вероятность средняя";
  359.             } else if(percent < 80) {
  360.                 text = "Вероятность неплохая";
  361.             } else if(percent > 80) {
  362.                 text = "Вероятность очень большая";
  363.             }
  364.             message.channel.send(smallEmbed(bot,config.richEmbedColor,"Рандом",nickOrName(message.member)+", "+text+", шанс "+percent.toString()+"%"));
  365.             message.react(config.emojiOk);
  366.             break
  367.         case 'mute':
  368.             if(!args[0] || args[0] == "help") {
  369.                 message.channel.send(embedCommandInfo(bot,helpMods(bot).embed.author.name,helpMods(bot).embed.fields[0].value,helpMods(bot).embed.fields[0].name));
  370.                 message.react(config.emojiError);
  371.                 return
  372.             }
  373.             if(!checkRole(message.member,"A #")) {
  374.                 message.channel.send(smallEmbed(bot,config.redRichEmbedColor,"Ошибка!",nickOrName(message.member)+", "+config.accessDeniedMsgs[Math.floor(Math.random() * config.accessDeniedMsgs.length)]));
  375.                 message.react(config.emojiAccessDenied);
  376.                 return
  377.             }
  378.             var member = message.mentions.members.first()
  379.             if(!member) {
  380.                 message.channel.send(smallEmbed(bot,config.redRichEmbedColor,"Ошибка!",nickOrName(message.member)+", пользователь не найден!"));
  381.                 message.react(config.emojiError);
  382.                 return
  383.             }
  384.             if(!args[1]) {
  385.                 message.channel.send(smallEmbed(bot,config.redRichEmbedColor,"Ошибка!",nickOrName(message.member)+", необходима причина наказания!"));
  386.                 message.react(config.emojiError);
  387.                 return
  388.             }
  389.             if(viols[member.user.id]) {
  390.                 if(viols[member.user.id].mute || viols[member.user.id].tempmute) {
  391.                     message.channel.send(smallEmbed(bot,config.redRichEmbedColor,"Ошибка!",nickOrName(message.member)+", пользователь уже в муте!"));
  392.                     message.react(config.emojiError);
  393.                     return
  394.                 }
  395.             }
  396.            
  397.             var reason = message.content.split(" ").splice("2").join(" ");
  398.             viols[member.user.id] = {
  399.                 mute: {
  400.                     guildId: message.guild.id,
  401.                     by: message.member.user.id,
  402.                     reason: reason
  403.                 },
  404.             }
  405.             fs.writeFile("./viols.json",JSON.stringify(viols),(error) => {})
  406.             member.addRole(message.guild.roles.find("name","Muted").id);
  407.             message.guild.channels.find("name","mod-log").send(smallEmbed(bot,config.greenRichEmbedColor,"Наказания","**"+nickOrName(member)+"** заткнут пользователем **"+nickOrName(message.member)+"** по причине **"+reason+"**."));
  408.             message.react(config.emojiOk);
  409.             break
  410.     }
  411. })
Advertisement
Add Comment
Please, Sign In to add comment