So I just pulled the plug on BisqBot.
And I am actually feeling teary-eyed. It is weird.
First, a bit of history.
As some of you might know, BisqBot was an IRC bot I have had running for a long time. I originally developed it in 1996 or so. Where I have been, the bot has never been very far. For the longest time, it only appeared on IRCNet, the European offshoot of EFnet. In 2004, for the first time, I brought it into a foreign network, to be present on #nesvideos, which operated on irc.EnterTheGame.com at that time.
The purpose of BisqBot, since day zero, was to be a personal toolbox for me. Since I spent a lot of time in IRC, it made sense for me to create commandline tools, that can also be used from the confines of IRC. Doing it this way made it also possible for other people in IRC to use these tools. I made quite a lot of programs in BisqBot during these years. Many of them utilized external Internet services in a way or another.
I am going to try listing all of them:
Languages:
– Multilingual Bible search tools (all translations that are available on
ftp://ftp.funet.fi/pub/doc/religion/christian/Bible/texts/ and several others too).
– Japanese language search tools (basically, commandline versions of most of the tools, that are still available on
http://bisqwit.iki.fi/japtools/)
– Spelling out long numbers in Finnish language (such as 1957156 = miljoona yhdeksänsataa viisikymmentä seitsemän tuhatta sataviisikymmentä kuusi)
– Spelling Finnish words in syllables (obviously does not work properly for other languages like English, didn’t stop people from trying and laughing at the results)
– Deconjugating Finnish words: Reporting their grammatical form and base form
– Translating English text into Finnish
– Multilingual dictionary database searching
– Parsing discussion on channels, and interjecting that “___ sux” or “__ rulez” with proper grammar. Involves deconjugating and reconjugating Finnish.
Mathematics:
– Numeric factorization
– Several different calculators and expression evaluators
– Currency conversions (using YLE Teletext pages as backend)
Multimedia:
– Finnish YLE Teletext browsing (using mIRC colors)
– Reporting upcoming Finnish TV programmes, with searching functionality
– Some mIRC colored ASCII arts
[img_right]http://bisqwit.iki.fi/kala/snap/bisqbot_no_igo_thu.png[/img_right]Databases & online:
– Definitions: A custom database of definitions maintained by people in IRC. Most of them have been written by teenagers on #pkmn and are in Finnish language
– Translating Internet country codes into countries & vice versa
– Explaining what a random term means using absurd terms
– Reporting upcoming anime fansub release on animesuki.com
– Reporting updates to RecentChanges on senseis.xmp.net
– Reporting 7d/pro games about to commence on KGS
– Reporting new headlines on Slashdot.org
– Reporting (privately) when Bisqwit gets a phonecall and who it is from (when I had ISDN)
– Planning of train routes using VR.fi
– Planning of routes using Google Maps
– GeoIP: Reporting which country given IP address belongs to
– Reporting the current local time
– Translating between characters and HTML entities
– Googlefight: Reporting which search term out of two gives more results in Google
Toys:
– Random numbers (2=coin, 52=cards, other=dice) (one or more dice, gives sum, some easter eggs)
– Generating a random catboy or catgirl
– Fetching a random present from Warehouse 23
– Insulting a person like Captain Haddock would (Finnish, Swedish and English supported)
Games:
– Pokémon features, see below for a whole separate category
– XOZGE 2: A go-moku clone for 2–5 players
– The Battleship board game
– A guess-the-number game
– Go: Play Go (囲碁) against your opponent, or against GnuGo. GnuGo will commentate on your moves.
Pokémon:
– A database extracted from Pokémon 1st and 2nd generation game ROMs drives an extensive set of features
– Move lookup: Including random move
– Item lookup: Including random item
– Pokédex: Search by name, type, evolution, etc.: Including random Pokémon
– Hitting probability calculators
– Battle calculator with extensive syntax
Agent network:
– Every IRC client that I was running, and most of those that were run on my server by others, had an “agent” script installed. This agent script technically gives BisqBot complete access over the IRC client, but users would not see anything different. (It was always used with permission only.) It was used for things like load balancing and cantrips. BisqBot obviously was an agent of BisqBot, but so was Bisqwit, and so was also NESVideoAgent back when it ran on bisqwit.iki.fi.
– The Agent network would make it possible for BisqBot to not only see everything that happens on any channel where any agent is on, but it would also enable BisqBot to say (or control) things
through the agent’s IRC client, if he was not present himself.
– Maintaining statistics of amount of text spoken by each person on each channel seen by any agent. On approved channels, these statistics would be reported daily.
– On approved channels, people who sweared would be subject to punitive measures. On non-approved channels, BisqBot would still choose to ignore a person who swears and not respond to their requests.
– Op-lists, ban-lists, kick-lists, and other similar measures, that are standard in any administrative IRC bot. All of these actions were dealt through the agent network.
– A “seen” database, that would be used to query when a person was last seen somewhere doing something. The database extends as far back as January 1997, almost interruptionless until September 2015. If you wrote a stupid quit message in 1999 and I was there, chances are it’s in BisqBot’s database. Events would be collected into the database from all agents.
– Effectively, NESVideoAgent was actually BisqBot in disguise. The only merit that the instance known as NESVideoAgent had, was to be agent of a specific name. All of its actions would be arbitrated by BisqBot.
DCC CHAT:
– Obviously some commands outputted way too much text to print in IRC. These commands would be available in DCC CHAT only, where there are no limits on the amount of text one can transfer, as it bypasses the IRC network altogether.
– The agent network used raw DCC sockets.
– People who were simultaneously in DCC CHAT with BisqBot could also communicate through that chat; the DCC CHAT line would appear as another channel, much like EggDrops do.
Polite requests:
– People on #nesvideos were often amused by my overly polite yet vague requests to BisqBot, such as: “BisqBot, please do something”. Sometimes I would speak in Pikachu language. And BisqBot would comply: “Yessiree.” or “All right. Anything else?”. Others, who tried, would get one of the random 40 responses, including: “Your proposition is intriguing, but I must refuse.”, “I don't suppose you will like my answer.”, and “Wrong person asking.”. The Agent script had a special feature: When you enter a line on IRC that starts with “BisqBot, “, the full command is sent to BisqBot through the DCC RAW line. But the line that gets sent to IRC will be modified, and the command will be replaced with “do something”, or “say something”, with adverbial modifiers depending on situation. The bot would ignore the line that gets sent to IRC, and reacts to the line it receives on DCC RAW behind the scenes. And just to keep up the appearances, it would put a dummy response on the IRC channel. If the bot was not actually present on the channel, the dummy response could be sent by the same agent who made the request. Oops.
Technically speaking, BisqBot was an ircII script. It was running a completely normal ircII chat client, the same kind that I am also running, and have been running since 1995 or so. Around that ircII script core were dozens of utility programs written in a number of different languages, including C++, Ruby and PHP.
The first years BisqBot was running on the Internet service provider's shell host. I believe that was Icon at that time. Some year later, I set up my own server, and I moved BisqBot there, and it has been there since that. It may also have run on Samoilu.net at some point. I'm not exactly sure, as I don't have logs from those times.
BisqBot has maintained a lot of channels in the past.
– From 1996 to 2000 it operated a number of channels in IRCnet, mostly #Christian, #Kerava and #Raamattu3.
– From 2000 to 2004 it operated #pkmn on IRCnet. I created this channel as a home to the Pokémon fandom of that time. I have many fond memories of that time.
– From 2004 to 2008 it operated #nesvideos and #tasvideos on EnterTheGame and FreeNode.
– Since 2008 it has sometimes hung out on FreeNode, sometimes on IRCnet.
Today came the end to all that.
So what happened?
A combination of several things. Firstly, there’s me. For the past several years, I have not really been active at IRC anymore. It may sometimes take several days before I notice someone has messaged me. This reflects well how little use I have had for BisqBot, too. Then there’s Internet. BisqBot keeps disconnecting from IRC servers once in a while. FreeNode is an offender in this regard. And because I’m rarely actively present myself, it may sometimes take weeks, maybe months until I notice that BisqBot isn’t actually online, even though it has a script that is supposed to reconnect automatically.
But the worst is this:
Bit rot. Yes, during the years, several features that I wrote into BisqBot, that I spent a lot of time crafting with joy and putting my heart in it, suddenly stopped working, because the network service it relied on changed its format, or was shut down alltogether. But even some features that did not use an online service, stopped working eventually. Perfectly good programs can just simply stop working. It happens. Maybe they depend on libraries that are not available anymore. There are a number of reasons. The outcome is always the same: The feature can no longer be used.
And as such, I decided to give a proper equivalent of an eulogy to the bot. And knowing how much time I have invested in it, during what accounts to more than half of my life, it makes me sad, even though it logically should not; it's just a script collection. And that is why I am making this post. Hopefully you enjoyed reading.