Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.util.ArrayList;
- import java.util.HashMap;
- import java.util.Random;
- import java.util.Timer;
- import java.util.TimerTask;
- import jerklib.*;
- import jerklib.events.*;
- import jerklib.events.IRCEvent.*;
- import jerklib.listeners.*;
- public class TinkerBot implements IRCEventListener {
- /**
- * Constants
- */
- private static final String BOT_NAME = "TinkerBot";
- private static final String NS_PASSWORD = "****";
- private static final String SERVER = "irc.geekshed.net";
- private static final String CHANNEL = "#tinkernut";
- private static final String BADWORDS = "fuck fucked fucking suck sucked sucking" +
- "bitch bitched bitching slut cunt shit poo pee penis cock dick pussy vagina" +
- "";
- /**
- * Globals
- */
- private ConnectionManager con;
- private Channel channel;
- private String command_char;
- private String greetings;
- private ArrayList<String> admins;
- private String[] badwords;
- private HashMap<String, User> users;
- private Timer announcer;
- private String announcerStr;
- private long announcerPeriod;
- /**
- * Class constructor
- */
- public TinkerBot() {
- // Initialize globals
- con = new ConnectionManager(new Profile(BOT_NAME));
- command_char = "!";
- greetings = "Welcome, %s";
- admins = new ArrayList<String>();
- admins.add("SBSTP");
- badwords = BADWORDS.split(" ");
- users = new HashMap<String, User>();
- announcer = new Timer("announcer");
- announcerStr = null;
- announcerPeriod = -1;
- // Start TinkerBot
- con.requestConnection(SERVER).addIRCEventListener(this);
- }
- @Override
- /**
- * Callback whenever the Bot receives data.
- */
- public void receiveEvent(IRCEvent e) {
- Type type = e.getType();
- // Connects to server successfully
- if (type == Type.CONNECT_COMPLETE) {
- e.getSession().join(CHANNEL);
- // Connects to channel successfully
- } else if (type == Type.JOIN_COMPLETE) {
- channel = ((JoinCompleteEvent) e).getChannel();
- e.getSession().sayPrivate("nickserv", "identify " + NS_PASSWORD);
- // User joins channel
- } else if (type == Type.JOIN) {
- JoinEvent je = (JoinEvent) e;
- je.getChannel().say(String.format(greetings, je.getNick()));
- // User leaves channel
- } else if (type == Type.QUIT) {
- QuitEvent qe = (QuitEvent) e;
- users.remove(qe.getNick());
- // Receives message in channel
- } else if (type == Type.CHANNEL_MESSAGE) {
- MessageEvent me = (MessageEvent) e;
- String msg = me.getMessage();
- // Ensure everyone has a 'User' object
- if (users.get(me.getNick()) == null) {
- users.put(me.getNick(), new User());
- }
- User user = users.get(me.getNick());
- if (isAdmin(me.getNick()) && isCommand(msg)) {
- String cmd = getCommand(msg);
- if (cmd.equals("help"))
- cmdHelp(me);
- else if (cmd.equals("kick"))
- cmdKick(me);
- else if (cmd.equals("admins"))
- cmdAdmins(me);
- else if (cmd.equals("add"))
- cmdAdd(me);
- else if (cmd.equals("rem"))
- cmdRem(me);
- else if (cmd.equals("greetings"))
- cmdGreetings(me);
- else if (cmd.equals("roll"))
- cmdRoll(me);
- else if (cmd.equals("announce"))
- cmdAnnounce(me);
- } else {
- checkLanguage(me, user);
- }
- users.put(me.getNick(), user);
- }
- }
- //==========================================================================
- // Commands
- //==========================================================================
- /**
- * Help command
- */
- private void cmdHelp(MessageEvent me) {
- }
- /**
- * Kick command
- */
- private void cmdKick(MessageEvent me) {
- String msg = me.getMessage(),
- nick = null,
- reason = null;
- int start = msg.indexOf(' ') + 1;
- if (start == -1) {
- me.getChannel().say("A username is required!");
- return;
- }
- int space = msg.indexOf(' ', start);
- if (space != -1) {
- nick = msg.substring(start, space);
- reason = msg.substring(space + 1);
- } else {
- nick = msg.substring(start);
- reason = "";
- }
- me.getChannel().kick(nick, reason);
- }
- /**
- * Admins command
- */
- private void cmdAdmins(MessageEvent me) {
- StringBuilder builder = new StringBuilder();
- for (String admin : admins) {
- builder.append(admin);
- builder.append(" ");
- }
- me.getChannel().say(builder.toString());
- }
- /**
- * Add command
- */
- private void cmdAdd(MessageEvent me) {
- String msg = me.getMessage(),
- nick = msg.substring(command_char.length() + 4);
- if (isAdmin(nick))
- return;
- nick = getTrueName(me.getChannel(), nick);
- admins.add(nick);
- me.getChannel().say("User " + nick + " was added!");
- }
- /**
- * Rem command
- */
- private void cmdRem(MessageEvent me) {
- String msg = me.getMessage(),
- nick = msg.substring(command_char.length() + 4);
- if (!isAdmin(nick))
- return;
- nick = getTrueName(me.getChannel(), nick);
- admins.remove(nick);
- me.getChannel().say("User " + nick + " was removed!");
- }
- /**
- * Grettings command
- */
- private void cmdGreetings(MessageEvent me) {
- String msg = me.getMessage();
- greetings = msg.substring(command_char.length() + 10);
- me.getChannel().say("New Greetings: " + String.format(greetings, me.getNick()));
- }
- /**
- * Roll command
- */
- private void cmdRoll(MessageEvent me) {
- me.getChannel().say("" + (new Random().nextInt(100) + 1));
- }
- /**
- * Announce command
- */
- private void cmdAnnounce(MessageEvent me) {
- String msg = me.getMessage();
- if (msg.equals(command_char + "announce start")) {
- announcer.scheduleAtFixedRate(new TimerTask() {
- @Override
- public void run() {
- channel.say(announcerStr);
- }
- }, 0, announcerPeriod);
- me.getChannel().say("Announcer started!");
- } else if (msg.equals(command_char + "announce stop")) {
- announcer.cancel();
- announcer.purge();
- me.getChannel().say("Announcer stopped!");
- } else {
- int start = msg.indexOf(' ') + 1;
- int end = msg.indexOf(' ', start);
- try {
- announcerPeriod = Integer.parseInt(msg.substring(start, end)) * 60 * 1000;
- announcerStr = msg.substring(end + 1);
- me.getChannel().say("Announcer configured, use \""+ command_char + "announcer start\" to start annoucing!");
- } catch (NumberFormatException e) {
- me.getChannel().say("A period is required!");
- }
- }
- }
- /**
- * Language checker
- */
- private void checkLanguage(MessageEvent me, User user) {
- String msg = me.getMessage().toLowerCase();
- int count = 0;
- for (String badword : badwords) {
- if (msg.contains(badword)) {
- count++;
- }
- }
- if (count > 0) {
- user.warnings++;
- if (user.warnings == 1) {
- me.getChannel().say(me.getNick() + ": please watch your language!");
- } else if (user.warnings >= 2) {
- me.getChannel().kick(me.getNick(), "Language");
- }
- }
- }
- //==========================================================================
- // Utilities
- //==========================================================================
- /**
- * Checks if the given nick is an admin
- */
- private boolean isAdmin(String nick) {
- nick = nick.toLowerCase();
- for (String admin : admins) {
- if (nick.equals(admin.toLowerCase()))
- return true;
- }
- return false;
- }
- /**
- * Checks if the given string is a command
- */
- private boolean isCommand(String msg) {
- return msg.startsWith(command_char);
- }
- /**
- * Extracts the command from the message
- */
- private String getCommand(String msg) {
- int end = (msg.indexOf(' ') == -1 ? msg.length() : msg.indexOf(' '));
- return msg.substring(command_char.length(), end);
- }
- /**
- * Returns the exact name of someone, for instance GigaFide would return gigafide
- */
- private String getTrueName(Channel ch, String str) {
- str = str.toLowerCase();
- for (String nick : ch.getNicks()) {
- if (str.equals(nick.toLowerCase()))
- return nick;
- }
- return null;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement