Advertisement
Guest User

Untitled

a guest
May 21st, 2018
182
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 7.78 KB | None | 0 0
  1. import java.util.ArrayList;
  2. import java.util.HashMap;
  3. import java.util.Random;
  4. import java.util.Timer;
  5. import java.util.TimerTask;
  6.  
  7. import jerklib.*;
  8. import jerklib.events.*;
  9. import jerklib.events.IRCEvent.*;
  10. import jerklib.listeners.*;
  11.  
  12. public class TinkerBot implements IRCEventListener {
  13.    
  14.     /**
  15.      * Constants
  16.      */
  17.     private static final String BOT_NAME = "TinkerBot";
  18.     private static final String NS_PASSWORD = "****";
  19.     private static final String SERVER = "irc.geekshed.net";
  20.     private static final String CHANNEL = "#tinkernut";
  21.     private static final String BADWORDS = "fuck fucked fucking suck sucked sucking" +
  22.             "bitch bitched bitching slut cunt shit poo pee penis cock dick pussy vagina" +
  23.             "";
  24.  
  25.     /**
  26.      * Globals
  27.      */
  28.     private ConnectionManager con;
  29.     private Channel channel;
  30.     private String command_char;
  31.     private String greetings;
  32.     private ArrayList<String> admins;
  33.     private String[] badwords;
  34.     private HashMap<String, User> users;
  35.     private Timer announcer;
  36.     private String announcerStr;
  37.     private long announcerPeriod;
  38.    
  39.     /**
  40.      * Class constructor
  41.      */
  42.     public TinkerBot() {
  43.         // Initialize globals
  44.         con = new ConnectionManager(new Profile(BOT_NAME));
  45.         command_char = "!";
  46.         greetings = "Welcome, %s";
  47.         admins = new ArrayList<String>();
  48.         admins.add("SBSTP");
  49.         badwords = BADWORDS.split(" ");
  50.         users = new HashMap<String, User>();
  51.         announcer = new Timer("announcer");
  52.         announcerStr = null;
  53.         announcerPeriod = -1;
  54.        
  55.         // Start TinkerBot
  56.         con.requestConnection(SERVER).addIRCEventListener(this);
  57.     }
  58.  
  59.     @Override
  60.     /**
  61.      * Callback whenever the Bot receives data.
  62.      */
  63.     public void receiveEvent(IRCEvent e) {
  64.         Type type = e.getType();
  65.         // Connects to server successfully
  66.         if (type == Type.CONNECT_COMPLETE) {
  67.             e.getSession().join(CHANNEL);
  68.         // Connects to channel successfully
  69.         } else if (type == Type.JOIN_COMPLETE) {
  70.             channel = ((JoinCompleteEvent) e).getChannel();
  71.             e.getSession().sayPrivate("nickserv", "identify " + NS_PASSWORD);
  72.         // User joins channel
  73.         } else if (type == Type.JOIN) {
  74.             JoinEvent je = (JoinEvent) e;
  75.             je.getChannel().say(String.format(greetings, je.getNick()));
  76.         // User leaves channel
  77.         } else if (type == Type.QUIT) {
  78.             QuitEvent qe = (QuitEvent) e;
  79.             users.remove(qe.getNick());
  80.         // Receives message in channel
  81.         } else if (type == Type.CHANNEL_MESSAGE) {
  82.             MessageEvent me = (MessageEvent) e;
  83.             String msg = me.getMessage();
  84.            
  85.             // Ensure everyone has a 'User' object
  86.             if (users.get(me.getNick()) == null) {
  87.                 users.put(me.getNick(), new User());
  88.             }
  89.             User user = users.get(me.getNick());
  90.            
  91.             if (isAdmin(me.getNick()) && isCommand(msg)) {
  92.                 String cmd = getCommand(msg);
  93.                 if (cmd.equals("help"))
  94.                     cmdHelp(me);
  95.                 else if (cmd.equals("kick"))
  96.                     cmdKick(me);
  97.                 else if (cmd.equals("admins"))
  98.                     cmdAdmins(me);
  99.                 else if (cmd.equals("add"))
  100.                     cmdAdd(me);
  101.                 else if (cmd.equals("rem"))
  102.                     cmdRem(me);
  103.                 else if (cmd.equals("greetings"))
  104.                     cmdGreetings(me);
  105.                 else if (cmd.equals("roll"))
  106.                     cmdRoll(me);
  107.                 else if (cmd.equals("announce"))
  108.                     cmdAnnounce(me);
  109.             } else {
  110.                 checkLanguage(me, user);
  111.             }
  112.            
  113.             users.put(me.getNick(), user);
  114.         }
  115.     }
  116.    
  117.     //==========================================================================
  118.     // Commands
  119.     //==========================================================================
  120.    
  121.     /**
  122.      * Help command
  123.      */
  124.     private void cmdHelp(MessageEvent me) {
  125.        
  126.     }
  127.    
  128.     /**
  129.      * Kick command
  130.      */
  131.     private void cmdKick(MessageEvent me) {
  132.         String msg = me.getMessage(),
  133.             nick = null,
  134.             reason = null;
  135.         int start = msg.indexOf(' ') + 1;
  136.         if (start == -1) {
  137.             me.getChannel().say("A username is required!");
  138.             return;
  139.         }
  140.         int space = msg.indexOf(' ', start);
  141.         if (space != -1) {
  142.             nick = msg.substring(start, space);
  143.             reason = msg.substring(space + 1);
  144.         } else {
  145.             nick = msg.substring(start);
  146.             reason = "";
  147.         }
  148.        
  149.         me.getChannel().kick(nick, reason);
  150.     }
  151.    
  152.     /**
  153.      * Admins command
  154.      */
  155.     private void cmdAdmins(MessageEvent me) {
  156.         StringBuilder builder = new StringBuilder();
  157.         for (String admin : admins) {
  158.             builder.append(admin);
  159.             builder.append(" ");
  160.         }
  161.         me.getChannel().say(builder.toString());
  162.     }
  163.    
  164.     /**
  165.      * Add command
  166.      */
  167.     private void cmdAdd(MessageEvent me) {
  168.         String msg = me.getMessage(),
  169.             nick = msg.substring(command_char.length() + 4);
  170.         if (isAdmin(nick))
  171.             return;
  172.         nick = getTrueName(me.getChannel(), nick);
  173.         admins.add(nick);
  174.         me.getChannel().say("User " + nick + " was added!");
  175.     }
  176.    
  177.     /**
  178.      * Rem command
  179.      */
  180.     private void cmdRem(MessageEvent me) {
  181.         String msg = me.getMessage(),
  182.                 nick = msg.substring(command_char.length() + 4);
  183.         if (!isAdmin(nick))
  184.             return;
  185.         nick = getTrueName(me.getChannel(), nick);
  186.         admins.remove(nick);
  187.         me.getChannel().say("User " + nick + " was removed!");
  188.     }
  189.    
  190.     /**
  191.      * Grettings command
  192.      */
  193.     private void cmdGreetings(MessageEvent me) {
  194.         String msg = me.getMessage();
  195.         greetings = msg.substring(command_char.length() + 10);
  196.         me.getChannel().say("New Greetings: " + String.format(greetings, me.getNick()));
  197.     }
  198.    
  199.     /**
  200.      * Roll command
  201.      */
  202.     private void cmdRoll(MessageEvent me) {
  203.         me.getChannel().say("" + (new Random().nextInt(100) + 1));
  204.     }
  205.    
  206.     /**
  207.      * Announce command
  208.      */
  209.     private void cmdAnnounce(MessageEvent me) {
  210.         String msg = me.getMessage();
  211.         if (msg.equals(command_char + "announce start")) {
  212.             announcer.scheduleAtFixedRate(new TimerTask() {
  213.                 @Override
  214.                 public void run() {
  215.                     channel.say(announcerStr);
  216.                 }
  217.             }, 0, announcerPeriod);
  218.             me.getChannel().say("Announcer started!");
  219.         } else if (msg.equals(command_char + "announce stop")) {
  220.             announcer.cancel();
  221.             announcer.purge();
  222.             me.getChannel().say("Announcer stopped!");
  223.         } else {
  224.             int start = msg.indexOf(' ') + 1;
  225.             int end = msg.indexOf(' ', start);
  226.             try {
  227.                 announcerPeriod = Integer.parseInt(msg.substring(start, end)) * 60 * 1000;
  228.                 announcerStr = msg.substring(end + 1);
  229.                 me.getChannel().say("Announcer configured, use \""+ command_char + "announcer start\" to start annoucing!");
  230.             } catch (NumberFormatException e) {
  231.                 me.getChannel().say("A period is required!");
  232.             }
  233.         }
  234.     }
  235.    
  236.     /**
  237.      * Language checker
  238.      */
  239.     private void checkLanguage(MessageEvent me, User user) {
  240.         String msg = me.getMessage().toLowerCase();
  241.         int count = 0;
  242.         for (String badword : badwords) {
  243.             if (msg.contains(badword)) {
  244.                 count++;
  245.             }
  246.         }
  247.         if (count > 0) {
  248.             user.warnings++;
  249.             if (user.warnings == 1) {
  250.                 me.getChannel().say(me.getNick() + ": please watch your language!");
  251.             } else if (user.warnings >= 2) {
  252.                 me.getChannel().kick(me.getNick(), "Language");
  253.             }
  254.         }
  255.     }
  256.    
  257.     //==========================================================================
  258.     // Utilities
  259.     //==========================================================================
  260.    
  261.     /**
  262.      * Checks if the given nick is an admin
  263.      */
  264.     private boolean isAdmin(String nick) {
  265.         nick = nick.toLowerCase();
  266.         for (String admin : admins) {
  267.             if (nick.equals(admin.toLowerCase()))
  268.                 return true;
  269.         }
  270.         return false;
  271.     }
  272.    
  273.     /**
  274.      * Checks if the given string is a command
  275.      */
  276.     private boolean isCommand(String msg) {
  277.         return msg.startsWith(command_char);
  278.     }
  279.    
  280.     /**
  281.      * Extracts the command from the message
  282.      */
  283.     private String getCommand(String msg) {
  284.         int end = (msg.indexOf(' ') == -1 ? msg.length() : msg.indexOf(' '));
  285.         return msg.substring(command_char.length(), end);
  286.     }
  287.    
  288.     /**
  289.      * Returns the exact name of someone, for instance GigaFide would return gigafide
  290.      */
  291.     private String getTrueName(Channel ch, String str) {
  292.         str = str.toLowerCase();
  293.         for (String nick : ch.getNicks()) {
  294.             if (str.equals(nick.toLowerCase()))
  295.                 return nick;
  296.         }
  297.         return null;
  298.     }
  299.  
  300. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement