Task
Make a simple IRC bot which does simple task like greeting user.
Detail
(You may see this RFC document.)
Write a complete program that perform these:
The program inputs
nicknameandrealnamefrom the user.- All
nicknameandrealnamewhich form is[A-Za-z0-9]+should be allowed, but it isn't important whether other forms are allowed. For example, if the user wants1234qwertyasnicknameand5319009asrealname, the program should use those names, but it isn't important whether the program can use^^☆Rick Astley☆^^(which includes non-alphabet&decimals) as (nicknameorrealname) or not, even thought this name may be rejected by the server.
- All
The program inputs
serverAddressfrom the user.- The form of
serverAddressisserverIP:serverPort, whereserverIPis the IP address of the server andserverPortis the port num of the server.
- The form of
The program connects to port
serverPortat IRC serverserverIP, and it should set it's nickname asnicknameand realname asrealnameby sendingUSER realname 0 * :realnameandNICK nickname.The program inputs a single
channelNamewhich doesn't include#, and join to the channel#channelName.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
Hello, @!to#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
POW HAHA.D. If a person leaves (
PARTorQUIT), sayGoodbye, @!, where @ is the nickname of him/her.E. If someone says some text including
Turing testorturing test, sayI'm a human!.F. If someone says some text including
6*9, quit by sendingQUIT :42to the server.G. If someone says some text including
all your base are belong to us(case-insensitive), quit by sendingQUIT :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.
Restriction
The program
- 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 promptWrite the address of server:,serverIP:serverPort >,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 betweenNOTICEandPRIVMSGis that automatic replies MUST NEVER be sent in response to aNOTICEmessage.) - Should send a message where the request came from (
#channelNameornickname). - Should
PONGwhenPINGed, of course.
PS
Well, I just made this, because there was no puzzle about IRC bot.
Edit
After reading @dmckee's comment, I changed the rule for choosing winner.
Default
bonus= +0If somehow the program can connect to a channel (even if it's not
#channelName),bonus= 1If the program can perform step 1~5,
bonus*= 2.For each tasks A~H in step 6, if the program implements,
bonus*=1.2.For each six restrictions, if the program follows that,
bonus*=1.05.
and 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.2 and 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