Before we delve into the difference between an @Discord.Emoji and an
@Discord.Emote in Discord.Net, it is crucial to understand what
they both look like behind the scene. When the end-users are sending
or receiving an emoji or emote, they are typically in the form of
:ok_hand:
or :reeee:
; however, what goes under the hood is that,
depending on the type of emoji, they are sent in an entirely
different format.
What does this all mean? It means that you should know that by
reacting with a string like “:ok_hand:”
will NOT automatically
translate to 👌
; rather, it will be treated as-is,
like :ok_hand:
, thus the server will return a 400 Bad Request
.
An emoji is a standard emoji that can be found anywhere else outside
of Discord, which means strings like 👌
, ♥
, 👀
are all
considered an emoji in Discord. However, from the
introduction paragraph we have learned that we cannot
simply send :ok_hand:
and have Discord take
care of it, but what do we need to send exactly?
To send an emoji correctly, one must send the emoji in its Unicode
form; this can be obtained in several different ways.
\
, inAfter obtaining the Unicode representation of the emoji, you may
create the @Discord.Emoji object by passing the string with unicode into its
constructor (e.g. new Emoji("👌");
or new Emoji("\uD83D\uDC4C");
).
Your method of declaring an @Discord.Emoji should look similar to
this:
[!code-csharpEmoji Sample]
Also you can use Emoji.Parse()
or Emoji.TryParse()
methods
for parsing emojis from strings like :heart:
, <3
or ❤
.
The meat of the debate is here; what is an emote and how does it
differ from an emoji? An emote refers to a custom emoji
created on Discord.
The underlying structure of an emote also differs drastically; an
emote looks sort-of like a mention on Discord. It consists of two
main elements as illustrated below:
As you can see, emote uses a completely different format. To obtain
the raw string as shown above for your emote, you would need to
escape the emote using the escape character \
in chat somewhere.
After obtaining the raw emote string, you would need to use
@Discord.Emote.Parse* or @Discord.Emote.TryParse* to create a valid
emote object.
Your method of declaring an @Discord.Emote should look similar to
this:
[!codeEmote Sample]
[!TIP]
For WebSocket users, you may also consider fetching the Emote
via the @Discord.WebSocket.SocketGuild.Emotes collection.
[!code-csharpSocket emote sample]
[!TIP]
On Discord, any user with Discord Nitro subscription may use
custom emotes from any guilds they are currently in. This is also
true for any standard bot accounts; this does not require
the bot owner to have a Nitro subscription.
To learn more about emote and emojis and how they could be used,
see the documentation of @Discord.IEmote.