CalRef Development Journal

Started by Luca, December 14, 2018, 03:13:42 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.


Dot 3.1.0: Growing Pains Update

Hello all, this update is more of a "Part II" of the last update. But here goes~

When Dot was made, obviously her intended scope was the CalRef server. Over time, people asked if they could add her to other servers and I made adjustments to make that happen. The intended range then was still pretty small, like five servers and maybe 75 members. However, CalRef has grown, and so has the number of servers that Dot's in. And every time I go to improve something, it's basically a linear progression to make something as good as it can be in the current code structure before saying "Well, this isn't going to work anymore". Then there's nuking, paving and starting over with something that works a lot better. And that's what the last month of rewrite and improvements have been geared towards: Making Dot able to keep functioning better and pick up new abilities, as new servers decide they want her help.

A lot of the changes for this update are still mostly on my end and not a lot to be talked about here, but there are a few marked changes that we should talk about. I guess I'll get the bad news out of the way first and talk about the features that are going away.

Finally Impostor-Free

Dot's amogus feature, the sus minigame, has been retired as of this update. I very, very genuinely hope that you all have enjoyed it for the time that it's been around, which was quite a while. Apparently since last March, which is before I even started putting Dot's update post here on the forum.

Originally Dot's amogus mini-game was created as a shitpost I made up in a sleep-deprived delirium, based on some simple comprehension of save data and pre-preparing player profile concepts. Optimistically, I thought that it might get some use for a single month, but it kept getting used a whole lot for fourteen. However, I'm not going to re-write it for the structure we're moving into.

While everything was functionally working, this particular command is pretty poorly made. Its data generation and organisation methodology is also pretty barbaric. So rather than rewrite the 1,200 lines of code that make it up, since the joke of the game is thoroughly spent, I'm just going to let it go and work on adding things that are nicer.

Retired Chatbot Functions

Speaking of things that are thoroughly spent, I'm also retiring the F auto-response, the laughs in auto-response, and the ping or mention auto-response. Their admin options in set are similarly removed. Still active are the thanking and good/bad dot/bot and nods responses. However, it's almost certain that in a future update, those will also be retired or restricted to only CalRef/whitelisted servers.

The reasoning is that, while I still think the burden of responsibility for regulating conduct on a given server lies with that server's staff, the fact is that these auto-responses are easily (and frequently) abused by operators anyway, and can cause Dot to generate spam, herself. So rather than rework those into a complicated cooldown system, since Discord is already attempting to curtail message content access (which those require), it makes more sense for them to be cut.

Command Name Changes

I'm moving the commands local avatar into display for ease of my internal organisation. It's not strictly a do or die situation, but it makes things a bit easier for me to deal with.

For the same reason, I'm moving top endos into top.

You can use the command as you normally would.

New Error and Reporting System

I've noticed a lot of times in #simplebots or a couple other servers I'm in that have Dot, sometimes people get "Invocation Error"s and never mention anything. But that kind of error is different from "Information" errors like command not found or missing context. This one means that something's actually wrong with my code which is preventing the function from being used correctly. Sometimes it signals that no one can use the command at all. Previously, a lot of bugs would be fixed from me scanning through our #simplebots channel looking for problems, because people would probably only ping me for like 10% of serious issues. But since Dot's in a variety of larger servers and I'm not there, and since I've re-written....uh...maybe 80% of Dot this month? We need a better system.

Starting now, whenever you get an "Invocation Error" or a "Brain Explodes" error, there is a button for you to report it, (which you do not have to use (although it would be nice if you did)). If you do choose to report an error, it will be sent directly to CalRef, in a new bug report receiving area in floor-7. The bug report will ask what command you used when something broke, what happened, and how it can be reproduced (if possible). Sending it off will also attach what Dot thinks are the most relevant areas of the error log to send with it, to help make fixing it easier for me. Those reports look like this.

You can also manually trigger these reports by using a new "I cast report" command. I'm even fine with you using this to give feedback about what new commands you think would be neat, or what sort of improvements that could be made to an existing one. If your bug report or feedback directly results in an issue being fixed or a feature being added or improved, I'll send a message back through Dot replying to the original submission saying that the issue was fixed or the suggestion was accepted.

Assisted Recruitment Is Back

And this time, functions a bit differently. Namely by being a lot easier on my server.

One thing that I noticed while watching other people recruit with this function is that there was a habit to call for assisted recruitment (which delivered all current nations) and then they would spend like ten minutes sending the telegrams in that opening batch. This isn't super useful -- generally if you're not telegram number one to five in a player's inbox, they're already gone. So what I'm going to do instead is dump all current nations into the bin immediately, wait thirty seconds, give you whatever was founded in that time, and then start checking back at whatever interval you set from there onwards.

Along the way, I'm adding a button to cancel assisted recruitment when you get a report back. So if you want to make something your last batch, you can cancel it there without having to type anything. You can still end the session with "I cast r finish", just like you *can* still get the opening volley of nations by starting with a regular "I cast r" if you *really* want that.

Anyway, that's all for now. See you next time :jump:
Report all errors to the local authority.


CalRef VI
What? We're Still Doing These?

Why, yes.

As it turns out, expecting that even constant small updates could replace periodic larger ones was very short-sighted. In previous upgrade phases, we rolled out everything at the same time and surprised people with it, but that's not really in my power to do anymore. There's too much stuffs. Between this and the 3.0 update for Dot, I've spent about eight to ten hours working on the server or coding things for it, every. single. day. for the last month. So, there's probably some level of obligation for me to talk about it. So here we are, hope you enjoy.

Regarding Carbon

The name "Carbon" has been tossed around for well longer than it ever should have been; however, at this point, I am pleased to announce that I have now accomplished what the G20 could not: Removing Carbon.

This server was thrown together four years ago in a more or less rushed situation, as I got the sites back up after the domains were yoinked. I wasn't super knowledgeable about how network administration worked back then, so the result was poorly structured and put together. But it did work and that's what mattered.

Still, the issue was that a lot of the transferred-in software was old as hell and aging rapidly in a time where the systems it needed to run on were increasingly unsupported. These forums, for example, were intensely modified from the standard SMF base, in a determined attempt to keep our forum software modern and relevant when so many other admins sell their soul to subscription-based, closed-source, proprietary software solutions like TapaTalk. The creation of Dot required systems that were current and modern, and that finally forced the issue of bringing everything up to (then) 2021 standards if we wanted to grow.

During the CalRef V update, many systems were transferred off of Carbon and into a newer server of similar hardware specs, called Hydrogen. Regrettably, the forums and wikis could not be taken out of their functional time capsule, no matter what I tried at the time. There were just too many modifications to account for. Consequently, Carbon remained until last week when I finally completed the last of the migrations.

So, for real now, farewell Carbon and rest in carbonite. Thanks for serving us for four years, but your monthly fees will not be missed.

Overview: Hydrogen

Without needing to divide resources, hydrogen was roughly doubled in specs, including using DigitalOcean's newest CPUs, such that even Nightly is able to run about 30% faster. Because the capacity has been so dramatically expanded, Hydrogen now runs all of the administration's sites and services, while all of the hosted sites remain on Xenon. For fun trivia, Calamity Refuge is now on its ninth server and sixth domain, in a freshly minted Debian 11. With some hefty security upgrades that makes the server more resilient to a variety of different attacks, we now boast a better security rating than my government.
The CalRef Network site has gotten a fresh remodel during this upgrade phase, and you can scroll to the bottom of the page and see an overview on these two servers, and that's where any additional ones we'll use in the future will be as well.

The Wiki that was used for the original CalRef RPs and side projects (OldWiki.CalRef) is now deprecated.

It turns out that running an alpha build of wiki software that came out in 2014 has some drawbacks eight years later. It was split for, among other reasons, some privacy concerns regarding our past members, but retained because a lot of the content there is still the basis for how we theme some of our modern stuff, especially in Refugia. So, we're solving both the privacy issues and continuity issues by transferring the article texts and imagery, sans-history and user information, directly into the modern wiki, at Wiki.CalRef. You can visit any time, but registering an account still requires you to contact an admin directly, as previously directed.

Forum Changes

Functionally, the thing that made this update possible was that SMF development has resumed after about a five two year hiatus. The much-awaited 2.1 update made vanilla a lot of the functions that we had put a whole load of effort into modifying in. Such revolutionary breakthroughs include native support for IPv6 addresses. In 2022. Eight years after CalRef first modded the functionality in the database, and seven years after IPv4 exhaustion actually occurred in North America. But this is a welcome reversal from the previous developer line of "Just block access to all IPv6 users". But our rickety homebrew setup couldn't be transferred off of Carbon previously, so I'll take it.

Other abilities gained include the float tag, which I previously wrote in as [floatleft] and [floatright] -- no need to keep that anymore. With the native float tag, you can simply use [float=left] and [float=right]. You can also provide more detailed specifications such as [float=left max=45%], to mark what width the floated item should not exceed.

The [youtube] tag is also a native feature instead of a modification now.

The [tt] tag, which I have used for ages to denote commands or code, and which was used heavily in the FTaWSotR RP, is deprecated by SMF. That's is unfortunate, so I've added a [tt] tag to provide the same font, since tt is still a taken namespace.

All the previous tags, such as background, nation, region, box, sidebar are still in and good to go, and accessible through a new and much more pleasant post editor. Members also pick up the ability to do quick edits of their posts while remaining on the same page, leaving edit messages again and quick-quoting highlighted text in posts. Users, mods, and admins now have a more sensible way with dealing with IP addresses which made their way into accidental screenshots a couple years back.

Oh my god and we now have the ability to search content inside threads instead of the entire forum. You will observe the search bar in the upper right, which provides this functionality whenever you need it.

We now have a notification system, where users can be pinged on mention. For example, you can use @Luca and an alert will pop up in my upper left alert menu in the forum bar. This @ method is an alias of the new [member] tag, which you can also use if you wish.

Karma has been removed as a feature and, although we had this since the beginning, I feel like it was never really used much, except when Gabriel's was manually set to -6000 karma. So that's out, and has been replaced with a more modern-standard post "Like" system. As with mentions, you'll get notified whenever a member has liked a post you've made.

Dot 3.2.0: CalRef VI Update

A Dot update too? Sure why not.

Going forward, if you're interested in finding out about Dot, I'm shuttering the old forum thread that served as Dot's documentation and from here on out, everything you could ever possibly want will be hosted on This is going to be linked in Dot's bio, future update posts, and there's even a handy link to the site in the "Network" button at the top of this forum's navigation. Every command is linked in the new docs site, with an MP4 video modal of every command being demonstrated. So, if you can't figure out how something is supposed to work, hopefully this will help.

This site also contains a privacy overview for the information that is collected by Dot. Or, more specifically, a declaration of things that are not. If you're interested in adding Dot to your server, you can do so by the large blue buttons that are at the upper right of these pages, or by the invite link that's been attached to Dot's bio.

The commands menu has been changed to provide hyperlinks to the relevant section of the docs for every command registered. The restored help command will also direct to the doc site.

If you've ever been curious about a region's population history history, or liked the graphing features of save, have I got some sweet news for you: You can now get that any time you want.
There's a new command now, called population, or pop. This command delivers a graph similar to that on regional history pages, providing the history of the region's population. However, with this tool, you can see much further back than NationStates' graph limit (2016), and instead see as far back as 2012. You also have the option to get the history of the current iteration of a region, or the entirety of the time the name has been used since 2012, across all refounds.

In both cases, you'll also be given the spreadsheet of the data, if you'd like to do something extra with it, yourself.

You can say I cast population Greece for the incarnation, or I cast population Greece, all for all the history of that namespace.

Minor fixes:
  • Fixed an issue in save, where XMLs were not being properly shipped with the zip file
  • Fixed an issue in the wa command, where verification that NS was down wasn't triggering the right checks.

That's probably all for now.
Report all errors to the local authority.


Dot 3.3.0 Endotarting Update
Luca, didn't you just post an update?

Oh, you got me there. I was planning on bundling this feature with the next one I'm working on, but I feel like the next one will take me several weeks to finish, while this one is done now. So let's have some free stuff!

Sadly, I will say that as of this update, I'm following through with the forecast I gave in the 3.1 update. As of now, all remaining auto response messages like being thanked are being restricted to only interact with the CalRef server. For everywhere else, they are now deprecated. Ah well, they had a good run. What's next?

Originally, Dot was created to provide CalRef an in-server ability to endorse all the World Assembly nations within Refugia. It's been about two years since then and it never happened, such that it became a bit of a meme. After I got the CalRef VI work off my chest, I felt I had a mental road map to getting this feature out and, naturally, that meant I couldn't rest until I made it. With an absolutely minimal amount of testing, I'm done as of yesterday.

Cross! Cross! Cross! Cross!

There is (finally) a new command called tart.  This command pulls all of the nations that you have not endorsed as of NationStates' last Major update (21:00-22:30 PST), or at least after Nightly has processed it, and compiles it in a way you can easily use.

The nation you would like to get information on is a required argument for this command. The output is an embed of nations, hyperlinked to the closest anchor to their endorse button, and paginated by discord buttons below the message. To the right of the navigation buttons is a link to the web sheet, a procedurally generated webpage which presents the same information, but without leaving your web browser. So you can use whichever platform you find easier.

The web sheet contains two methods, the first is an assistance button. This is a button whose name and link will change with every click. On Chrome and Edge, you can hold ctrl and click the button until it has cycled through all the nations you've missed. Regrettably, Firefox does not permit this functionality, but you can still left-click, endorse, back-button, and repeat if you find it convenient. The second method is a table of buttons for all nations you have yet to endorse, which you can ctrl+click through individually. With every click, the button will turn green so you can visually keep track of where you are and not lose your progress.

The discord message's buttons may be operated for up to ten minutes after the command has been called, after which they will deactivate. Similarly, for privacy's sake, the generated webpage (which already has a hashed name) will be deleted from the server an hour after its creation.

To activate, you can say for example, I cast tart Refuge Isle to bring up all the nations in Refuge Isle's region that it didn't endorse by the previous Major.

Setable Autopins

Whether you'd like to give your users more control over their chat environment, or have a hard time determining which shitposts are worthy of being uselessly pinned, there's now a feature to handle that for you. The autopins feature allows a message to be pinned if it receives a requisite number of 📌 emoji reactions within a reasonable amount of time after being posted. Similarly within that time, if the message falls under the required number of reactions, the message will be unpinned.

You may be thinking that looks familiar. Quite so! But now server admins can control it with the new setting added to set, called set autopins. With this, you can toggle this behaviour on or off, or set the threshold to something equitable to the population of your server, or change it as it grows or shrinks. The default state of autopins is off, so if you previously enjoyed this feature, you'll need to set server preferences to use it again.

This feature is the first of a series of updates that will be coming out in the coming months to improve server features and accessibility. Dot will be shifting away from empowering NationStates-specific services, and more to empower server admins who want to make things easier and more pleasant to their members and staff.

Bug Fixes

  • Fixed an bug in button interactions where someone other than the operator would cause an interaction to fail for a button that wasn't theirs.
  • Fixed an bug where running timer without a base would invocation error.
  • Fixed an issue in buy/sell where the database got very laaaaaarge.
  • Fixed an bug in set where certain subcommands would fail in barebones server configurations.
  • Fixed and issue in WA where disruptive tabs appeared in the stats areas on mobile.
Report all errors to the local authority.



It's been a while since I did a blog-style update post, which is what this thread was originally made for, but as I was typing this out in the announcements channel, I thought the thread would be a better medium.

It has been fourteen long months since I first came out with Dot's economy and stock system. In that time, it's had a lot of weirdness, incentives, and events. My favourite of which was probably the euros minigame. After so long, however, we've reached a point where some people have tens of millions and some people have absolutely nothing, as any system with a stock market is wont to induce. It's very cool to me that people have gotten so much use out of the economy, but I'm somewhat interested in reinvigorating competition, and that's not really possible with this environment. It is also not incredibly fair to just delete everything you've done so far.

So, here's my compromise:

We are currently on Dot 3.3.2: Endotarting Update. When Dot 3.5 comes out (so not the next feature update, but the one after that), all stocks owned by all players will be liquidated and all bank + Infinity account data will be exported to a "Generation 1 Final Leaderboard", probably pruned to the top 50 players. The top 20 players will be awarded the renamed Gen 1 Economy badge on their forum account (if they have one), and any other place we'll use these in the future. At that time, the economy will reset. All bank accounts and stock data will be deleted entirely, and the stock and study functions will probably be retired. Infinity will be reset but not retired.

This post gives you some time to prepare for that, in the event you're dissatisfied where you are and want to brute-force a change. But I'll also tell you that I have done zero coding for 3.5 at this time, so what will the timeline look like for 3.5? I have no idea. It depends on how IRL goes and how much I can keep my spirits up. I'd like to have it done by September, but I also don't know how realistic that is considering I'd like 3.5 to be games-oriented and and some of the ideas I have for that are probably a little too ambitious for me.

We'll see how it goes!


Dot 3.4.0 Rolling Rolling Rolling Update
I am running! I mean, rolling!

It's long been a request that Dot get more admin-oriented or role-management abilities, so this update is dedicated to just that. 3.4 adds some nifty new role-granting abilities, as well as refurbishes existing admin menus to make interfacing with Dot's settings easier than navigating a command line. I'm pretty happy with these changes, so I hope you will be too.

First thing's first: For CalRef-only, the I am rolling system has been retired. It was difficult to use at times, since you needed to type things very specifically, and still relied on an on_message structure, with hard-coded roles in Dot's main launcher. Not ideal with how the rest of Dot works. Now there's a new way of doing things which you can access with I cast determination, to bring up a new role menu.

The menu has two drop downs, the first for which role colour you'd like to select (you can only pick one) and the second drop down is for all other self-assigned roles, and you can select as many of those as you want. When you're done, close those dropdowns and hit the Add Roles or Remove Roles buttons, depending on what you want. Alternatively, you can use the Clear All button to remove all your colour and opt-in roles in one click.

For this and other command demonstrations, check the demonstrations on the sidebar, linked to the commands' section in the docs, which has demo videos for everything.

Magical New Admin Abilities: Autoroles

If your server lifestyle finds it prudent to automatically role members upon their arrival, Dot can now help you out with this. Use the new autorole(s) function to summon a menu of roles. Select between one and ten roles that members should receive upon their arrival, close the menu, and click the Set Active or Set Inactive buttons to toggle the feature on or off. If you'd like to delete the set entries, simply bypass the dropdown and click Clear All.

If you need more than ten roles applied to a member on their arrival, probably reconsider your server structure at that point, or let me run your WAA ministry.

Dot's generic invite link does not ask for Manage Role permissions, so if you want to set up autoroles, she will need that permission to actually apply them. Dot will mention this if you try to set them up when she doesn't have the right permissions in your server. You can either grant them to her bot role, or give her another role which has the permissions.

Magical New Admin Abilities: Reaction Roles

Admins now have the ability to set up reaction roles in their server. These are typically static messages in locked channels where members can click certain reactions and receive whatever roles you say they go to. The set reactions command allows you to add, drop, or end reaction role messages.

Establish or add to a reaction message with I cast set reacts add [message url], [emoji], [role ID or ping]

Drop a reaction role from a reaction message with I cast set reacts drop [message url], [emoji]

Terminate a reaction message setting with I cast set reacts end [message url]

For example: I cast set reacts add, :heppy:, @9

You can use set reacts add on the same message link to keep adding react settings to it. If you forget what messages you've set up or wish there were some kind of overview command, well have I got some sweet news for you -- there is.

You can use the new reacts command to show everything you've set up so far, with links to all messages, and what emotes go with what roles. You can use this menu to terminate individual reaction role messages, or to terminate all of them. So reacts to overview, set reacts to add or edit. Hopefully that's pretty straight forward.

Better Menus

If you're picking up a trend between the autoroles and reacts admin commands, you're quite onto something. Going forward, as many admin commands as possible are going to try to follow this interface template: a simple title reminding you what you're looking at, a colour-coded sidebar and light bulb at the bottom corner of the embed that lets you know if it's active or not, and simple buttons or dropdowns allowing you to control all the settings with ease. To this end, I've revised a couple of the existing admin commands, and improve how Dot handles their data internally.

This means that set autopins is being moved to autopins, and set recruiter is being moved to recruiter. Making settings using those should now be super incredibly unbelievably easy.

The rest will take a bit, but we'll get there.

Minor Changes and Bug Fixes

  • Fixed an issue in rotato where an image may have repeated.
  • Added region banners to the region command (if a region has one set)
  • Fixed an issue in bouncer where CalRef re-roles would give up if a role could not be added (such as nitro).
  • Added an error handler to report issues with commands that require permissions Dot has not been granted in the local server.
  • CalRef-only commands now report as "command not found" when used in other servers.
  • Errors triggered through repeaters now present the same error content as through the error handler.
  • Fixed an error in eyebeast where bulk deletions would break on logging.
  • The sidebar of embeds in colour will now present as the requested colour, in addition to the embedded colour image.
  • Fixed an issue in recruit where manually running the command without a set template would disrupt the output.
  • Docs now show what update a command was added.
  • New footer banner in the command menu.
Report all errors to the local authority.


Eldritch Archival Utility

Greetings Refugi "and normies"!

Heard about the hot, hot, hot new Detag locator that came out a couple weeks ago? Wouldn't it be a dream if there were a comprehensive utility that could go along with it so detagging would be 10% the effort of before? Sweet baby jesus, that time has come.

For the last year (yikes), you may have been hearing of a tool called "Eyebeast", which recorded flags and other data in the most inconvenient way possible. While it's cool that some people found this useful and worked it into their routines, it really wasn't meant to be public, since I never wrote a user interface and the way we were storing data was rather archaic. I have since found the time to rewrite this draft idea into a proper web app.

Behold[er], the new Eyebeast, a supernatural and magical eyeball with many other eyeball appendages. Floating, unmoving, unchanging, in a pocket dimension between the floors of the Admin Tower. We enter its space-folding room and ply it with questions. With grace and precision, it stares longingly into our souls. It screams, we scream, become filled with knowledge of the ancients, and 37% hearing loss for the next six hours.

Eyebeast is also a site that is designed to be mobile-friendly, except on any device or browser where there are problems. Access this 10/10 experience by visiting the nav link on the Network Site, or by going to Eyebeast directly. On the landing page, you're met with a search bar. This is for searching. So type in a region, or copy-paste a region's entire URL, idgaf, Eyebeast consumes all.

On the results page, provided there is one, you'll see all of the snapshots for that region which exist within the database. There are flags, WFEs, tags, ROs, and the banner the region had at the time, if any of those apply. Use the forward and backward buttons to switch between snapshots until you find one that looks like it was written by the native population. Use the copy button to load the WFE onto your clipboard. Want to download a flag or banner? No worries, just tap the flags or banners and download them in one click. What else...Uhm? Idk. The WFE results return things like emoji and other special characters, if the were in the data, so that's an improvement.

But Luca, there's only one snapshot right now!

Indeed. Unfortunately, we can't go back in time to download flags and banners that have already been deleted, nor can we get old tag data. I don't see much of a purpose of a snapshot when most of the data will be missing, so we shall simply wait for new snapshots to be added. The perk of Eyebeast is that it's a longer term tool that will be around for quite a while, so this time of limited data is temporary.

Starting now, every Wednesday, a new snapshot will be added to the database. After a snapshot is six months old, it will be consumed by the Eyebeast and lost forever. This means that you will effectively have six months to detag a region before its native data is lost.
Have a blast!
Report all errors to the local authority.


Dot 3.4.3 Rolling Rolling Rolling Update


Normally a minor update wouldn't warrant its own post, especially since nothing really "new" is being added. At this point, however, I thought that it would be a good time to just push this out. I'd rather keep these posts simple instead of omnibus packs where everything changes all at once. So, instead of big new features, this update is primarily about the enhancement of existing ones, everything since 3.4.0, as well as talking about Dot's medium-term viability.

Slash Commands Are Now Supported

Ripu, mobile users, except it's not my fault this time!

I am "pleased" to say that as of this update, the 50+ commands of Dot have been converted to hybrid commands. This means that that every server will pick up the option to use Dot's commands with Discord's new and bug-prone "slate" system, using / as a command-initiator. Since all these commands are pre-registered, you'll be able to see all the commands that are available for your server, their short description, and most of their programmed options from the slash context menu, directly.

Lucabaduka, why have you done this?

Excellent question, me.

The answer is that we are very close to Discord's server cap. At that point, I will have to verify Dot and Dot, herself, will lose access to data that makes both development and operation easy. Access to data like the message content intent, which is what the "I cast" system uses to figure out what you want. Dot 3.1 was the "Growing Pains" update, but what I'm finding is that every update is effectively now a growing pains update, as I need to keep adjusting how things work to deal with an increasing user base. Although it is not my preference, Slash commands do not use message content, and are the most expedient way to make sure everything remains working.

I do not see slash commands in my server!

They did not come in the original URL that you invited Dot with, so if you want to enable them, click the Add to Server button in her profile. You do not have to kick her out and re-add, just click the Add button again, which now comes with the "app commands" permission.

Famine Is On The Horizon

In keeping with the "Growing Pains" theme, I'm running into a bit of a problem, as Dot's usage is not how I anticipated it. Unfortunately the time has come to address that.

The recruitment command was developed to accommodate a team of people working in shifts while remaining in one unified server. In practice, however, what people have been doing is making dozens of micro-servers for just themself and their use, alone. Why does this happen? I literally have no idea. Maybe their home server won't permit a recruitment channel, maybe they do not trust my coding within the sacred confines of their server, I could not say. But with just a few server slots of breathing room before Discord starts making demands, this phenomenon is starting to impact Dot's operations.

My first thought is to say "if you don't trust my coding, why are you using my service?" but really, the answer doesn't matter. Instead, I have a compromise for you. Up to now, DM commands have been blocked as I considered the concept troublesome. Gun to my head, we are changing that. I have modified all commands which could work in DMs to be expanded for use there. This means that for the majority of non-server-essential commands, you can just DM Dot and get the same effect (slash commands and all).

Since effectively every message in a DM is also a ping, I recognise this may be unideal for recruitment and its perk of auto-reminders, but there are really few other options. Discord will not verify a bot that's in a hundred 1-person servers, and I am running out of the ability to let Dot keep expanding to legitimate servers while she's being used in the current manner.

To that end, in addition to the aforementioned economy reset, Dot will also be pruned from servers with fewer than 6 members in the 3.5 update. This currently accounts for 1/3rd of all servers. I am hoping to release 3.5 in September. Take the time between now and then to decide whether you want to integrate Dot into a real server, or switch to using the recruitment functions via DMs. Real servers would be ideal, as it would help Dot's odds of being verified 👍

Feature Enhancements: Discord-Based Data Retention

In lighter, news, this update comes with a variety of enhancements which will make things "better" (!)

One thing that has bothered me with the image-generation commands like avatar and display is that they're not super useful in the long run, regardless of what bot you run these types of commands on. This is because 99% of the time, discord bots just hyperlink the image URL. So, when people run these commands hoping to save their data for a temporary style switch, they come back to find their files are dead and gone because a third party (like discord) deleted it off their servers.

Well, we can fix that actually, by including the file itself in the message. So, to that end:
  • avatar - now posts your global avatar as an attachment
  • display - now posts your server-specific avatar as an attachment
  • server - now posts the server's splash (invite background) image as an attachment
  • info - now posts your banner as an attachment
  • roster - now posts the queried role's icon as an attachment
  • nation - now posts the nation's flag as an attachment
  • region - now posts the region's banner as an attachment

Since these files are now a component of the embedded message, itself, you can return at any time (even a year later) and download them for your use again.

Bug Fixes and Minor Changes

  • Fixed an issue where certain commands that used the member finder repeater would fail on pings.
  • Fixed a bug where setting multiple reaction messages would cause earlier ones to be ignored.
  • Fixed a bug in nation where nations with SVG flags would not display.
  • Fixed a bug in avatar and display where animated images would not display correctly.
  • Fixed an invocation failure in avatar when used on a target without an avatar.
  • Added reset timestamps to fortune if it's used more than once by the same person in the same day.
  • Improved the processing speed of the WAs and WA commands.
  • Fixed a bug where the server owner would not have a badge in info.
  • Determination no longer works for operators with the visitor role.
  • Added support for the calref palette to colour -- Aqua, Lilac, Lonk, etc.

Report all errors to the local authority.


Dot 3.4.5: Rolling Rolling Rolling Update
Another minor update that gets its own post? What next? RPing???

This update is primarily a backend rework, and the good news is you're already using it. To the servers who were helping me to test this new structure and iron out its bugs over the last week: Sorry for the bullshit! But now we have some important scalability fixes to deal with the increased use. In particular, the way that we're processing data as well queueing API calls have been rebuilt substantially.

For you, this will mean three things:
  • All commands are faster, and commands that interact with NationStates will be much faster in particular
  • Dot can handle bursts of traffic much better, and can deal with being in a lot more servers at the same time
  • Slash commands no longer periodically fail for unknowable reasons. Only knowable reasons.

The bothersome cooldowns have been nerfed substantially, no longer binding to individual servers, but to individual operators. Each operator can now use up to five commands over the course of ten seconds, shared across all NationStates commands. This means that the average operator will rarely ever encounter a cooldown message, and probably only when they would be spamming.

The recruit command has been made "not shit" as a number of bugs are fixed, including race conditions involving switching operators or restarting quickly. But most importantly, recruitment is no longer bound to individual servers, but to individual channels. You can use recruitment not only in DMs but also concurrently in the same server, probably for frontiers. You can (and will have to) set unique templates for each channel. These templates still persist across recruitment sessions.

As a component of the fixes, the I cast r finish subcommand has been removed, but in exchange, I have added "Finish" buttons to every "waiting for new nations" post, as well as the "Lights Already On" warning, in case you want to stop early or perform an override, respectively. So that's probably useful.

Improved Bouncers

If you were thinking that the previous way of creating automated welcome and farewell messages through fourteen sub-commands of set was clunky: You were correct, and they are removed.

welcome and farewell are the latest commands to join the improved admin UI system, which lets you control most aspects of the function from a single interactable console. The first step with either of these commands is to set a channel using the base command, plus an argument. For example I cast farewell #landing and I cast welcome #landing, tagging whatever channel you want to use.

From here, you can re-run the commands I cast farewell / I cast welcome to create a preview of the farewell or welcome message, accompanied by control buttons in the usual admin interface. These buttons allow you to activate or deactivate the feature. The farewell command is accompanied by a button to set an image to embed with the message. The welcome command is accompanied by a button to set the content of the message in its entirety, or reset components individually. In the welcome command, you can send in data for just one field without affecting the others, and in the farewell command, you can send in an empty field to clear the image.

The interface will update in real time when your preferences are set. This should let admins have more customisation options and be substantially easier to use.

Bug Fixes and Minor Changes

  • Retired the population command, as it will take a substantial amount of time to optimise. It will likely return next year with a more robust region history/analysis command
  • Retired the mobile command, as recruit is already mobile-accessible and is no longer being threatened for the time being
  • Retired the help command, the namespace is now an alias of commands
  • Nightly now makes daily (or nightly) backups of Dot's saves so we can be sure there is no data loss now or in the future.
  • The commands menu has been reorganised to be less cluttered and (very slightly) more mobile friendly
  • The Info command no longer reports user activity or online status, so Dot can work without the presences intent
  • Documentation has been improved and demo videos for some ten commands have been updated
  • Error messages are now sleeker and slimmed down
  • Added an error handler for Discord being down (what?)
  • Added an error handler for commands invoked in channels that Dot does not have access to (what?)
  • Added more verbose information to the version command, including servers and members served
  • Added a notice to tart and top of when the last update was, and when the next one will be.
  • Fixed a bug in truesight where certain inputs caused the command to fail
  • Fixed a bug in region where responses might have been provided without valid banners

Report all errors to the local authority.


Dot 3.5: When
Some might ask: Luca, Dot 3.5 when? To which I say, correct!

I'd like to start by issuing my apologies that this update was not out sooner. I had originally planned a more elaborate feature addition for this update, but after a couple hundred hours and seventeen hundred lines, I think I came to the conclusion that it may be a bit above my skill level for the moment.

Since there are many other things that we'd like to see happen with Dot, I'd rather not have all of that continue to be tied up, with progress locked off. So, that command has been postponed and our main changes this update are largely administrative. I do have one item which might be helpful for you, as it has already proven helpful for me.

If you have trouble remembering anything, there's an app [command] for that, called remind

Reminders are messages that you can send yourself through space and time to post at a point in the future. This command is designed to accept a variety of human inputs as valid entries as long as they contain some relevant keywords that cause the sentence to make sense. Generally, though, you'll probably be using something like:
  • I cast remind me to do something in an hour and a half
  • I cast remind me in 5.7 minutes to do something
  • I cast remind me that I should do something next week

You can use most time references such as, minutes, hours, days, weeks, years, etc, and you can use ranges in digits (1, 2, 3.5, etc) or words (one, two, three and a half, etc). There is a limit of 25 reminders per operator, which can be set between one minute and five years. Dot only polls for reminders to deliver once a minute, so if you want something within a very short range, there will be up to 59 seconds of a magin for error.

You can manage all of your reminders by using the command by itself, I cast remind, or any of its aliases (including /remind). The remind command will give you a list of everything you have actively set, when it's due and what the message was. In this interface, you can use the dropdown to select any or all reminders that you'd like to cancel early, or exit if you wish.

When it comes time to remind you, Dot will DM you the reminder with the contents of your message. If Dot is unable to DM you because you don't accept DMs or have blocked her, she will attempt to ping-reply the original message where the reminder was set. If that fails for one reason or another, that reminder will be unceremoniously deleted.

Dot Left My Server!


As mentioned in the last post, Dot has been pruned from servers that had five or fewer members and, for the time being, they are unable to re-invite her. While I'm happy that people found the recruitment command to be useful, unfortunately these empty recruitment servers accounted for 45% of all servers Dot's in. I'm only allowed 75-100 server slots before Dot needs to get verified and cannot be admitted into any new servers until she is.

Since Discord will not verify a bot that is in so many shell servers, hopefully you can see this is quite a pickle and we should solve this now before a legitimate wants to add her and can't, while we're stuck with the loss of the "I cast" prefix. It would be ideal if you wished to re-add her to your region's main server to improve Dot's odds of getting verified, but if you cannot or are unwilling to add her to your main region's server, the last update brought with it the ability to use most commands (including the recruitment command) in a DM. So at the very least, you can continue your normal routine there instead.

The End of the Gen 1 Economy

The following commands have been retired: buy, sell, stocks, study

Amazingly, the economy has been around ever since Dot 2.4, in April of 2021. In it, we added not only a currency system, but a stock market. Interest in running a simulated stock market was actually what drove me to making the economy commands in the first place. But we've had a year and a half of that and the conclusion of the simulation is: Stocks make inequality go exponential in ways that basically few other things can dream of and eventually devastate the entire economic system. I suppose that was to be expected.

Time for a hard reset. Everyone's stocks have been sold off, everyone's Infinity contributions have been merged with their bank accounts, and all of this produces a list of players that have generated the most planets since we got started. Of this leaderboard of 50 people, the top 25 who did not already have it from ten million in Infinity contributions have been given a Gen 1 Economy badge for being the most successful players over its duration. Since seven people acquired the badge via the Infinity project while it was in service, the top 32 players will receive the badge.

Those badges will be here on the forum, if they have an account, and they will be made available to planned future profile features where we can make better use of stuff like this.

Here's the leaderboard:

18Sir Merlin#6879287,070
33Neo is Best Girl#400267,423
44Nuevas Ideas Creeper#137640,356
45The Islamic Country of Honour#656738,881
46Cat Overlord#662537,890

Per usual, congrats to the wealthy and condolences to the poor. 564 million is no small number, and it is well beyond anything I thought would be possible. If I missed awarding you the Gen 1 Economy badge, I might not know you have a forum account (or I might have spaced out entirely), so send me a message if you were missed.

With this conclusion and badge distribution, the economy is functionally suspended, in the next update, we'll start to bring some of it back in a new system that will make competition possible again.

Bug Fixes and Minor Changes

  • Info now posts a member's role by mention
  • Added Security Council resolution statuses to the nation and region commands, with matching embed colours and regional pretitles
  • The region command now has better formatting and displays endorsement rate and total endorsements.
  • The nation command now has better formatting and displays the nation's primary banner or a random banner if no primary is set
  • Added a link to the last update post in the version command
  • Error messages no longer ask for the command used, for they are reported (along with its alias and invocation method) automatically
  • The colour command now supports image transparency
  • Fixed roll not allowing 100 dice, as intended
  • Fixed an issue where hypesquad brilliance's badges were not reporting in info
  • The server command is slightly more cohesive
  • Fixed a bug in rotato where loading the oldest file in the set caused the command to fail
  • Fixed an issue where version could not be used in a DM

Report all errors to the local authority.


Dot 3.6: Fade to Black

About nine years ago in archival work, I used to have a manager that operated under the idea that a clean office was one that was entirely devoid of all possible things, praising me for every box I removed and piece of equipment that was sent to be auctioned. Lately, I've been feeling a bit that way about my code. 3.5 brought a lot of good fixes and sustainability improvements, but also a lot of "clean" spaces, with thousands of lines of code cut out. So I was thinking about dropping in some randomly generate gibberish and calling it
:yaaas: FeAtUrEs :yaaas:

The first of such marvels added today is called eyebeast. If you enjoyed the data-retention possibilities of eyebeast.calref, you'll be pleased to know that you can now extend the same thing to your server in mutually exclusive and unrelated ways.

Eyebeast messages are utilities for mods and admins. You can receive information about messages that have been deleted or changed, which is useful for when a user is being malicious and trying to dispose of the evidence. You can also receive information about users, such as username and discord discriminator changes, in case a user is trolling in that regard, or attempting to evade moderation.

This command requires Dot to have the "View Audit Log" permission, which is not conveyed in the standard invite link. Add it to Dot's bot role, or provide her with another role which has this permission.

The eyebeast settings are controlled via buttons in the console menu. In order for the console menu to display, you need to first designate a channel where the alert messages would post. For best results, have these post in a channel that mods have viewable access to, but do not have the "Manage Messages" permission in, so that logs created by their own deletions cannot be covered up.

Set a channel with I cast eyebeast X, where X is the channel you wish to set. After the channel is set, you can use the console buttons to turn features on or off, individually, by repeating I cast eyebeast.

Hail Refugia!

Or, alternatively, the region of you choice with the new hail command, a feature that allows any server to start putting together coherent and coordinated welcome messages for new arrivals to their NationStates region.

Hail first requires an admin to set it up. The command is controlled by a console of buttons which will only populate if it makes sense for them to. Only admins will be able to use the the management buttons, which include setting a region, setting authorised roles, and resetting the list of seen nations. Once a nation has been seen once, it won't appear on this list again even if the nation moves out and back. So, to ensure that we're not ignoring nations by people running the command on their own, designating a role that's authorised to run the command is a best practice, if you need more operators to help with integration.

Once a region has been set, the region's current roster of nations is also set, and the hailing can begin. If the operator is a server admin or has the set role that's authorised to use the command, the Welcome button will appear. This will allow the operator to pull the list of nations that have arrived since the region was set or the last time the command was run. Clicking this button also adds new arrivals to the seen nations list so that they won't appear again. If needed, admins have the ability to reset that list to the region's current residents.

The preferences and nation data for this command are stored by server. If you have more than one region in your server, consider having a single user take responsibility for welcomes in the secondary region and having them run this command in a DM.

Run the command by typing I cast hail

I am entirely too scared to adjust the World Factbook Entry!

What? Why? Don't answer that, I can't hear you.

If you work for Exxon, grey paint manufacturers, or catholic nunneries, you probably hate rainbows and other forms of creative expression, but here in glorious CalRef, one of the more common utilities I turn to is help creating colour gradients to spice things up. When it comes to BBCode, the utility that I had been using for years seemed to decide that it didn't want to be on the internet anymore and died to death.

So now we have one, the newly added fade command, a function to wrap colour tags around text, smoothly faded between your set colours by a number of steps equal to the characters entered.

You can use the command's dropdown menu to select how many colours you would like to blend, and then press the Fade button. From here, you'll receive a popup modal that will allow you to input your colours and the text you would like to pass through them. Enter colours either through hex codes or with the names of colours from the CalRef palette, like "legendary" or "california".

Alternatively, you can skip the dropdown box and colour entry by clicking the Rainbow button, which will pass whatever text you have through a premade rainbow palette.

Activate the command with I cast fade

Bug Fixes and Minor Changes

  • Moved the command set reacts to just set
  • Fixed an issue where remind's task time loop silently stopped and failed to issue reminders
  • Echoing input in failed nation lookups to assist operators demanding to know why Dot has the audacity to tell them "Nation Name <@&740675420084502690> My Region" isn't a living nation
  • Fixed an issue where some errors could not be reported because the section of the error log identified to be relevant was too long
  • Fixed an issue where region banners were not being uploaded as attachments, as intended
  • Fixed a bug where welcomess, farewells, and some economy commands would not respond
  • Fixed a bug where prune could not be used as a slash command, and where it could not target a single message
  • Fixed welcome and farewell from allowing bad channel settings
  • Made the version command's output information a little more robust

Report all errors to the local authority.


Universal Endorsement Aid

Hello again friends and "friends". As in Luca 2:10, I bring tidings of great joy!

Are you being bombarded with endorsement competitions in your respective domicile, yet the 24 hours in your day lack seven specifically dedicated to endorsing? Take heart! The same source of your problems also presents a solution, called Tart.CalRef, a universal endorsement aid. Tart.CalRef relays abilities similar to those you can get from Dot's tart command, and can now be used in this stand-alone web application.

Tart also features improvements over Dot's command, such as a large glowing button to endorse the delegate, positioned next to the assisted link opener, whose code has, itself, also been improved. Since Tart is hosted on CalRef, it's literally guaranteed that this site will have better uptime than NationStates. Since its developer is still an active member of the community, it's literally guaranteed to have fewer days of missing data than the available competitors.

Endorsing your neighbours has truly never been faster and more reliable!

Load up the site and drop in your nation with the region you'd like data for (with a name or URL), then start ctrl+click-ing away. The database is updated around 01:20 PDT, (UTC-8) and, in the coming weeks, updates to the database will be available sooner through active improvements made to our data processing script, Nightly. You can find a link to the site on our main page at CalRef, or by navigating to the new page directly, at

In accordance with the prophecy,

Report all errors to the local authority.


Dot 3.7: Backup Plan

Sometimes I wonder when it is that I'm supposed to publish a feature update and not just keep coding, and I think the answer is whenever the code I have is so different from what's on the server that my brain goes AAARHGHAGHG. That's why this update is limited to just increasing the version number and accomplishing nothing else along the way. AAARHGHAGHG!

Oh also, it adds two new commands and improves many others. So, I guess I can spend a quick second talking about that too...

  • Probably the most notable enhancement for this update is the welcome command, where a long-standing feature request has been to add the option to set a role to ping on a new member's arrival. This "welcome squad" function has now been added. Inside the welcome command, there are two new buttons. One will let you set a role to ping, and one will remove it if no longer desired.

    Pressing the ping button will generate a pop-up modal where you can type either the name or the ID of the role you'd like to assign, and if Dot is able to locate that role, it will ping in the welcome message next to the ping of the new member whenever someone new arrives.
  • Next up on the improvements list is the avatar and display commands, which are being "improved" by being removed entirely. It doesn't make sense for me to have multiple commands with vaguely similar functions taking up space in an operator's brain when we could be publishing fewer, higher-quality commands. To that end, the ability to pull your global or server-specific avatar is being added to the info command, as button options.

    Use the info command and if the target member has an avatar, a button to post it as an embedded attachment will be there, operating as the avatar command previously would. If they have a server-specific avatar, a button will be there for that image as well. For operators who will be unaware of this update post, "avatar" and "display" are new aliases of this command.
  • The tart command has also been upgraded. I had thought that publishing Tart.CalRef would cause most people to stop using Dot's command and start using the web site, but this was not the case and tart remains religiously used, still. So, I have taken the time to go through the output and now the improvements that Tart.CalRef made over Dot's command have come home, with better formatting, data handling, and delegate highlighting (when applicable).
  • Within the Refuge discord server, you can now use RRS to cite specific statutes of Refugia's law, if you know them. You can also continue using the command by itself to just get a link to the Revised Statutes when you need them in a flash.
  • Finally, the version command now reports an uptime per cent over the last 30 days, the number of commands used and what the most-used command has been over the same time. Additionally, you can get a history graph of the number of servers Dot is in, and what the total number of members seen are.

Observant operators may note that Dot has crossed the threshold of 75 servers, and Discord has requested me to verify Dot. It is not immediately clear when or if verification will be necessary, as many of Dot's popular functions rely on permissions, such as message content, which Discord has typically been unwilling to grant. Since my concern is that people not have their commands or functionality yoinked out from under them, verification poses more risk than benefits to me at this time. I will let you know if anything changes on that front.

Until then, I am pleased to relay the following new features:

Pack Up Your Things

Something that I tend to neurotically do over the course of [all the time] is to make backups and backups of backups to ensure that we never have a massive wave of data loss where something dies and takes half of our cultural touchstones with it. Graphics on Discord have been concerning me with this for quite a while. It's the same reason that Dot posts target member's avatar as an attachment instead of just a link, info does the same with banners, why roster does the same with role icons, and so on.

Although Discord has made it easier to copy a server for backup or re-launch, these "template" settings extend only to channels, roles, and permissions. However, there is no easy way to save your server's graphics, except for emotes, without help. And even emotes are time-consuming to save. So, to make admins' life easier, there's now a command called assets. It provides that help by giving operators with the "Manage Server" permission the ability to download all of their servers' graphical assets into one convenient zip file to dump into a new server, or just to save for future projects.

The time the command takes to complete will be proportional to the volume of content that needs to be saved. The zip file will be posted to the channel you call the command in. If the message that posts is destroyed, there are no additional backups, as archive zip files are not retained on CalRef servers. The command has a one-hour cooldown.

If you have the "Manage Server" or "Administrator" permission, all you need to do is use /assets or I cast assets to activate.

Seize All Delegacies

Fulfilling another long-standing request, the delegates command has been added. This command generates a leaderboard of regions on NationStates, ranked by their delegate's voting power. You can traverse the leaderboard by using the arrow keys under the output. The pages are limited to Discord's 2000 character limit, but that turns out to be about the height of my screen and I presume everyone else's will universally be the same forever.

Still, this does mean that there are 50ish pages of delegates. If you're trying to find where your region stacks up, but think it's somewhere in the middle, then you'll be pleased to know that instead of clicking through 20 pages of buttons, the region command now tells you a what a target region's delegate rank is (if they have one).

Delegates, additionally, has a button to get the entire list of delegates into a single text file, separated by commas, and broken into lines of eight. This is built for manual World Assembly campaigning, which is something that I, myself, have used with the timer command to send out campaign telegrams at max speed. So, I'd definitely recommend that combination if you'd like to get a proposal to quorum but don't want to hand NationStates any money.

The final note that I'll make with this command is that it's highly likely that it will be the last NationStates command that gets added to Dot. The existing eighteen commands will continue to get updates and improvements if there are any that come up or need to be done. However, Refuge staff have found that the site brings us more trouble than its worth now and I, myself, have found it difficult to stay motivated and creative in NationStates' caustic and problematic environment.

I will continue developing Dot for as long as I am able, but the nature of that development from this point forward will be to the benefit of things that are fun and build community activity. Rebuilding functions for Dot's economy, adding games, and other things that inspired me in the beginning will be my focus once again. I am excited to share those updates when they become available.

Bug Fixes and Minor Changes

  • Fixed an issue in autopins where an error message would never appear if a channel's pins were full
  • Eyebeast report colours are slightly easier to differentiate
  • Fixed an issue in eyebeast where actors for deleted posts may have been misattributed
  • Fixed a bug in eyebeast where some users would not generate reports
  • Fixed a timezone issue with fortune's resets
  • Fixed a bug in error reports where the console error log was sent to the user's copy instead of their own message
  • Fixed a text issue in hail where admins were implied to be unauthorised to run the command
  • Added recognition for the active developer badge in info
  • Made some improvements to nation to try to deal with error-riddled responses from NationStates' API
  • Fixed recruit still being set to "on" after deactivating when NationStates' API dies
  • New drop down menus for recruiter[/tt]
  • Fixed truesight not being able to handle dispatches that don't or no longer exist

Report all errors to the local authority.


Remember when this thread used to be a blog? It was all the way on the last page. Anyway.

It's is "often" said that the internet has a 1-9-90 paradigm. This represents a ratio that all content on the internet is produced by 1% of its population, aggregated or remixed by 9% of its population, and silently consumed by 90% who make no additions or changes to it. In some ways, this naturally works because you often have people who show up to just read something to unwind. At the same time, you have people who have a vested interest in doing things, themselves, but either don't get a lot out of consumption or have the time to do both.

A while back, Natalie raised the issue that the over-arching gameplay of NationStates is inclined to produce power-users, or those in the "1". These users make things aimed at the 90, such as info pamphlets which really should have been made by NationStates, itself, or programs and activities where extremely limited energy and interest is expected in advance, for it is all theatre anyway. While there is a remote possibility to get players from the 9 via regional officership programs or as staff of active ministries, it is true that if someone is in the 9 on NationStates, they might as well be in the 1, for that is to where power and prestige solely flow.

Yet I feel there is more at play than just the habits attached to users from a browser-based political simulator from 2002. In the earlier days of the internet, people were jumping at the chance to add their talents to the new community that they were a part of. Whether this was sharing music or art or just writing about whatever they want, the freedom of the platform and a strong personal drive to make their mark within it was powerful motivator. That motivator has since been lost, and I've wondered where it has gone.

In the modern day where internet accessibility has scaled things up to a massive userbase, is it that people do not feel able to compete? Do they feel that their contributions are valueless against professionals? Are they over-strained by late-stage capitalism demanding every moment of their time and creativity? Perhaps the answer is "yes" to all of the above. Perhaps their time as 90-consumers are spent in communities of the internet with 100,000 members which have full-time paid development staff making software, stories, and media that were previously communally-sourced.

This is the point where it is patently clear to me that I am a stubborn admin, running a community on an increasingly outdated meta. In a world where things ARE more top-down, in a world where staff roles ARE increasingly perceived to be a separate class of people. In a world where membership is transitory and yielded to those that can come up with the best new media, perhaps it is no surprise that the end result is consolidation and monopolisation.

The new meta is a paradigm of 1-99 -- exemplified by the YouTube culture of power-users chasing after the purest algorithm adherence, as smaller creators are erased from the face of the earth. It is the same force that drives the destruction of forum RP, where the only worlds and characters are those you make yourself. That format is now lost to Discord's gif-sticker-react culture where you may select an ambiguously safe, prepackaged message that you anticipate will be more predictably-received than putting yourself out here.

These are thoughts that need to be considered as Calamity Refuge enters its fifteenth year. It is unlikely that we will ever have a paid development staff, and it is as possible as ever that we will be erased from the face of the earth when led by an increasingly aging and depressive admin. As I open up discussions, commands, threads for input, I do become bothered by when they receive no feedback, no messages, nothing at all, for we are no longer at a point where I am able to do what the community needs.

However, since it is unlikely that the Refuge will join the monopolisation meta, one thing is clear: The community is unlikely to survive without the 9. It is unlikely to survive without communally-sourced ideas and creativity, talking and sharing amongst friends. People figuring out what they want to do, what they think it should look like, how things should work, what we should be working ON. It will fall to everyone in the coming year to determine this community's fate and vibrancy, for everyone has a share in it and of it.


Dot 3.8: Economy II
We're Kick-Starting the Economy Again

It's been a little longer than expected for restarting the economy. Generation I was shut down for the 3.5 update when stocks exploded, destroying game balance and killing everyone. Now the gears of industry are turning once again.

On-Message credit generation has resumed. Under the new rules, you have a 50% chance of adding :planet: 2 to your bank account if you have spoken in the last sixty seconds, and a 100% chance of :planet: 5 if you have not. This allows people who just show up once and a while to still get some credit, but also doesn't forget the heavy chatters.

Recruitment credit has been reinstated. If you are fond of using the recruit command, you may also be fond of the fact that every addressee you send a telegram to will generate :planet: 2 in wealth to you.

It's the Battle of All Things!

Long has the day been awaited when the Ultimate Showdown received not only one ill-conceived sequel, but two. Like a Nickelback cover band, it's literally impossible to get us to stop. To coincide with the Battle of All Things in Refugia, Dot will also be participating with the release of a corresponding betting command, called BOAT.

In each round, you can make a costless bet where a correct answer yields 5,000 planets, the in-game currency. You may change your bet as many times as you like, up to the time that the competition you are betting on begins. There is no penalty for incorrect guesses.

At any time, you can also lodge a prediction of who you think will be the final and ultimate champion of the Battle of All Things. You can change your answer whenever you want and as often as you want; however, the earlier you make a correct prediction, the higher your reward will be. The rewards timeline is tied to what the match is when you place or change a bet.

For a correct final bet placed placed during...
 • Round A: 150,000 Planets
 • Round B: 120,000 Planets
 • Round C: 100,000 Planets
 • Round D:  82,500 Planets
 • Round E:  68,500 Planets
 • Round F:  55,500 Planets
 • Round G:  46,000 Planets
 • Round H:  38,000 Planets
 • Round I:  31,000 Planets
 • Round J:  25,300 Planets
 • Round K:  20,500 Planets
 • Round L:  17,000 Planets
 • Round M:  15,000 Planets
 • Round N:  10,000 Planets

Because of the exponential system, it is prudent to try to reach the correct prediction as early as possible. Since answers can be changed, players whose original choice of champion was defeated may continue playing, and guess again for a lesser prize. It also gives players with surviving champions the decision to stick with them to the end, or jump ship to a more likely champion as The Battle of All Things goes on.

Activate the command with /boat or I cast boat

The Return of Infinity and the Rise of Inequality


It is, perhaps, inevitable within a game's economic system that inequality will appear. Ours will be no exception. This time, however, I am planning on it from the start. Unlike last generation, the only way that you will be able to receive a Gen II Economy badge at the end of season will be to donate planets through the infinity project. The Infinity command has returned with a freshly emptied account, and an even snazzier, paginated leaderboard feature. The top 2% of players who contribute to Infinity will receive the badge. In the unlikely event that there are less than 50 nations at the end of the season qualifying for a badge, the number will be expanded. But for now, it's 2%.

In order to encourage (or discourage??) people donating to the Infinity Project, there is a new command called inequality. This command brings a separate leaderboard of the wealthiest players by unspent bank. In this command, the top 1% of players will be receiving the legendary Gen II Shitlord Badge of Extreme Wealth Hoarding. Whether this is something you are aiming to obtain or aiming to avoid is up to you. I suspect many may try to avoid being saddled with this trophy for the rest of their days, plagued by it in the upcoming profile command. Fear not, you can escape it simply by keeping your balance low and donating to Infinity. Alternatively, embrace being a shitlord!

Something that I missed during the stock hype of the last economy generation was that inflation made it less possible to use the economy for events and activities. We have that opportunity again. Consequently, at the end of the Battle of All Things competition, there will be more fine sources of income added to Dot as well, and new events that will arise. The economy functions will continue to expand even after this update, and the season will not be closing any time soon.

Everyone will have ample opportunity to pursue their goals in our various events.

Notable Enhancements

The colour command has been pretty substantially improved in this update, and will likely be substantially improved again in the next update. But as of now, the output of a given colour comes with a label in the created image of the hex code it represents.

When you input a hex code, you will get back the name of the colour you are searching in the footer, or at least the closest name by euclidean distance. If you wish, you can use those colour names to as inputs, themselves. This means you can search colours even if they are outside the CalRef traditional colour palette, like "kelley green" or "very light pink". You are also now able to use commas to separate inputs, generating up to seven images in at a time, with the output image organising them nicely into the same image dimension as usual.

Two other commands getting an upgrade this update are info and timestamp, which can now be used as context commands. Context commands appear whenever you are interacting with a certain type of object in Discord.

You can use the info command by right-clicking or long-tapping on a user's name or profile picture, which will skip typing the command entirely. You can use the timestamp command in the same way, by right-clicking or long-tapping on a message to query Dot for the exact time it was sent. When using timestamp as a context command, the time object will also be a URL to the message, just so there is no confusion or dispute about what is being queried.

Finally, the telegrams command has been enhanced by providing an optional button to see the found rate over the last 28 days. Telegram queue history and newly founded nation history have a strong correlation; however, telegram queues heavily depend on how fast NationStates actually sends a message. They could linger in the queue for some time.

Still, this contextual information can be useful if you wish to study found trends and how recruitment might impact the queue.

Bug Fixes and Minor Changes

  • Map and RRS, despite being the oldest still-existing commands, have just now been added to the documentation
  • RRS, for whatever need, can now be used outside of the CalRef server
  • The commands / help command layout is improved and links to the CalRef server for support
  • Fixed a bug where Eyebeast stopped reporting the user that deleted a message
  • Fixed a bug where hail could not be used in a DM, if used as a slash command
  • Resolved an issue where Discord did not permit recruit to function as a slash command
  • Fixed a bug where roster could not display role data if that role had an icon
  • Fixed an ancient bug where save caused Dot to crash when saving a region with mixed-case BB tags
  • Fixed a Transitional Council error where tart's websheet led to a 404

Report all errors to the local authority.


Dot 3.8.3: Economy II
Luca we've been on 3.8.3 for a while

Quite correct, this is really an "update" of a different kind, and I'm also here to clear out the backlog of my recent improvements and fixes.

But primarily, I'm here to give you guys an update on the immediate future of Dot. If you have had no idea of anything going on, let me bring you up to speed. Dot has grown from being a help in a chat of about 50 people to one of the most widely used bots in NS servers. This is both neat, and extremely inconvenient with regards to the restrictions that Discord puts on me, the developer.

We have been at the server capacity for the last month, and during that time, Dot's verification application has been in limbo. They apparently just threw the verification application (along with everyone else's who applied in February and March) into the garbage after admitting they have no idea where that data went. Then they lost my intent request application, saying that they cannot accept the old form in the application I had submitted twice. But after reapplying for a third time, the dark deed is done. But there are strings, and one of those strings is that message content will be invisible to Dot.

Unfortunate News

Rejoice! There can never be a conspiracy that I'm scanning messages because it's literally impossible unless you ping her or DM her. But the downsides are that:
  • The "I cast" command prefix will be dead
  • Eyebeast will also be dead.

The first is very sad because "I cast" is iconic and I can't think of any other bot that has something that isn't a passionless punctuation mark as a prefix, but what can you do. The good news is that I have been anticipating this moment ever since Dot's 3.4.3 update back in August, where all commands were converted to hybrid commands. This means you can use them with a prefix or as a slash command.

I'm aware that Discord's slash command system is buggy and bad. When it goes down, through no fault of my own because they fuck something up, no one can use slash commands. I don't think that's too great, especially when some commands might be time-sensitive. Consequently Dot's command prefix will be changing to a ping. So you can do things like "@Dot banish Luca" and it will work the same as "I cast". So if you want to avoid slash commands, you can do that, if you want to use a kinda emergency method to get around slash commands when Discord breaks them, you can do that too.

Obviously Dot will not have the ability to report edited or deleted messages with the eyebeast command, and there is no workaround possible for that. I could remove the features that deal with message content there and just have the command report user changes, but I don't see the point of a feature that's so limited. So eyebeast will be retired entirely, with any settings data you may have established being deleted as well.

You can use this time to locate a bot that provides that moderation service.

Positive News

The positive news is that there are many things that will not be breaking that Discord will continue to allow me to do. This primarily relates to welcomes, farewells, autoroles, reacts, the ability to locate members with commands like bank and info, and the ability to have reminders function coherently.

I will also be removing the restriction on how many humans a server needs to have for Dot to stay in it -- since I will have no restrictions anymore in that department, neither will you.

These changes will be all take place when I push the 3.9 update, which is planned for approximately four days from now, April 10th, 2023. Until then, Dot cannot be added to any servers without the sudden lack of access breaking commands after we cross the old server limit.

Free Stuff That Already Happened:

You probably already noticed, but I added a little meme generator command.

Annoy allows you to generate a meme image, where a quote of yourself annoys someone with the block of text of your choosing. Naturally, both a target and a quote are mandatory fields.

In this command, you can provide those by separating them with a comma. The speaker will always be the display/nick of the operator, so you can spoof the speaker name in the image by changing your nick. If you are in a server where you are not allowed to have a desired nick, consider leaving that server.

There is a nifty demonstration to the right.

Minor changes:

  • Reported errors are now more helpful at diagnosing problems
  • Infinity badge slots have been expanded to how many poop badges currently exist in inequality OR the top 3% of donors. Whichever is greater.
  • autopins to use raw listeners and compare timestamps instead of the cache
  • colour can be used to take the primary colour of an attached image
  • colour max increased to eight
  • farewell will now display how long someone was a member on their departure
  • give remade to operate via component UI
  • nation command gets a full on re-work
  • region now tells you the total influence points and influence gain in a region, update times, position
  • set will try to add a successfully set react
  • version's service graph is now linear
  • version now displays a graph of all commands, last 60 days & 10 most used commands, last 30 days
  • Fixed a bug where recruit silently drops nations during high-volume found times
  • Fixed a bug where slackers and WAs can generate empty rows in otherwise perfectly fitting tables


Dot 3.9: Sounds Familiar
At long last, the nightmares can end. And also begin?

Hope everyone enjoyed the warning time, for it has now elapsed. The new reign of terror begins today, and all things previously mentioned are now the state of affairs.

Important things:
  • There is no longer any limit on the servers Dot can be in. If you have been wanting to add Dot to your server, you can freely do your thing now.
  • There is no loner a minimum human requirement for servers. Whether you have five, nine, etc, people, Dot will remain in any server she is invited to.
  • The eyebeast command is retired. (Dot cannot see messages, and so cannot report their changes/deletions)
  • Dot is unable to see message text of any message unless you DM her or ping her. This means that you can no longer use "I cast" as a prefix.
  • Slash commands are presumed to be the main thing people will use, but you can also use "@Dot" as a new command prefix and that's probably what I'll be doing.
  • The documentation is slightly less ass, and now also accurate. I think. And the standard invite now asks for many fewer permissions.

I had planned to release an improved version of the stock market from 2.4, but it's turning out to be markedly more complicated than I anticipated. I will still do this, but I wanted get the server restrictions off and reconcile the command scheme sooner rather than later. It was already finished, I know people had been waiting on it, and there's no sense in delaying them because of economy minigames.

So! You get one new feature today and I'll send in the stocks system when it's ready.

Wait there's a new feature?

Yeah, sure, why not?

This command is a sort of cross between the fortune command, and many other bot's "dailies" payout commands.

It allows you to have a "familiar", or guardian, assigned to you for the day, where a "familiar" is an entity, location, or conceptual idea. That familiar will provide a static payout in planets, according to its innate quality. There are five* quality levels, with the lowest level paying out at 100 planets, while the highest pays out at 1,000.

In addition to the payouts, the familiar also comes with a certain stance or attitude towards you. This attitude is determined by the innate disposition of the particular familiar, the day's global dice roll (is it a good day, bad day, or middling?), and the operator's personal roll. Some familiars are innately hostile, but can be encountered as superfriendly if the stars align, just as the reverse is true as well.

Unfortunately the familiars take a lot longer than fortunes to throw together, so there aren't as many of them. However, with every major update, I plan on installing a pack of 100 new familiars into the system.

This first OG set of 100 familiars is called the Demon Hill pack and I hope you enjoy it.

No minor notes today

I am extremely tired.


Untitled Development Journal 37


I thought I would write a quick note about several smaller-scale updates I've done over the last week. Firstly, Eyebeast and Tart have been given some subtle updates, including:
  • More compact headers and footers.
  • Buttons that are supposed to help mobile navigation now only show up on devices the site thinks are mobile-shaped.
  • Discord embeds are slightly nicer.
  • Eyebeast now has a new icon/logo, a new background, and other CSS that (I think) is slightly nicer to look at.
  • Eyebeast region names are now hyperlinks, and we track the new tags that NationStates added (frontier, colony, embassy collector)
  • Tart has been updated to talk about governor mechanics instead of founder mechanics.

Dot has been given some patch updates too, we are now on version 3.9.4:
  • Dot is now available on Discord's App Directory.
  • familiar's pulls have been improved (we're running ipod shuffles and not "true random" to up the diversity), and individual familiar moods are now slightly milder.
  • Fixed a bug where an operator would roll an impossible familiar.
  • Fixed a bug where give wouldn't correctly report that a transfer succeeded.
  • Fixed a bug when calling info via context menu on a user that was no longer in the server.
  • Fixed a bug where info said everyone was a bot.

More notable changes:

Refuge staff members now have the ability to manually run Nightly outside of its cron cycle. Sometimes NationStates takes a long time to update. When it does, our server pulls a data dump at midnight (PDT), only to find that NationStates still has the data from the previous day. This causes a lot of sites and services to show old data, even if it looks like things updated. If you or someone else notices that Nightly's data is out of date, locate a CalRef staff member and they can run the script again.

The WAs command is being retired and its abilities are being rolled into a new button in region. So you can use the region command to pull a region, and click the new "Residents" button, which will spawn a menu that you can use to get a telegram and table output of all nations, WA-only nations, or non-WA nations. WAs will be deleted entirely in 3.10.

When it comes to recruitment, I've reworked the recruiter command to have a lot better structure on my end, and also given it the ability to let a server admin set what regions they want to exclude from telegram recruitment. You can use the new Set Excluded Regions button to remove nations which were founded in regions you are disinclined or treaty-obligated not to recruit from. When using the pop-up that this button creates, you can enter a region name or NationStates URL. When entering more than one region, separate your entries with commas or linebreaks.

Finally, the new method of setting a recruitment template is to just drop the template directly into the option field. So /recruit %TEMPLATE-29351171% is all you need.

That's all I can think of for now. Byeee~


Dot 3.10: I Can Show You The World
And all of it is ass!

It's the time of year again where I once again bring you new piles of free shit for use in your various NationStates pursuits. This one establishes vast databases, which the server can only estimate contain 83.5 million entries. These entries report historical facts about regions and the world itself, which has long existed on the internet, but has been rarely used outside of my dispatch reports due to the data's cumbersome scale.

That said, last month my computer spent some two and a half weeks processing the files into a more usable format, and I spent some two and a half weeks after that getting my code to manage it more reliably. The result is three major functionalities being added to Dot's commands.

Additions to Region

The first exciting development is in the region command. You can keep using the command like normal to get an overview of a given region, but now there are three new buttons:
  • The first lets you pull the roster of nations, which you can filter by WA or non-WA in a sub-menu, and output those to a telegram list or a BBCode table downloads. This replaces the old was command, which has been fully retired.
  • Next is a button to graph a region's activity (the days since its nations, respectively, last logged in), which will allow you to catch CTE waves in advance.
  • Finally, there is a button that will allow you to use the new database and output a host of graphing data.

The graphing option includes population, WA information, delegate power, and much more. All of it can be graphed individually or layered with a second set of data as a dual y-axis. If you're using a dual graph, you have access to world data too (more on that later). Whatever options you pick, you can download it as a .csv. So if you don't like how Dot procedurally graphed it, you can remake it with your preferences or for your own projects.

If a region had a delegate during the graphing period, it will be highlighted in the output, although this can be toggled off. Delegate overlays will not print a name if they do not take up at least 10% of the chart area, and delegate names that are lengthy will be trimmed unless their term was very long. Note that before July 17, 2017, NationStates did not include endorsement data in its data dumps, and that information can no longer be retrieved or recreated.

Historical Delegate Leaderboard

Since we now track who was a delegate of what region and when, we can also plug in dates from the past and get better insight as to what the power-regions were in times gone by. The delegates command has a new button that pops up a modal for you to plug in a date. You can input any date (in YYYY-MM-DD format) within the last eleven years and Dot will pull the information, simulating the command with that day's historical leaderboard data.

These historical leaderboards can be traversed with the embed's page buttons, just like normal, but you can also export them as a .csv table for your own projects too.

The World At Your Fingertips!

This is a command to give some overview information about the world, such as population, total regions, total World Assembly members, and delegates. It also provides a list of the top 10 currently trending dispatches and the current top 10 regions by World Assembly members.

Like the region command, it comes with buttons to graph world activity to see CTE waves in advance. It also comes with a graphing option to see the last 28 days of new nations founds. Please note that this button has been relocated from its old home in the telegrams command and can no longer be found there. Finally, there is a button to generate a variety of more complex world-specific historical graphs. This include histories on population, World Assembly members and delegates, total regions, total endorsements, founds, and much more. As before, you have the option to graph one item of data, or mix it with another on a twin axis.

For all of these graphing options, you can receive a .csv download of the information if you would like to generate your own graphs with it.

Check out the links in the sidebar to the right, demonstrating the commands and their intended operation. Because these new features rely on so much bulk data and open-ended operator options, I expect there will be a few bugs that CalRef staff didn't catch in testing, so feel free to report those when you come across them. Some commands are intensive and you will need to wait up to 30 seconds for the server to assign your request processing time. If it takes longer than 30 seconds, it probably broke.

Minor Changes Since 3.9.4:

  • Re-added channel typing for intensive processing commands
  • Retired scale graphing for the version command
  • Fixed a bug where region would no longer display SC resolution themes for applicable regions
  • Fixed a bug where recruit in assistance mode would produce an error on finish or timeout


Why Is Recruitment Missing?
Sure, happy to explain. Also welcome to the forum.

  • Reason #1: Dot isn't really a recruitment bot, and that's not why Dot exists.

This is a decision that I have been wrestling with since...I don't really know when. I'd say the latest possible beginning was Mayish 2022 when I took a review of the commands used in the last thirty days and found that the top two commands were used more than the next thirty seven, and recruit made up over half of those two. Before that I had no idea when commands were used, what commands were popular, which ones were flops, and (most disturbing to Discord) no way to know if someone were abusing my commands. So I added usage collection and later reported this in the version command. At the time I added them, the top command was recruit. Also at the time I added them, I thought that would change at points. It did not.

My goals for 2023 were to dethrone recruit as the most-used command, and I planned to do this by really going to town on adding new commands and really sprucing up the ones that already existed -- giving them new capabilities and analytics. So now there are 61 commands and some that allow you to look through twelve years of almost every imaginable metric of NationStates record, with visual graphs, trends, and events. This was a shitton of work, and unfortunately this impacted usage almost not at all. Recruit is down from where it peaked at 46 per cent of all commands used in the last 30 days, but almost exactly where it was two years ago at 34 per cent of total, and that's just very sad.

I feel like this is a big reason why I've lost motivation to work on Dot, which I have worked pretty hard on for years. Irrespective of graphics and documentation, there's over 750KB of raw hand-written python and about 2 per cent of that is the recruit command. Yet Dot is know for being the recruitment bot, and any other services Dot could provide will probably always be overshadowed by that.

  • Reason #2: Manual is less effective now, and that's partially my fault.

Dot's documentation page mentions how she went from being in one server of 50 people to 300 servers of some thousands. And this probably comes across like a humblebrag, but really what it's meant to convey is my abject horror. Dot went through a lot of command rewrites in v3.0 and v3.1, and a lot of it was dealing with Dot's explosive growth axe-murdering my server. But 34 per cent remember? Now there's literally hundreds of servers which are using this system (maybe not all at the same time), but collectively hundreds more servers are popping in and out of Dot recruitment with six to ten going at any given time, raising the competition for all. Included amongst those new recruiters were, bizarrely, feeders which the command was never intended to benefit.

It is less effective than ever to use Dot's recruitment because it has become a relative baseline for manual. This means that it is, ironically, now less effective than going fully manual. One alternative is hammering the API right at the ratelimit to get new nations the picosecond they come out, but I'm not really interested in pursuing that line of development. The fact is that timing only gets you so far; at the end of the day, some nations just aren't going to be buying what you're selling. Also, I couldn't even pursue it if I wanted to because Hydrogen already makes a ton of requests to NationStates to service other commands and software.

  • Reason #3: More of a detriment than a benefit.

There's a whole bunch of people out there who spend an inordinate amount of time hating my living guts. This is fine, but it does raise an interesting question of the ethics of decrying my evil in public, but continue to benefit from my work in private. I guess that's not my problem so much. The ethical question for me is should one continue to benefit people and organisations that simultaneously attempt to erode your reputation and public trust? I think the ultimate answer is "no", but I have vowed to uphold Refugi values as Arch-Admin of Calref, and I consider free and public access to tools and software to be one of those non-negotiable values. It's why I opened it up to the public in the first place instead of retaining it as an exclusive tool for myself.

So the lights have stayed on, and stayed equally on as long as I thought the command was good to have around. Now that I no longer believe the command is good to have around, the lights can also be equally off. Ultimately, I just don't want to run the command anymore, but hopefully some good came from the three years that it was around.


CalRef VII
What? We're Still Doing These?


What's Up With This Sick Theme?

You likely noticed that there's a hot new theme for the forum that dropped around the 3rd of April. This theme is called Silvehn, it's named after Emily's Elven nation theme, and took approximately six eye-bleeding days working basically non-stop. I've kinda found that I've developed this frustration with everything on the internet looking generic and corporate. So, going forward, I'd like to really bring back colour and return to an internet era where every website actually looked different from every other website.

Read/unread icons are the Refugia Culture department icon, but they're coloured in unique ways depending on what hasn't been seen. The redirect icon is also available as a Dot rotato icon, born out of this [wallpaper] I recently made up in inkscape (which is actually a literal joy to work with). The board logo is a slightly saturated version of the same style we had in Endar, and the post editor is made up of styles and icons of that era. The background is not mine, though it is licensed, and about everything else is made from scratch. This theme renovation improvement also allows for more permissive avatars, as well as threads you've posted in being easier to spot.

Osmium? A New Server??

Yes, me, this is also true, we now have a new Debian 12 server called Osmium -- a name picked by poll popularity. Every now and then I reach a point where I feel like I can't get a version of something that I want, usually Python, and it boils down to the version of Debian. There's also bountiful things that accompany such upgrades, such as added security, whatever that is. Personally I just let Amazon and ByteDance pound the server like a thirteenth century French brothel, and assume everyone else does too.

Amazingly, this sort of subconscious awareness that the time had come to renovate the server is well-sourced. Apparently, the Refuge has almost always swapped to a new VPS every three years since forever. So I suppose I am just following a long tradition under the guise of free will and choice. Hydrogen was officiated, to my recollection, in December of 2021, so we're a little early, but that's alright. Now we have new and nifty things like Python 3.11 and PHP 8.3.

PHP 8.3 is great*, but also means that the wiki died. So part of this upgrade involved spending a significant amount of time manually upgrading the wiki, its mods, and its database, incrementally, from 1.31 to the latest long-term support version 1.39 and its six additional patches. I believed, however, that flashy version numbers going up wouldn't get the blood pumping, so I added and briefly spent some time modifying a dark mode theme. Being a staunch traditionalist, I have not made it the default theme, but it is available for you to use at this very microsecond by visiting your [preferences] and selecting DarkVector.

* it's still PHP
More! Give Us Nummy Nummy New Things!


But! I'm excited to give you old things. The deal with programming is that it's a never-ending learning process. Every time you do something, you learn how to do it better again by making it. Downside is that you already did it, so you can either waste time doing it again or move on to something else. Oftentimes I'm more than content to do the latter, but recently I decided to take some actual programming classes to shore any gaps in my knowledge that came from the haphazard way I figured things out on my own, without formal training.

The vast majority of content was material I already knew, but what I didn't turned out to be very helpful. I think [Eyebeast] benefited from this a bit in terms of accessibility improvements and the lord, our God, Google's blessed search rating. So, now that's been done up, visit it today! Or as often as you normally do, and note that it is marginally better than it was this time three months ago.

One other notable update to share is that I've followed in the footsteps of Refuge admins' passed and put up the source code on Github for others to study and learn from, or politely suggest improvements. It is released under the 'if you smelt it you must dealt it license'. Visit and star the [repository] today, or whatever people on Github do.

But I Said Give Us Nummy Nummy New Things!


Also! You might think that my next stop on this journey would be to, then, ground-up improve Tart.CalRef, and you would be correct. But I also think that I'm marginally better at figuring things out with code than I used to be, so I wanted to do something unusual while improving it. In this, I decided to recode Tart.CalRef in PHP. Mostly to prove to myself that I could learn a language that I have never worked in before and spit out something modest in it without any framework.

I also just thought that PHP would be more suitable for handling Tart than python with flask and, now after having done it, feel like that was a pretty bang-on assessment. I'm not a PHPist, so probably professional PHP developers can find a dozen things to poke holes at, but for my purposes I think it's put together relatively well. More importantly, Tart is now faster, scores 100 on lighthouse ratings in every category, and has basically zero dependencies.

I have also made its code available through a public Github [repository] so that you can look on it with awe and terror, and also to get an idea of how you can parse a data dump with PHP. It is released under the do whatever as long as you keep the copyright license.

Shall There Be Nummy Nummy New Things in The Future?

Not really. Maybe. It's classified.
Report all errors to the local authority.