Bot Projects

last updated 2021-12-30

"Bots" are, in this context, automated programs that generate something and post it for entertainment purposes. I became interested in these kinds of code experiments around 2012 after seeing such work by creators like Darius Kazemi and Allison Parrish. This page is an exhaustive list of bots I've made over the years, mostly using the Python programming language. In the spirit of sharing knowledge, source code is available for all but one.

Twitter list: JP's bots

As the Film Ends

Status: Active, since 2014-05
Posts: every day at 4pm PST (matinée time)
Twitter: @endingsummary
Mastodon: @endingsummary@mastodon.social
Source code: heptapod.host/jp-lebreton/plotbot

Most Wikipedia pages for a given film provide at least a brief plot synopsis. Using the sum total of all film pages on Wikipedia as a corpus, this bot picks a random film and posts the final sentence from its plot summary. Spoilers are definitely possible, but given the depth of the corpus it'll usually be a film you've never heard of. A reverse-search (searching for the post's text on Wikipedia) will almost always find the film that has been excerpted on a given day.
Text post: "Frankenstein, disappointed and having apparently learned a lesson, walks away silently."

SimCity 2000 Traffic Helicopter

Status: Active, since 2020-07
Posts: every day at 8:30am PST (morning commute)
Twitter: @sc2000bot
Mastodon: @sc2000bot@mastodon.online
Source code: heptapod.host/jp-lebreton/sc2000bot

In the decades since its release in 1993, players have created thousands of cities in the classic builder game SimCity 2000. With heavy lifting done almost entirely by the OpenCity2k project, this bot picks from a private archive of hundreds of user-created cities and posts a random glimpse of a cityscape. The game's timeless pixel art and the creativity of its players provide the interest here.
Image post showing an isometric view of a city (this one called Retro) from the game SimCity 2000.

Capcom VS Everyone

Status: Active, since 2018-09
Posts: every day at 12pm PST (high noon)
Twitter: @vs_everyone
Mastodon: @vs_everyone@mastodon.social
Source code: heptapod.host/jp-lebreton/vsbot

Possibly my most elaborate and hardest to explain bot, Capcom VS Everyone (no affiliation with Capcom, or anything else really) depicts pre-match "Versus" screens from a fictitious fighting game whose character roster includes a seemingly infinite breadth of fictional characters from every corner of pop culture.
The bot draws from a private, hand-built corpus that includes character names, fiction of origin, portrait image, and metadata to construct amusing team-ups and showdowns. In early 2021 I wrote a new tool for managing this corpus, which I describe briefly in this thread. At some point I would like to do a video explaining all the ridiculous things going on behind the scenes of this bot; when I finally do so I will be sure to link it here.
Image post showing a match-up between The Joker and Carmen Sandiego VS Vizzini (from Princess Bride), in a graphical frame that evokes a fighting game pre-match screen.

WADbot

Status: Active, since 2014-04 (overhauled 2015-05, and again 2020-08)
Posts: every day at 6:30pm PST
Twitter: @WADb0t
Mastodon: @WADb0t@mastodon.online
Tumblr: wadbot.tumblr.com (this is where the image posts are actually hosted)
Source code: heptapod.host/jp-lebreton/wadbot

Mere months after id Software's landmark 1993 first person shooter Doom was released, fan-made level editors emerged on the net. Since then, the community's output has grown to tens of thousands of levels and mods - commonly referred to by their file format, WADs - and over 25 years later shows no signs of stopping.
WADbot dives into this massive vault of community work, opens up a random level, tries to find the most "interesting" (high detail, mostly) screenshots, and posts them with an excerpt from and link to the database entry.
Image post showing a screenshot of a Doom level, a fanciful house. Map summary text is "DREMHOUS.WAD, MAP01: Dream House"

ROT13 Scavenger

Status: Active, since 2017-06
Posts: every night at 11:59pm PST Twitter: @rot13scavenger
Source code: heptapod.host/jp-lebreton/rot13bot

ROT13 is a very simple cipher people frequently use online to obscure spoilers, quasi-private whispers, et cetera. This website lets you play with the technique to get a feel for it.
This bot searches twitter for common words ("the", "was", etc) in ROT13, on the assumption that most or all of the resulting posts are written in the cipher. It then simply un-ROT13s the post text, and strips out any @ usernames to keep it (mostly) anonymous.
Text post: "I started laughing when Gaius did his gold anime attack. what the hell was this questline, what a waste of really good animation"

welcome to

Status: Active, since 2017-02
Posts: every day at 9:30am PST
Twitter: @__welcome_to__
Source code: heptapod.host/jp-lebreton/welcomebot

People use the construction "welcome to X" to convey a lot of different things: greetings to a newcomer, a new situation, sarcasm or exasperation. This bot searches twitter for posts that contain the phrase "welcome to" and posts what follows (excluding links and @ usernames).
Text post: "flavortown baby" (such that, with the title of the bot itself directly above, reads as "welcome to flavortown baby")

*Orz*

Status: Active, since 2014-05
Posts: wildly variable random periods of at least a few days
Twitter: @_orz_txt
Mastodon: @orz@mastodon.social
Source code: heptapod.host/jp-lebreton/orzbot

Posts random quotes from the enigmatic, alternately lovable and terrifying alien race the Orz from Star Control II: The Ur-Quan Masters, the 1992 cult classic space adventure from Toys for Bob.
Text post: "It is better to not *frumple* or else there is so much problems."

Random Sandwich

Status: Launched 2014-07, Retired 2016-07
Twitter: @sandwiches_bot
Source code: heptapod.host/jp-lebreton/sandwichbot

Invents and posts a randomly generated sandwich using a very simple implementation of a context-free grammar.
Text post: "The Mayor: Chicken, black forest ham with melted Gruyere on multi-grain, topped with shredded carrots, and remoulade."

At Bat Today

Status: Launched 2014-12, Retired 2017-02
Twitter: @_bat_today
Source code: heptapod.host/jp-lebreton/atbatbot

A gift for my father, this bot drew from the Baseball Reference website's database of at-bat information from almost a century of recorded baseball history, posting the players involved and outcome for a single at-bat on the same day as the post. During the off-season, posts would be chosen based on players' birthdays.
Unfortunately, changes in the source website's format broke this bot after a few years. Getting it working again would involve a total rewrite, with no guarantee that it wouldn't break again.
Text post: "Today in 1983: Larry McWilliams (PIT) vs Terry Kennedy (SDP), bot 4th 0 out: Flyball: RF/Sacrifice Fly; Garvey Scores"

Manny Calavera

Status: Launched 2013-07, Retired 2020-06
Twitter: @MannyPoetry
Mastodon: @MannyCalavera@mastodon.social
Source code: heptapod.host/jp-lebreton/mannybot

This was the bot that got me started. Drawing from the 1998 adventure game Grim Fandango's dialog bank for the "open mic poetry" sequence at the Blue Casket beatnik club, this bot generates free-association slam poems by the game's protagonist, Manuel Calavera, posting one new line each night.
Text post: "Good evening. I'd like to read a poem."

SteamDB Linux Update

Status: Launched 2014-06, Retired 2018-08
Twitter: @SteamDB_Linux

In the early years of Valve's push to support Linux, thousands of new ports of games became playable on Steam. SteamDB is an independent database that, until 2018, maintained a page that tracked possible additions of Linux support for new and existing games. I created this bot to post new findings from that page. At some point, the bot's scraping logic broke and Tin Tvrtković took over maintenance. Then in 2018 SteamDB discontinued their Linux support page, its purpose having more or less been served.
Text post: "New Game: American Truck Simulator", with a link to the game's entry on SteamDB



<< back to main page