imfreedom/knowledgebase

Fixing some typos

2022-04-11, LifesFaded
2f11a24a8c91
Fixing some typos

Reviewed at https://reviews.imfreedom.org/r/1383/
# Emoji
This is a list of protocols and how they go about implementing emoji as well as
custom emoji. This list is not meant to be exhaustive but perhaps over time it
will become exhaustive.
## Terminology
**alpha code**: The text that is displayed or that a user types to display an
emote. On Twitch this could be something like `Kappa`, `LUL`, `rwgrimWave`,
etc.
## Twitch
Official twitch emotes come in a few varieties; global which are available to
everyone at all times, special "cheermotes" that will donate Twitch bits to
streamers, channel specific emotes available to subscribers (some at different
levels), and other emotes that are unlocked via gifting from other events. At
the time of this writing Twitch is running a special
[K-Pop](https://blog.twitch.tv/en/2020/10/19/celebrating-k-pop-on-twitch-unlock-exclusive-k-pop-emotes/)
emote give away that need to be unlocked but remain available forever. Other
times the emotes are only available for a limited time.
For Talkatu's sake, cheermotes are no different than any other emote on Twitch,
as their special behavior (sending bits to a streamer) would have to be
implemented via the protocol plugin itself. That said, it looks like cheermotes
are not rendered unless the ircv3 tag is on the privmsg.
Anyways, emotes come in from Twitch with a numeric identifier and boundaries of
where it is used in a message; see the emotes section of the
[tags](https://dev.twitch.tv/docs/irc/tags#privmsg-twitch-tags) documentation
for more information. This is the responsibility of the protocol plugin to
replace before it ends up in Talkatu. However, since you need the identifier of
the emote to get the pixel data (it's part of the URL) we should probably keep
this around.
Also, as alluded to before, just because an emote exists does not mean a user
can actually use it. We can ask Twitch which emotes the user can use but we
will have to keep track of that somehow. However, incoming emotes from other
users should be tagged as such for display.
TL;DR:
* Very large emote set.
* Users can only use a subset of the emote set.
* Must keep track of additional data (identifier).
* Available emotes can change at any time (new subscriptions, emote unlocked,
subscription expired, etc).
* Emote location is provided in incoming messages.
* Some animated emotes, namely cheermotes.
## Discord
Discord causes a lot of scale issues due to its "one account, many servers"
paradigm which is vastly different from just about every other chat network out
there. Because of that, the emoji set is around the same order of magnitude as
the Twitch emoji set.
Discord has a global emote set as well as per sever emotes that may or may not
be available to be used on external servers.
TL;DR
* Huge emoji set due to 1 account many servers.
* Each sever has a limited number of custom emojis.
* 100 static and 100 animated for non-partnered servers.
* Animated emoji available to "Nitro Subscribers".
* Emote location is provided in incoming messages.
* Some servers don't allow emotes from other servers.
## Slack
Slack's emoji are a lot easier to deal with than Twitch and Discord. There is a
global [list of emoji](https://api.slack.com/methods/emoji.list) per instance
and they can be used by anyone. I have not been able to find a limit to the
number of custom emojis per server, but one slack I'm on currently has `2980`
custom emojis. Also Slack keeps track of who added and emote and when.
One of the downsides to Slack's implementation is that there is no data passed
to the client about the emote. It shows up like `:rwgrimLOL:` inline in the
message.
I'm not aware of any mechanisms to tell clients about new emoji at this time,
but I also haven't explicitly looked for it yet.
TL;DR:
* Potentially very large emote sets.
* All users can use all emotes.
* Additional data available (creator and creation date).
* Emotes can be added and removed at any time by users/admins.