Guest User

Untitled

a guest
Jun 1st, 2018
467
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. var testing = true;
  2.  
  3. //tools
  4. const fs = require('fs');
  5. const $ = jQuery = require('jQuery');
  6. require('./node_modules/jquery/src/jquery.csv.js');
  7.  
  8. //data
  9. const path = require('path');
  10. const appDir = path.dirname(require.main.filename);
  11. var prefix = "";
  12. const userData = require('./userData.json');
  13. const months = ["January","February","March","April","May","June","July","August","September","October","November","December"];
  14.  
  15. //init
  16. const auth = require('./auth.json');
  17. const Discord = require('discord.js');
  18. const bot = new Discord.Client();
  19. const RCBot = require("rocketchat-bot").Bot;
  20. const rcBot = new RCBot({
  21.     server: "chat.tubs.moe",
  22.     username: "lofebotrc",
  23.     password: auth.rocketPassword
  24. });
  25. bot.login(auth.discordToken);
  26. rcBot.start();
  27.  
  28. bot.on('ready', () => {
  29.     bot.user.setPresence("online");
  30.  
  31.     if (testing){
  32.         prefix = "T!";
  33.         console.log('LofeBot awake for testing. Auto responses, auto roles, and magic portal disabled.');
  34.     }else{
  35.         prefix = "L!";
  36.         console.log('LofeBot awake.');
  37.         bot.user.setActivity('L!help', {type: "listening"});
  38.  
  39.         const kiyoteruServer = bot.channels.get('389764852434075658');
  40.         const stdefoServer = bot.channels.get('389764732564799488');
  41.         const transmascServer = bot.channels.get('389769978355777546');
  42.         const latvianServer = bot.channels.get('389770056881668097');
  43.         const ahServer = bot.channels.get('435761201486495754');
  44.  
  45.         kiyoteruServer.send("LofeBot is awake! :blush:");
  46.         stdefoServer.send("LofeBot is awake! :blush:");
  47.         transmascServer.send("LofeBot is awake! :blush:");
  48.         latvianServer.send("LofeBot is awake! :blush:");
  49.         ahServer.send("LofeBot is awake! :blush:");
  50.     }
  51. });
  52. rcBot.on("ready", () => {
  53.     rcBot.setSend((meta, message) => {
  54.         rcBot.wsAPI.sendChatMessage(meta.rid, message);
  55.     });
  56.     if (testing){
  57.         console.log("LofeBot RC awake for testing. Magic portal disabled.");
  58.     }else{
  59.         console.log("LofeBot RC awake.");
  60.         rcBot.wsAPI.sendChatMessage("drLaLPChQDRmEgRex", "LofeBot is awake! :blush:");
  61.     }
  62. });
  63.  
  64. bot.on('message', message => {
  65.     var user;
  66.     var botData;
  67.     var noProf = true;
  68.     for (var i = 0; i < userData.users.length; i++){
  69.         if (userData.users[i].id == message.author.id){
  70.             user = userData.users[i];
  71.             noProf = false;
  72.         }else if (userData.users[i].id == bot.user.id){
  73.             botData = userData.users[i];
  74.         }
  75.     }
  76.     if (noProf){
  77.         user = {
  78.             "id": message.author.id,
  79.             "profile": "",
  80.             "points": 0,
  81.             "lastMsg": message.content,
  82.             "spam": 1,
  83.             "gachaDaily": false,
  84.             "kiyoriiInv": 50,
  85.             "defoStarsInv": 50,
  86.             "twelveInv": 50,
  87.             "spouse": 0,
  88.             "weddingDate": 0,
  89.             "pendingMarriage": []
  90.         };
  91.         userData.users.push(user);
  92.     }
  93.  
  94.     // Earning Gacha Points and spam filter, enabled only for server text channels, disabled for bots
  95.     if (message.channel.type == "text" && !message.author.bot){
  96.         var ppm = 5; //points per message
  97.         var spamFilter = 10; //maximum repeated messages before points are reset
  98.         var date = new Date();
  99.         if (date.getUTCDate() == 20 && message.guild.id == 264995832032395264){ //10ppm on utaism day in St. Defoko's
  100.             ppm = 10;
  101.         }
  102.         if (date.getUTCDate() >= 7 && date.getUTCDate() <= 9 && message.guild.id == 357552578705227778){ // 10ppm during 7ate9 in Kiyoteru server
  103.             ppm = 10;
  104.         }
  105.         if (date.getUTCDate() == 12 && message.guild.id == 385927196058845195){ //10ppm on the 12th in TraVox
  106.             ppm = 10;
  107.         }
  108.  
  109.         if (message.content == user.lastMsg){
  110.             user.spam++;
  111.         }else{
  112.             user.spam = 1;
  113.         }
  114.         if (user.spam >= spamFilter){
  115.             // use internal blacklist
  116.             userData.blacklist.push({
  117.                                                                 "id": user.id,
  118.                                                                 "points": user.points
  119.                                                             });
  120.             //message.member.addRole(message.guild.roles.find("name","Muggle"));
  121.             user.points = 0;
  122.             message.author.send("Your gacha points have been reset to 0. You can no longer use the portal.");
  123.             message.channel.send("Your gacha points have been reset to 0. You can no longer use the portal.");
  124.         }else if (!message.author.bot){
  125.             user.points += ppm;
  126.         }
  127.         user.lastMsg = message.content;
  128.     }
  129.  
  130.     // Listening for all messages that begin with 'L!' or 'T!' if testing
  131.     if (message.content.substring(0, 2) == prefix) {
  132.     var args = message.content.substring(2).split(' ');
  133.     var cmd = args[0];
  134.     switch(cmd) {
  135.             case 'help':
  136.                 if (args[1] == undefined){
  137.                     if (testing){
  138.                         message.channel.send("LofeBot Development Version 2.2.0 - Prefix is `T!`\n"
  139.                                            + "Guaranteed to Always Be Broken™\n"
  140.                                                              + "`help` `portal` `time` `ogout`\n"
  141.                                                              + "`role` `profile` `hug`\n"
  142.                                                              + "`points` `gacha`\n"
  143.                                                              + "`testosterone` `estrogen` `zoop` `bicth` `recipe`\n"
  144.                                                              + "`voice` `disconnect`\n"
  145.                                                              + "\n"
  146.                                                              + "Use `T!help (command)` for more information.");
  147.                     }else if (message.channel.type == "text"){
  148.                         message.channel.send("LofeBot Stable Version 2.2.0 - Prefix is `L!`\n"
  149.                                            + "`help` `portal` `time`\n"
  150.                                                              + "`role` `profile` `hug`\n"
  151.                                                              + "`points` `gacha`\n"
  152.                                                              + "`testosterone` `estrogen` `zoop` `bicth` `recipe`\n"
  153.                                                              + "`voice`\n"
  154.                                                              + "\n"
  155.                                                              + "Use `L!help (command)` for more information.");
  156.                     }else{
  157.                         message.channel.send("LofeBot Stable Version 2.2.0 - Prefix is `L!`\n"
  158.                                            + "`help` `time`\n"
  159.                                                              + "`profile` `hug`\n"
  160.                                                              + "`points`\n"
  161.                                                              + "`testosterone` `estrogen` `zoop` `bicth` `recipe`\n"
  162.                                                              + "\n"
  163.                                                              + "Use `L!help (command)` for more information.");
  164.                     }
  165.                 }else{
  166.                     switch(args[1]){
  167.                         case 'help':
  168.                             message.channel.send("Displays all LofeBot commands or details about each command");
  169.                         break;
  170.                         case 'portal':
  171.                             if (message.channel.type == "text"){
  172.                                 if (message.guild.id == 421815715629105155) { //VSio
  173.                                     message.channel.send("Information about the TUBS portal");
  174.                                 }else{
  175.                                     message.channel.send("Information about the Magic Portal channel");
  176.                                 }
  177.                             }else{
  178.                                 message.channel.send("Invalid command. Use `" + prefix + "help` to view all commands.");
  179.                             }
  180.                         break;
  181.                         case 'time':
  182.                             message.channel.send("Check the current time and date (UTC)");
  183.                         break;
  184.                         case 'ogout':
  185.                             message.channel.send("Admin-only command.");
  186.                         break;
  187.                         case 'role':
  188.                             if (message.channel.type == "text"){
  189.                                 message.channel.send("Add or remove roles from yourself. Use this command by itself to see all roles available on this server.");
  190.                             }else{
  191.                                 message.channel.send("Invalid command. Use `" + prefix + "help` to view all commands.");
  192.                             }
  193.                         break;
  194.                         case 'profile':
  195.                             message.channel.send("Set a message about yourself with `" + prefix + "profile set [your message here]` and view people's profiles with `" + prefix + "profile [@mention]`");
  196.                         break;
  197.                         case 'hug':
  198.                             message.channel.send("Give someone a hug with `" + prefix + "hug @mention`");
  199.                         break;
  200.                         case 'points':
  201.                             message.channel.send("Check how many gacha points you've earned using `" + prefix + "points`, or transfer points to other users (with 20% tax) using `" + prefix + "points @mention [number]`.\n"
  202.                                                 + "You earn 5 points per message, and additional points on special days.");
  203.                         break;
  204.                         case 'gacha':
  205.                             if (message.channel.type == "text"){
  206.                                 if (message.guild.id == 264995832032395264) { //St Defoko's server ID
  207.                                     message.channel.send("St. Defoko's Idol Stars (DefoStars): a WIP gacha game featuring UTAUs.\n\n"
  208.                                                        + "__Gacha tiers__\n"
  209.                                                                          + "NHN: 80% Normal, 20% High Normal. 100 gacha points per card.\n"
  210.                                                                          + "HNR: 80% High Normal, 20% Rare. 200 gacha points per card.\n"
  211.                                                                          + "RSR: 80% Rare, 20% Super Rare. 300 gacha points per card.\n"
  212.                                                                          + "SRUR: 80% Super Rare, 20% Ultra Rare. 400 gacha points per card.\n\n"
  213.                                                                          + "__Usage__\n"
  214.                                                                          + "`" + prefix + "gacha pull [1-10 pulls] [tier]` - Pull new cards (ex. `" + prefix + "gacha 5 HNR`) Pull 10 cards to get 1 free bonus card, guaranteed higher rarity.\n"
  215.                                                                          + "`" + prefix + "gacha view [optional:number]` - View all cards or a specific card in your inventory\n"
  216.                                                                          + "`" + prefix + "gacha sell [number/rarity]` - Sell a specific card or all cards of a specific rarity in your inventory. Unidolized cards are 70% of the original price and idolized cards are 100% of the price of one unidolized card.\n"
  217.                                                                          + "`" + prefix + "gacha idolize [primary number] [secondary number]` - Combine 2 cards into 1 idolized card, with new artwork and plus half the stats of the secondary card.\n"
  218.                                                                          + "`" + prefix + "gacha expand` - Purchase 10 inventory expansion slots for 100 gacha points.");
  219.                                 }else if (message.guild.id == 357552578705227778) { //HKIM server ID
  220.                                     message.channel.send("Kiyorii: a WIP gacha game with KQ/KW/Yorii characters.\n\n"
  221.                                                        + "__Gacha tiers__\n"
  222.                                                                          + "NHN: 80% Normal, 20% High Normal. 100 gacha points per card.\n"
  223.                                                                          + "HNR: 80% High Normal, 20% Rare. 200 gacha points per card.\n"
  224.                                                                          + "RSR: 80% Rare, 20% Super Rare. 300 gacha points per card.\n"
  225.                                                                          + "SRUR: 80% Super Rare, 20% Ultra Rare. 400 gacha points per card.\n\n"
  226.                                                                          + "__Usage__\n"
  227.                                                                          + "`" + prefix + "gacha pull [1-10 pulls] [tier]` - Pull new cards (ex. `" + prefix + "gacha 5 HNR`) Pull 10 cards to get 1 free bonus card, guaranteed higher rarity.\n"
  228.                                                                          + "`" + prefix + "gacha view [optional:number]` - View all cards or a specific card in your inventory\n"
  229.                                                                          + "`" + prefix + "gacha sell [number/rarity]` - Sell a specific card or all cards of a specific rarity in your inventory. Unidolized cards are 70% of the original price and idolized cards are 100% of the price of one unidolized card.\n"
  230.                                                                          + "`" + prefix + "gacha idolize [primary number] [secondary number]` - Combine 2 cards into 1 idolized card, with new artwork and plus half the stats of the secondary card.\n"
  231.                                                                          + "`" + prefix + "gacha expand` - Purchase 10 inventory expansion slots for 100 gacha points.");
  232.                                 }else if (message.guild.id == 385927196058845195){//Transmasc Vocalsynth
  233.                                     message.channel.send("TWELVE: a WIP gacha game with members of TWELVE.\n\n"
  234.                                                        + "__Gacha tiers__\n"
  235.                                                                          + "NHN: 80% Normal, 20% High Normal. 100 gacha points per card.\n"
  236.                                                                          + "HNR: 80% High Normal, 20% Rare. 200 gacha points per card.\n"
  237.                                                                          + "RSR: 80% Rare, 20% Super Rare. 300 gacha points per card.\n"
  238.                                                                          + "SRUR: 80% Super Rare, 20% Ultra Rare. 400 gacha points per card.\n\n"
  239.                                                                          + "__Usage__\n"
  240.                                                                          + "`" + prefix + "gacha pull [1-10 pulls] [tier]` - Pull new cards (ex. `" + prefix + "gacha 5 HNR`) Pull 10 cards to get 1 free bonus card, guaranteed higher rarity.\n"
  241.                                                                          + "`" + prefix + "gacha view [optional:number]` - View all cards or a specific card in your inventory\n"
  242.                                                                          + "`" + prefix + "gacha sell [number/rarity]` - Sell a specific card or all cards of a specific rarity in your inventory. Unidolized cards are 70% of the original price and idolized cards are 100% of the price of one unidolized card.\n"
  243.                                                                          + "`" + prefix + "gacha idolize [primary number] [secondary number]` - Combine 2 cards into 1 idolized card, with new artwork and plus half the stats of the secondary card.\n"
  244.                                                                          + "`" + prefix + "gacha expand` - Purchase 10 inventory expansion slots for 100 gacha points.");
  245.                                 }else{ //All other channels
  246.                                     message.channel.send("Use gacha points to buy a random emoji. 100 points per emoji. Buy 10 at once for 1 free bonus emoji.");
  247.                                 }
  248.                             }else{
  249.                                 message.channel.send("Invalid command. Use `" + prefix + "help` to view all commands.");
  250.                             }
  251.                         break;
  252.                         case 'testosterone':
  253.                             message.channel.send("just for fun");
  254.                         break;
  255.                         case 'estrogen':
  256.                             message.channel.send("just for fun");
  257.                         break;
  258.                         case 'zoop':
  259.                             message.channel.send("just for fun");
  260.                         break;
  261.                         case 'bicth':
  262.                             message.channel.send("just for fun");
  263.                         break;
  264.                         case 'recipe':
  265.                             message.channel.send("Get a random bread recipe.");
  266.                         break;
  267.                         case 'voice':
  268.                             if (message.channel.type == "text"){
  269.                                 message.channel.send("Speaks a random sentence in your current voice channel.");
  270.                             }else{
  271.                                 message.channel.send("Invalid command. Use `" + prefix + "help` to view all commands.");
  272.                             }
  273.                         break;
  274.                         case 'disconnect':
  275.                             message.channel.send("Admin-only command.");
  276.                         break;
  277.                         default:
  278.                             message.channel.send("Invalid command. That command does not exist.");
  279.                     }
  280.                 }
  281.       break;
  282.  
  283.             case 'listroles':
  284.                 var bleh = "";
  285.                 message.guild.roles.forEach(aoeu);
  286.                 function aoeu(value, key, map) {
  287.                   bleh += key + ": " + value.name + "\n";
  288.                 }
  289.                 message.author.send(bleh);
  290.             break;
  291.  
  292.       case 'sendfiles': // Reference material for sending files to people
  293.                 fs.writeFileSync(appDir + "/hello.txt", "Hello world!", "utf8");
  294.                 fs.writeFileSync(appDir + "/hello.ini", "Hello world!", "utf8");
  295.                 message.channel.send("Here are your files!", {"files": [new Discord.Attachment(appDir + "/hello.txt"),new Discord.Attachment(appDir + "/hello.ini")]});
  296.       break;
  297.  
  298.       case 'dlfile': // Reference material for downloading files from messages
  299.                 if (message.author.id == 132494042008256512){
  300.                     var https = require('https'); //Move to top of code later
  301.                     if (message.attachments.size > 0){
  302.                         var file = fs.createWriteStream(appDir + "/DL/" + message.attachments.array()[0].filename);
  303.                         var request = https.get(message.attachments.array()[0].url, function(response) {
  304.                             response.pipe(file);
  305.                         });
  306.                         message.channel.send("File has been downloaded.");
  307.                     }else{
  308.                         message.channel.send("You must attach a file to use this command.");
  309.                     }
  310.                 }else{
  311.                     message.channel.send("Please don't fill up KLAD's computer with files.");
  312.                 }
  313.       break;
  314.  
  315.       case 'portal':
  316.                 if (message.channel.type == "text"){
  317.                     if (message.guild.id == 421815715629105155){
  318.                         message.channel.send("The TUBS Portal channels allow you to communicate through LofeBot with corresponding channels in The UTOOTERS Black Supermarket.  Feel free to mute these channels.\n\n"
  319.                                            + "Please respect each other, warn for innapropriate or risky content, and do not spam.");
  320.                     }else{
  321.                         message.channel.send("The magic portal channel on this server allows you to communicate through LofeBot with people from other servers. Feel free to mute the channel for any reason.\n\n"
  322.                                            + "In total there are 6 servers connected together:\n"
  323.                                                              + "SD - St. Defoko\'s School of UTAU (Learn about UTAU: <https://discord.gg/rSzZD9P>)\n"
  324.                                                              + "TV - Transmasc VocalSynth (A FTM/AFAB NB hangout: <https://discord.gg/bEAb7Cg>)\n"
  325.                                                              + "HK - Hiyama Kiyoteru & Ice Mountain (Sensei\'s fanclub: <https://discord.gg/FBcta2Y>)\n"
  326.                                                              + "AHS - Overseas AHS Fans (AHSloids and Voiceroids galore: <https://discord.gg/Ekhzn3a>)\n"
  327.                                                              + "TUBS - The UTOOTERS™ Black Supermarket (http://tubs.moe)\n"
  328.                                                              + "LH - The Latvian House (private)\n"
  329.                                                              + "\n"
  330.                                                              + "**__Rules__**\n"
  331.                                                              + "- Follow the rules of the server you're in.\n"
  332.                                                              + "- Respect each other.\n"
  333.                                                              + "- Keep things generally SFW. Any NSFW that comes up should be warned for and with <angle brackets> around links, or discussed in private messages.\n"
  334.                                                              + "- Don\'t spam.\n"
  335.                                                              + "You'll become a muggle if you don't follow these rules.");
  336.                     }
  337.                 }else{
  338.                     message.channel.send("Invalid command. Use `" + prefix + "help` to view all commands.");
  339.                 }
  340.             break;
  341.  
  342.             case 'time':
  343.                 var date = new Date();
  344.                 var hr = date.getUTCHours();
  345.                 var morn = "AM";
  346.                 var minz = date.getUTCMinutes();
  347.                 if (date.getUTCHours() > 11) {morn = "PM";}
  348.                 if (date.getUTCHours() > 12) {hr -= 12;}
  349.                 if (date.getUTCMinutes() < 10) {minz = "0" + minz;}
  350.                 message.channel.send("The current time is " + hr + ":" + minz + " " + morn + " on " + months[date.getUTCMonth()] + " " + date.getUTCDate() + ", " + date.getUTCFullYear() + " (UTC)");
  351.             break;
  352.  
  353.             case 'ogout':
  354.                 if (message.author.id == 132494042008256512){ //klad only
  355.                     if (!testing){
  356.                         const kiyoteruServer = bot.channels.get('389764852434075658');
  357.                         const stdefoServer = bot.channels.get('389764732564799488');
  358.                         const transmascServer = bot.channels.get('389769978355777546');
  359.                         const latvianServer = bot.channels.get('389770056881668097');
  360.                         const ahServer = bot.channels.get('435761201486495754');
  361.  
  362.                         kiyoteruServer.send("LofeBot is asleep! :sleeping:");
  363.                         stdefoServer.send("LofeBot is asleep! :sleeping:");
  364.                         transmascServer.send("LofeBot is asleep! :sleeping:");
  365.                         latvianServer.send("LofeBot is asleep! :sleeping:");
  366.                         ahServer.send("LofeBot is asleep! :sleeping:")
  367.                         rcBot.wsAPI.sendChatMessage("drLaLPChQDRmEgRex", "LofeBot is asleep! :sleeping:");
  368.                     }else{
  369.                         message.channel.send("Shutting down test bot.");
  370.                     }
  371.  
  372.                     bot.user.setPresence("invisible");
  373.                     bot.destroy();
  374.                 }else{
  375.                     message.channel.send("This command is admin only.");
  376.                 }
  377.             break;
  378.  
  379.             case 'role':
  380.                 if (message.channel.type == "text"){
  381.                     if (message.guild.id == 357552578705227778){ //Kiyoteru server
  382.                         if (args[1] == undefined){ //L!roles
  383.                             message.channel.send("Use `" + prefix + "role [rolename]` to add/remove a role from yourself.\n"
  384.                                                 + "`vocalop` - Producer\n"
  385.                                                 + "`vocalouser` - Vocaloid user\n"
  386.                                                 + "`artist`\n"
  387.                                                 + "`writer`\n"
  388.                                                 + "`fan - Includes additional control over Rythm bot`\n"
  389.                                                 + "Pronouns\n"
  390.                                                 + "`he` - he/him/his\n"
  391.                                                 + "`she` - she/her\n"
  392.                                                 + "`they` - they/them/their\n"
  393.                                                 + "Notify KLAD to add new pronouns.");
  394.                         }else if (args[1] == "vocalop"){
  395.                             if (message.member.roles.has("357552997812928518")){
  396.                                 message.member.removeRole("357552997812928518");
  397.                                 message.channel.send("Removed role: Vocalo-P");
  398.                             }else{
  399.                                 message.member.addRole("357552997812928518");
  400.                                 message.channel.send("Added role: Vocalo-P");
  401.                             }
  402.                         }else if (args[1] == "vocalouser"){
  403.                             if (message.member.roles.has("357552947548127266")){
  404.                                 message.member.removeRole("357552947548127266");
  405.                                 message.channel.send("Removed role: Vocaloid User");
  406.                             }else{
  407.                                 message.member.addRole("357552947548127266");
  408.                                 message.channel.send("Added role: Vocaloid User");
  409.                             }
  410.                         }else if (args[1] == "artist"){
  411.                             if (message.member.roles.has("357552894238785536")){
  412.                                 message.member.removeRole("357552894238785536");
  413.                                 message.channel.send("Removed role: Artist");
  414.                             }else{
  415.                                 message.member.addRole("357552894238785536");
  416.                                 message.channel.send("Added role: Artist");
  417.                             }
  418.                         }else if (args[1] == "writer"){
  419.                             if (message.member.roles.has("357553139957760001")){
  420.                                 message.member.removeRole("357553139957760001");
  421.                                 message.channel.send("Removed role: Writer");
  422.                             }else{
  423.                                 message.member.addRole("357553139957760001");
  424.                                 message.channel.send("Added role: Writer");
  425.                             }
  426.                         }else if (args[1] == "fan"){
  427.                             if (message.member.roles.has("357559521519861760")){
  428.                                 message.member.removeRole("357559521519861760");
  429.                                 message.channel.send("Removed role: Fan");
  430.                             }else{
  431.                                 message.member.addRole("357559521519861760");
  432.                                 message.channel.send("Added role: Fan");
  433.                             }
  434.                         }else if (args[1] == "he"){
  435.                             if (message.member.roles.has("423662566431129614")){
  436.                                 message.member.removeRole("423662566431129614");
  437.                                 message.channel.send("Removed role: he/him");
  438.                             }else{
  439.                                 message.member.addRole("423662566431129614");
  440.                                 message.channel.send("Added role: he/him");
  441.                             }
  442.                         }else if (args[1] == "she"){
  443.                             if (message.member.roles.has("423662605458997248")){
  444.                                 message.member.removeRole("423662605458997248");
  445.                                 message.channel.send("Removed role: she/her");
  446.                             }else{
  447.                                 message.member.addRole("423662605458997248");
  448.                                 message.channel.send("Added role: she/her");
  449.                             }
  450.                         }else if (args[1] == "they"){
  451.                             if (message.member.roles.has("423662642473992193")){
  452.                                 message.member.removeRole("423662642473992193");
  453.                                 message.channel.send("Removed role: they/them");
  454.                             }else{
  455.                                 message.member.addRole("423662642473992193");
  456.                                 message.channel.send("Added role: they/them");
  457.                             }
  458.                         }else{
  459.                             message.channel.send("Invalid command. Use `" + prefix + "role` to view all available roles.");
  460.                         }
  461.                     }
  462.                     else if (message.guild.id == 385927196058845195){ //Transmasc Vocalsynth
  463.                         if (args[1] == undefined){
  464.                             message.channel.send("Use `" + prefix + "role [category]` to view all roles available in that category.\n"
  465.                                                + "`pronoun` - Required to access private channels\n"
  466.                                                                  + "`vocalsynth`\n"
  467.                                                                  + "`color` - Name color\n"
  468.                                                                  + "To get the 18+ role, ping a mod.");
  469.                         }else if (args[1] == "pronoun"){
  470.                             if (args[2] == undefined){
  471.                                 message.channel.send("Use `" + prefix + "role pronoun [rolename]` to add/remove a role from yourself.\n"
  472.                                                    + "`he` - he/him/his\n"
  473.                                                                      + "`she` - she/her\n"
  474.                                                                      + "`they` - them/them/their\n"
  475.                                                                      + "`ey` - ey/em/eir\n"
  476.                                                                      + "`ce` - ce/cir\n"
  477.                                                                      + "`le` - le/lir\n"
  478.                                                                      + "`questioning`\n"
  479.                                                                      + "Notify KLAD to add new pronouns.");
  480.                             }else if (args[2] == "he"){
  481.                                 if (message.member.roles.has("385928310875488256")){
  482.                                     message.member.removeRole("385928310875488256");
  483.                                     message.channel.send("Removed role: he/him");
  484.                                 }else{
  485.                                     message.member.addRole("385928310875488256");
  486.                                     message.channel.send("Added role: he/him");
  487.                                 }
  488.                             }else if (args[2] == "she"){
  489.                                 if (message.member.roles.has("386517365778677771")){
  490.                                     message.member.removeRole("386517365778677771");
  491.                                     message.channel.send("Removed role: she/her");
  492.                                 }else{
  493.                                     message.member.addRole("386517365778677771");
  494.                                     message.channel.send("Added role: she/her");
  495.                                 }
  496.                             }else if (args[2] == "they"){
  497.                                 if (message.member.roles.has("385928340067844096")){
  498.                                     message.member.removeRole("385928340067844096");
  499.                                     message.channel.send("Removed role: they/them");
  500.                                 }else{
  501.                                     message.member.addRole("385928340067844096");
  502.                                     message.channel.send("Added role: they/them");
  503.                                 }
  504.                             }else if (args[2] == "ey"){
  505.                                 if (message.member.roles.has("385944521277702145")){
  506.                                     message.member.removeRole("385944521277702145");
  507.                                     message.channel.send("Removed role: ey/em");
  508.                                 }else{
  509.                                     message.member.addRole("385944521277702145");
  510.                                     message.channel.send("Added role: ey/em");
  511.                                 }
  512.                             }else if (args[2] == "ce"){
  513.                                 if (message.member.roles.has("392887479402889236")){
  514.                                     message.member.removeRole("392887479402889236");
  515.                                     message.channel.send("Removed role: ce/cir");
  516.                                 }else{
  517.                                     message.member.addRole("392887479402889236");
  518.                                     message.channel.send("Added role: ce/cir");
  519.                                 }
  520.                             }else if (args[2] == "le") {
  521.                                 if (message.member.roles.has("430881048075829268")){
  522.                                     message.member.removeRole("430881048075829268");
  523.                                     message.channel.send("Removed role: le/lir");
  524.                                 }else{
  525.                                     message.member.addRole("430881048075829268");
  526.                                     message.channel.send("Added role: le/lir");
  527.                                 }
  528.                             }else if (args[2] == "questioning"){
  529.                                 if (message.member.roles.has("385958742606479362")){
  530.                                     message.member.removeRole("385958742606479362");
  531.                                     message.channel.send("Removed role: questioning");
  532.                                 }else{
  533.                                     message.member.addRole("385958742606479362");
  534.                                     message.channel.send("Added role: questioning");
  535.                                 }
  536.                             }else{
  537.                                 message.channel.send("Invalid command. Use `" + prefix + "role pronoun` to view all available pronoun roles.\n"
  538.                                                     + "Notify KLAD to add new pronouns.");
  539.                             }
  540.                         }else if (args[1] == "vocalsynth"){
  541.                             if (args[2] == undefined){
  542.                                 message.channel.send("Use `" + prefix + "role vocalsynth [rolename]` to add/remove a role from yourself.\n"
  543.                                                    + "`vocaloid`\n"
  544.                                                                      + "`utau`\n"
  545.                                                                      + "`chipspeech`\n"
  546.                                                                      + "`alterego`\n"
  547.                                                                      + "`cevio`\n"
  548.                                                                      + "Notify KLAD to add new vocalsynths.");
  549.                             }else if (args[2] == "vocaloid"){
  550.                                 if (message.member.roles.has("385943555891265546")){
  551.                                     message.member.removeRole("385943555891265546");
  552.                                     message.channel.send("Removed role: Vocaloid");
  553.                                 }else{
  554.                                     message.member.addRole("385943555891265546");
  555.                                     message.channel.send("Added role: Vocaloid");
  556.                                 }
  557.                             }else if (args[2] == "utau"){
  558.                                 if (message.member.roles.has("385943581711400960")){
  559.                                     message.member.removeRole("385943581711400960");
  560.                                     message.channel.send("Removed role: UTAU");
  561.                                 }else{
  562.                                     message.member.addRole("385943581711400960");
  563.                                     message.channel.send("Added role: UTAU");
  564.                                 }
  565.                             }else if (args[2] == "chipspeech"){
  566.                                 if (message.member.roles.has("385943601516904468")){
  567.                                     message.member.removeRole("385943601516904468");
  568.                                     message.channel.send("Removed role: Chipspeech");
  569.                                 }else{
  570.                                     message.member.addRole("385943601516904468");
  571.                                     message.channel.send("Added role: Chipspeech");
  572.                                 }
  573.                             }else if (args[2] == "alterego"){
  574.                                 if (message.member.roles.has("385943628519833601")){
  575.                                     message.member.removeRole("385943628519833601");
  576.                                     message.channel.send("Removed role: AlterEgo");
  577.                                 }else{
  578.                                     message.member.addRole("385943628519833601");
  579.                                     message.channel.send("Added role: AlterEgo");
  580.                                 }
  581.                             }else if (args[2] == "cevio"){
  582.                                 if (message.member.roles.has("385943660069650443")){
  583.                                     message.member.removeRole("385943660069650443");
  584.                                     message.channel.send("Removed role: CeVIO");
  585.                                 }else{
  586.                                     message.member.addRole("385943660069650443");
  587.                                     message.channel.send("Added role: CeVIO");
  588.                                 }
  589.                             }else{
  590.                                 message.channel.send("Invalid command. Use `" + prefix + "role vocalsynth` to view all available vocalsynth roles.\n"
  591.                                                    + "Notify KLAD to add new vocalsynths.");
  592.                             }
  593.                         }else if (args[1] == "color"){
  594.                             if (args[2] == undefined){
  595.                                 message.channel.send("Use `" + prefix + "role color [rolename]` to add/remove a role from yourself.\n"
  596.                                                    + "Notify KLAD to add new colors.", new Discord.Attachment("https://i.imgur.com/leEo2md.png"));
  597.                             }else if (args[2] == "light"){
  598.                                 if (args[3] == undefined){
  599.                                     message.channel.send("Invalid command. Use `" + prefix + "role color` to view all available color roles.\n"
  600.                                                        + "Notify KLAD to add new colors.");
  601.                                 }else if (args[3] == "red"){
  602.                                     if (message.member.roles.has("385950183168671766")){
  603.                                         message.member.removeRole("385950183168671766");
  604.                                         message.channel.send("Removed role: light red");
  605.                                     }else{
  606.                                         message.member.addRole("385950183168671766");
  607.                                         message.channel.send("Added role: light red");
  608.                                     }
  609.                                 }else if (args[3] == "orange"){
  610.                                     if (message.member.roles.has("385950050590916619")){
  611.                                         message.member.removeRole("385950050590916619");
  612.                                         message.channel.send("Removed role: light orange");
  613.                                     }else{
  614.                                         message.member.addRole("385950050590916619");
  615.                                         message.channel.send("Added role: light orange");
  616.                                     }
  617.                                 }else if (args[3] == "yellow"){
  618.                                     if (message.member.roles.has("385946325054652417")){
  619.                                         message.member.removeRole("385946325054652417");
  620.                                         message.channel.send("Removed role: light yellow");
  621.                                     }else{
  622.                                         message.member.addRole("385946325054652417");
  623.                                         message.channel.send("Added role: light yellow");
  624.                                     }
  625.                                 }else if (args[3] == "pink"){
  626.                                     if (message.member.roles.has("385946135581294592")){
  627.                                         message.member.removeRole("385946135581294592");
  628.                                         message.channel.send("Removed role: light pink");
  629.                                     }else{
  630.                                         message.member.addRole("385946135581294592");
  631.                                         message.channel.send("Added role: light pink");
  632.                                     }
  633.                                 }else if (args[3] == "purple"){
  634.                                     if (message.member.roles.has("385946100466712598")){
  635.                                         message.member.removeRole("385946100466712598");
  636.                                         message.channel.send("Removed role: light purple");
  637.                                     }else{
  638.                                         message.member.addRole("385946100466712598");
  639.                                         message.channel.send("Added role: light purple");
  640.                                     }
  641.                                 }else if (args[3] == "blue"){
  642.                                     if (message.member.roles.has("385946010121142281")){
  643.                                         message.member.removeRole("385946010121142281");
  644.                                         message.channel.send("Removed role: light blue");
  645.                                     }else{
  646.                                         message.member.addRole("385946010121142281");
  647.                                         message.channel.send("Added role: light blue");
  648.                                     }
  649.                                 }else if (args[3] == "green"){
  650.                                     if (message.member.roles.has("385945930098016268")){
  651.                                         message.member.removeRole("385945930098016268");
  652.                                         message.channel.send("Removed role: light green");
  653.                                     }else{
  654.                                         message.member.addRole("385945930098016268");
  655.                                         message.channel.send("Added role: light green");
  656.                                     }
  657.                                 }else if (args[3] == "teal"){
  658.                                     if (message.member.roles.has("385943468528107521")){
  659.                                         message.member.removeRole("385943468528107521");
  660.                                         message.channel.send("Removed role: light teal");
  661.                                     }else{
  662.                                         message.member.addRole("385943468528107521");
  663.                                         message.channel.send("Added role: light teal");
  664.                                     }
  665.                                 }else{
  666.                                     message.channel.send("Invalid command. Use `" + prefix + "role color` to view all available color roles.\n"
  667.                                                        + "Notify KLAD to add new colors.");
  668.                                 }
  669.                             }else if (args[2] == "dark"){
  670.                                 if (args[3] == undefined){
  671.                                     message.channel.send("Invalid command. Use `" + prefix + "role color` to view all available color roles.\n"
  672.                                                        + "Notify KLAD to add new colors.");
  673.                                 }else if (args[3] == "red"){
  674.                                     if (message.member.roles.has("385950244992712714")){
  675.                                         message.member.removeRole("385950244992712714");
  676.                                         message.channel.send("Removed role: dark red");
  677.                                     }else{
  678.                                         message.member.addRole("385950244992712714");
  679.                                         message.channel.send("Added role: dark red");
  680.                                     }
  681.                                 }else if (args[3] == "orange"){
  682.                                     if (message.member.roles.has("385950106689732608")){
  683.                                         message.member.removeRole("385950106689732608");
  684.                                         message.channel.send("Removed role: dark orange");
  685.                                     }else{
  686.                                         message.member.addRole("385950106689732608");
  687.                                         message.channel.send("Added role: orange");
  688.                                     }
  689.                                 }else if (args[3] == "yellow"){
  690.                                     if (message.member.roles.has("385946380125863958")){
  691.                                         message.member.removeRole("385946380125863958");
  692.                                         message.channel.send("Removed role: dark yellow");
  693.                                     }else{
  694.                                         message.member.addRole("385946380125863958");
  695.                                         message.channel.send("Added role: dark yellow");
  696.                                     }
  697.                                 }else if (args[3] == "pink"){
  698.                                     if (message.member.roles.has("385946257538940928")){
  699.                                         message.member.removeRole("385946257538940928");
  700.                                         message.channel.send("Removed role: dark pink");
  701.                                     }else{
  702.                                         message.member.addRole("385946257538940928");
  703.                                         message.channel.send("Added role: dark pink");
  704.                                     }
  705.                                 }else if (args[3] == "purple"){
  706.                                     if (message.member.roles.has("385946137552617492")){
  707.                                         message.member.removeRole("385946137552617492");
  708.                                         message.channel.send("Removed role: dark purple");
  709.                                     }else{
  710.                                         message.member.addRole("385946137552617492");
  711.                                         message.channel.send("Added role: dark purple");
  712.                                     }
  713.                                 }else if (args[3] == "blue"){
  714.                                     if (message.member.roles.has("385946057151873036")){
  715.                                         message.member.removeRole("385946057151873036");
  716.                                         message.channel.send("Removed role: dark blue");
  717.                                     }else{
  718.                                         message.member.addRole("385946057151873036");
  719.                                         message.channel.send("Added role: dark blue");
  720.                                     }
  721.                                 }else if (args[3] == "green"){
  722.                                     if (message.member.roles.has("385945970497683456")){
  723.                                         message.member.removeRole("385945970497683456");
  724.                                         message.channel.send("Removed role: dark green");
  725.                                     }else{
  726.                                         message.member.addRole("385945970497683456");
  727.                                         message.channel.send("Added role: dark green");
  728.                                     }
  729.                                 }else if (args[3] == "teal"){
  730.                                     if (message.member.roles.has("385943730798198785")){
  731.                                         message.member.removeRole("385943730798198785");
  732.                                         message.channel.send("Removed role: dark teal");
  733.                                     }else{
  734.                                         message.member.addRole("385943730798198785");
  735.                                         message.channel.send("Added role: dark teal");
  736.                                     }
  737.                                 }else{
  738.                                     message.channel.send("Invalid command. Use `" + prefix + "role color` to view all available color roles.\n"
  739.                                                        + "Notify KLAD to add new colors.");
  740.                                 }
  741.                             }else{
  742.                                 message.channel.send("Invalid command. Use `" + prefix + "role color` to view all available color roles.\n"
  743.                                                    + "Notify KLAD to add new colors.");
  744.                             }
  745.                         }else{
  746.                             message.channel.send("Invalid command. Use `" + prefix + "role` to view all role categories.");
  747.                         }
  748.                     }
  749.                     else if (message.guild.id == 264995832032395264){ //St. Defoko's
  750.                         if (args[1] == undefined){
  751.                             message.channel.send("Use `" + prefix + "role [category]` to view all roles available in that category.\n"
  752.                                                + "`pronoun`\n"
  753.                                                                  + "`exp` - UTAU experience\n"
  754.                                                                  + "`os` - Operating system\n"
  755.                                                                  + "`club`\n"
  756.                                                                  + "To get the Developer role, ping a mod with the software you're making.\n"
  757.                                                                  + "To get the Producer role, ping a mod with an original song you've released.");
  758.                         }
  759.                         else if (args[1] == "pronoun"){
  760.                             if (args[2] == undefined){
  761.                                 message.channel.send("Use `" + prefix + "role pronoun [rolename]` to add/remove a role from yourself.\n"
  762.                                                    + "`he` - he/him/his\n"
  763.                                                                      + "`she` - she/her\n"
  764.                                                                      + "`they` - they/them/their\n"
  765.                                                                      + "`ze` - ze/zyr/zym\n"
  766.                                                                      + "`ce` - ce/cir\n"
  767.                                                                      + "Notify KLAD to add new pronouns.");
  768.                             }else if (args[2] == "he"){
  769.                                 if (message.member.roles.has("372645014741975041")){
  770.                                     message.member.removeRole("372645014741975041");
  771.                                     if (message.member.roles.size == 2){
  772.                                         message.member.addRole("399813995109941248"); //Become visitor if no roles left
  773.                                     }
  774.                                     message.channel.send("Removed role: he/him");
  775.                                 }else{
  776.                                     message.member.addRole("372645014741975041");
  777.                                     message.channel.send("Added role: he/him");
  778.                                     if (message.member.roles.has("399813995109941248")){ //Auto remove visitor role
  779.                                         message.member.removeRole("399813995109941248");
  780.                                     }
  781.                                 }
  782.                             }else if (args[2] == "she"){
  783.                                 if (message.member.roles.has("372645087081005056")){
  784.                                     message.member.removeRole("372645087081005056");
  785.                                     if (message.member.roles.size == 2){
  786.                                         message.member.addRole("399813995109941248"); //Become visitor if no roles left
  787.                                     }
  788.                                     message.channel.send("Removed role: she/her");
  789.                                 }else{
  790.                                     message.member.addRole("372645087081005056");
  791.                                     message.channel.send("Added role: she/her");
  792.                                     if (message.member.roles.has("399813995109941248")){ //Auto remove visitor role
  793.                                         message.member.removeRole("399813995109941248");
  794.                                     }
  795.                                 }
  796.                             }else if (args[2] == "they"){
  797.                                 if (message.member.roles.has("372645143192272896")){
  798.                                     message.member.removeRole("372645143192272896");
  799.                                     message.channel.send("Removed role: they/them");
  800.                                     if (message.member.roles.size == 2){
  801.                                         message.member.addRole("399813995109941248"); //Become visitor if no roles left
  802.                                     }
  803.                                 }else{
  804.                                     message.member.addRole("372645143192272896");
  805.                                     message.channel.send("Added role: they/them");
  806.                                     if (message.member.roles.has("399813995109941248")){ //Auto remove visitor role
  807.                                         message.member.removeRole("399813995109941248");
  808.                                     }
  809.                                 }
  810.                             }else if (args[2] == "ze"){
  811.                                 if (message.member.roles.has("395558157113622528")){
  812.                                     message.member.removeRole("395558157113622528");
  813.                                     if (message.member.roles.size == 2){
  814.                                         message.member.addRole("399813995109941248"); //Become visitor if no roles left
  815.                                     }
  816.                                     message.channel.send("Removed role: ze/zyr");
  817.                                 }else{
  818.                                     message.member.addRole("395558157113622528");
  819.                                     message.channel.send("Added role: ze/zyr");
  820.                                     if (message.member.roles.has("399813995109941248")){ //Auto remove visitor role
  821.                                         message.member.removeRole("399813995109941248");
  822.                                     }
  823.                                 }
  824.                             }else if (args[2] == "ce"){
  825.                                 if (message.member.roles.has("395558270158241804")){
  826.                                     message.member.removeRole("395558270158241804");
  827.                                     if (message.member.roles.size == 2){
  828.                                         message.member.addRole("399813995109941248"); //Become visitor if no roles left
  829.                                     }
  830.                                     message.channel.send("Removed role: ce/cir");
  831.                                 }else{
  832.                                     message.member.addRole("395558270158241804");
  833.                                     message.channel.send("Added role: ce/cir");
  834.                                     if (message.member.roles.has("399813995109941248")){ //Auto remove visitor role
  835.                                         message.member.removeRole("399813995109941248");
  836.                                     }
  837.                                 }
  838.                             }else{
  839.                                 message.channel.send("Invalid command. Use `" + prefix + "role pronoun` to view all available pronoun roles.\n"
  840.                                                     + "Notify Kiyoteru to add new pronouns.");
  841.                             }
  842.                         }
  843.                         else if (args[1] == "exp"){
  844.                             if (args[2] == undefined){
  845.                                 message.channel.send("Use `" + prefix + "role exp [rolename]` to add/remove a role from yourself.\n"
  846.                                                     + "`senpai` - Experienced UTAU user\n"
  847.                                                     + "`kouhai` - Newbie UTAU user");
  848.                             }else if (args[2] == "senpai"){
  849.                                 if (message.member.roles.has("367769097481617410")){
  850.                                     message.member.removeRole("367769097481617410");
  851.                                     if (message.member.roles.size == 2){
  852.                                         message.member.addRole("399813995109941248"); //Become visitor if no roles left
  853.                                     }
  854.                                     message.channel.send("Removed role: Senpai");
  855.                                 }else{
  856.                                     message.member.addRole("367769097481617410");
  857.                                     message.channel.send("Added role: Senpai");
  858.                                     if (message.member.roles.has("399813995109941248")){ //Auto remove visitor role
  859.                                         message.member.removeRole("399813995109941248");
  860.                                     }
  861.                                 }
  862.                             }else if (args[2] == "kouhai"){
  863.                                 if (message.member.roles.has("367769311848300544")){
  864.                                     message.member.removeRole("367769311848300544");
  865.                                     if (message.member.roles.size == 2){
  866.                                         message.member.addRole("399813995109941248"); //Become visitor if no roles left
  867.                                     }
  868.                                     message.channel.send("Removed role: Kouhai");
  869.                                 }else{
  870.                                     message.member.addRole("367769311848300544");
  871.                                     message.channel.send("Added role: Kouhai");
  872.                                     if (message.member.roles.has("399813995109941248")){ //Auto remove visitor role
  873.                                         message.member.removeRole("399813995109941248");
  874.                                     }
  875.                                 }
  876.                             }else{
  877.                                 message.channel.send("Invalid command. Use `" + prefix + "role exp` to view all available experience roles.");
  878.                             }
  879.                         }
  880.                         else if (args[1] == "os"){
  881.                             if (args[2] == undefined){
  882.                                 message.channel.send("Use `" + prefix + "role os [rolename]` to add/remove a role from yourself.\n"
  883.                                                    + "`windows`\n"
  884.                                                                      + "`mac` - Users of UTAU-Synth\n"
  885.                                                                      + "`macwine` - Users of Windows UTAU in Wine\n"
  886.                                                                      + "`linux`");
  887.                             }else if (args[2] == "windows"){
  888.                                 if (message.member.roles.has("372642443075649536")){
  889.                                     message.member.removeRole("372642443075649536");
  890.                                     if (message.member.roles.size == 2){
  891.                                         message.member.addRole("399813995109941248"); //Become visitor if no roles left
  892.                                     }
  893.                                     message.channel.send("Removed role: Windows");
  894.                                 }else{
  895.                                     message.member.addRole("372642443075649536");
  896.                                     message.channel.send("Added role: Windows");
  897.                                     if (message.member.roles.has("399813995109941248")){ //Auto remove visitor role
  898.                                         message.member.removeRole("399813995109941248");
  899.                                     }
  900.                                 }
  901.                             }else if (args[2] == "mac"){
  902.                                 if (message.member.roles.has("372642554979549184")){
  903.                                     message.member.removeRole("372642554979549184");
  904.                                     if (message.member.roles.size == 2){
  905.                                         message.member.addRole("399813995109941248"); //Become visitor if no roles left
  906.                                     }
  907.                                     message.channel.send("Removed role: Mac");
  908.                                 }else{
  909.                                     message.member.addRole("372642554979549184");
  910.                                     message.channel.send("Added role: Mac");
  911.                                     if (message.member.roles.has("399813995109941248")){ //Auto remove visitor role
  912.                                         message.member.removeRole("399813995109941248");
  913.                                     }
  914.                                 }
  915.                             }else if (args[2] == "macwine"){
  916.                                 if (message.member.roles.has("372642511442935810")){
  917.                                     message.member.removeRole("372642511442935810");
  918.                                     if (message.member.roles.size == 2){
  919.                                         message.member.addRole("399813995109941248"); //Become visitor if no roles left
  920.                                     }
  921.                                     message.channel.send("Removed role: Mac + Wine");
  922.                                 }else{
  923.                                     message.member.addRole("372642511442935810");
  924.                                     message.channel.send("Added role: Mac + Wine");
  925.                                     if (message.member.roles.has("399813995109941248")){ //Auto remove visitor role
  926.                                         message.member.removeRole("399813995109941248");
  927.                                     }
  928.                                 }
  929.                             }else if (args[2] == "linux"){
  930.                                 if (message.member.roles.has("372642615868260354")){
  931.                                     message.member.removeRole("372642615868260354");
  932.                                     if (message.member.roles.size == 2){
  933.                                         message.member.addRole("399813995109941248"); //Become visitor if no roles left
  934.                                     }
  935.                                     message.channel.send("Removed role: Linux");
  936.                                 }else{
  937.                                     message.member.addRole("372642615868260354");
  938.                                     message.channel.send("Added role: Linux");
  939.                                     if (message.member.roles.has("399813995109941248")){ //Auto remove visitor role
  940.                                         message.member.removeRole("399813995109941248");
  941.                                     }
  942.                                 }
  943.                             }else{
  944.                                 message.channel.send("Invalid command. Use `" + prefix + "role os` to view all available operating system roles.");
  945.                             }
  946.                         }
  947.                         else if (args[1] == "club"){
  948.                             if (args[2] == undefined){
  949.                                 message.channel.send("Use `" + prefix + "role club [rolename]` to add/remove a role from yourself.\n"
  950.                                                                      + "`gaming` - Playing and discussing video games (w/ voice channel)\n"
  951.                                                                      + "`singing` - Karaoke nights and singing discussion (w/ voice channel)\n"
  952.                                                                      + "`cooking` - Sharing photos and discussing recipes\n"
  953.                                                                      + "`language` - Studying and practicing different languages (w/ voice channel)\n"
  954.                                                                      + "`culture` - Sharing our cultures\n"
  955.                                                                      + "`roleplay` - UTAU roleplay with a continuous plotline\n"
  956.                                                                      + "`health` - Health and fitness club\n"
  957.                                                                      + "`review` - Reviewing UTAU voicebanks\n"
  958.                                                    + "KYE Fanclub - Automatic admission upon mentioning his name\n"
  959.                                                                      + "`ike` - Ike Kei Fanclub\n"
  960.                                                                      + "`sora` - Matsuo Sora Fanclub\n"
  961.                                                                      + "`shin` - Shinnosuke Hankyo Fanclub\n"
  962.                                                                      + "`cats` - Cat lovers club\n"
  963.                                                                      + "To form a new club, gather 7 interested members (incl. teacher or stuco) and notify Kiyoteru.");
  964.                             }
  965.                             else if (args[2] == "gaming"){
  966.                                 if (message.member.roles.has("414966301279256578")){
  967.                                     message.member.removeRole("414966301279256578");
  968.                                     if (message.member.roles.size == 2){
  969.                                         message.member.addRole("399813995109941248"); //Become visitor if no roles left
  970.                                     }
  971.                                     message.channel.send("Removed role: Gamer");
  972.                                 }else{
  973.                                     message.member.addRole("414966301279256578");
  974.                                     message.channel.send("Added role: Gamer");
  975.                                     if (message.member.roles.has("399813995109941248")){ //Auto remove visitor role
  976.                                         message.member.removeRole("399813995109941248");
  977.                                     }
  978.                                 }
  979.                             }
  980.                             else if (args[2] == "singing"){
  981.                                 if (message.member.roles.has("414730113263861761")){
  982.                                     message.member.removeRole("414730113263861761");
  983.                                     if (message.member.roles.size == 2){
  984.                                         message.member.addRole("399813995109941248"); //Become visitor if no roles left
  985.                                     }
  986.                                     message.channel.send("Removed role: Singer");
  987.                                 }else{
  988.                                     message.member.addRole("414730113263861761");
  989.                                     message.member.addRole("371188092989734924"); //DJ role
  990.                                     message.channel.send("Added role: Singer\nAdded role: DJ");
  991.                                     if (message.member.roles.has("399813995109941248")){ //Auto remove visitor role
  992.                                         message.member.removeRole("399813995109941248");
  993.                                     }
  994.                                 }
  995.                             }
  996.                             else if (args[2] == "cooking"){
  997.                                 if (message.member.roles.has("431057627762393088")){
  998.                                     message.member.removeRole("431057627762393088");
  999.                                     if (message.member.roles.size == 2){
  1000.                                         message.member.addRole("399813995109941248"); //Become visitor if no roles left
  1001.                                     }
  1002.                                     message.channel.send("Removed role: Cook");
  1003.                                 }else{
  1004.                                     message.member.addRole("431057627762393088");
  1005.                                     message.channel.send("Added role: Cook");
  1006.                                     if (message.member.roles.has("399813995109941248")){ //Auto remove visitor role
  1007.                                         message.member.removeRole("399813995109941248");
  1008.                                     }
  1009.                                 }
  1010.                             }
  1011.                             else if (args[2] == "language"){
  1012.                                 if (message.member.roles.has("433302253328269323")){
  1013.                                     message.member.removeRole("433302253328269323");
  1014.                                     if (message.member.roles.size == 2){
  1015.                                         message.member.addRole("399813995109941248"); //Become visitor if no roles left
  1016.                                     }
  1017.                                     message.channel.send("Removed role: Polyglot");
  1018.                                 }else{
  1019.                                     message.member.addRole("433302253328269323");
  1020.                                     message.channel.send("Added role: Polyglot");
  1021.                                     if (message.member.roles.has("399813995109941248")){ //Auto remove visitor role
  1022.                                         message.member.removeRole("399813995109941248");
  1023.                                     }
  1024.                                 }
  1025.                             }
  1026.                             else if (args[2] == "culture"){
  1027.                                 if (message.member.roles.has("433302302846353408")){
  1028.                                     message.member.removeRole("433302302846353408");
  1029.                                     if (message.member.roles.size == 2){
  1030.                                         message.member.addRole("399813995109941248"); //Become visitor if no roles left
  1031.                                     }
  1032.                                     message.channel.send("Removed role: Culture club");
  1033.                                 }else{
  1034.                                     message.member.addRole("433302302846353408");
  1035.                                     message.channel.send("Added role: Culture club");
  1036.                                     if (message.member.roles.has("399813995109941248")){ //Auto remove visitor role
  1037.                                         message.member.removeRole("399813995109941248");
  1038.                                     }
  1039.                                 }
  1040.                             }
  1041.                             else if (args[2] == "roleplay"){
  1042.                                 if (message.member.roles.has("433345214049157130")){
  1043.                                     message.member.removeRole("433345214049157130");
  1044.                                     if (message.member.roles.size == 2){
  1045.                                         message.member.addRole("399813995109941248"); //Become visitor if no roles left
  1046.                                     }
  1047.                                     message.channel.send("Removed role: Rolplayer");
  1048.                                 }else{
  1049.                                     message.member.addRole("433345214049157130");
  1050.                                     message.channel.send("Added role: Roleplayer");
  1051.                                     if (message.member.roles.has("399813995109941248")){ //Auto remove visitor role
  1052.                                         message.member.removeRole("399813995109941248");
  1053.                                     }
  1054.                                 }
  1055.                             }
  1056.                             else if (args[2] == "health"){
  1057.                                 if (message.member.roles.has("439808590610432021")){
  1058.                                     message.member.removeRole("439808590610432021");
  1059.                                     if (message.member.roles.size == 2){
  1060.                                         message.member.addRole("399813995109941248"); //Become visitor if no roles left
  1061.                                     }
  1062.                                     message.channel.send("Removed role: Health nut");
  1063.                                 }else{
  1064.                                     message.member.addRole("439808590610432021");
  1065.                                     message.channel.send("Added role: Health nut");
  1066.                                     if (message.member.roles.has("399813995109941248")){ //Auto remove visitor role
  1067.                                         message.member.removeRole("399813995109941248");
  1068.                                     }
  1069.                                 }
  1070.                             }
  1071.                             else if (args[2] == "review"){
  1072.                                 if (message.member.roles.has("439808543369986058")){
  1073.                                     message.member.removeRole("439808543369986058");
  1074.                                     if (message.member.roles.size == 2){
  1075.                                         message.member.addRole("399813995109941248"); //Become visitor if no roles left
  1076.                                     }
  1077.                                     message.channel.send("Removed role: VB reviewer");
  1078.                                 }else{
  1079.                                     message.member.addRole("439808543369986058");
  1080.                                     message.channel.send("Added role: VB reviewer");
  1081.                                     if (message.member.roles.has("399813995109941248")){ //Auto remove visitor role
  1082.                                         message.member.removeRole("399813995109941248");
  1083.                                     }
  1084.                                 }
  1085.                             }
  1086.                             else if (args[2] == "ike"){
  1087.                                 if (message.member.roles.has("429786320035119105")){
  1088.                                     message.member.removeRole("429786320035119105");
  1089.                                     if (message.member.roles.size == 2){
  1090.                                         message.member.addRole("399813995109941248"); //Become visitor if no roles left
  1091.                                     }
  1092.                                     message.channel.send("Removed role: Naki employee");
  1093.                                 }else{
  1094.                                     message.member.addRole("429786320035119105");
  1095.                                     message.channel.send("Added role: Naki employee");
  1096.                                     if (message.member.roles.has("399813995109941248")){ //Auto remove visitor role
  1097.                                         message.member.removeRole("399813995109941248");
  1098.                                     }
  1099.                                 }
  1100.                             }
  1101.                             else if (args[2] == "sora"){
  1102.                                 if (message.member.roles.has("433589463063724042")){
  1103.                                     message.member.removeRole("433589463063724042");
  1104.                                     if (message.member.roles.size == 2){
  1105.                                         message.member.addRole("399813995109941248"); //Become visitor if no roles left
  1106.                                     }
  1107.                                     message.channel.send("Removed role: Sora fan");
  1108.                                 }else{
  1109.                                     message.member.addRole("433589463063724042");
  1110.                                     message.channel.send("Added role: Sora fan");
  1111.                                     if (message.member.roles.has("399813995109941248")){ //Auto remove visitor role
  1112.                                         message.member.removeRole("399813995109941248");
  1113.                                     }
  1114.                                 }
  1115.                             }
  1116.                             else if (args[2] == "shin"){
  1117.                                 if (message.member.roles.has("440533848770609164")){
  1118.                                     message.member.removeRole("440533848770609164");
  1119.                                     if (message.member.roles.size == 2){
  1120.                                         message.member.addRole("399813995109941248"); //Become visitor if no roles left
  1121.                                     }
  1122.                                     message.channel.send("Removed role: Sora fan");
  1123.                                 }else{
  1124.                                     message.member.addRole("440533848770609164");
  1125.                                     message.channel.send("Added role: Sora fan");
  1126.                                     if (message.member.roles.has("399813995109941248")){ //Auto remove visitor role
  1127.                                         message.member.removeRole("399813995109941248");
  1128.                                     }
  1129.                                 }
  1130.                             }
  1131.                             else if (args[2] == "cats"){
  1132.                                 if (message.member.roles.has("430888635752251392")){
  1133.                                     message.member.removeRole("430888635752251392");
  1134.                                     if (message.member.roles.size == 2){
  1135.                                         message.member.addRole("399813995109941248"); //Become visitor if no roles left
  1136.                                     }
  1137.                                     message.channel.send("Removed role: Cat lover");
  1138.                                 }else{
  1139.                                     message.member.addRole("430888635752251392");
  1140.                                     message.channel.send("Added role: Cat lover");
  1141.                                     if (message.member.roles.has("399813995109941248")){ //Auto remove visitor role
  1142.                                         message.member.removeRole("399813995109941248");
  1143.                                     }
  1144.                                 }
  1145.                             }
  1146.                             else{
  1147.                                 message.channel.send("Invalid command. Use `" + prefix + "role club` to view all available clubs.\n"
  1148.                                                    + "To form a new club, gather 7 interested members (incl. teacher or stuco) and notify Kiyoteru.");
  1149.                             }
  1150.                         }
  1151.                         else{
  1152.                             message.channel.send("Invalid command. Use `" + prefix + "role` to view all role categories.");
  1153.                         }
  1154.                     }
  1155.                     else{
  1156.                         message.channel.send("This server does not have self-assignable roles.");
  1157.                     }
  1158.                 }
  1159.                 else{
  1160.                     message.channel.send("Invalid command. Use `" + prefix + "help` to view all commands.");
  1161.                 }
  1162.             break;
  1163.  
  1164.             case 'profile':
  1165.                 if (args[1] == undefined){ // L!profile
  1166.                     if (user.profile == ""){
  1167.                         message.channel.send("You have not set a profile.");
  1168.                     }else{
  1169.                         message.channel.send(user.profile + "\n\nPoints: " + user.points);
  1170.                     }
  1171.                 }
  1172.                 /*
  1173.                 else if (args[1].substring(0,3) == '<@&'){ // L!profile @role
  1174.                         message.channel.send("Roles don't have profiles.");
  1175.                 }
  1176.                 else if (args[1].substring(0,3) == '<@!') { // L!profile @mention
  1177.                     var mention = args[1].substring(3);
  1178.                     mention = mention.substring(0,mention.length-1);
  1179.                     if (mention == bot.user.id){
  1180.                         message.channel.send("Part bread, part robot.\n"
  1181.                                            + "I have eaten " + botData.points + " gacha points.\n"
  1182.                                                              + "Use `" + prefix + "help` to view all of my commands.", new Discord.Attachment(bot.user.displayAvatarURL.substring(0,bot.user.displayAvatarURL.length - 9)));
  1183.                     }else if (message.member.guild.members.get(mention).user.bot){
  1184.                         message.channel.send("Bots don't have profiles.");
  1185.                     }else{
  1186.                         var mentUser;
  1187.                         var noData = true;
  1188.                         for (var i = 0; i < userData.users.length; i++){
  1189.                             if (userData.users[i].id == mention){
  1190.                                 mentUser = userData.users[i];
  1191.                                 noData = false;
  1192.                             }
  1193.                         }
  1194.                         if (noData){
  1195.                             message.channel.send("That user is not registered in LofeBot.");
  1196.                         }
  1197.                         else if (mentUser.profile == ""){
  1198.                             message.channel.send("That user has not set a profile.\nPoints: " + mentUser.points);
  1199.                         }
  1200.                         else{
  1201.                             message.channel.send(mentUser.profile + "\n\nPoints: " + mentUser.points);
  1202.                         }
  1203.                     }
  1204.                 }
  1205.                 else if(args[1].substring(0,2) == '<@'){ // L!profile @mention
  1206.                     var mention = args[1].substring(2);
  1207.                     mention = mention.substring(0,mention.length-1);
  1208.                     if (mention == bot.user.id){
  1209.                         message.channel.send("Part bread, part robot.\n"
  1210.                                            + "I have eaten " + botData.points + " gacha points.\n"
  1211.                                                              + "Use `" + prefix + "help` to view all of my commands.", new Discord.Attachment(bot.user.displayAvatarURL.substring(0,bot.user.displayAvatarURL.length - 9)));
  1212.                     }else if (message.member.guild.members.get(mention).user.bot){
  1213.                         message.channel.send("Bots don't have profiles.");
  1214.                     }else{
  1215.                         var mentUser;
  1216.                         var noData = true;
  1217.                         for (var i = 0; i < userData.users.length; i++){
  1218.                             if (userData.users[i].id == mention){
  1219.                                 mentUser = userData.users[i];
  1220.                                 noData = false;
  1221.                             }
  1222.                         }
  1223.                         if (noData){
  1224.                             message.channel.send("That user is not registered in LofeBot.");
  1225.                         }
  1226.                         else if (mentUser.profile == ""){
  1227.                             message.channel.send("That user has not set a profile.\nPoints: " + mentUser.points);
  1228.                         }
  1229.                         else{
  1230.                             message.channel.send(mentUser.profile + "\n\nPoints: " + mentUser.points);
  1231.                         }
  1232.                     }
  1233.                 }
  1234.                 */
  1235.                 else if (args[1].substring(0,2) == "<@"){
  1236.                     var mentID;
  1237.                     var isRole;
  1238.                     if (args[1].substring(2,3) == "&"){
  1239.                         message.channel.send("Roles don't have profiles.");
  1240.                         isRole = true;
  1241.                     }
  1242.                     else if (args[1].substring(2,3) == "!"){
  1243.                         mentID = args[1].substring(3,args[1].length-1);
  1244.                         isRole = false;
  1245.                     }
  1246.                     else{
  1247.                         mentID = args[1].substring(2,args[1].length-1);
  1248.                         isRole = false;
  1249.                     }
  1250.                     if (!isRole){
  1251.                         var mentUser;
  1252.                         var noData = true;
  1253.                         for (var i = 0; i < userData.users.length; i++){
  1254.                             if (userData.users[i].id == mentID){
  1255.                                 mentUser = userData.users[i];
  1256.                                 noData = false;
  1257.                             }
  1258.                         }
  1259.                         if (noData){
  1260.                             message.channel.send("That user is not registered in LofeBot.");
  1261.                         }
  1262.                         else if (bot.users.get(mentID).bot) {
  1263.                             if (mentID == bot.user.id) {
  1264.                                 message.channel.send("Part bread, part robot.\n"
  1265.                                                    + "I have eaten " + botData.points + " gacha points.\n"
  1266.                                                                      + "Use `" + prefix + "help` to view all of my commands.", new Discord.Attachment(bot.user.displayAvatarURL.substring(0,bot.user.displayAvatarURL.length - 9)));
  1267.                             }
  1268.                             else if (mentID == 421869099421794308) {
  1269.                                 message.channel.send("I love Kiyoteru!!!!!");
  1270.                             }
  1271.                             else {
  1272.                                 message.channel.send("This bot does not have a profile.");
  1273.                             }
  1274.                         }
  1275.                         else if (mentUser.profile == ""){
  1276.                             message.channel.send("That user has not set a profile.\nPoints: " + mentUser.points);
  1277.                         }
  1278.                         else if (message.channel.type == "text" && message.guild.members.has(mentID)){
  1279.                             message.channel.send(mentUser.profile + "\n\nPoints: " + mentUser.points);
  1280.                         }
  1281.                         else {
  1282.                             message.channel.send("You can only check the profiles of other members in this server.");
  1283.                         }
  1284.                     }
  1285.                 }
  1286.                 else if (args[1] == "set"){ // L!profile set
  1287.                     var profMsg = "";
  1288.                     if (args[2] == undefined){
  1289.                         message.channel.send("Profile has been cleared.");
  1290.                     }else{
  1291.                         for(var i = 2; i < args.length; i++){
  1292.                             profMsg += args[i] + " ";
  1293.                         }
  1294.                         profMsg = profMsg.trim();
  1295.                         message.channel.send("Profile has been set.");
  1296.                     }
  1297.                     user.profile = profMsg;
  1298.                 }
  1299.                 else {
  1300.                     message.channel.send("Invalid command.  Use `" + prefix + "profile set (text)` or `" + prefix + "profile (@username)`.");
  1301.                 }
  1302.             break;
  1303.  
  1304.             case 'hug':
  1305.                 if (args[1] == undefined){
  1306.                     message.channel.send('Please mention a user.');
  1307.                 }else{
  1308.                     if (args[1].substring(0,3) == '<@!') {
  1309.                         var mention = args[1].substring(3);
  1310.                         mention = mention.substring(0,mention.length-1);
  1311.                         if (mention == message.author.id){
  1312.                             message.channel.send('I have given you a hug! :blush:');
  1313.                         }else if (mention == 386288945773674506){
  1314.                             message.channel.send('Thank you for hugging me! :blush:')
  1315.                         }else if (message.channel.type == "text"){
  1316.                             if (message.guild.members.has(mention)){
  1317.                                 message.channel.send(message.member.displayName + ' has given ' + message.guild.members.get(mention).displayName + ' a hug!');
  1318.                             }
  1319.                             else {
  1320.                                 message.channel.send('Unavailable to hug.');
  1321.                             }
  1322.                         }else{
  1323.                             message.channel.send('Unavailable to hug.');
  1324.                         }
  1325.                     }else if(args[1].substring(0,2) == '<@'){
  1326.                         var mention = args[1].substring(2);
  1327.                         mention = mention.substring(0,mention.length-1);
  1328.                         if (mention == message.author.id){
  1329.                             message.channel.send('I have given you a hug! :blush:');
  1330.                         }else if (mention == 386288945773674506){
  1331.                             message.channel.send('Thank you for hugging me! :blush:')
  1332.                         }else if (message.channel.type == "text"){
  1333.                             if (message.guild.members.has(mention)){
  1334.                                 message.channel.send(message.member.displayName + ' has given ' + message.guild.members.get(mention).displayName + ' a hug!');
  1335.                             }
  1336.                             else {
  1337.                                 message.channel.send('Unavailable to hug.');
  1338.                             }
  1339.                         }else{
  1340.                             message.channel.send('Unavailable to hug.');
  1341.                         }
  1342.                     }else{
  1343.                         message.channel.send('Please mention a user.');
  1344.                     }
  1345.                 }
  1346.             break;
  1347.  
  1348.             case 'points':
  1349.                 if (args[1] == undefined){
  1350.                     message.channel.send("You have " + user.points + " gacha points.");
  1351.                 }
  1352.                 else if (args[1].substring(0,2) == "<@"){
  1353.                     var mentID;
  1354.                     var isRole;
  1355.                     if (args[1].substring(2,3) == "&"){
  1356.                         message.channel.send("You cannot transfer points to roles.");
  1357.                         isRole = true;
  1358.                     }
  1359.                     else if (args[1].substring(2,3) == "!"){
  1360.                         mentID = args[1].substring(3,args[1].length-1);
  1361.                         isRole = false;
  1362.                     }
  1363.                     else{
  1364.                         mentID = args[1].substring(2,args[1].length-1);
  1365.                         isRole = false;
  1366.                     }
  1367.                     if (!isRole && bot.users.get(mentID).bot){
  1368.                         message.channel.send("You cannot transfer points to bots.");
  1369.                     }
  1370.                     else if (!isRole){
  1371.                         if (message.channel.type != "text") {
  1372.                             message.channel.send("You cannot transfer points in DMs.");
  1373.                         }
  1374.                         else if (mentID == message.author.id){
  1375.                             message.channel.send("You cannot transfer points to yourself.");
  1376.                         }
  1377.                         else if (!message.guild.members.has(mentID)) {
  1378.                             message.channel.send("You can only transfer points to members of this server.");
  1379.                         }
  1380.                         else if (args[2] > user.points){
  1381.                             var grossPts = Math.round(args[2]);
  1382.                             message.channel.send("You only have " + user.points + " gacha points. You cannot transfer " + grossPts + " points.");
  1383.                         }
  1384.                         else if (args[2] < 0) {
  1385.                             message.channel.send("Are you trying to steal points? Nice try.");
  1386.                         }
  1387.                         else if (args[2] == 0) {
  1388.                             message.channel.send("Please specify a number of points to transfer.");
  1389.                         }
  1390.                         else if (args[2] > 0 && args[2] <= user.points && message.channel.type == "text"){
  1391.                             var tax = 0.2;
  1392.                             var grossPts = Math.round(args[2]);
  1393.                             var taxPts = Math.round(grossPts*tax);
  1394.                             var netPts = Math.round(grossPts-taxPts);
  1395.                             user.points -= grossPts;
  1396.                             botData.points += grossPts;
  1397.                             var recipientPoints;
  1398.                             for (var i = 0; i < userData.users.length; i++){
  1399.                                 if (userData.users[i].id == mentID){
  1400.                                     userData.users[i].points += netPts;
  1401.                                     recipientPoints = userData.users[i].points;
  1402.                                     noData = false;
  1403.                                 }
  1404.                             }
  1405.                             if (noData){
  1406.                                 userData.users.push({
  1407.                                     "id": mentID,
  1408.                                     "profile": "",
  1409.                                     "points": netPts,
  1410.                                     "lastMsg": "",
  1411.                                     "spam": 1,
  1412.                                     "gachaDaily": false,
  1413.                                     "kiyoriiInv": 50,
  1414.                                     "defoStarsInv": 50,
  1415.                                     "twelveInv": 50,
  1416.                                     "spouse": 0,
  1417.                                     "weddingDate": 0,
  1418.                                     "pendingMarriage": []
  1419.                                 });
  1420.                                 recipientPoints = netPts;
  1421.                             }
  1422.                             var recipientNickname = message.guild.members.get(mentID).displayName;
  1423.                             var recipientUsername = message.guild.members.get(mentID).user.username;
  1424.                             var recipientTag = message.guild.members.get(mentID).user.tag;
  1425.                             message.channel.send("```diff\n"
  1426.                                                + "Transferring " + grossPts + " points to " + recipientNickname
  1427.                                                                  + "\n-" + taxPts + " points tax (" + tax*100 + "%)"
  1428.                                                                  + "\nFinal transfer amount: " + netPts + " points"
  1429.                                                                  + "```");
  1430.                             message.author.send("You have sent " + grossPts + " gacha points to " + recipientTag + "\n"
  1431.                                               + "You now have " + user.points + " gacha points.");
  1432.                             bot.users.get(mentID).send("You have received " + netPts + " gacha points from " + message.author.tag + "\n"
  1433.                                                      + "You now have " + recipientPoints + " gacha points.");
  1434.                         }
  1435.                         else{
  1436.                             message.channel.send("Please specify a number of points to transfer.");
  1437.                         }
  1438.                     }
  1439.                 }
  1440.                 else{
  1441.                     message.channel.send("You have " + user.points + " gacha points. To transfer points, use `" + prefix + "points @mention [number]`");
  1442.                 }
  1443.             break;
  1444.  
  1445.             case 'gacha':
  1446.                 if (message.channel.type == "text"){
  1447.                     var allCards, cardsN, cardsHN, cardsR, cardsSR, cardsUR; // Arrays for gacha cards
  1448.                     var stat1, stat2, stat3; // Strings, name of 3 card stats for viewing cards
  1449.                     var cardGame; // Boolean, whether or not the server uses gacha cards
  1450.                     var folder; // String, folder name for saving cards
  1451.                     var gameName; // String, for "your new cards are" and "you don't have any cards"
  1452.                     var invLimit; // Int, maximum inventory slots
  1453.                     if (message.guild.id == 264995832032395264){ //St Defoko's Idol Stars
  1454.                         allCards = $.csv.toArrays(fs.readFileSync(appDir + "/defoStarsCards.csv", "utf-8"));
  1455.                         cardsN = allCards.filter(card => card[1] == "N");
  1456.                         cardsHN = allCards.filter(card => card[1] == "HN");
  1457.                         cardsR = allCards.filter(card => card[1] == "R");
  1458.                         cardsSR = allCards.filter(card => card[1] == "SR");
  1459.                         cardsUR = allCards.filter(card => card[1] == "UR");
  1460.                         folder = appDir + "/defostars/";
  1461.                         gameName = "DefoStars";
  1462.                         stat1 = "Singing";
  1463.                         stat2 = "Intelligence";
  1464.                         stat3 = "Charm";
  1465.                         cardGame = true;
  1466.                         invLimit = user.defoStarsInv;
  1467.                     }else if (message.guild.id == 357552578705227778){ //Kiyorii
  1468.                         allCards = $.csv.toArrays(fs.readFileSync(appDir + "/kiyoriiCards.csv", "utf-8"));
  1469.                         cardsN = allCards.filter(card => card[1] == "N");
  1470.                         cardsHN = allCards.filter(card => card[1] == "HN");
  1471.                         cardsR = allCards.filter(card => card[1] == "R");
  1472.                         cardsSR = allCards.filter(card => card[1] == "SR");
  1473.                         cardsUR = allCards.filter(card => card[1] == "UR");
  1474.                         folder = appDir + "/kiyorii/";
  1475.                         gameName = "Kiyorii";
  1476.                         stat1 = "Responsibility";
  1477.                         stat2 = "Charm";
  1478.                         stat3 = "Violence";
  1479.                         cardGame = true;
  1480.                         invLimit = user.kiyoriiInv;
  1481.                     }else if (message.guild.id == 385927196058845195){ //TWELVE
  1482.                         allCards = $.csv.toArrays(fs.readFileSync(appDir + "/twelveCards.csv", "utf-8"));
  1483.                         cardsN = allCards.filter(card => card[1] == "N");
  1484.                         cardsHN = allCards.filter(card => card[1] == "HN");
  1485.                         cardsR = allCards.filter(card => card[1] == "R");
  1486.                         cardsSR = allCards.filter(card => card[1] == "SR");
  1487.                         cardsUR = allCards.filter(card => card[1] == "UR");
  1488.                         folder = appDir + "/twelve/";
  1489.                         gameName = "TWELVE";
  1490.                         stat1 = "A";
  1491.                         stat2 = "B";
  1492.                         stat3 = "C";
  1493.                         cardGame = true;
  1494.                         invLimit = user.twelveInv;
  1495.                     }else{
  1496.                         cardGame = false;
  1497.                     }
  1498.                     if (cardGame){
  1499.                         var inventory;
  1500.                         try {
  1501.                             inventory = $.csv.toArrays(fs.readFileSync(folder + message.author.id + ".csv", "utf-8"));
  1502.                         }catch (err){
  1503.                             inventory = [];
  1504.                         }
  1505.                         switch(args[1]){
  1506.                             case 'pull':
  1507.                                 if (args[2] >= 1 && args[2] <= 10){
  1508.                                     var pulls = parseInt(args[2]);
  1509.                                     if (pulls + inventory.length > invLimit){
  1510.                                         message.channel.send("You have " + (invLimit - inventory.length) + " empty inventory slot(s). You need " + (pulls + inventory.length - invLimit) + " more slot(s) to pull " + pulls + " card(s).");
  1511.                                     }else{
  1512.                                         var cost = 0; // Gacha point cost per card pulled, varies per tier
  1513.                                         var highRatio = 0; // Probability of higher rarity per tier
  1514.                                         var newCards = [];
  1515.                                         switch(args[3]){
  1516.                                             case 'NHN':
  1517.                                                 if (cardsN[0][2] == "" || cardsHN[0][2] == ""){
  1518.                                                     message.channel.send("Normal/High Normal gacha is not yet available.");
  1519.                                                 }else{
  1520.                                                     cost = 100;
  1521.                                                     highRatio = 0.2;
  1522.                                                     if (pulls*cost > user.points){
  1523.                                                         message.channel.send("You have " + user.points + " gacha points. You need " + (pulls*cost - user.points) + " more points to pull " + pulls + " card(s).");
  1524.                                                     }else{
  1525.                                                         var result = "Your new " + gameName + " cards are:\n";
  1526.                                                         for (i = 0; i < pulls; i++){
  1527.                                                             if (Math.random() < highRatio){
  1528.                                                                 var chosen = Math.floor(Math.random() * cardsHN.length);
  1529.                                                                 result += "HN " + cardsHN[chosen][2] + "\n";
  1530.                                                                 newCards.push(cardsHN[chosen].slice(0,2).concat(cardsHN[chosen].slice(4)));
  1531.                                                             }else{
  1532.                                                                 var chosen = Math.floor(Math.random() * cardsN.length);
  1533.                                                                 result += "N " + cardsN[chosen][2] + "\n";
  1534.                                                                 newCards.push(cardsN[chosen].slice(0,2).concat(cardsN[chosen].slice(4)));
  1535.                                                             }
  1536.                                                         }
  1537.                                                         if (pulls == 10){
  1538.                                                             var chosen = Math.floor(Math.random() * cardsHN.length);
  1539.                                                             result += "Bonus card: HN " + cardsHN[chosen][2] + "\n";
  1540.                                                             newCards.push(cardsHN[chosen].slice(0,2).concat(cardsHN[chosen].slice(4)));
  1541.                                                         }
  1542.                                                         user.points -= pulls*cost;
  1543.                                                         botData.points += pulls*cost;
  1544.                                                         result += "You spent " + pulls*cost + " gacha points. You have " + (user.points) + " gacha points remaining.";
  1545.                                                         fs.appendFileSync(folder + message.author.id + ".csv", $.csv.fromArrays(newCards));
  1546.                                                         message.channel.send(result);
  1547.                                                     }
  1548.                                                 }
  1549.                                             break;
  1550.                                             case 'HNR':
  1551.                                                 if (cardsHN[0][2] == "" || cardsR[0][2] == ""){
  1552.                                                     message.channel.send("High Normal/Rare gacha is not yet available.");
  1553.                                                 }else{
  1554.                                                     cost = 200;
  1555.                                                     highRatio = 0.2;
  1556.                                                     if (pulls*cost > user.points){
  1557.                                                         message.channel.send("You have " + user.points + " gacha points. You need " + (pulls*cost - user.points) + " more points to pull " + pulls + " card(s).");
  1558.                                                     }else{
  1559.                                                         var result = "Your new " + gameName + " cards are:\n";
  1560.                                                         for (i = 0; i < pulls; i++){
  1561.                                                             if (Math.random() < highRatio){
  1562.                                                                 var chosen = Math.floor(Math.random() * cardsR.length);
  1563.                                                                 result += "R " + cardsR[chosen][2] + "\n";
  1564.                                                                 newCards.push(cardsR[chosen].slice(0,2).concat(cardsR[chosen].slice(4)));
  1565.                                                             }else{
  1566.                                                                 var chosen = Math.floor(Math.random() * cardsHN.length);
  1567.                                                                 result += "HN " + cardsHN[chosen][2] + "\n";
  1568.                                                                 newCards.push(cardsHN[chosen].slice(0,2).concat(cardsHN[chosen].slice(4)));
  1569.                                                             }
  1570.                                                         }
  1571.                                                         if (pulls == 10){
  1572.                                                             var chosen = Math.floor(Math.random() * cardsR.length);
  1573.                                                             result += "Bonus card: R " + cardsR[chosen][2] + "\n";
  1574.                                                             newCards.push(cardsR[chosen].slice(0,2).concat(cardsR[chosen].slice(4)));
  1575.                                                         }
  1576.                                                         user.points -= pulls*cost;
  1577.                                                         botData.points += pulls*cost;
  1578.                                                         result += "You spent " + pulls*cost + " gacha points. You have " + (user.points) + " gacha points remaining.";
  1579.                                                         fs.appendFileSync(folder + message.author.id + ".csv",$.csv.fromArrays(newCards));
  1580.                                                         message.channel.send(result);
  1581.                                                     }
  1582.                                                 }
  1583.                                             break;
  1584.                                             case 'RSR':
  1585.                                                 if (cardsR[0][2] == "" || cardsSR[0][2] == ""){
  1586.                                                     message.channel.send("Rare/Super Rare gacha is not yet available.");
  1587.                                                 }else{
  1588.                                                     cost = 300;
  1589.                                                     highRatio = 0.2;
  1590.                                                     if (pulls*cost > user.points){
  1591.                                                         message.channel.send("You have " + user.points + " gacha points. You need " + (pulls*cost - user.points) + " more points to pull " + pulls + " card(s).");
  1592.                                                     }else{
  1593.                                                         var result = "Your new " + gameName + " cards are:\n";
  1594.                                                         for (i = 0; i < pulls; i++){
  1595.                                                             if (Math.random() < highRatio){
  1596.                                                                 var chosen = Math.floor(Math.random() * cardsSR.length);
  1597.                                                                 result += "SR " + cardsSR[chosen][2] + "\n";
  1598.                                                                 newCards.push(cardsSR[chosen].slice(0,2).concat(cardsSR[chosen].slice(4)));
  1599.                                                             }else{
  1600.                                                                 var chosen = Math.floor(Math.random() * cardsR.length);
  1601.                                                                 result += "R " + cardsR[chosen][2] + "\n";
  1602.                                                                 newCards.push(cardsR[chosen].slice(0,2).concat(cardsR[chosen].slice(4)));
  1603.                                                             }
  1604.                                                         }
  1605.                                                         if (pulls == 10){
  1606.                                                             var chosen = Math.floor(Math.random() * cardsSR.length);
  1607.                                                             result += "Bonus card: SR " + cardsSR[chosen][2] + "\n";
  1608.                                                             newCards.push(cardsSR[chosen].slice(0,2).concat(cardsSR[chosen].slice(4)));
  1609.                                                         }
  1610.                                                         user.points -= pulls*cost;
  1611.                                                         botData.points += pulls*cost;
  1612.                                                         result += "You spent " + pulls*cost + " gacha points. You have " + (user.points) + " gacha points remaining.";
  1613.                                                         fs.appendFileSync(folder + message.author.id + ".csv",$.csv.fromArrays(newCards));
  1614.                                                         message.channel.send(result);
  1615.                                                     }
  1616.                                                 }
  1617.                                             break;
  1618.                                             case 'SRUR':
  1619.                                                 if (cardsSR[0][2] == "" || cardsUR[0][2] == ""){
  1620.                                                     message.channel.send("Super Rare/Ultra Rare gacha is not yet available.");
  1621.                                                 }else{
  1622.                                                     cost = 400;
  1623.                                                     highRatio = 0.2;
  1624.                                                     if (pulls*cost > user.points){
  1625.                                                         message.channel.send("You have " + user.points + " gacha points. You need " + (pulls*cost - user.points) + " more points to pull " + pulls + " card(s).");
  1626.                                                     }else{
  1627.                                                         var result = "Your new " + gameName + " cards are:\n";
  1628.                                                         for (i = 0; i < pulls; i++){
  1629.                                                             if (Math.random() < highRatio){
  1630.                                                                 var chosen = Math.floor(Math.random() * cardsUR.length);
  1631.                                                                 result += "UR " + cardsUR[chosen][2] + "\n";
  1632.                                                                 newCards.push(cardsUR[chosen].slice(0,2).concat(cardsUR[chosen].slice(4)));
  1633.                                                             }else{
  1634.                                                                 var chosen = Math.floor(Math.random() * cardsSR.length);
  1635.                                                                 result += "SR " + cardsSR[chosen][2] + "\n";
  1636.                                                                 newCards.push(cardsSR[chosen].slice(0,2).concat(cardsSR[chosen].slice(4)));
  1637.                                                             }
  1638.                                                         }
  1639.                                                         if (pulls == 10){
  1640.                                                             var chosen = Math.floor(Math.random() * cardsUR.length);
  1641.                                                             result += "Bonus card: UR " + cardsUR[chosen][2] + "\n";
  1642.                                                             newCards.push(cardsUR[chosen].slice(0,2).concat(cardsUR[chosen].slice(4)));
  1643.                                                         }
  1644.                                                         user.points -= pulls*cost;
  1645.                                                         botData.points += pulls*cost;
  1646.                                                         result += "You spent " + pulls*cost + " gacha points. You have " + (user.points) + " gacha points remaining.";
  1647.                                                         fs.appendFileSync(folder + message.author.id + ".csv",$.csv.fromArrays(newCards));
  1648.                                                         message.channel.send(result);
  1649.                                                     }
  1650.                                                 }
  1651.                                             break;
  1652.                                             default:
  1653.                                                 message.channel.send("Please specify a gacha tier.");
  1654.                                         }
  1655.                                     }
  1656.                                 }else{
  1657.                                     message.channel.send("Please pull 1 - 10 cards.");
  1658.                                 }
  1659.                             break;
  1660.                             case 'view':
  1661.                                 if (args[2] == undefined){
  1662.                                     if (inventory.length > 0){
  1663.                                         var list = "Use `" + prefix + "gacha view (number)` to see more details about a specific card.\n";
  1664.                                         for (var i = 0; i < inventory.length; i++){
  1665.                                             for (var j = 0; j < allCards.length; j++){
  1666.                                                 if (allCards[j][0] == inventory[i][0]){
  1667.                                                     list += (i+1) + ". " + inventory[i][1] + " " + allCards[j][2] + "\n";
  1668.                                                 }
  1669.                                             }
  1670.                                         }
  1671.                                         list = Discord.Util.splitMessage(list);
  1672.                                         if (list.constructor === Array){
  1673.                                             for (var i = 0; i < list.length; i ++){
  1674.                                                 message.channel.send(list[i]);
  1675.                                             }
  1676.                                         }else{
  1677.                                             message.channel.send(list);
  1678.                                         }
  1679.                                     }else{
  1680.                                         message.channel.send("You do not have any " + gameName + " cards.");
  1681.                                     }
  1682.                                 }else if (args[2] > 0 && args[2] <= inventory.length){
  1683.                                     var select = args[2]-1;
  1684.                                     var name;
  1685.                                     var img;
  1686.                                     for (var i = 0; i < allCards.length; i++){
  1687.                                         if (allCards[i][0] == inventory[select][0]){
  1688.                                             name = allCards[i][2];
  1689.                                             img = allCards[i][3];
  1690.                                         }
  1691.                                     }
  1692.                                     message.channel.send(inventory[select][1] + " " + name
  1693.                                                        + "\nLevel: " + inventory[select][2]
  1694.                                                                          + "\n"+stat1+": " + inventory[select][3]
  1695.                                                                          + "\n"+stat2+": " + inventory[select][4]
  1696.                                                                          + "\n"+stat3+": " + inventory[select][5], new Discord.Attachment(img));
  1697.                                 }else{
  1698.                                     message.channel.send("Use `" + prefix + "gacha view` to view all cards or `" + prefix + "gacha view (number)` to view a specific card.");
  1699.                                 }
  1700.                             break;
  1701.                             case 'sell':
  1702.                                 var markdown = 0.7;
  1703.                                 var price = 0; //varies per tier, must match common tier price
  1704.                                 if (args[2] > 0 && args[2] <= inventory.length){
  1705.                                     var select = args[2]-1;
  1706.                                     if (inventory[select][1] == "UR" || inventory[select][1] == "UR+"){
  1707.                                         message.channel.send("You cannot sell UR cards.");
  1708.                                     }else if (inventory[select][1] == "SR+"){
  1709.                                         price = 400;
  1710.                                         user.points += price;
  1711.                                         botData.points -= price;
  1712.                                         var cardName;
  1713.                                         for (var i = 0; i < allCards.length; i++){
  1714.                                             if (allCards[i][0] == inventory[select][0]){
  1715.                                                 cardName = allCards[i][2];
  1716.                                             }
  1717.                                         }
  1718.                                         message.channel.send("You have sold SR+ " + cardName + " for " + price + " gacha points.\n"
  1719.                                                            + "You now have " + user.points + " gacha points.");
  1720.                                         inventory.splice(select,1);
  1721.                                         fs.writeFileSync(folder + message.author.id + ".csv", $.csv.fromArrays(inventory));
  1722.                                     }else if (inventory[select][1] == "SR"){
  1723.                                         price = 400;
  1724.                                         user.points += Math.round(price*markdown);
  1725.                                         botData.points -= Math.round(price*markdown);
  1726.                                         var cardName;
  1727.                                         for (var i = 0; i < allCards.length; i++){
  1728.                                             if (allCards[i][0] == inventory[select][0]){
  1729.                                                 cardName = allCards[i][2];
  1730.                                             }
  1731.                                         }
  1732.                                         message.channel.send("You have sold SR " + cardName + " for " + Math.round(price*markdown) + " gacha points.\n"
  1733.                                                            + "You now have " + user.points + " gacha points.");
  1734.                                         inventory.splice(select,1);
  1735.                                         fs.writeFileSync(folder + message.author.id + ".csv", $.csv.fromArrays(inventory));
  1736.                                     }else if (inventory[select][1] == "R+"){
  1737.                                         price = 300;
  1738.                                         user.points += price;
  1739.                                         botData.points -= price;
  1740.                                         var cardName;
  1741.                                         for (var i = 0; i < allCards.length; i++){
  1742.                                             if (allCards[i][0] == inventory[select][0]){
  1743.                                                 cardName = allCards[i][2];
  1744.                                             }
  1745.                                         }
  1746.                                         message.channel.send("You have sold R+ " + cardName + " for " + price + " gacha points.\n"
  1747.                                                            + "You now have " + user.points + " gacha points.");
  1748.                                         inventory.splice(select,1);
  1749.                                         fs.writeFileSync(folder + message.author.id + ".csv", $.csv.fromArrays(inventory));
  1750.  
  1751.                                     }else if (inventory[select][1] == "R"){
  1752.                                         price = 300;
  1753.                                         user.points += Math.round(price*markdown);
  1754.                                         botData.points -= Math.round(price*markdown);
  1755.                                         var cardName;
  1756.                                         for (var i = 0; i < allCards.length; i++){
  1757.                                             if (allCards[i][0] == inventory[select][0]){
  1758.                                                 cardName = allCards[i][2];
  1759.                                             }
  1760.                                         }
  1761.                                         message.channel.send("You have sold R " + cardName + " for " + Math.round(price*markdown) + " gacha points.\n"
  1762.                                                            + "You now have " + user.points + " gacha points.");
  1763.                                         inventory.splice(select,1);
  1764.                                         fs.writeFileSync(folder + message.author.id + ".csv", $.csv.fromArrays(inventory));
  1765.  
  1766.                                     }else if (inventory[select][1] == "HN+"){
  1767.                                         price = 200;
  1768.                                         user.points += price;
  1769.                                         botData.points -= price;
  1770.                                         var cardName;
  1771.                                         for (var i = 0; i < allCards.length; i++){
  1772.                                             if (allCards[i][0] == inventory[select][0]){
  1773.                                                 cardName = allCards[i][2];
  1774.                                             }
  1775.                                         }
  1776.                                         message.channel.send("You have sold HN+ " + cardName + " for " + price + " gacha points.\n"
  1777.                                                            + "You now have " + user.points + " gacha points.");
  1778.                                         inventory.splice(select,1);
  1779.                                         fs.writeFileSync(folder + message.author.id + ".csv", $.csv.fromArrays(inventory));
  1780.  
  1781.                                     }else if (inventory[select][1] == "HN"){
  1782.                                         price = 200;
  1783.                                         user.points += Math.round(price*markdown);
  1784.                                         botData.points -= Math.round(price*markdown);
  1785.                                         var cardName;
  1786.                                         for (var i = 0; i < allCards.length; i++){
  1787.                                             if (allCards[i][0] == inventory[select][0]){
  1788.                                                 cardName = allCards[i][2];
  1789.                                             }
  1790.                                         }
  1791.                                         message.channel.send("You have sold HN " + cardName + " for " + Math.round(price*markdown) + " gacha points.\n"
  1792.                                                            + "You now have " + user.points + " gacha points.");
  1793.                                         inventory.splice(select,1);
  1794.                                         fs.writeFileSync(folder + message.author.id + ".csv", $.csv.fromArrays(inventory));
  1795.  
  1796.                                     }else if (inventory[select][1] == "N+"){
  1797.                                         price = 100;
  1798.                                         user.points += price;
  1799.                                         botData.points -= price;
  1800.                                         var cardName;
  1801.                                         for (var i = 0; i < allCards.length; i++){
  1802.                                             if (allCards[i][0] == inventory[select][0]){
  1803.                                                 cardName = allCards[i][2];
  1804.                                             }
  1805.                                         }
  1806.                                         message.channel.send("You have sold N+ " + cardName + " for " + price + " gacha points.\n"
  1807.                                                            + "You now have " + user.points + " gacha points.");
  1808.                                         inventory.splice(select,1);
  1809.                                         fs.writeFileSync(folder + message.author.id + ".csv", $.csv.fromArrays(inventory));
  1810.                                     }else if (inventory[select][1] == "N"){
  1811.                                         price = 100;
  1812.                                         user.points += Math.round(price*markdown);
  1813.                                         botData.points -= Math.round(price*markdown);
  1814.                                         var cardName;
  1815.                                         for (var i = 0; i < allCards.length; i++){
  1816.                                             if (allCards[i][0] == inventory[select][0]){
  1817.                                                 cardName = allCards[i][2];
  1818.                                             }
  1819.                                         }
  1820.                                         message.channel.send("You have sold N " + cardName + " for " + Math.round(price*markdown) + " gacha points.\n"
  1821.                                                            + "You now have " + user.points + " gacha points.");
  1822.                                         inventory.splice(select,1);
  1823.                                         fs.writeFileSync(folder + message.author.id + ".csv", $.csv.fromArrays(inventory));
  1824.                                     }
  1825.                                 }else if(args[2] == "N") {
  1826.                                     price = 100;
  1827.                                     var sold = [];
  1828.                                     var counter = 0;
  1829.                                     var result = "You have sold:\n";
  1830.                                     while (counter < inventory.length){
  1831.                                         if (inventory[counter][1] == "N"){
  1832.                                             sold.push(inventory[counter]);
  1833.                                             for (var i = 0; i < allCards.length; i++){
  1834.                                                 if (allCards[i][0] == inventory[counter][0]){
  1835.                                                     result += "N " + allCards[i][2] + "\n";
  1836.                                                 }
  1837.                                             }
  1838.                                             inventory.splice(counter,1);
  1839.                                         }else{
  1840.                                             counter++;
  1841.                                         }
  1842.                                     }
  1843.                                     if (sold.length == 0){
  1844.                                         message.channel.send("You do not have any Normal cards.");
  1845.                                     }else{
  1846.                                         user.points += Math.round(price*markdown*sold.length);
  1847.                                         botData.points -= Math.round(price*markdown*sold.length);
  1848.                                         result += "for a total of " + Math.round(price*markdown*sold.length) + " gacha points.\n"
  1849.                                                 + "You now have " + user.points + " gacha points.";
  1850.                                         fs.writeFileSync(folder + message.author.id + ".csv", $.csv.fromArrays(inventory));
  1851.                                         message.channel.send(result);
  1852.                                     }
  1853.                                 }else if(args[2] == "N+") {
  1854.                                     price = 100;
  1855.                                     var sold = [];
  1856.                                     var counter = 0;
  1857.                                     var result = "You have sold:\n";
  1858.                                     while (counter < inventory.length){
  1859.                                         if (inventory[counter][1] == "N+"){
  1860.                                             sold.push(inventory[counter]);
  1861.                                             for (var i = 0; i < allCards.length; i++){
  1862.                                                 if (allCards[i][0] == inventory[counter][0]){
  1863.                                                     result += "N+ " + allCards[i][2] + "\n";
  1864.                                                 }
  1865.                                             }
  1866.                                             inventory.splice(counter,1);
  1867.                                         }else{
  1868.                                             counter++;
  1869.                                         }
  1870.                                     }
  1871.                                     if (sold.length == 0){
  1872.                                         message.channel.send("You do not have any Normal+ cards.");
  1873.                                     }else{
  1874.                                         user.points += Math.round(price*sold.length);
  1875.                                         botData.points -= Math.round(price*sold.length);
  1876.                                         result += "for a total of " + Math.round(price*sold.length) + " gacha points.\n"
  1877.                                                 + "You now have " + user.points + " gacha points.";
  1878.                                         fs.writeFileSync(folder + message.author.id + ".csv", $.csv.fromArrays(inventory));
  1879.                                         message.channel.send(result);
  1880.                                     }
  1881.                                 }else if(args[2] == "HN") {
  1882.                                     price = 200;
  1883.                                     var sold = [];
  1884.                                     var counter = 0;
  1885.                                     var result = "You have sold:\n";
  1886.                                     while (counter < inventory.length){
  1887.                                         if (inventory[counter][1] == "HN"){
  1888.                                             sold.push(inventory[counter]);
  1889.                                             for (var i = 0; i < allCards.length; i++){
  1890.                                                 if (allCards[i][0] == inventory[counter][0]){
  1891.                                                     result += "HN " + allCards[i][2] + "\n";
  1892.                                                 }
  1893.                                             }
  1894.                                             inventory.splice(counter,1);
  1895.                                         }else{
  1896.                                             counter++;
  1897.                                         }
  1898.                                     }
  1899.                                     if (sold.length == 0){
  1900.                                         message.channel.send("You do not have any High Normal cards.");
  1901.                                     }else{
  1902.                                         user.points += Math.round(price*markdown*sold.length);
  1903.                                         botData.points -= Math.round(price*markdown*sold.length);
  1904.                                         result += "for a total of " + Math.round(price*markdown*sold.length) + " gacha points.\n"
  1905.                                                 + "You now have " + user.points + " gacha points.";
  1906.                                         fs.writeFileSync(folder + message.author.id + ".csv", $.csv.fromArrays(inventory));
  1907.                                         message.channel.send(result);
  1908.                                     }
  1909.                                 }else if(args[2] == "HN+") {
  1910.                                     price = 200;
  1911.                                     var sold = [];
  1912.                                     var counter = 0;
  1913.                                     var result = "You have sold:\n";
  1914.                                     while (counter < inventory.length){
  1915.                                         if (inventory[counter][1] == "HN+"){
  1916.                                             sold.push(inventory[counter]);
  1917.                                             for (var i = 0; i < allCards.length; i++){
  1918.                                                 if (allCards[i][0] == inventory[counter][0]){
  1919.                                                     result += "HN+ " + allCards[i][2] + "\n";
  1920.                                                 }
  1921.                                             }
  1922.                                             inventory.splice(counter,1);
  1923.                                         }else{
  1924.                                             counter++;
  1925.                                         }
  1926.                                     }
  1927.                                     if (sold.length == 0){
  1928.                                         message.channel.send("You do not have any High Normal+ cards.");
  1929.                                     }else{
  1930.                                         user.points += Math.round(price*sold.length);
  1931.                                         botData.points -= Math.round(price*sold.length);
  1932.                                         result += "for a total of " + Math.round(price*sold.length) + " gacha points.\n"
  1933.                                                 + "You now have " + user.points + " gacha points.";
  1934.                                         fs.writeFileSync(folder + message.author.id + ".csv", $.csv.fromArrays(inventory));
  1935.                                         message.channel.send(result);
  1936.                                     }
  1937.                                 }else if (args[2] == "R" || args[2] == "R+" || args[2] == "SR" || args[2] == "SR+" || args[2] == "UR" || args[2] == "UR+" ) {
  1938.                                     message.channel.send("You can only batch-sell Normal and High Normal cards.");
  1939.                                 }else if (inventory.length == 0){
  1940.                                     message.channel.send("You do not have any " + gameName + " cards.");
  1941.                                 }else{
  1942.                                     message.channel.send("Please specify a card to sell with `" + prefix + "gacha sell [number]` or `" + prefix + "gacha sell [rarity]`. Use `" + prefix + "gacha view` to view all cards and card numbers.\n"
  1943.                                                        + "__Payout:__\n"
  1944.                                                                          + "N - 70pts\n"
  1945.                                                                          + "N+ - 100pts\n"
  1946.                                                                          + "HN - 140pts\n"
  1947.                                                                          + "HN+ - 200pts\n"
  1948.                                                                          + "R - 210pts\n"
  1949.                                                                          + "R+ - 300pts\n"
  1950.                                                                          + "SR - 280pts\n"
  1951.                                                                          + "SR+ - 400pts\n"
  1952.                                                                          + "UR/UR+ - Cannot be sold");
  1953.                                 }
  1954.                             break;
  1955.                             case 'idolize':
  1956.                                 var price = 200; //cost to idolize 1 card
  1957.                                 if (user.points >= price){
  1958.                                     if (args[2] > 0 && args[2] <= inventory.length){
  1959.                                         if (args[2] == args[3]){
  1960.                                             message.channel.send("The secondary card must be a separate card. Use `" + prefix + "gacha view` to view all cards and card numbers.");
  1961.                                         }
  1962.                                         else if (args[3] > 0 && args[3] <= inventory.length){
  1963.                                             var primary = args[2]-1;
  1964.                                             var secondary = args[3]-1;
  1965.                                             var oldStat1 = inventory[primary][3];
  1966.                                             var oldStat2 = inventory[primary][4];
  1967.                                             var oldStat3 = inventory[primary][5];
  1968.                                             if (inventory[primary][1].substr(inventory[primary][1].length-1,1) == "+" || inventory[secondary][1].substr(inventory[secondary][1].length-1,1) == "+"){
  1969.                                                 message.channel.send("A card you have selected is already idolized.");
  1970.                                             }
  1971.                                             else if (inventory[primary][0] == inventory[secondary][0]){
  1972.                                                 inventory[primary][0] = parseInt(inventory[primary][0])+1; // update ID
  1973.                                                 inventory[primary][1] += "+"; //update rarity
  1974.                                                 inventory[primary][3] = parseInt(inventory[primary][3]) + Math.round(parseInt(inventory[secondary][3])/2); // add half of secondary stat1
  1975.                                                 inventory[primary][4] = parseInt(inventory[primary][4]) + Math.round(parseInt(inventory[secondary][4])/2); // add half of secondary stat2
  1976.                                                 inventory[primary][5] = parseInt(inventory[primary][5]) + Math.round(parseInt(inventory[secondary][5])/2); // add half of secondary stat3
  1977.                                                 inventory.splice(secondary,1); //remove secondary card
  1978.                                                 user.points -= price;
  1979.                                                 botData.points += price;
  1980.                                                 var origCard, idolizedCard, img;
  1981.                                                 for (var i = 0; i < allCards.length; i++){
  1982.                                                     if (allCards[i][0] == inventory[primary][0]){
  1983.                                                         origCard = allCards[i-1];
  1984.                                                         idolizedCard = allCards[i];
  1985.                                                         img = allCards[i][3];
  1986.                                                     }
  1987.                                                 }
  1988.                                                 message.channel.send(origCard[1] + " " + origCard[2] + " has been idolized into " + idolizedCard[1] + " " + idolizedCard[2] + "!\n"
  1989.                                                                    + stat1 + ": " + oldStat1 + "→" + inventory[primary][3] + "\n"
  1990.                                                                                      + stat2 + ": " + oldStat2 + "→" + inventory[primary][4] + "\n"
  1991.                                                                                      + stat3 + ": " + oldStat3 + "→" + inventory[primary][5] + "\n"
  1992.                                                                                      + "You spent " + price + " gacha points. You have " + user.points + " remaining.", new Discord.Attachment(img));
  1993.                                                 fs.writeFileSync(folder + message.author.id + ".csv", $.csv.fromArrays(inventory));
  1994.                                             }
  1995.                                             else{
  1996.                                                 message.channel.send("The primary and secondary card must be the same. Use `" + prefix + "gacha view` to view all cards and card numbers.");
  1997.                                             }
  1998.                                         }
  1999.                                         else if (inventory.length == 0){
  2000.                                             message.channel.send("You do not have any " + gameName + " cards.");
  2001.                                         }
  2002.                                         else{
  2003.                                             message.channel.send("Please specify the secondary card to idolize with.");
  2004.                                         }
  2005.                                     }else{
  2006.                                         message.channel.send("Please specify a card to idolize with `" + prefix + "gacha idolize [primary card #] [secondary card #]`.");
  2007.                                     }
  2008.                                 }else{
  2009.                                     message.channel.send("You have " + user.points + " gacha points. You need " + (price-user.points) + " more points to idolize a card.");
  2010.                                 }
  2011.                             break;
  2012.                             case 'expand':
  2013.                                 var price = 100; //cost to buy 10 slots
  2014.                                 if (user.points >= price){
  2015.                                     var oldLimit = invLimit;
  2016.                                     if (gameName == "DefoStars"){
  2017.                                         user.defoStarsInv += 10;
  2018.                                         invLimit = user.defoStarsInv;
  2019.                                     }else if (gameName == "Kiyorii"){
  2020.                                         user.kiyoriiInv += 10;
  2021.                                         invLimit = user.kiyoriiInv;
  2022.                                     }else if (gameName == "TWELVE"){
  2023.                                         user.twelveInv += 10;
  2024.                                         invLimit = user.twelveInv;
  2025.                                     }
  2026.                                     user.points -= 100;
  2027.                                     botData.points += 100;
  2028.                                     message.channel.send("Inventory expanded from " + oldLimit + " slots to " + invLimit + " slots.\n"
  2029.                                                        + "You spent " + price + " gacha points. You have " + user.points + " remaining.");
  2030.                                 }else{
  2031.                                     message.channel.send("You have " + user.points + " gacha points. You need " + (price-user.points) + " more points to buy 10 inventory slots.");
  2032.                                 }
  2033.                             break;
  2034.                             default:
  2035.                                 message.channel.send("Invalid command. The available gacha commands are:\n"
  2036.                                                    + "`" + prefix + "gacha pull`\n"
  2037.                                                                      + "`" + prefix + "gacha view`\n"
  2038.                                                                      + "`" + prefix + "gacha sell`\n"
  2039.                                                                      + "`" + prefix + "gacha idolize`\n"
  2040.                                                                      + "`" + prefix + "gacha expand`");
  2041.                         }
  2042.                     }else{ //all other servers use emojis
  2043.                         if (args[1] == undefined){
  2044.                             message.channel.send("Please buy 1 - 10 emojis.");
  2045.                         }else if (args[1] > 0 && args[1] < 11){
  2046.                             var pulls = parseInt(args[1]);
  2047.                             var cost = 100;
  2048.                             if (pulls*cost > user.points){
  2049.                                 message.channel.send("You have " + user.points + " gacha points. You need " + (pulls*cost - user.points) + " more points to pull " + pulls + " emoji(s).");
  2050.                             }else{
  2051.                                 var result = "Your new emojis are:\n";
  2052.                                 for (i = 0; i < pulls; i++){
  2053.                                     result += message.guild.emojis.random(1);
  2054.                                 }
  2055.                                 if (pulls == 10){
  2056.                                     result += "\nBonus emoji: " + message.guild.emojis.random(1);
  2057.                                 }
  2058.                                 result += "\nYou spent " + pulls*cost + " gacha points. You have " + (user.points - pulls*cost) + " gacha points remaining.";
  2059.  
  2060.                                 // Points are transferred from the user to LofeBot
  2061.                                 user.points -= pulls*cost;
  2062.                                 for (var i = 0; i < userData.users.length; i++){
  2063.                                     if (userData.users[i].id == bot.user.id){
  2064.                                         userData.users[i].points += pulls*cost;
  2065.                                     }
  2066.                                 }
  2067.                                 message.channel.send(result);
  2068.                             }
  2069.                         }else{
  2070.                             message.channel.send("Please buy 1 - 10 emojis.");
  2071.                         }
  2072.                     }
  2073.                 }else{
  2074.                     message.channel.send("Invalid command. Use `" + prefix + "help` to view all commands.");
  2075.                 }
  2076.             break;
  2077.  
  2078.             case 'testosterone':
  2079.                 message.channel.send('<:t_vial:389539476386480128>:syringe::muscle::blush::womens::arrow_right::mens:');
  2080.             break;
  2081.  
  2082.             case 'estrogen':
  2083.                 message.channel.send(':pill::stuck_out_tongue_closed_eyes::mens::arrow_right::womens:');
  2084.             break;
  2085.  
  2086.       case 'zoop':
  2087.                 message.channel.send(':point_right::sunglasses::point_right:');
  2088.             break;
  2089.  
  2090.             case 'bicth':
  2091.                 message.channel.send("https://www.youtube.com/watch?v=X5uDQCuYTDo");
  2092.             break;
  2093.  
  2094.             case 'recipe':
  2095.                 var recipes = require(appDir + "/recipes.json");
  2096.                 var selected = recipes[Math.floor(Math.random() * recipes.length)];
  2097.                 var result = "**" + selected.title + "**\nBy " + selected.author + "\n\n__Ingredients__:\n";
  2098.                 for (var i = 0; i < selected.ingredients.length; i++){
  2099.                     result += "❧ " + selected.ingredients[i] + "\n";
  2100.                 }
  2101.                 result += "\n" + selected.time + "\n\n__Steps__:";
  2102.                 for (var i = 0; i < selected.steps.length; i++){
  2103.                     result += "\n" + (i+1) + ". " + selected.steps[i];
  2104.                 }
  2105.                 message.channel.send(result);
  2106.             break;
  2107.  
  2108.             case 'voice':
  2109.                 if (message.channel.type == "text"){
  2110.                     if (message.member.voiceChannelID == undefined){
  2111.                         message.channel.send("You must be in a voice channel to use this command.");
  2112.                     }else {
  2113.                         var voice = require(appDir + "/voice.json");
  2114.                         var choice = Math.floor(Math.random() * voice.sentence.length);
  2115.  
  2116.                         message.channel.send(voice.sentence[choice].text);
  2117.                         message.member.voiceChannel.join()
  2118.                             .then(connection => {
  2119.                                 return connection.playFile(appDir + voice.sentence[choice].audio);
  2120.                             })
  2121.                             .then(dispatcher => {
  2122.                                 dispatcher.on('error', console.error);
  2123.                             })
  2124.                             .catch(console.error);
  2125.                     }
  2126.                 }else{
  2127.                     message.channel.send("Invalid command. Use `" + prefix + "help` to view all commands.");
  2128.                 }
  2129.             break;
  2130.  
  2131.             case 'disconnect':
  2132.                 if (message.author.id == 132494042008256512){
  2133.                     function shutUp(value, key, map){
  2134.                         value.disconnect();
  2135.                     }
  2136.                     bot.voiceConnections.forEach(shutUp);
  2137.  
  2138.                     message.channel.send("Disconnected from all voice channels.");
  2139.                 }else{
  2140.                     message.channel.send("This command is admin only.");
  2141.                 }
  2142.             break;
  2143.  
  2144.             default:
  2145.                 message.channel.send("Invalid command. Use `" + prefix + "help` to view all commands.");
  2146.         }
  2147.     }
  2148.  
  2149.     if (!testing){
  2150.         // Standalone messages that don't start with L!
  2151.         if (message.content === 'ayy') {
  2152.             message.channel.send('lmao');
  2153.         }
  2154.  
  2155.         if (!message.author.bot) { // The bot ignores its own messages
  2156.  
  2157.             if (message.content.toLowerCase() === "same"){
  2158.                 message.channel.send("same");
  2159.             }
  2160.  
  2161.             // Phrases contained in messages, disabled for St. Defoko's
  2162.             if (message.channel.type == "text" && message.guild.id != 264995832032395264){
  2163.                 if (message.content.indexOf('soup') >= 0){
  2164.                     message.channel.send('why are you buying clothes at the soup store');
  2165.                 }else if (message.content.indexOf('Soup') >= 0){
  2166.                     message.channel.send('Why are you buying clothes at the soup store?');
  2167.                 }else if (message.content.indexOf('SOUP') >= 0){
  2168.                     message.channel.send('WHY ARE YOU BUYING CLOTHES AT THE SOUP STORE');
  2169.                 }
  2170.  
  2171.                 if (message.content.toLowerCase().indexOf("vccv") >= 0 && message.guild.id == 421815715629105155){ //VSio only
  2172.                     message.channel.send("**Did you mean:** Chezzie CVVC**?**");
  2173.                 }
  2174.  
  2175.                 if(message.guild.id != 357552578705227778){ // Disabling kiyoteru response for HKIM
  2176.                     if (message.content.indexOf('kiyoteru') >= 0){
  2177.                         message.channel.send('i love kiyoteru!!!!!');
  2178.                     }else if (message.content.indexOf('Kiyoteru') >= 0){
  2179.                         message.channel.send('I love Kiyoteru!!!!!');
  2180.                     }else if (message.content.indexOf('KIYOTERU') >= 0){
  2181.                         message.channel.send('I LOVE KIYOTERU!!!!!');
  2182.                     }else if (message.content.indexOf('キヨテル') >= 0){
  2183.                         message.channel.send('氷山キヨテル大好き!!!!!');
  2184.                     }else if (message.content.indexOf('키요테루') >= 0){
  2185.                         message.channel.send('히야마 키요테루 사랑해!!!!!');
  2186.                     }
  2187.                 }
  2188.             }else if (message.channel.type == "text" && message.content.toLowerCase().indexOf("kye") >= 0){ //Automatic admission to kye fanclub
  2189.                 var fcRole = message.guild.roles.get("414483315857424394");
  2190.  
  2191.                 if ( !message.member.roles.has("414483315857424394") ){
  2192.                     message.member.addRole(fcRole);
  2193.                     message.channel.send(message.member.displayName + " has joined the <#414482272893403136>");
  2194.                 }
  2195.             }
  2196.  
  2197.             // Transmitting messages between magic portals
  2198.             const kiyoteruServer = bot.channels.get('389764852434075658');
  2199.             const stdefoServer = bot.channels.get('389764732564799488');
  2200.             const transmascServer = bot.channels.get('389769978355777546');
  2201.             const latvianServer = bot.channels.get('389770056881668097');
  2202.             const ahServer = bot.channels.get('435761201486495754');
  2203.             if (message.channel.id == kiyoteruServer.id){
  2204.                 stdefoServer.send('(HK) **' + message.member.displayName + ':** ' + message.content);
  2205.                 transmascServer.send('(HK) **' + message.member.displayName + ':** ' + message.content);
  2206.                 latvianServer.send('(HK) **' + message.member.displayName + ':** ' + message.content);
  2207.                 ahServer.send('(HK) **' + message.member.displayName + ':** ' + message.content);
  2208.                 rcBot.wsAPI.sendChatMessage("drLaLPChQDRmEgRex", '(HK) **' + message.member.displayName + ':** ' + message.content);
  2209.             }
  2210.             if (message.channel.id == stdefoServer.id){
  2211.                 kiyoteruServer.send('(SD) **' + message.member.displayName + ':** ' + message.content);
  2212.                 transmascServer.send('(SD) **' + message.member.displayName + ':** ' + message.content);
  2213.                 latvianServer.send('(SD) **' + message.member.displayName + ':** ' + message.content);
  2214.                 ahServer.send('(SD) **' + message.member.displayName + ':** ' + message.content);
  2215.                 rcBot.wsAPI.sendChatMessage("drLaLPChQDRmEgRex", '(SD) **' + message.member.displayName + ':** ' + message.content);
  2216.             }
  2217.             if (message.channel.id == transmascServer.id){
  2218.                 stdefoServer.send('(TV) **' + message.member.displayName + ':** ' + message.content);
  2219.                 kiyoteruServer.send('(TV) **' + message.member.displayName + ':** ' + message.content);
  2220.                 latvianServer.send('(TV) **' + message.member.displayName + ':** ' + message.content);
  2221.                 ahServer.send('(TV) **' + message.member.displayName + ':** ' + message.content);
  2222.                 rcBot.wsAPI.sendChatMessage("drLaLPChQDRmEgRex", '(TV) **' + message.member.displayName + ':** ' + message.content);
  2223.             }
  2224.             if (message.channel.id == latvianServer.id){
  2225.                 kiyoteruServer.send('(LH) **' + message.member.displayName + ':** ' + message.content);
  2226.                 transmascServer.send('(LH) **' + message.member.displayName + ':** ' + message.content);
  2227.                 stdefoServer.send('(LH) **' + message.member.displayName + ':** ' + message.content);
  2228.                 ahServer.send('(LH) **' + message.member.displayName + ':** ' + message.content);
  2229.                 rcBot.wsAPI.sendChatMessage("drLaLPChQDRmEgRex", '(LH) **' + message.member.displayName + ':** ' + message.content);
  2230.             }
  2231.             if (message.channel.id == ahServer.id){
  2232.                 kiyoteruServer.send('(AHS) **' + message.member.displayName + ':** ' + message.content);
  2233.                 transmascServer.send('(AHS) **' + message.member.displayName + ':** ' + message.content);
  2234.                 stdefoServer.send('(AHS) **' + message.member.displayName + ':** ' + message.content);
  2235.                 latvianServer.send('(AHS) **' + message.member.displayName + ':** ' + message.content);
  2236.                 rcBot.wsAPI.sendChatMessage("drLaLPChQDRmEgRex", '(LH) **' + message.member.displayName + ':** ' + message.content);
  2237.             }
  2238.  
  2239.             //VSio to TUBS portals
  2240.             if (message.channel.id == 421840466565136395){ //Characterization
  2241.                 rcBot.wsAPI.sendChatMessage("d6Z85xjg5QG2NaYkr", "(VSio) **" + message.member.displayName + ":** " + message.content);
  2242.             }
  2243.             if (message.channel.id == 421840683360583680){ //Content
  2244.                 rcBot.wsAPI.sendChatMessage("wKNgkS5dHP6prnBcd", "(VSio) **" + message.member.displayName + ":** " + message.content);
  2245.             }
  2246.         }
  2247.     }
  2248.     fs.writeFileSync("./userData.json", JSON.stringify(userData), "utf8");
  2249. });
  2250. rcBot.on("message", rcMsg => {
  2251.     //there aren't any docs so just use this to check params
  2252.     //console.log(rcMsg);
  2253.  
  2254.     if (rcMsg.u._id != "3HCdMvE4fx5ceWyYp") { //Bot ignores itself
  2255.         rcBot.command(rcMsg.msg).action(meta => {
  2256.             if (rcMsg.msg == prefix + "ping"){
  2257.                 rcBot.send(meta, "pong");
  2258.             }
  2259.             if (!testing){
  2260.                 if (rcMsg.room._id == "drLaLPChQDRmEgRex"){ // Magic portal
  2261.                     bot.channels.get('389764852434075658').send("(TUBS) **" + rcMsg.u.name + "**: " + rcMsg.msg); //Kiyoteru server
  2262.                     bot.channels.get('389764732564799488').send("(TUBS) **" + rcMsg.u.name + "**: " + rcMsg.msg); //St. Defoko's
  2263.                     bot.channels.get('389769978355777546').send("(TUBS) **" + rcMsg.u.name + "**: " + rcMsg.msg); //Transmasc Vocalsynth
  2264.                     bot.channels.get('389770056881668097').send("(TUBS) **" + rcMsg.u.name + "**: " + rcMsg.msg); //Latvian house
  2265.                     bot.channels.get('435761201486495754').send("(TUBS) **" + rcMsg.u.name + "**: " + rcMsg.msg); //AHS
  2266.                 }
  2267.                 if (rcMsg.room._id == "d6Z85xjg5QG2NaYkr"){
  2268.                     bot.channels.get("421840466565136395").send("(TUBS) **" + rcMsg.u.name + "**: " + rcMsg.msg); //Characterization
  2269.                 }
  2270.                 if (rcMsg.room._id == "wKNgkS5dHP6prnBcd"){
  2271.                     bot.channels.get("421840683360583680").send("(TUBS) **" + rcMsg.u.name + "**: " + rcMsg.msg); //Content
  2272.                 }
  2273.             }
  2274.         });
  2275.     }
  2276. });
  2277.  
  2278. bot.on('guildMemberAdd', member => {
  2279.     if (!testing){
  2280.         //Latvian House
  2281.         if (member.guild.id == 348326020660854784){
  2282.             member.guild.channels.get("348350514020352000").send("Welcome to the Latvian House, <@" + member.id + ">!");
  2283.         }
  2284.         //Kiyoteru
  2285.         if (member.guild.id == 357552578705227778){
  2286.             member.guild.channels.get("357554544336568320").send("Welcome to the Hiyama Kiyoteru and Ice Mountain fan server, <@" + member.id + ">! Please read the messages in <#361666476564021258>, introduce yourself here in <#357554544336568320>, and set your roles with `L!role` in <#357556705258897409>!");
  2287.         }
  2288.         //Transmasc Vocalsynth
  2289.         if (member.guild.id == 385927196058845195){
  2290.             member.guild.channels.get("385929231890382849").send("Welcome to Transmasc Vocalsynth, <@" + member.id + ">! Please read the messages in <#385933127161348116>, introduce yourself here in <#385929231890382849>, and set your roles with `L!role` in <#385928891954495499>.");
  2291.         }
  2292.         //St. Defoko's
  2293.         if (member.guild.id == 264995832032395264){
  2294.             member.addRole(member.guild.roles.get('399813995109941248')); //auto visitor
  2295.             member.guild.channels.get('356384640308871178').send("<@"+member.id+"> has enrolled in St. Defoko's School of UTAU! Please read the messages in <#265005164388155402> and <#265005220130455555>, introduce yourself in <#356384640308871178>, and set your roles with `L!role` in <#371129811537756160>.");
  2296.         }
  2297.         //VSio
  2298.         if (member.guild.id == 421815715629105155){
  2299.             member.guild.channels.get("440689307259502593").send("Welcome to the official VocalSynth.io | DynamiVox Discord server, <@" + member.id + ">!");
  2300.         }
  2301.     }
  2302. });
  2303.  
  2304. bot.on('guildMemberRemove', member => {
  2305.     if (!testing){
  2306.         //Latvian House
  2307.         if (member.guild.id == 348326020660854784){
  2308.             member.guild.channels.get("348350514020352000").send("Goodbye " + member.user.tag);
  2309.         }
  2310.         //Kiyoteru
  2311.         if (member.guild.id == 357552578705227778){
  2312.             member.guild.channels.get('357554544336568320').send("Goodbye, " + member.user.tag + "! :wave: Please take care!");
  2313.         }
  2314.         //Transmasc Vocalsynth
  2315.         if (member.guild.id == 385927196058845195){
  2316.             member.guild.channels.get('385929231890382849').send("Goodbye, " + member.user.tag + "!");
  2317.         }
  2318.         //St. Defoko's
  2319.         if (member.guild.id == 264995832032395264){
  2320.             member.guild.channels.get('356384640308871178').send(member.user.tag + " has left St. Defoko's School of UTAU.");
  2321.         }
  2322.         //VSio
  2323.         if (member.guild.id == 421815715629105155){
  2324.             member.guild.channels.get("440689307259502593").send("Goodbye " + member.user.tag);
  2325.         }
  2326.     }
  2327. });
  2328.  
  2329. bot.on('disconnect', () => {
  2330.     console.log('LofeBot asleep.');
  2331. });
  2332.  
  2333. bot.on('reconnecting', () => {
  2334.     console.log('LofeBot reconnecting...');
  2335. });
  2336.  
  2337. //Regular messages
  2338. setInterval(function() {
  2339.     var d = new Date();
  2340.     if (d.getUTCHours() == 0 && d.getUTCMinutes() == 0){
  2341.         for (var i = 0; i < userData.users.length; i++){
  2342.             userData.users[i].gachaDaily = false;
  2343.         }
  2344.  
  2345.         //Daily free gacha notification
  2346.         //420374097495588875 //travoc #twelve
  2347.         //410118601597517834 //st defo #defostars
  2348.         //386001523362103297 //kiyoteru #kiyoteruworld
  2349.  
  2350.         if (d.getUTCDate() == 20){ //St. Defo #announcements monthly Utaism Day on the 20th
  2351.             bot.channels.get('265005220130455555').send("Utaism Day begins now! Enjoy 10 gacha points per message today. AAIAUEA!");
  2352.         }else if (d.getUTCDay() == 0){ //St. Defo #introductions weekly visitor ping on Sunday
  2353.             bot.channels.get('356384640308871178').send("<@&399813995109941248>\nThank you for visiting St. Defoko's School of UTAU! If you're interested in sticking around, please set your roles with `L!role` in <#371129811537756160>.");
  2354.         }else if (d.getUTCDate() == 7){ //Kiyoteru #announcements monthly 7ate9 on the 7th
  2355.             bot.channels.get('361666476564021258').send("Kiyoteru7ate9 starts today! Enjoy 10 gacha points per message until the 9th!");
  2356.         }else if (d.getUTCDate() == 12){ //TraVoc #twelve monthly on the 12th
  2357.             if (d.getUTCMonth == 3){ //April
  2358.                 bot.channels.get('420374097495588875').send("Happy birthday Hisoka Kojiro! Enjoy 10 gacha points per message today!");
  2359.             }else if (d.getUTCMonth == 6){ //July
  2360.                 bot.channels.get('420374097495588875').send("Happy birthday Tanaka Jun! Enjoy 10 gacha points per message today!");
  2361.             }else if (d.getUTCMonth == 7){ //August
  2362.                 bot.channels.get('420374097495588875').send("Happy birthday Juuroh Romilly! Enjoy 10 gacha points per message today!");
  2363.             }else if (d.getUTCMonth == 9){ //October
  2364.                 bot.channels.get('420374097495588875').send("Happy birthday Micah Fraser! Enjoy 10 gacha points per message today!");
  2365.             }else if (d.getUTCMonth == 10){ //November
  2366.                 bot.channels.get('420374097495588875').send("Happy birthday Daze! Enjoy 10 gacha points per message today!");
  2367.             }else if (d.getUTCMonth == 11){ //December
  2368.                 bot.channels.get('420374097495588875').send("Happy birthday Elliot Russel! Enjoy 10 gacha points per message today!");
  2369.             }else{
  2370.                 bot.channels.get('420374097495588875').send("It's time for TWELVE! Enjoy 10 gacha points per message today!");
  2371.             }
  2372.         }
  2373.     }
  2374. }, 1000); //Checks once per second (every 1000 milliseconds)
Add Comment
Please, Sign In to add comment