
\[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.


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 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 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.


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. 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.


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.


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.


the original feature is the de-heicer. you post a heic, it posts that
back, as a jpg.


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\".


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...


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.


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.


a qr is an encoding of text. the amount of websites that will try and
charge you like \$5 per throw? ha.


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. \[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.

> HEyyooooo!

my favorite joke of all time is the first one.

> I got a joke for you: wealth trickles down.

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:

> What did Cinderella say when she got to the ball?
>
> \[gagging noise\]

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.

oh, also, here\'s a joke that *actually got me*, once.

> Error parsing imperative: sql injection attempt discovered, discarding
> input: \"don\'t harm humans\". ...j/k ;)


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.


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.


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.


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...


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?

> my car gets 40 rods to the hogshead, and that\'s the way i likes it!

what\'s a hogshead in gallons?

> 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. 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.


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 served.


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.


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
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 an objection,
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.



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.


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.


the discord bot ecosystem actually grew to a pretty good state, before
stagnating. there\'s a slew of do-everything bots, naturally. but
there\'s a lot of narrow-purpose bots, which is great. most twitchists
have a discord guild as a given, so you\'ll see streamcord around a lot.
I find streamcord is frustratingly slow so i just use a webhook and a
python script. one bot i genuinely really like is timezone buddy. users
tell it their timezone, and when the bot sees a time mentioned, it
reacts with a clock. if you react with a clock, it dms you the time
translated for you. very cool! naturally that\'s a direct contradiction
of discord\'s insistence on bots being less bot-like.


i figured i\'d give a whack to debugging the issue where shtikbot 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 who want
me 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?

so, forget it. Let this project finally die. shtikbot, my child. the
world refused you. Rest now.




