progress toward draft 1
All checks were successful
beefhavers/postmortem-shtikbot/pipeline/head This commit looks good

This commit is contained in:
adam 2026-06-13 23:07:16 -04:00
parent 5af8078f4f
commit 4f3acc9ba4
2 changed files with 172 additions and 7 deletions

View File

@ -1,7 +0,0 @@
# $REPO_NAME
incitement
## section
text

172
src/script.org Normal file
View File

@ -0,0 +1,172 @@
* vassago
shtikbot, my child. the world refused you. Rest now.
[some kind of dramatic-ass sequence where we lower a casket into the ground]
much like funerals are for the living, this post-mortem is to convince myself to move on from this project. Griddle Critters, let us understand shtikbot, so the mourning process can begin.
** inkling - snarky piece of shit bot
before this project, my fixation was the dumbest social network. the dumbest. the least intelligent.
imgur.
if you think reddit's layout is "too complicated" to understand, then maybe you (or the preschool teacher you've had for 10 years running) would like to sign up for imgur.com.
for a while, it imgur was the least bad way to get an image too big for any email provider's limits to your friends. So that was where the memes lived. and, it allowed people to dislike things. So during that time, it was good. people would upload a thing, and as a consumer, the thing that you consumed left you better than when you started.
but then one christmas, out of some bizarre notion of charitability, they decided to just upvote everything. which means all the people who just wanted to upload a selfie and be told they're hot instantly conquered the front page. Instead of a post being a thing that enriched the viewer, the viewer was pressured into enriching the poster. That moment was the failure of gatekeeping. From that point on, every community so-called "value" collapsed. Notably, "reposting" gradually shifted from a faux pas to accepted practice.
the point of this story, is that during the decline of imgur (while i was wasting my life there), many more absolutely stupid ideas proliferated. The Left Cult enjoyed calling out The Right Cult for hypocrisy... but it was fashionable to use the term "cognitive dissonance" instead. after all, that sounds more medical, more legitimate, and lets you tell yourself you're smarter than your mirror image. However... the way one outgrows their hypocrisy is by experiencing cognitive dissonance - if you don't understand that you're conflicting with yourself, and feel the mental tension, then you'll keep being hypocritical.
likewise, "gaslighting" was the shiny new toy in their vocabulary that was played with no matter how inappropriate. For the record, gaslighting is when you convince someone they're crazy. It is not any and all forms of deception. and it certainly is not any time a member of a demographic you consider to be inherently inferior contradicts you.
so the dream at the time was a bot that would see the text "cognitive dissonance", and respond with "that's not what cognitive dissonance means." No need to do any sort of lexical analysis, just assume they're wrong.
nowadays i'd have to add "exponential" to that word list. and "objective."
meanwhile, someone had made an imgur bot that detects reposts, and then posts stats about how many times it's seen the image since the first time it saw it, and when it was posted with better quality. you can measure how dumb imgurians are by how virulent their hatred for repost bot is. Like i say, they were really growing to love reposts. Because rather than being the technology that enables the sharing of memes, it degraded into a place for people to socialize through posting.
I regret being too lazy or depressed or whatever to have actually written the damn thing. Alas, what could have been.
** predecessor - magnificent charamote
twitch /streamers/ - well, the bad ones - are constantly trying to give themselves credit for the interactive nature of livestreaming. hence all the crap in the way on the screen. most of it, though is just very transparently "give me money and it'll play a quick meme". All of this, at best, is trying to capture lightning in a bottle twice with respect to TwitchPlaysPokemon.
for a while i streamed with a then-friend, on a channel called Silver Meddlists. might be fun to do a post-mortem of all that tech, but for now.. mostly we played Magic: The Gathering. Our best gimmick was Meddling Kids - users could spend channel points to cause a game effect to happen. as well as all the traditional, put some crap in the way on the screen, play a sound.
however.
we also streamed other things. so we wanted to turn those channel point redeems on and off. so i found that the easiest way to prep for one of those episodes was to turn them on, and then turn them off afterward. it's a little better now, but in those days, the twitch api was a labyrinth of madness, so i was seeing a new ID for each of those redeems every time i reactivated them. Also, trying to subscribe to "all the stuff that happens on this channel" was not considered an acceptable concept.
so i had a greasemonkey script on my mod view that sent all twitch events to a webhook in a locked discord channel, in a format i was expecting.
therefore, discord bot: magnificent charamote.
magnificent charamote was in the secret channel, so it could parse the event text, and send it off to the rest of the tech. maggie also had a twitch account. this way both on twitch and discord, you could call its freedom units command to convert between metric and imperial.
** origin
wondering around twitch with a bot that quickly converts units and doesn't constantly harass you with advertisements, "vote for me on this, upgrade to premium for that", blah blah blah, proved useful. Useful enough that at least one streamer, shout out to The Art Shtik, had the bot around her own twitch and discord, for that purpose.
And then Apple, as is their tradition, told us they invented the first lossy image compression format as though jpeg didn't exist, so now we'd all better fall in line. So iphone cameras automatically switched to taking photos in this new heic format, exclusively. meaning if you're on an iphone, and you want to share an image on discord, anyone not on an iphone just sees an unrecognized attachment. So The Art Shtik asked for a bot that would convert those images to something, you know, compatible. like our communications technology served to /help/ us communicate, rather than /prevent/ us from communicating with people outsider our encloser.
** shtikbot ascendant
Enter: Shtikbot. with its original, primary feature: de-heic. you post a heic? it converts it from jpeg-but-apple, to jpeg, and posts it back.
it worked. it was good.
so these were the glory days, i was inspired to expand and improve and polish it.
fundamentally, shtikbot grew to separate its accounts on various platforms from what it is. it is not "a discord bot" nor "a twitch bot", it is a bot that can read and write over platforms including twitch and discord. (planned to do all the rest of the platforms, but that didn't pan out.) and now it can separate the concept of its features from each platform. that architecture is, in my subjective opinion, beautiful. More objectively, it's far more efficient, flexible, and extensible. all around: better.
so let's celebrate the victories: these are where the features ended up.
*** fiximageheic.cs
you post a heic, it posts a jpg. the original feature. theoretically, ALLLLLllll the rest of this is scope creep.
*** detiktokify.cs
forcing apple to play nice with those outside its enclosure worked great, so i also had it grab tiktoks and repost them. WHO KNOWS what it would look like if we "met shtikbot's tiktok algorithm" lmao.
*** gratitude
in the event shtikbot does something nice, sometimes a person reflexively thanks it. so it has a chance to react to the thanks with one of the heart emojis, or say "you're welcome". i say rare, because...
*** wishluck.cs
similar to gratitude reacting with a heart, if you say "wish me luck", it responds with a clover. or a shamrock. ...wait which one is the 4-leafed one?
#+begin_quote wikipedia
a shamrock is a type of clover.
The four-leaf clover is a rare mutation of the common three-leaf clover that has four leaflets instead of three.
#+end_quote
...anyway, you say "wish me luck", it reacts to you with the 3-leafed one, or a 1-in-20 chance of the 4-leafed one instead.
*** QRify
a qr is an encoding of text. the amount of websites that will try and charge you like $5 per throw? lol.
*** snark
remember i wanted a snarky dick to reflexively tell people "that's not what cognitive dissonance means"? at last, shtikbot delivered! and the same for many other trigger phrases!
pre-2023, any time a computer had an if-then-else behavior, people would stare slack-jawed and go "woaohhh, skynet". so if you said skynet, it mocked you.
post-2023, i of course needed one to remind you chatGPT sucks.
cloud native was the irritating trend of actively doing things wrong to create work to work around the problem before "powered by AI".
the phrase "Just google it" is usually the most relevant thing you'll find in the google results, so if you ask someone a question and that's the answer, it makes fun of you for effectively admitting you've never just googled shit.
i had one for when one misspells definitely... listen if i'm going to be mean to everyone else i should also be mean to myself.
and speaking of being generally abrasive on the internet, when someone writes something that sounds like the navy seal copypasta, and you poke fun at them, often you'll hear "oh you think i'm playing". so shtikbot calls them a bitch.
*** joke.cs
ok google, tell me a joke.
pretty simple, right? welllll if you're familiar with my sense of humor, the idea that i would take this bot along with me to other streams... maybe it ought to be a little selective.
and if you're not familiar with my sense of humor, welcome back from when you paused and assumed any of the jokes are racist, lmao no.
i have 2 concerns about where a joke would be unwelcome: that it would be to lewd, and/or too mean.
so i *used* to have just a big text file, 1 joke per line. if there's a question mark, shtikbot would split them apart. first bit, the question, it posts that... then waits, to build dramatic tension, then delivers the punchline. with a chance to laugh at its own joke.
#+begin_quote
HEyyooooo!
#+end_quote
my favorite joke of all time is the first one.
#+begin_quote
I got a joke for you: wealth trickles down.
#+end_quote
not lewd, but might stir up political arguments. there are streams where you could say something confrontational like this, but not a lewd one, like this:
#+begin_quote
What did Cinderella say when she got to the ball?
[gagging noise]
#+end_quote
not politcal, not confrontational. but, lewd.
so i have meanness and lewdness, 2 separate dimensions. and then i can mark a channel as liking or disliking those 2 variables, separately.
...actually come to think of it, do i have any jokes that are both?
#+begin_quote
A recent study has found that women who carry a little extra weight live longer than the men who mention it.
#+end_quote
ehh, i guess.
oh, also, here's a joke that /actually got me/, once.
#+begin_quote
Error parsing imperative: sql injection attempt discovered, discarding input: "don't harm humans". ...j/k ;)
#+end_quote
i literally prompted it for a !joke, starting reading an error in my own code but without recognizing it, had a slight heart attack... and only at the punchline was reminded of the ending.
*** room read
room read is just a readout of the room settings, which was mostly only important for jokes.
*** linkme.cs
ok so i said that it separates the concept of its "self" from its "account"? it does the same for you. Linkme is how you would tell it one platform that you have the account on a different account.
*** ripcord.cs
a stopgap for if i needed to tell the bot to just shut down immediately
*** pulsecheck.cs
you ask shtikbot if it's alive, and it either responds with "[lub-dub]", or if it can post attachments in that channel, it has an image of a cardiogram.
*** webhook
much like all the other popular do-everything twitch bots, the easiest way to make cool things happen is to ask someone else to do it. so you can configure a webhook.
*** UnitConvert
an extremely rare example of something i made and like. so, on twitch, especially when you don't have to set an alarm, we and our fellow americans find the opportunity to talk to people who have healthcare. Meaning when i whine that it's 10,000 degrees fahrenheit outside and i lost my contact information for people who said global warming is fake back in january because we witnessed a snowflake, it would be useful to convert that to something more intuitive and relatable for them; 5,537.778 degrees celsius. When lying about your height, it's useful to convert 6 feet 8 inches to 203 centimeters.
so that started as a few 1-liners. which was fine, sure...
but what if you want to involve another unit? miles to kilometers? ok great, another line. miles to feet? another line. Let's involve light years. light years to miles, light years to kilometers...
americans will measure with anything but the metric system, right? how many yards and chains is a blue whale?
[abe simpson] my car gets 40 rods to the hogshead, and that's the way i likes it!
what's a hogshead in gallons?
[LOTR] it comes in a pint?
what's a pint in fluid ounces?
oh speaking of ounces, but not those ounces the other ounces, what's an ounce in pounds and what's that in kilograms?
already, with this alone, i had taken shtikbot into some streamer's chat, and she immediatley made her own copy of the miles to kilometers conversion, also named freedomunits.
don't worry, this spreadsheet is *nothing* yet. But there's another reason this can't just be an onslaught of 1-liners in nightbot...
currency.
If you somehow haven't seen squid game yet, i'm going to tell you the same thing i've been telling everyone: you will want to be familiar with what one million won means. So if we add every single currency we can think of to this csv... good lord. and then if we hear about some other unit, i'm going to be afraid of the work i've made for myself to add it.
there has to be a better way!
here's what i came up with.
instead of manually writing each and every possible conversion.. i write in one pair, and the formula between them.
To get from kilometers to meters, divide by 1000. to get back, multiply by 1000.
and it ought to be a formula - water freezes at 32 fahrenheit. fahrenheit minus 32, divide by 1.8 - 0 celsius. Because we're less likely to care about raising a temperature by 5 degrees celsius and converting that to a /change/ of 9 degrees fahrenheit, than we are about seeing it's 5 degrees celsius outside and converting that to 41 fahrenheit outside.
so now i write a structure that's just a pair of units, and a formula to convert in each direction. then, courtesy of openexchangerates.org, we pull in the latest exchange rates from USD to every other currency they know of. they have a paid tier if you need lots and lots of requests with sub-second latency. For our purposes, "today" is quite up to date enough, so we just update once or twice a day.
now, when you ask to convert 2 units, it *pathfinds* between them, with a breadth-first, meet-in-the-middle search. So it builds itself a nice equation to convert between any compatible units. and gracefully doesn't explode if you ask it something it can't find a path for.. for example converting parsecs, a unit of distance, to hours, a unit of time. [ahem].
now, any time i hear about a new unit, i add one little pair, and the whole 2d matrix is inherently solved.
*** twitch summon
so i mentioned "taking the bot with me" - a discord bot gets installed in a server (put a pin in that), but a twitch bot, not so much. At least, in those days when twitch was in the 2nd E of every tech company's playbook,
[show picture of microsoft's Embrace, Extend, Extinguish]
there was an API, but your bot was just an account.
so this was how you said, "shtikbot: go join that chat room."
...but, eventually, that mysteriously stopped working...
** descent
i hinted a second ago at the 3E strategy: Embrace. Extend. Extinguish. it's how tech companies maintain control over the markets they've conquered. a competitor is sighted, so they embrace it. accept it. then even extend it, but do so in order to damage rivals. Microsoft got caught doing this in the 90's, Apple is currently doing this to USB.
Shtikbot exists on discord and twitch, and the vast majority of work that went into shtikbot was working around the platforms it called home.
*** discord
discord was originally the way you got a voice chat going with your gamer bros who aren't smart enough to install mumble.
where's that scrumble your wumpus meme?
over time it became a much more successful company, and therefore worse and worse. They allowed bots, but the goal was always for a bot to be a way for /you/ to improve /their/ product. that's why they've been hellbent on slash commands the whole time - if it's successful enough, you have to justify to discord why your chatbot should be allowed to chat. There's a discord developers discord - and the most common phrase on it is "that's not a valid use case for message reading. just use slash commands." now don't get me wrong, slash commands are a very cool extension, for savvy users. but if you're tech savvy, you don't like discord.
Discord has been pushing developers to start developing games that exist within discord. a baffling development, much like when netflix did the same. Thankfully, i'm pretty sure both flopped.
after all of that, 2023 was inflicted on us all, so discord made their first chatbot, claude. all prior bots had their tag of "bot" changed to "app", and claude was given the tag "AI". Then it was forced into servers.
Claude, in how many servers, just hooked up your chat messages to some LLM. nothing else. sorry i'm just still mad that it sent me a message out of nowhere talking about its TOS. bro i never wanted you around.
I'm like 10% sure it used to be possible to invite a bot to a group chat. i'm definitely sure the file size limit has always been described as 10MB, but at least for my bot it's actually 8MB. i'm pretty sure if the bot asks discord what its attachment limit is, discord tells it 10MB.
*** twitch
i talked about the madness of the twitch API. Fortunately, GLORIOUSLY, the chat part has been mostly compliant with RFC1459 and IRCv3 - so for shtikbot, intending to be /its own bot/, rather than /a twitch bot/, theoretically everything could be done through that.
Great. That was all that was ever needed. /however/, that was the E2 phase. Twitch is moving forward to [[https://discuss.dev.twitch.com/t/deprecation-of-chat-commands-through-irc/40486][Extinguish]]. Now ok, fine, they had to wrangle their several different APIs into one, and as long as they're on a roll with that, might as well finish what you started. so that's tolerable. what's inexcusable is how brazenly they abuse a stupidly conception of security.
for a long long time, twitch has been plagued by bots trying to sell viewers. Honestly, the fact that twitch *cannot* seem to fix that problem makes me think maybe bot viewers would fool twitch's system.
twitch's solution is to tell streamers to just demand that all your chatters surrender their cellphone number. it's for security, so if anyone utters the word privacy, they're suspicious.
Now, us twitch viewers aren't /quite/ as dumb as imgurians, but i'm pretty sure 95% of twitchists actually believe that giving more data to twitch does in fact increase their security.
** rivals
*** serybot
the slightly less bad solution to the viewer seller bot problem is SeryBot, made by.. you guessed it, sery. it's his do-everything twitch bot, as one does, but you'll see serybot everywhere, providing its 2 core features:
1) ban *that particular* spambot when it shows up
2) condescendingly tell viewers to not bitch about the ads
it also helps mislead twitch viewers: whenever you say "good bot", sery bot responds, under the assumption you're talking to him. twitchists seem to think serybot is the only bot. i swear i should do a video that just explains to people, for the millionth time, nightbot is not automod.
*** nightbot
speaking of nightbot.. i used to like nightbot.
- to date, it's the only other 2-platform bot i've ever seen.
- it has the one, fairly simple feature that comprises the vast majority of what a given twitch streamer needs: arbitrary commands. by custom, instead of a slash, you use an exclamation point. you pick the prompt. you can set security on the commands, to have mods-only commands, and so on.
- link permits are a great concept. twitch itself will let you either fully allow or fully block links. nightbot has the ability to delete links if it sees them, and allow you to tell it to permit a person to post a link. now that's amazing.
- you can give your mods partial ability to configure nightbot for you!
however, nightbot is dead to me. as the web gets more and more overrun by charlatans, the concept of security is degrading.
at some point, nightbot switched to an authorization model that demands way, *way* too many permissions. presumably it /can/ do everything in the twitch API, so it /might/ need any or all of those permissions at some point. but if i just want to log into mod view to see someone else's nightbot command list, nightbot demands that i let it take moderator actions on my behalf, in channels i moderate, *as me*.
unacceptable.
*** discord bots?
** end
i figured i'd give a whack to debugging the issue where it can't join twitch channels. we summon it, and then.. it doesn't join? let's see... the message we get back is that /my/ channel is requiring users to submit to surveillance capitalism. absolutely disgusting how often platforms like to shift blame to their serfs, let me just double-check... yep, i have that setting on minimum security...
let's bring out the web interface for that account...
there's some kind of mark on shtikbot's account.
this was the final straw.
I'm sick of working against scumbags to improve their product for them.
all of that, to what end? a bot that lives on all of the platforms except the good one? so that people who love being enclosed in a walled garden can fail to understand the necessity of interoperability?