some revisions
All checks were successful
beefhavers/postmortem-shtikbot/pipeline/head This commit looks good

This commit is contained in:
adam 2026-07-01 00:19:26 -04:00
parent f7a35b739c
commit 971bfdda66

View File

@ -4,49 +4,46 @@
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 dick bot
before this project, my fixation was the dumbest social network. the dumbest. the least intelligent.
before this project, my fixation was the dumbest social network. the stupidest. the least intelligent.
imgur.
if you think reddit's layout is confusing, or 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.
but then one christmas, out of some bizarre notion of charitability, they decided to just upvote everything. which means all the people who wanted to inflict their hideous face on the community and be praised for it instantly conquered the front page. Instead of a post being a thing that enriched the viewer, the viewer was expected to praise the poster.
That moment was the failure of gatekeeping. From that point on, every so-called community "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 and resolving it.
meanwhile, most examples are someone who is blissfully unaware of their hypocrisy. they feel no cognitive dissonance, so they will never stop 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.
so at the time, i dreamt of 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 "generational" to that trigger list.
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 an imgurian is by how virulent his hatred for repost bot is.
Like i say, they were really growing to love reposts. 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.
remember TwitchPlaysPokemon? quick tangent if you don't: in 2014, an anonymous Australian programmer hooked up an emulator playing pokemon red to a twitch stream, and a bot that listened to chat to translate that into input. it was incredible. unprecedented, and only possible with that level of realtime interaction and livestreaming.
twitch, the company, didn't do shit to make that happen. But they /desparately/ want to recapture that good fortune. So how can they differentiate themselves from all the other services that could be summarized as "internet panhandling, but it's a hot girl"? (...sometimes)?
interactivity! twitch introduced a channel point system, and loyalty rewards that users would get by redeeming channel points. then they introduced bits, which are similar to channel points only instead of collecting them over time while watching, you pay 1 to 2 cents per bit, and the streamer gets paid out 1 cent per bit.
twitch /streamers/ - well, the bad ones - are constantly trying to give themselves credit for the interactive nature of livestreaming. most of the time, this is nothing more than "give me money (via bits) and one of a short list of memes will show up on screen".
doesn't affect anything. just a slightly more convoluted way to ask for donations.
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. sometimes we had a gimmick version - 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.
next, a 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, so all of its features were available on both platforms.
** 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.
wandering 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 outside our enclosure.
** shtikbot ascendant
Enter: Shtikbot. with its original, sole feature: the de-heicer. you post a heic? it converts it from jpeg-but-apple, to jpeg, and posts it back. theoretically, ALLLLLllll the rest of it is scope creep.
Enter: Shtikbot. with its original, sole feature: the de-heicer. you post a heic? it converts it from jpeg-but-apple, to jpeg, and posts it back. theoretically, ALLLLLllll the rest of shtikbot is scope creep.
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.
the original feature is the de-heicer. you post a heic, it posts that back, as a jpg.
*** 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.
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".
*** 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.
@ -54,11 +51,14 @@ 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.
*** wishluck.cs
similar to gratitude reacting with a heart, if you say "wish me luck", it responds with a 3-leafed clover, 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? ha.
*** 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.
[note] 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
@ -74,38 +74,39 @@ What did Cinderella say when she got to the ball?
[gagging noise]
#+end_quote
not politcal, not confrontational. but, lewd.
not political, 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.
this was how i discovered discord unexpectedly removed the ability for bots to send attachments in DMs.
*** 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.
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 for shtikbot.
*** 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...
*** 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!
#+begin_quote src: abe simpson
my car gets 40 rods to the hogshead, and that's the way i likes it!
#+end_quote
what's a hogshead in gallons?
[LOTR] it comes in a pint?
#+begin_quote src: LOTR
it comes in a pint?
#+end_quote
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.
@ -118,17 +119,11 @@ instead of manually writing each and every possible conversion.. i write in one
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...
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. Mr. Lucas.
now, any time i hear about a new unit, i add one little pair, and i don't need to resolve a massive 2d matrix.
** 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.
Shtikbot exists on discord and twitch, and the vast majority of work that went into shtikbot was working around the platforms it served.
*** 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?