Advertisement
Thinkatron

Discord Bot

Mar 27th, 2017
139
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Scala 8.14 KB | None | 0 0
  1. /*Created by Aaron Mc. with a WTFPL license. http://www.wtfpl.net/ */
  2. import scala.collection._;
  3. import scala.collection.mutable.{Set => mSet}
  4. import scala._;
  5. import scala.concurrent._;
  6. import scala.util.control.Breaks._;
  7. import sys.process._;
  8. import net.dv8tion.jda.core._;
  9. import net.dv8tion.jda.client._;
  10. import net.dv8tion.jda.core.entities._;
  11. import net.dv8tion.jda.core.events.message.{MessageReceivedEvent => MRE};
  12. import net.dv8tion.jda.core.hooks.ListenerAdapter;
  13. import java.awt.{Color => jColor};
  14. import net.dv8tion.jda.client.entities.Group;
  15. import net.dv8tion.jda.core.AccountType;
  16. import net.dv8tion.jda.core.entities.MessageEmbed.{Field => mField};
  17. import net.dv8tion.jda.core.JDA;
  18. import net.dv8tion.jda.core.JDABuilder;
  19. import net.dv8tion.jda.core.Permission;
  20. import net.dv8tion.jda.core.exceptions.PermissionException;
  21. import net.dv8tion.jda.core.exceptions.RateLimitedException;
  22.  
  23.  
  24. import java._;
  25. import javax._;
  26. package bot {
  27.  
  28.   class command (inp: String, des: String, outp: (String, MRE) => String, restrict: Boolean = false, restrictionList: Array[String] = Array("")) {
  29.     val input: String = inp;
  30.     val desc: String = des;
  31.     val restricted: Boolean = restrict;
  32.     val allowed: Array[String] = restrictionList;
  33.     def out(a: String, b: MRE): String = {
  34.       return outp(a, b);
  35.     };
  36.   };
  37.   class msgListener() extends ListenerAdapter {
  38.     override def onMessageReceived (event: MRE): Unit = {
  39.       Global.evt = event;
  40.       var jda: JDA = event.getJDA();
  41.       var author: User = event.getAuthor();
  42.       var message: Message = event.getMessage();
  43.       var channel: MessageChannel = event.getChannel();
  44.       val msg: String = message.getContent().toString()
  45.       println("> " + event.getAuthor().getId() + ": " + msg);
  46.       Global.currentChannel = channel;
  47.       if (msg(0) == '$') channel.sendMessage(Global.commatch(event).toString()).queue;
  48.     }
  49.   }
  50.  
  51.  
  52.   object Global {
  53.     val isBot: Boolean = false;
  54.     var botCommanders: Array[String] = Array("129663334784958465","294621373530112001", "221623241666461697", "144290567788953601");
  55.     var userCommanders: Array[String] = Array("129663334784958465","294621373530112001");
  56.     var commanders: Array[String] = if (isBot) botCommanders else userCommanders;
  57.     var canRun: Boolean = true;
  58.     var evt: MRE = null;
  59.     var currentChannel: Any = 3;
  60.     val commands = mSet.empty[command];
  61.     def commatch (eventi: MRE): String = {
  62.       var ctxstr: String = eventi.getMessage().getContent().toString();
  63.       var auth: String = eventi.getAuthor().getId();
  64.       var within: Array[String] = ctxstr.split(" ", 2);
  65.       try {
  66.         val ret: String = {
  67.           Global.commands.find(a => a.input == within(0).toLowerCase()) match {
  68.             case Some(com) => if (within.length < 2) return com.desc else if (!com.restricted || com.allowed.exists(x => x == auth)) return com.out(within(1), eventi) else if (Global.isBotI) return "You do not have permission to access that command!" else return "";
  69.             case None => if ((botCommanders.exists(x => x == auth) && isBot) || (userCommanders.exists(x => x == auth) && !isBot)) return "Not a command" else return "";
  70.           }
  71.         };
  72.         println("-->" + ret);
  73.         return ret;
  74.       } catch {
  75.         case e: Throwable => {
  76.           try {
  77.             println("Not a command:\n\t\"" + ctxstr + "\"");
  78.            } catch {
  79.              case e: Exception => println(e);
  80.            };
  81.         }
  82.         println("Error");
  83.         return "Error";
  84.       };
  85.     }
  86.   }
  87.  
  88.  
  89.  
  90.  
  91.   object cfs {
  92.     def stp (inp: String, evta: MRE): String = {
  93.       Global.canRun = false;
  94.       return ""
  95.     }
  96.    
  97.     def emb (inp: String, evta: MRE): String = {
  98.       var instruction: Array[String] = Array(" ", "00 ff 00", " ");
  99.       var unstruction: Array[String] = inp.split("><", 0);
  100.       val guk: EmbedBuilder = new EmbedBuilder;
  101.       for (i <- 0 to (if (unstruction.length <= 3) (unstruction.length - 1) else 2)) {
  102.         instruction(i) = unstruction(i);
  103.       }
  104.       if (unstruction.length <= 3) {
  105.         guk.addField(new mField("_", "_", false));
  106.       } else {
  107.         var guffin: Array[Array[String]] = unstruction.slice(3, unstruction.length).grouped(2).toArray;
  108.         for (abkadu <- 0 to (guffin.length -1)) {
  109.           guk.addField(new mField(guffin(abkadu)(0), guffin(abkadu)(1), false));
  110.         }
  111.       }
  112.       var cols: Array[Int] = instruction(1).split(" ", 3).map(e => Integer.parseInt(e, 16));
  113.         guk.setTitle(instruction(0));
  114.         guk.setAuthor(Global.evt.getAuthor().getName(), Global.evt.getAuthor().getAvatarUrl(), null);
  115.         guk.setDescription(instruction(2));
  116.         guk.setColor(new jColor(cols(0), cols(1), cols(2)));
  117.       evta.getChannel match {
  118.         case it: MessageChannel => {
  119.           evta.getMessage.editMessage(new MessageBuilder().setEmbed(guk.build()).build()).queue();
  120.         }
  121.       }
  122.       return ""
  123.     }
  124.    
  125.    
  126.    
  127.     def say (inp: String, evt: MRE): String = {
  128.       evt.getChannel.deleteMessageById(evt.getMessage.getId());
  129.       return inp;
  130.     }
  131.     def men(inp: String, evt: MRE): String = {
  132.       Global.canRun = true;
  133.       evt.getChannel.deleteMessageById(evt.getMessage.getId());
  134.         var instruction: Array[String] = inp.split(" ", 3);
  135.         try {
  136.           var i: Int = instruction(0).toInt
  137.           evt.getChannel match {
  138.             case it: MessageChannel => {
  139.               val thread = new Thread {
  140.                   override def run {
  141.                     while (i > 0 && Global.canRun){
  142.                       i = i-1;
  143.                         it.sendMessage("<@" + instruction(2) + ">").queue();
  144.                         Thread.sleep(instruction(1).toInt);
  145.                     };
  146.                   }
  147.               }
  148.               thread.start
  149.             }
  150.           }
  151.             return " ";
  152.         } catch {
  153.           case e: Throwable => return "error";
  154.       }
  155.     }
  156.     def rep(inp: String, evt: MRE): String = {
  157.       Global.canRun = true;
  158.       evt.getChannel.deleteMessageById(evt.getMessage.getId());
  159.       var instruction: Array[String] = inp.split(" ", 2);
  160.       try {
  161.         var i: Int = instruction(0).toInt;
  162.         evt.getChannel match {
  163.           case it: MessageChannel => {
  164.             val thread = new Thread {
  165.                 override def run {
  166.                   while (i > 0 && Global.canRun){
  167.                     i = i - 1;
  168.                       it.sendMessage(instruction(1)).queue();
  169.                       Thread.sleep(1500);
  170.                   };
  171.                 }
  172.             }
  173.             thread.start
  174.           }
  175.         }
  176.           return " ";
  177.       } catch {
  178.         case e: Throwable => return "error";
  179.     }
  180.     }
  181.   }
  182.  
  183.  
  184.  
  185.  
  186.   object Preface {
  187.     def comInit () = {
  188.       Global.commands.add(new command("$say", "Repeats text after command.", cfs.say, true, Global.commanders));
  189.       Global.commands.add(new command("$stop", "Breaks loops.", cfs.stp, true, Global.commanders));
  190.       Global.commands.add(new command("$repeat", "Type the ammount of times you want the text to repeat. Then type the text you want repeated.", cfs.rep, true, Global.commanders));
  191.       Global.commands.add(new command("$mention", "Type the ammount of times you want the mention to repeat and the millisecond delay. Then type the ID of who to mention.", cfs.men, true, Global.commanders));
  192.       Global.commands.add(new command("$embed", "Type a message to send in an embed. Format Title><RR GG BB><Description{><Field Title><Field Value}", cfs.emb, true, Global.commanders));
  193.     }
  194.  
  195.  
  196.  
  197.     def jdaInit () = {
  198.       try {
  199.         if (Global.isBot) {
  200.         var jda: JDA = new JDABuilder(AccountType.BOT).setToken("Secret Bot Token").addListener(new msgListener()).buildBlocking();
  201.         } else {
  202.         var jda: JDA = new JDABuilder(AccountType.CLIENT).setToken("Secret User Token").addListener(new msgListener()).buildBlocking();
  203.       } }
  204.         catch {
  205.         case e: Throwable => e.printStackTrace();
  206.       }
  207.     }
  208.   }
  209.  
  210.  
  211.  
  212.  
  213.   object Main {
  214.     def main (args: Array[String]):Unit = {
  215.       Preface.comInit();
  216.       Preface.jdaInit();
  217.     }
  218.   }
  219. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement