I few days ago, I wrote a tellbot for my fellow French demosceners. It was designed to run on our public channel (#demofr on IRCNet). I wrote it Haskell and it took me something like only six hours to write it and release the version 0.1.0.0.
Only one hour after the first release was taking place a drama that’s split up the channel into smithereens. I won’t be going into any further details since everyone now knows what really happened in there. The important thing is that I fixed some issues – directly or indirectly related to that drama – and released another version.
Yesterday, I spent some time on changing the way the bot works. In the first place I designed it to be able to read your messages. If you want to leave a message to the user foo, you just had to type that in your favorite IRC client:
!tell foo I just wanted to tell you that […]
That message was delivered later when foo said something – no matter whether he’s already there, or joining, or whatever, he had to say something.
This behavior is quite convenient and I still think it’s a good thing. Some people have IRC autoconnect hooks when starting their machine so they can join their channels without any effort – I think it’s wrong but it’s another debate – but in fact they don’t read immediately messages nor hilights on IRC. So passing along messages when the recipient says something is a good idea. The drawback is about lurkers: if you’re lurking, and reading someone who’s using the !tell command to tell you something, if you don’t right answer back, and talk the day after that, you’ll be told the message anyway. This is normal to me, but might be quite annoying for some folks.
Then comes the 0.2.0.0 version of my tellbot. Now, the bot refuses to record your message if the recipient is already there, in the same room you and the bot are. It only enables you to leave a message to another folk if he’s not there. The message is delivered when the guy joins the channel.
You can find the source code here:
You can find the source code here:
What do you think?
I think I saw this on the #haskell channel.
ReplyDeleteI had implemented tell on my own irc bot (https://github.com/pathsny/node-irc-relay stupid name), using your version 0.1.0.0 approach. it's quite popular and does the same thing. Since there are many people who lurk even when offline for a day or two, the version 0.2.0 approach is not very good because it goes past the scrollback of their client sometimes.
That said, the most powerful feature that made the tell very useful in my channel was to track nick changes. The bot keeps track of all the nicks a particular person has been seen with (and has some admin commands to manage it when necessary). This made it possible to deliver messages to people even when they adopt several nicks.
Some problems we had with tell were 1) the lurking problem you mentioned 2) telling multiple people the same thing (I eventually implemented multi-tell and topic based tells) 3) people sometimes wanted to pass messages in confidence, so I added a message box for private communications that work like tells. :)
I thought of the private tell as well, I think it’s a good idea. Now, your multi-tell idea is neat! I think it’ll be my 0.2.1 or 0.2.2 :)
ReplyDeleteI know leaving the message after a join is not that good, I’m against that, but others think it’s better. A mix between that and the first solution will solve everything I guess.
Great blog post.
ReplyDelete