75% found this document useful (4 votes)
3K views

Making A Java IRC Bot With The PircBot Framework

IRC stands for "Internet Relay Chat" Created by Jarkko Oikarinen in 1988 and still growing in popularity An IRC server allows people to chat in channels (rooms or groups), or privately people from all over the world can use it IRC servers can be joined together to provide vast networks with thousands of users Copyright Paul Mutton, Using IRC a user runs a client program to connect to The IRC server the client program allows you to send and receive messages to and from other users Some popular IRC clients

Uploaded by

Oleksiy Kovyrin
Copyright
© Attribution Non-Commercial (BY-NC)
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
75% found this document useful (4 votes)
3K views

Making A Java IRC Bot With The PircBot Framework

IRC stands for "Internet Relay Chat" Created by Jarkko Oikarinen in 1988 and still growing in popularity An IRC server allows people to chat in channels (rooms or groups), or privately people from all over the world can use it IRC servers can be joined together to provide vast networks with thousands of users Copyright Paul Mutton, Using IRC a user runs a client program to connect to The IRC server the client program allows you to send and receive messages to and from other users Some popular IRC clients

Uploaded by

Oleksiy Kovyrin
Copyright
© Attribution Non-Commercial (BY-NC)
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
You are on page 1/ 31

Java and IRC

Making a Java IRC Bot With


The PircBot Framework

Copyright Paul Mutton, http://www.jibble.org/pircbot.php 1


What Is IRC?
 IRC stands for “Internet Relay Chat”
 Created by Jarkko Oikarinen in 1988
and still growing in popularity
 An IRC server allows people to chat in
channels (rooms or groups), or
privately
 People from all over the world can use
it
 IRC servers can be joined together to
provide vast networks with thousands
Copyright Paul Mutton, http://www.jibble.org/pircbot.php 2
Using IRC
 A user runs a client program to
connect to the IRC server
 The client program allows you to send
and receive messages to and from
other users
 Some popular IRC clients are: -
 mIRC
 BitchX
 xchat
Copyright Paul Mutton, http://www.jibble.org/pircbot.php 3
Nicks, Channels and
Operators
 Each user must have a unique
nickname
 Commonly referred to as a “nick”
 Must not contain certain characters, e.g.
spaces
 Channel names must start with # or &
 Some users may be channel operators
 Can kick other users out of their channel
 Can “op” and “deop” other users in the
channel Copyright Paul Mutton, http://www.jibble.org/pircbot.php 4
IRC Protocol
 The IRC protocol is text-based
 RFC 1459 defines how messages are
sent from client to server and server to
client
 TCP sockets are used for connecting
 Some IRC servers will support extra
commands that are not in RFC 1459
 The protocol is asynchronous in nature

Copyright Paul Mutton, http://www.jibble.org/pircbot.php 5


What Is an IRC Bot?
 Bot is short for “robot”
 An IRC Bot is a special type of IRC client
 Does not require a human user
 Often responds automatically to certain
events
 One analogy is to think of an IRC Bot as
a normal IRC client, but where the
human user has been replaced by a
program!
Copyright Paul Mutton, http://www.jibble.org/pircbot.php 6
What Can IRC Bots Do?
 Tell people what the time is
 Pass messages on to other users
 Display information from TV listings
 Perform simple mathematics
 Send and receive files
 Monitor channels to generate statistics
 ... anything you want!

Copyright Paul Mutton, http://www.jibble.org/pircbot.php 7


Using Bots Sensibly
 Never annoy other users with your Bot
 Only place your Bot in channels where
it may be of use or amusement
 Bots should only speak when spoken
to!
 Make the purpose of your Bot clear
 Make it clear that you own your Bot
 Never try to pretend that it’s not a Bot!

Copyright Paul Mutton, http://www.jibble.org/pircbot.php 8


What is PircBot?
 A framework for writing IRC Bots with
Java
 Simplifies the task of writing an IRC Bot
 No need to worry about the underlying
protocol
 Very simple Bots can be written within
minutes!
 Event-driven architecture
 Can make a Bot that responds to certain
events
Copyright Paul Mutton, http://www.jibble.org/pircbot.php 9
Where Can I Download
PircBot?
 The PircBot homepage
 http://www.jibble.org/pircbot.php
• Documentation
• changelog
• PircBot FAQ
• Examples of some Bots that use PircBot
 Download the zip file
 Contains a file named pircbot.jar
 Also contains a directory full of
documentation
Copyright Paul Mutton, http://www.jibble.org/pircbot.php 10
Extending PircBot
 To use PircBot, you must import its
package
 import org.jibble.pircbot.*;
 PircBot is an abstract class
 You cannot instantiate it
 You must extend it and inherit its
functionality
 You can override some of the methods in
the PircBot class to respond to certain
events
Copyright Paul Mutton, http://www.jibble.org/pircbot.php 11
An Example: SimpleBot

import org.jibble.pircbot.*;

public class SimpleBot extends PircBot {


public SimpleBot() {
setName(“SimpleBot”);
}
}

Copyright Paul Mutton, http://www.jibble.org/pircbot.php 12


Connecting To an IRC Server
public static void main(String[] args) {
SimpleBot bot = new SimpleBot();
bot.setVerbose(true);
try {
bot.connect(“compsoc1.ukc.ac.uk”);
}
catch (Exception e) {
System.out.println(“Can’t connect: ” + e);
return;
}
bot.joinChannel(“#bots”);
}

Copyright Paul Mutton, http://www.jibble.org/pircbot.php 13


Some Notes About SimpleBot
 SimpleBot.java
 The setName method is inherited from the
PircBot class and sets the nick that will be
used when the Bot joins an IRC server
 Connecting to an IRC server
 setVerbose(true) causes everything to be
printed out as it arrives from the IRC server
 Each method in the PircBot class is fully
described in the provided API
documentation
Copyright Paul Mutton, http://www.jibble.org/pircbot.php 14
Making SimpleBot Tell the
Time
 In your SimpleBot class, override the
onMessage method: -
public void onMessage(String channel, String sender,
String login, String hostname,
String message) {

if (message.equalsIgnoreCase(“time”)) {
String time = new java.util.Date().toString();
sendMessage(channel, sender + “: ” + time);
}

Copyright Paul Mutton, http://www.jibble.org/pircbot.php 15


Running Your IRC Bot
 pircbot.jar contains the classes for
PircBot
 Add this file to your classpath when you
compile or run your IRC Bot manually,
e.g.

javac –classpath pircbot.jar;. *.java


java –classpath pircbot.jar;. SimpleBot

 Note: Unix users should use “:” instead16


Copyright Paul Mutton, http://www.jibble.org/pircbot.php
Other Built-in PircBot
Features
 DCC send/receive files
 DCC chat
 Coloured messages
 Maintain lists of joined channels and
users
 List all channels on a server
 Many event-driven methods that may
be overridden
 onConnect, onDisconnect, onJoin, onOp,
etc. Copyright Paul Mutton, http://www.jibble.org/pircbot.php 17
Rejoining a Channel When
Kicked
public void onKick(String channel, String kickerNick,
String login, String hostname,
String recipientNick, String reason) {

if (recipientNick.equalsIgnoreCase(getNick())) {
joinChannel(channel);
}

}
 Note that we only attempt to rejoin the
channel if it was us that was kicked

Copyright Paul Mutton, http://www.jibble.org/pircbot.php 18


Reconnecting to an IRC
Server
public void onDisconnect() {

while (!isConnected()) {
try {
reconnect();
}
catch (Exception e) {
// Couldn’t reconnect.
// Pause for a short while before retrying?
}
}

}
Copyright Paul Mutton, http://www.jibble.org/pircbot.php 19
PircBot Ident Server
 Some IRC servers require you to
connect from a machine that runs an
Ident Server
 PircBot can emulate the functionality of
an Ident Server if you do not already
run one
 Provides the IRC server with your Bot’s
login when it asks for it

bot.startIdentServer();
Copyright Paul Mutton, http://www.jibble.org/pircbot.php 20
PircBot Flood Protection
 Some IRC servers disconnect clients
that send too many messages too
quickly.
 PircBot queues most outgoing
messages.
 Queued messages are sent with a small
delay between them to prevent
“flooding”
 You can get the current size of this
queue by calling the 21
Copyright Paul Mutton, http://www.jibble.org/pircbot.php
Colors and Formatting
Examples
String chan = “#bots”;

sendMessage(chan, Colors.BOLD + “Hello!”);


Hello!

sendMessage(chan, Colors.RED + “Red text”);


Red text

sendMessage(chan, Colors.BLUE + “Blue text”);


Blue text

Copyright Paul Mutton, http://www.jibble.org/pircbot.php 22


Further Text Formatting

sendMessage(chan, Colors.BOLD + Colors.RED +


“Bold and red”);
Bold and red

sendMessage(chan, Colors.BLUE + “Blue “ +


Colors.NORMAL + “normal”);
Blue normal

Copyright Paul Mutton, http://www.jibble.org/pircbot.php 23


DCC Send File
File file = new File(“c:/stuff/elvis.mp3”);
String nick = “Dave”;
int timeout = 120000;

dccSendFile(file, nick, timeout);

 Target client must be able to establish


a TCP connection to your Bot to receive
the file

Copyright Paul Mutton, http://www.jibble.org/pircbot.php 24


User List Example
 onUserList is called after we join a
channel
 This example overrides the onUserList
method and simply prints out each nick

public void onUserList(String channel, User[] users) {


for (int i = 0; i < users.length; i++) {
User user = users[i];
String nick = user.getNick();
System.out.println(nick);
}
} Copyright Paul Mutton, http://www.jibble.org/pircbot.php 25
Multiple Server Support in
PircBot
 An individual instance of a subclass of
PircBot can only join one IRC server at a
time
 Multiple server support can be achieved
by creating multiple instances
 Create a class to control a Collection of
PircBot objects and allow them to interact

Copyright Paul Mutton, http://www.jibble.org/pircbot.php 26


IRC Bots Based On PircBot (1)
 ComicBot
 Creates comic strips out of things that
people say

Copyright Paul Mutton, http://www.jibble.org/pircbot.php 27


IRC Bots Based On PircBot (2)
 Monty
 The first ever PircBot!
 ‘Learns’ from what it sees other people
saying
 Dictionary and thesaurus lookup feature
 Can remind people to do things after a set
time
 Shows TV schedule listings
 Performs google searches
 Calculates results of mathematical
28
expressions
Copyright Paul Mutton, http://www.jibble.org/pircbot.php
IRC Bots Based On PircBot (3)
 SocialNetworkBot
 Attempts to produce graphical
representations of “who talks to who” on
IRC channels

Copyright Paul Mutton, http://www.jibble.org/pircbot.php 29


An IRC Client Based On
PircBot
 ScreenIRC
 IRC client with a Swing GUI
 Can be ‘detached’ from a server and
reconnected without appearing to have
ever left

Copyright Paul Mutton, http://www.jibble.org/pircbot.php 30


Final Words...
 If you want to make your own IRC Bot
that uses PircBot, then remember that
these slides only provide a briefest
glimpse into what you may need to
know
 Refer to the API documentation that is
included inside the zip file
 A good starting place is to read the
documentation for the PircBot class
Copyright Paul Mutton, http://www.jibble.org/pircbot.php 31

You might also like