Fighting for survival: the Animals menu melee

  Some convention organizations try to set aside places where members of various marginalized groups and demographics can go and hang out with each other in a safe, non-judgemental environment.  This is commonly referred to as "safer spaces".  In real life it's often a hotel room or small function area, with signage clearly indicating the intent and who is or isn't encouraged to enter.  In the online world, a handy way to create it is a Discord channel with special access restrictions, so conversation there remains private and not visible to random con attendees.  The problem then becomes how to "gate" the access to the special channels, in a way that includes at least some nominal vetting of the individual.  Arisia had kind of a self-service setup, which would have left it vulnerable to trolling if someone chose to abuse the concept -- fortunately, no one did to my knowledge.  But Readercon wanted some actual security around their equivalent, including a means to hide anyone's participation in the spaces to begin with -- i.e. nothing like an obvious "BIPOC" role tag or anything that could be seen on an avatar click.  Some of the more paranoid elements within Readercon wanted the whole thing to be totally stealth, with no identifiable access tokens to avoid "outing" anyone, and definitely not self-service.  They didn't actually have a management plan at first, but as discussion proceeded it was eventually decided that human interaction with the Safety staff was the best way to be sure about who was being let in and why.

I set up the channel group so that the Safety role could directly manage the access -- Discord's versatile permissions system allows administration of that sort to be narrowly delegated.  But they found the mechanics of the Discord role management a little tedious and prone to error, and decided that it might be better served by a special bot function.  Now, specifically allowing a *user*, not a *role*, to access a channel does deliver total stealth -- nothing about the person's ability to access the space is visible to anyone else.  Roles, however, do get added to one's visible list, which is why they're often used like the extra ribbons people attach to their badges at real life conventions.  Many are just frivolous labels, but some also grant privileges, such as "staff" ribbons to legitimize access to a green-room or other staff-exclusive areas.  The common equivalent in Discord is roles to gate channel visibility.  A bot function can only deal with role assignments to users; no bot I'm aware of to date can directly manage channel permissions themselves even though there are API calls for it in the spec.  So one must balance the convenience and insulative nature of a bot function versus having visible roles after all.  Arisia made the relevant role names somewhat noncommital but not completely obscure, and decided it was good enough.  Readercon understood and didn't especially like the risk of "leakage", and wasn't sure what to do about it.

As I thought about the problem more, I started wondering about possible large sets of thematic role tags that could increase the obscurity of just a few special ones within that.  In other words, a kind of smokescreen.  It could just be random words unrelated to the intent of each safer-space, or could be a recognizable grouping of things that would still have no discernible relation to the intent or the person having them.  Colors?  Cars?  Plants?  Dance or music styles?  Hex strings?  Total gibberish?  It could almost be anything, but at this point I was also thinking about how they'd get assigned to people.  After poking around through the extensive emoji menus in Discord, I realized that one large group could be found in the "Nature" category -- lots of different animals with fairly recognizable icons.  How about something like the Chinese zodiac we see on the placemats at restaurants?  Even better, there are a lot more than twelve animal icons.

Now, ordinarily we wouldn't want to just randomly attach animal names to people without their say-so, especially to those hypersensitive to perceived meaning in a tag -- you wouldn't want to randomly label someone as a "pig" or "beaver" or "snake" et al due to how they might contextualize that.  However, if a large choice of animal tags could be made self-service, people could label themselves however they wanted -- some people might indeed label themselves "pig" because they're messy and proud of it, for example, or "peacock" because they like dressing up, or "flamingo" just because they appreciate festive lawn ornaments.  But the point would be to let *them* freely choose among many items.  The hack would be reserving a very few animal names outside of the self-service set, and use *those* to stealthily gate access to the safer spaces.  That way, as the convention progressed and people found a clickable menu full of animals, a lot of them would wind up having those tags and it would be far less clear that some of them had special meaning.


Developing the animal emoji to role mapping I started building a trial menu, first collecting all the animal names I could dig out of the emoji list into a file and matching icons to roles.  Discord uses emoji aliases fairly heavily, which are in the :name: format, and if you type a recognizable colon-delimited tag into a message and send it, the graphic emoji appears instead of the text.  The emojis can also be the "reaction" icons on a given message, which in fact is exactly how a bot-driven reaction-role menu gets built up.  The next step was to create a bunch of matching roles, sometimes matching the emoji name and sometimes not, for example turning generic :bird: into the role "Phoenix" to make it seem a little more grandiose.  It was somewhat tedious work to pull this together, but it went reasonably smoothly once I got the flow of it down.

I was also already planning the special roles here; for example safer-spaces channel #4 would be open to the role named "Gazelle", but that would be manually assigned by the Safety staff, not by a clickable menu.  I had serious doubts that anyone would figure out this obscurity if they weren't participating in the safer-spaces themselves or were told how it would work.

In the above screenshot I'm also using a clever and useful site called Discohook, which is mostly a tool for building and delivering messages from outside Discord via the "webhook" facility.  But it turns out that it also has realtime interpretation of the :alias: emoji format, and renders them right into a message as we build it.

  I floated the idea to the Safety crew, and initially referred to it as a conceptual menu of "spirit animals" or totems -- in the same sense as the zodiac, perhaps.  And was immediately jumped on from several different directions for the terminology being some kind of "microaggression" against Native Americans.  Which 1> certainly wasn't the intent, but worse 2> caused the jumpers to completely lose sight of the mechanism I was proposing regardless of what we might agree to title it.  Don't they ever go to Chinese restaurants?  By choosing to word-police ahead of understand, they blinded themselves to the fact that I was trying to help them solve a difficult problem in a fairly elegant and secure way.  All they really had to do was suggest different acceptable labeling, but found it more self-satisfying to turn *my* workplace toxic.

Why was this such a bullshit reaction?  Because reverence and respect for, identifying with, and companionship with animals has been part of human culture for thousands of years, across all continents.  It is not unique to any one ethnic demographic or time period, and certainly not any sort of cultural appropriation to offer a broad electronic representation.  If anything, I was paying tribute to something I've always thought is pretty cool, and culturally obvious in so many places.  As I stated in my email back to them, "the only aggression I'm sensing here is all these unfounded accusations".  None of this menu stuff was public yet anyway, and wouldn't be until its presentation was nailed down.  I asked for acceptable wordsmithing or titling, got crickets in return, and in the interim simply decided to set it forth as "here are a bunch of animal tags you can add to your avatar set if you want".  The text of the containing messages could be changed later if needed.  Problem unimpeachably solved for the moment, I thought.

But Safety was all riled up now, and wanted some different solution that didn't have my invented race-baiting spoor all over it.  They still wanted a bot function to gate people in and out of the safer-spaces, and after a bunch of agonizing internal debate came up with a profoundly lame alternative: a few more *single-character* roles to create.  Everyone already had "i" to indicate "input", or ability to post messages and materially contribute to the conversations, so Safety evidently thought more of those would be nondescript enough.  I couldn't convince them that by so doing, they'd made it far LESS stealthy than the animal-names smokescreen.  You can already see where this is going.


Even Google likes animals Even Google likes random animals, as seen by how they label unknown users working in shared documents.  Are we supposed to take offense when our spreadsheet cursor has an "Anonymous bison" label floating over it?  C'mon, folks!

  The mostly-complete animal tags menus stayed in place for another few days as we continued working on other aspects of the convention, but some of the Safety and programming people were still harboring a grudge over my offhand nomenclature suggestion.  They started pushing for complete removal of the animals menu even though it had nothing to do with safer-spaces anymore, which I regarded as completely unreasonable overreaction out of lingering spite.  Now it had gotten personal and political, without regard for the fact that selectable menus full of roles, whatever grouping they may be, were already a long-standing tradition around virtual communities that use Discord.  Just because it wasn't directly related to geeking about books or lifetyles was no reason to simply trash a fun sideline thing that had taken a bit of work to build and that people were already having fun with.  As I posted into our "server design" channel, still trying to defend myself and my amusing toy against the continuing onslaught...
  ---
The animal roles are staying put.  At least 15 people have made selections
so far, so it's already become a useful, fun, and totally harmless public
resource by now.  And that's before we fling the doors open.  You don't just
rip something that people are already enjoying out from under them just
because you personally don't appreciate it.

That stuff took significant work to set up, so try to guess how I feel when
you come along essentially at the last minute and simply marginalize the whole
concept and what went into it.  Whether you're aware of it or not, the idea
was originally for a higher purpose: added stealth with regard to safer-spaces.
[Leaving aside the semantics issue that distracted away from you actually
absorbing that, which was then handily solved.]  But since then, Safety has
compromised that entire principle of camouflage by changing the mechanism
to single-letter roles instead.  That means anyone with a single-letter role
that isn't "i" is immediately fingerable as a safer-spaces participant, rather
than tagging the with some random animal name among many that simply happens
to *not* be in a clickable menu.
  ---
They wanted to coldly slaughter all the animals, and here I was fighting desperately to keep them alive.

Because of this nonsense, I was having serious second thoughts about honoring the commitment I had made to see the con through to the end and support it to the best of my technical ability in the process.  It took a serious heart-to-heart conversation with one of the chairs to reach a compromise: the animal menus could stay, but the structure of the whole role-menus channel needed to be reworked and re-ordered to bring other menus into greater prominence, e.g. writing industry roles and pronoun selection.  I could do that, even if it was going to involve more work, but it was an opportunity to clean the whole thing up a little.  Another half-evening of goofing around, and it was done.

[It should also be noted that at least one of the people involved here had also had a hand in the "bovine scatology" episode at Arisia 2014, where the arbitrary malice directed at me and others was deemed inexcusable and resulted in abrupt staff turnover mid-con.]


Webhook message delivery/editing For the replacement menus channel, I decided to use webhook delivery to construct the initial message framework, because then anyone else with the webhook URL and the message ID could *modify* it later.  One thing that Discord stringently prohibits is for any user to modify another user's message, for fairly obvious accountability reasons.  So for most rolemenus set up by an administrator, the text of the message can only be edited later by that same user, and if they're unavailable then it simply cannot be changed in place.  But with webhook delivery, a message can be overwritten with new text from a shared resource, without disturbing its place in a channel or the reactions already associated with it.

What's interesting is the JSON blob we get back from a modification request, which also dumps all the reactions currently attached to the message and here, with a representation of their emojis in UTF-8 character format.


Rolenames can contain UTF-8 too! This got me wondering if the animal emojis themselves could be included in the role names.  It also helped that someone had asked if the icons could show up in the clicked avatar pop-up, so that seemed worth investigating.  It turns out that UTF-8 is completely valid within role names, but it has to be entered via the UTF-8 bytes and not the :tag: format.  This is where "discohook" was super-handy in translating to copy/pasteable UTF-8 icons to tack right onto the rolenames.  [There's also this page with the supposedly standard list -- warning, it takes a while to load!]  There were a few that simply didn't map back into Discord correctly, so I just left them as text.

  I alerted the people who had already clicked on some items in the old instance of the animals menu that all the counts had been reset, and if they wanted to contribute to the acceptance statistics they should go to the new menu and for each of their chosen totems, un-click it and re-click it so the displayed counts would better track reality.  This would also encourage choosing industry roles and pronouns if those were appropriate too, now that those menus were the first things that people would see upon clicking the "roles" channel.
 
Saturday menu snapshot: over 100 clicks I didn't get a capture of the final counts on the animals-menu, but by only Saturday morning of the convention, over 100 attendees had already chosen something.  Clearly, the community was enjoying it, further vindicating my reasons to keep the whole setup alive.

It turns out that Discord has a hard maximum of 20 reactions per message, so with the number of icons I had found I needed three messages to placehold a total of 60.  Five times more than the zodiac, and that wasn't even all the possible emojis in the class.


Even our chair chose a few animals Even our convention chair had selected a set of animals to identify with, which is about as strong a vote in favor as it gets.

_H*   210911