Last October I wrote a small Discord bot for a friend who needed help with managing reactions in a guild with over 38,000 members.

Tessa provides as its core functionality the ability to automatically fill up public posts with a predefined set of reactions in order to prevent people from adding their own, while still allowing them to react in some way. Our intention with this was to make it impossible for trolls and edgy teens to post inappropriate reactions to announcements and social media feed notifications in a PG-13 server. The bot has served us well for over 8 months. More recently I added functionality to moderate inappropriate reactions to messages in order to catch people thinking they are oh so quirky and clever posting purple vegetables in response to posts about serious subjects. (Yes, I know aubergine is technically a fruit. That’s not the point. 🙄)

Because I really don’t feel like figuring out how to build a whole web-based configuration system for Tessa right now, it has a couple of major limitations:

  • No public instance.
    If you want to run your own instance of Tessa you will have to obtain your own Discord API token (admittedly this is not difficult, just tedious). If I know you I may be willing to add your guild to my instance if you ask nicely, though.
  • No configuration UI.
    Configuration must be written by hand into a JSON file (tessa.jsonc) that supports C-style comments. I do provide an example configuration file as part of the source code, though.

Ultimately though, for my friend and I’s use case what really matters is that Tessa does its job. Plus we don’t need to alter its configuration very often.

Last night I tagged its first “proper” release as version 0.1.0, after rewriting the reaction moderation logic last night to use on_raw_reaction_add() instead of on_reaction_add() — something I had been putting off for months despite it being a rather trivial change (yeah, I surprise myself with my laziness sometimes). For a project this small I feel like version numbers do not particularly matter, but I guess it’s good to have a reference point where I can say “yes, this does what it is meant to do even if it’s not pretty”.

UPDATE (2023-07-28): I’ve just tagged version 0.1.1 to addresss some major issues with large or overly active Discord guilds.

Happy anniversary!

13 years ago, today, I made my first Twitter account.

It’s funny how people for years prophetised the danger of centralised social media websites controlling all your data — and by extension your online identity — with no mechanisms to take it elsewhere. People were told they were paranoid, that large sites like this could not possibly become victim to a hostile takeover in the style of what a certain shady so-called “entrepreneur” did to freenode in 2021 (I was there, BTW).

Then an incompetent buffoon that also happens to be a highly malicious transphobe and professional conman bought Twitter Inc for $US 44 billion in 2022.

While I continue to keep my @irydacea account on Twitter in order to safeguard my identity — due to the new inactive accounts policy, although to be fair Musk’s administration really just unshelved an old project of Twitter Inc’s that they backed out of following heavy criticism — I will not be publicising my Twitter account going forward on any public pages, and it will remain private. I updated my About page accordingly, some time ago.

I’ll see you in the Fediverse as @irydacea@fosstodon.org.

The power of creativity, Part 1

Maintaining open source software can be quite a chore. The bigger something becomes, the greater the chances are that people find bugs in it and that those bugs interfere with their user experience. After a while, you end up with so much work to do – often for free – that you start to wonder if it was even worth embarking on that endeavour in the first place.

Now, what I am about to talk about is my own experience as an open source game developer. The magic of OSS manifests in wildly different ways depending on what the software’s purpose is, but I think some of these feelings are relatable for those who work on anything meant for use by a non-technical audience, such as desktop environment components and apps, image editors, media players, and so on.

So, let me tell you about immortality.

Continue reading “The power of creativity, Part 1


On my birthday this year, the unthinkable occurred and things finally came full circle. For the first time ever, I’m joining the Apple world with an Apple M1-based MacBook Pro!

VSCode running on macOS

Portable, powerful and able to run on battery power for many hours*, this 16” MacBook Pro — which I’ve dubbed Mia — is without a doubt the most beautiful machine I’ve ever used. Although back in 2012 I moved away from using laptops as my daily driver, I can’t help but be more excited about using my MacBook than my desktop right now, probably because of how seamless the entire experience is compared to the usual Linux or Windows fare. Not to mention, of course, the astounding display quality compared to the 1080p 60 Hz dual screen experience.

* Apple claims this is approximately 14 hours of wireless web browsing, but we all know that’s based on an artificial “normal” workload that’s rather unlikely to happen in practice.)

Saying I’m happy would be a massive understatement, basically. 😄 And as you can see, I already customised it a fair bit to suit my personal aesthetic and preferences — sorry, fans of all-default settings!

Continue reading “Mia


Effective as of today the 22nd of February, I have officially resigned from the Wesnoth, Inc. Board of Directors.

The post wherein I inform of this to the Board and the Project Council is not currently public, but I am including its full contents below for reference.

Due to recent changes in my life, I can no longer adequately dedicate time to unpaid activities such as Wesnoth-related work in the way people are probably accustomed to, which is why I have decided to officially step down from my position as member of the Wesnoth Inc Board of Directors. I do intend to continue to be around to help out with server administration and maintenance of the add-ons server software until someone else is able to commit to the same tasks in a more reliable fashion, although my presence on Discord and IRC is going to remain scarce and prompted primarily by direct tagging/highlighting of my username.

It is my hope that the Board will be able to find an adequate replacement and/or expand its membership further so it can continue to uphold the 2/3 requirements stated in the Project Constitution.


Just to be clear, there are no ulterior motives behind my decision and this is purely something that I needed to do in order to better prioritise other work outside of Wesnoth.

A breath of fresh air

On February 1st 2022, at 5:31 pm, I became an Arch Linux user, finally putting an end to over 9 years of running Debian on my desktop machine.

Arch Linux running KDE Plasma on Hana

2012 Debian installer logs

2022 Arch install logs

In the process, I also finally replaced my desktop account name shadowm with iris, as well as officially relabeled my desktop from Hanacore to simply Hana. Of course, in order to do this in a way that wouldn’t silently break anything I had to throw away about a decade of configurations and maintenance scripts dating back to October 25 2012, when I originally installed Debian on Nanacore/Nana — the machine whose storage drives, GPU, and operating systems I bestowed upon hana. 👋 By doing this I’m ensuring that anything I’m bringing back has to work with the new name if at all. I’m kind of ridiculous, I know. 🤷‍♀️

One big bonus of doing the system setup dance all over again like this is that I am absolutely forced to start over and organize my decade-old mess of personal files and forgotten software packages. So far I’ve been enjoying coming up with a proper categorisation of files in my home directory instead of having files strewn all over.

Continue reading “A breath of fresh air

Wesnoth and me: 2021 edition

Hello again and welcome to my increasingly infrequent round-up of Wesnoth-related activity for the past number of years. Although the sparseness of my schedule in this case might actually work to my advantage — Wesnoth 1.14.0 went gold on May 1st 2018, and its feature release successor is version 1.16.0, released on October 25th 2021 merely two weeks ago!

This time around there are no big life-changing events in between — well, sort of — so I’m gonna spare you the pain of reading through an overdramatic intro and just skip straight to the nitty-gritty.

Continue reading “Wesnoth and me: 2021 edition


Hi, and welcome to Irydacea.me, my little semi-secret project for the past year that’s finally complete!

Cover screenshot

After years of relying on other people to host my website, I’m finally in a position where I can do it all on my own and run any software stack I want — and more importantly, use my own personalized domain name, a name that took no small amount of effort to decide upon but is now consistently used for my socials and GitHub.

(The exception being one service where I’m still shadowm because it’s just so, so lucky I got hold of the name before anyone else back in the day and I sort of want to keep bragging about how I got the name before anyone else there. Naturally, Iris is already taken.)

But the new website isn’t just a pretty domain name, no. Following over a year of constant pestering from Vultraz to join the cool kids and learn about —ugh— modern —ack— Web development instead of staying stuck in 2012 or so, I finally got around to learning... React. Yes. This whole thing is written in React + Gatsby, which probably makes it more of a serious project than Iris/Amethyst or Dorset ever were — by virtue of having had to write half of it by hand instead of relying on a pre-existing CMS, and hand-coding a lot of new features.

So let me give you a little run-down of what’s changed.

Continue reading “Irydacea.me

Wesnoth and me: 2018 edition


It’s been quite a while since I last properly talked about The Battle for Wesnoth in here — years, really. Some people know that at some point in 2016 I mostly stopped contributing to the project, aside from some server-side stuff such as maintaining the multiplayer games server (wesnothd) and the add-on content server (campaignd).

Since then, a lot of people new to Wesnoth, as well as people not familiarized with Wesnoth, have heard about me, and they don’t really know what it is I’ve actually done over the years. So, I thought it would be a good idea to write about my involvement with this game since I happen to feel like writing walls of text stuff right now.

So, where shall I start?

Continue reading “Wesnoth and me: 2018 edition

Amethyst, and life updates

Oh hi there. Long time no see. Apparently I haven’t posted since February 2017, huh. A lot of things have happened in the meantime, it turns out. Some of those things are to blame for my general inactivity elsewhere, but when it comes to this blog I just can’t seem to come up with anything to say worthy of my trademark text walls, at least not ever since I joined Twitter several years ago— wait, wasn’t that in 2010? Time sure flies. I feel old. Okay, let’s face it, I am old.

“Iris” version 1.1.0 as of earlier today

In addition to it having been a while since my last post in here, it has also been a while since the last time I gave the website an overhaul, for what little use it sees nowadays. Because of that, plus some of my experiences designing the new website theme for The Battle for Wesnoth last year, I decided to try to modernize my own a little bit so it looks more in tune with my current practices. I also decided to spruce things up with a new colour scheme, like last time, taking things in a different direction to what I’m used to.

An attentive reader who’s been around for long enough might be able to tell that the “Iris” design last year did undergo a slight revision incorporating Font Awesome in order to make icons not look awful on high-DPI screens. This was a natural conclusion of my work designing and testing the Wesnoth.org theme on devices with higher pixel density. Plus it was precisely last year that I actually caved in and got a smartphone given to me by a relative, further highlighting all the inconveniences of designing things on/for 96 DPI these days. Other than that, though, the design remained mostly unchanged from what I made in 2014.

“Iris” version 1.2.0, aptly codenamed Amethyst for reasons that should be blatantly obvious, is mostly the same as before under the hood, but on the surface it hopefully looks shinier and more elegant and modern. Even though I am not using the site much right now like I mentioned above, I have a faint hope that the new look will motivate me to post more again.

Since there wasn’t a New Year post last year, or even the year before that, or uh... the year before that as well... actually I guess there haven’t been New Year posts in here since January 1st 2013. Oops. Anyway, I guess it’s time for a short summary of what I have been up to in recent times. Let’s see...

Continue reading “Amethyst, and life updates