Make a simple IRC bot which does simple task like greeting user.
(You may see this RFC document.)
Write a complete program that perform these:
The program inputs
realnamefrom the user.
realnamewhich form is
[A-Za-z0-9]+should be allowed, but it isn't important whether other forms are allowed. For example, if the user wants
realname, the program should use those names, but it isn't important whether the program can use
^^☆Rick Astley☆^^(which includes non-alphabet&decimals) as (
realname) or not, even thought this name may be rejected by the server.
The program inputs
serverAddressfrom the user.
- The form of
serverIPis the IP address of the server and
serverPortis the port num of the server.
- The form of
The program connects to port
serverPortat IRC server
serverIP, and it should set it's nickname as
nicknameand realname as
USER realname 0 * :realnameand
The program inputs a single
channelNamewhich doesn't include
#, and join to the channel
Send a private message
Hello, world!to the
#channelNamechannel like this:
PRIVMSG #channelName :Hello, world!
Then, the program does these:
A. If someone joins, greeting him by saying
#channelName, where @ is the nickname of him/her.
B. If the program is kicked, try re-joining.
C. If a person is kicked or banned, say
D. If a person leaves (
Goodbye, @!, where @ is the nickname of him/her.
E. If someone says some text including
turing test, say
I'm a human!.
F. If someone says some text including
6*9, quit by sending
QUIT :42to the server.
G. If someone says some text including
all your base are belong to us(case-insensitive), quit by sending
QUIT :What you say!to the server.
H. If someone says some text preceding with a space and above acts aren't performed by the text, say the sum of charcode of all (except the first space) chars in the text.
If an error is occurred
If an error (such as connection error or invalid
nickname) is occurred, you can do what you want to do. For example, if the
nickname is already in use, the program may stop, gets a new
nickname from the user, or automatically change the
nickname and retry.
- Should not use any internal functions or libraries which is for IRC client/bot making. i.e. something like IRC client libraries
- Should prompt what it'll input, before it gets an input. For example, before inputs
serverAddress, it should prompt
Write the address of server:,
serverAddress >, or some text that the user can recognize.
- Should work on several IRC servers using UTF-8. (i.e. not for single server)
- 's messages send to server shouldn't be
NOTICE. (RFC 2812, 3.3.2 Notice : The difference between
PRIVMSGis that automatic replies MUST NEVER be sent in response to a
- Should send a message where the request came from (
PINGed, of course.
Well, I just made this, because there was no puzzle about IRC bot.
After reading @dmckee's comment, I changed the rule for choosing winner.
If somehow the program can connect to a channel (even if it's not
If the program can perform step 1~5,
For each tasks A~H in step 6, if the program implements,
For each six restrictions, if the program follows that,
score = int(codelength/bonus).
Program with lowest score is winner. If two answers have same score, then the answer with highest votes wins.
EDIT Edit : I think
1.05 in step 4 and 5 should be adjusted slightly bigger.. What do you think about this?
The winner is decided, however, I think there was too few entries.
Anyone still may submit the code.. :P