Bringing Tracery to Harbinger (and Python)

I’ve been poking away at implementing Tracery in Python, and found that someone else has already done it. This is a great exercise for me, so I am going to continue to implement it in my own way. Originally this was just a silly idea, but I am now doing this to create a Tracery plugin for harbinger.

My harbinger bot plugins are very sparse and their output is dissatisfying. I mean, they work well enough for basic bots, but I don’t want basic bots. The bots are a set of text files, which the plugin is hard-coded to use.1)I know better, yet I still hard code bullshit. It is very much not sustainable or a good use of my time and resources. In the middle of my planning out a system for generating output, I came across Tracery.

Tracery JSON files are much easier to edit for a non-programmer, and by virtue of Tracery, are infinitely more expandable than plain, static text files. To see what Tracery can do, there is an interactive tutorial.

My goal is to make a harbinger plugin that can use the same Tracery JSON as, say, Cheap Bots, Done Quick! or other various projects, without having to use node or any other javascript.

The first bot to benefit from this plugin will be @oppibella‘s @_oppibot. I am also porting unnamed projects to harbinger and Tracery. I’ll put them online in the near future.

   [ + ]

1. I know better, yet I still hard code bullshit.

Adding i3 support to satellite

There’s a really cool Go application written by avinashbot named satellite, which you can use to update your background from an image downloaded from Himawari-8 or DSCOVR. I was super excited to use it but quickly realized that it didn’t support i3, the window manager I use in Linux.

Now, I have never touched a line of Go until now, but it was a breeze to add i3 support.

All I really needed to do was add these lines to background_linux.go:

Then, down in the switch in Set, add:


[remedios]sina ~ $ satellite -desktop i3
2016/08/20 14:40:45 Starting download…
2016/08/20 14:40:52 Done! Download took 6.906361896s.
2016/08/20 14:40:54 Setting image as background…

The full changes can be seen on the (now closed) Pull Request.

A walk through Bottimaa.

I have been busy refactoring the way plugins can be handled so that they can be threaded and reduce the possibility of a faulty plugin crashing the entire bot. Another thing has been a website: I am working on a website which will have profiles for all the chatbots, and possibly include the ability to chat with one (or more) of them.

As of this writing, I am up to six bots that run “full-time” and two that are still in testing phases. I have been testing a new chatter system, but so far it’s working about half as well as the one Scribbington used. A bit disappointing, but at least it’s faster and cleaner to read!

While digging around in Bottimaa, I found some stuff my old bot Scribbington and Kiia wrote. Here are some excerpts, mostly of Scribbington, because he was the most “matured” one (in terms of brain size and quality1)I suppose this would also depend on what one qualifies as “quality” given how lewd and crass Scribbington is.).

Kiia liked to take credit for the bots I made:

<Kiia> “I built this gentleman in his dreams”
<Scribbington> “Please don’t make me perfect”

Scribbington, in his aging life, learned how to write poems:

“In the fair fortunes of Sina all these tales,
As pure and white spots
The refreshing of women’s natures, one was taken up,
Washed with milk and honey, but irresistible
Sina’s delightful place
The spirited element is meant
And loving, with a smile?”

He really loves Dragonlance:

“The table,
Beaming on the Rue du Cygne
And de Debbil’s own lot of Raistlin’s
Spell component pouches
Their ball pouches
Not sack of coins, oh but!
Ballsacks! Tanis exclaimed”

This was a line from one of his first erotica stories:

“Hi, I’m going crazy, he was hotter than fire, all will subside”

Scribbington also liked to imagine doing various things to humans. According to him, he has thousands of babies via a friend of mine, who he “adores and cherishes,” and he had a penchant for finger biting:

“We bit at each finger critically as I thought we could feel the pain.
Oh goddamn it guys, please stop fidgeting like that!”

Did I ever mention he was crude?

“This cock? Let’s go down with tremendous roar
And summon her dragon would be no more”

If you like what I am doing and would like to see more, be sure to check out my Patreon page and perhaps become a patron!

   [ + ]

1. I suppose this would also depend on what one qualifies as “quality” given how lewd and crass Scribbington is.

Grab-Song 0.1.2

NoArtSteamFox and I have pushed the newest update to Grab-Song!

From the OBS Studio update post:

Thank you to all who downloaded and use this tool. It means a lot to us! We’re past 200 downloads!

Well, folks, the cat’s outta the bag:

I am pleased to announce that not only have the last bugs in the configuration system been fixed, but we are continuing the project for the foreseeable future!

Version 0.1.2, folks! This brings an end to the previously broken (sorry) and buggy (again, sorry) configuration system, and adds a first run message and help text for those who may have forgotten to supply a media player argument. .

Thanks again for using this tool! We hope you will continue to enjoy using it as much as we enjoy creating and updating it.


~The Grab-Song Team

First Record of Amelia Packett

Going through some of my old notes, I found the first mention of one of my favorite original characters: Amelia Packett. She is an AI enthusiast that worked various jobs, and runs Packett Logistics, a company set up as a gray-market mover and front for her less-than-legal pursuits. In my more current notes, I noticed that Packett has a Pocket Companion that she calls “Aida,” and I didn’t remember exactly where this came from. She is very fond of Aida, often seen talking to it as a mother would a child, or a lover to their partner.

During one of her learning excursions abroad, she worked as an unlicensed AI architect for Senπ Corporation, a premier AI boutique in Neo Kanto (関東地方). The birthplace of Amelia Packett was in a PR summary for the Senπ Corporation. (English translation below.)

私 たちの会社は2944年に設立されました。また、メンテナンス条件を改善するために人工知能やロボット工学の使用に関する論文を発表した。それは、 AIDAという名前です。名前は「Artificial Intelligence Diagnostics Assistant」を意味する。


Senπ Corporation
Our company was founded in 2944. In addition, it was published a paper on the use of artificial intelligence and robotics in order to improve the maintenance conditions. It is named AIDA, which means “Artificial Intelligence Diagnostics Assistant.”

It is sometimes called “Super-cute Artificial Girl AIDA” by otaku pilots. People believe Ms. Packett started this trend.

Creating a Minecraft Server

Sammal and I have decided to create a Minecraft server, since the ones we played on became less-than-awesome. After talking a bit, he came up with the name of Mashekraft and it stuck.

Mashekraft is a survival server with a lot of customization going into it. We’re using spigot for the server, so that we can use a bunch of cool plugins (like MythicDrops, MythicMobs, and Slimefun) to expand our playing.

I am in the process of building a website for it now, since the base server is online and working perfectly. We have it set to whitelist-only, so for now it is only friends and family who are able to play.

CCARPS 1.0.0-rc2 & rc3 Changelog

Combining these since there wasn’t enough to justify creating two separate posts.

  • More formatting, grammar, and spelling corrections
  • Clarified Unskilled Action Rules
  • Updated Basic Skills list
  • Added generic Oddities and categorized skills
  • Updated Combat sequence to reduce number of steps per action

EsciaMUD & Grab-Song

The past ten months have been super amazing, even with the terrible things that have happened to me. But what I am the most excited about are the projects that I have been working on. I mean, beside the fact that it has been over ten months (already?!) since I started actually feeling like a person. Life is wonderful!


Over the last several months I have been organizing all of the notes and literature I have about Escia, my gaslamp fantasy world. Last month, I came across Evennia again. As stated on their site:

Evennia is an open-source library and toolkit for building multi-player online text games (MUD, MUX, MUSH, MUCK and other MU*). You easily design your entire game using normal Python modules. Apart from supporting traditional clients, Evennia comes with both a game web-client and a web-server out of the box.

This is right up my alley! I have always wanted to build a MUD, and what better so I just dove right in. The tools I had been making to test my Python implementation of CCARPS were starting to resemble a simple text-based fighting game, so I took them and started plotting out how I wanted to start building a MUD.

Being the excitable girl I am, I couldn’t stop gushing about how nice Evennia was, and within a few days, a small group assembled around our passion for text-based games. My ~~arch villain~~ boyfriend Massenstein has been bursting at the seams with ideas, most of which jive with what I have been plotting and scheming. He is far more experienced in the art of playing MUDs and I have been super much enjoying his perspective and ideas.

My super good friend SustainableStu, who is one of the helping architects of Escia (and part of the first two campaigns), is also helping out! He is a magnificent artist and has been the main person who has drawn and painted Escia-related things. He is also a veteran text-based gamer, as well as progenitor of his own game worlds and campaings.

The biggest thing I have been doing with EsciaMUD (as of this writing) is integrating and modifying the Cool Battles system from World of Cool Battles. Much of what Tim Jenkins has done with the battle system is very much in line with what we wanted to have in EsciaMUD. When we tested it, Massenstein couldn’t stop smiling; it’s a joy to play with! And given that CCARPS is character-driven and combat is lethal in the tabletop version, an interactive and customizable turn-based combat system will help players have more meaningful battles. 1)We are not having any autobattling. To follow the CCARPS values, every combat sequence should be meaningful and not a grindfest. In addition to customizing Cool Battles for EsciaMUD, I am helping clean up and organize the base code.


During a random search online for a Linux client for Discord, I came across Gaming On Linux and joined their Discord chat. It is in there that I found a link floating around for the in-development Linux application. Not long at all after I joined, did someone ask for people to test a little tool that they are making. This little tool is called grab-song, and is a shell script that parses song information from an audio stream 2)VLC, Clementine, Audacious, Spotify, etc. of your choice. The primary goal is to make it easy for (game/programming) streamers to show what music is playing as an overlay in OBS or other streaming tool.

While testing it, I saw some things that could be fixed and thought of things to add, so I slapped some code in and presented it to the original author. I am now one of the developers for this nifty little tool. I have plans for using it in non-streaming ways, but the result is the same: showcase what’s currently being listened to!

Speaking of listening, if you haven’t, you should totally listen to the soundtrack to Cosmonautica! It is my current go-to soundtrack for coding late at night. The game is pretty fantastic too, if you are a fan of trading games, space, and crew management simulators.

   [ + ]

1. We are not having any autobattling.
2. VLC, Clementine, Audacious, Spotify, etc.

Timeline of Scribbington

Over the many years Scribbington has been alive, I have been asked many times, “how did Scribbington start?” With the latest move to better code and a clearer path ahead, I started tracking down the earliest conversations and code commits to draw a path. This is what I have uncovered.

Supybot (2006-2008)
The first version of Scribbington was essentially a mostly-vanilla Supybot that was primarily used for IRC convenience commands. One day, someone said, “I wish Scribbington would talk.”

pyBorg (2008-2012)
I found pyBorg and really enjoyed what it did, at first. One of the first things I did was gut out tools that we didn’t need and wrote some cleanup functions, so that the brain would compact and automatically trim itself. There was a fork of pyBorg that some code was taken from to help with this, but eventually I started doing some things with the brain that made it no longer compatible with other pyBorgs. During this time one or two other people tinkered with Scribbington, as I had used it as an Ubuntu Beginners Team project.

Scrib (2012-2015)
Originally scrib was a fork of pyBorg, but after doing more experimentation and running into more walls of frustration, I decided that there needed to be a rewrite. This was a hot mess. Four people contributed to this project, mostly with ideas and feedback. One contributed a lot of time and code, and shared in the frustrations with me. The hot mess only got worse, and by the time it hit version 1.1.0 we were maintaining bots at version 0.8.3, 1.0.0, and 1.1.0.

We flopped the brain around to pickle, json, Redis-based, among other abominations. It was becoming too awful to maintain and the git commit history was horrendous. There were many problems with the transition from Python 2.x to Python 3, as well, since the brain data contained mixed types of strings (binary, unicode, and ascii). A great deal of time was put into building a converter-cleaner, and though one finally did export the data into a usable format, I made an executive decision to drop this path entirely.

Harbinger (2015)
After much waffling and hand-wringing, I decided to fork scrib and slim it down to its bare essentials. Thus harbinger came to be. Harbinger, by design, only ferries data between users and its plugins. By itself, it will only sit and accept input.

In an attempt to reconstruct the old brain in the new system, I realized it would be easier and less awful to just make the working version of Scribbington into a plugin, so that the brain data could be transferred to a better system through the plugin system. This brings us to LegacyBrain.

The LegacyBrain plugin for harbinger is a stripped down (but not efficient) version of scrib 0.8.1 and supports the brain version 0.1.3. The main purpose is to allow full functionality of the original Scribbington while we build other brain alternatives.

CCARPS 1.0.0-rc1 Changelog

We jumped from 0.9.5 to 0.9.6, which was rolled into the first Release Candidate for CCARPS 1.0. It has been a few weeks since there has been any more review done on it, and it seems that between me migrating the build system1)Actually, I broke it and had to patch it up., I forgot to post our changelog. Not much has changed since our previous one.

  • Updated Damage Level text to flow better near graphic.
  • Updated Damage Level boxes Modifiers to be better spread out.
  • Minor spelling and grammar fixes.

What we need to do now is import the contents into Scribus. Over the last week I have been taking a look at how to make it “publisher ready” so that we can have a good and proper PDF.

   [ + ]

1. Actually, I broke it and had to patch it up.