diff --git a/docs/account.md b/docs/account.md
index cd4dc2b..f529188 100644
--- a/docs/account.md
+++ b/docs/account.md
@@ -515,6 +515,42 @@ account.send_image(
)
```
+#### `send_emoji_reaction(message_id, emoji_shortname, chat_id=None)`
+
+React to a message with an emoji, the same as reacting to a message in Status App. The reaction is a **toggle** - calling the method again with the same emoji on the same message removes it, so the same call both sets and unsets the reaction.
+
+Emojis are identified by their **shortname**, exactly as Status App names them (`:thumbsup:`, `:heart_eyes:`). The surrounding colons are optional - `thumbsup` and `:thumbsup:` are the same emoji - and the full list of supported shortnames is documented under [Emojis](./utils.md#emojis).
+
+Passing `chat_id` is purely an **optimisation**. Without it the chat has to be resolved from the message first, which costs one extra round trip to the Status Backend per reaction - worth avoiding when reacting to many messages in a chat that is already known, such as inside a [`listen_messages`](./account.md#listen_messages) loop. A `chat_id` that does not match the message is rejected by the backend and raises a custom exception, so pass it only when it is certain.
+
+| Name | Type | Required | Description |
+|-----|-----|-----|-------------|
+| `message_id` | `str` | Yes | The `id` of the message to react to. Message IDs can be obtained from the `id` key of [`get_messages`](./account.md#get_messageschat_id-start_timestampnone-end_timestampnone), from the `lastMessage` of a [`listen_messages`](./account.md#listen_messages) event, or directly from the return value of [`send_message`](./account.md#send_messagechat_id-message-reply_to_message_idnone) / [`send_image`](./account.md#send_imagechat_id-file_path-messagenone-reply_to_message_idnone). |
+| `emoji_shortname` | `str` | Yes | The emoji shortname as in Status App, with or without the surrounding colons. See [Emojis](./utils.md#emojis) for all supported values. |
+| `chat_id` | `str` | No | Identifier of the chat the message belongs to, as found in the [`chats`](./account.md#chats) property. When omitted (default), it is resolved from `message_id` with an extra call to the Status Backend. |
+
+```python
+from status_sdk import Account
+
+account = Account()
+params = {
+ "name": "status-app-bot",
+ "password": "SNTPUMP"
+}
+account.login(**params)
+
+chat = account.chats[0]
+
+# Messages are returned newest first, so this is the latest message in the chat
+messages = account.get_messages(chat["id"])
+latest = messages[0]
+
+account.send_emoji_reaction(latest["id"], ":thumbsup:")
+
+# Reacting with the same emoji again removes the reaction
+account.send_emoji_reaction(latest["id"], ":thumbsup:")
+```
+
#### `get_messages(chat_id, start_timestamp=None, end_timestamp=None)`
Retrieve messages from the specified chat within an optional time range. Messages are returned in **descending order** (newest to oldest). The method automatically paginates through the backend until all messages in the specified range are collected. This method is ideal for backfilling, [batch processing](https://aws.amazon.com/what-is/batch-processing/) or [micro batch processing](https://www.dremio.com/wiki/micro-batch-processing/).
@@ -609,9 +645,6 @@ Listen for new incoming messages **in real time**. This method yields raw messag
```python
from status_sdk import Account
-# For terminal readability only
-from rich import print as rprint
-from rich.pretty import Pretty
account = Account()
params = {
@@ -621,20 +654,38 @@ params = {
account.login(**params)
for msg in account.listen_messages():
- rprint(Pretty(msg))
+ print(msg)
```
**Note**: If you receive multiple messages at once, `contacts` and `chats` will grow.
#### `listen_contact_requests()`
-Listen for incoming contact requests **in real time**.
+Listen for contact requests **in real time**. Both **incoming** contact requests sent to the account and contact requests sent by the account that were **accepted** by the other user are yielded. Every yielded event carries a `request_type` key that tells the two apart:
+
+| `request_type` | Meaning |
+|-----|-----|
+| `incoming` | Another user sent a contact request to the account. Approve it with [`add_contact`](./account.md#add_contactpublic_key-display_namenone). |
+| `accepted` | Another user accepted a contact request that the account had sent. The contact is now mutual. |
+
+```python
+from status_sdk import Account
+
+account = Account()
+params = {
+ "name": "status-app-bot",
+ "password": "SNTPUMP"
+}
+account.login(**params)
+
+for request in account.listen_contact_requests():
+ print(request)
+```
+
+Handle each type separately:
```python
from status_sdk import Account
-# For terminal readability only
-from rich import print as rprint
-from rich.pretty import Pretty
account = Account()
params = {
@@ -644,7 +695,28 @@ params = {
account.login(**params)
for request in account.listen_contact_requests():
- rprint(Pretty(request))
+ if request["request_type"] == "incoming":
+ print("New contact request received")
+ elif request["request_type"] == "accepted":
+ print("Contact request was accepted")
+```
+
+#### `listen_message_mentions()`
+
+Listen for `@0x...` mentions **in real time**.
+
+```python
+from status_sdk import Account
+
+account = Account()
+params = {
+ "name": "status-app-bot",
+ "password": "SNTPUMP"
+}
+account.login(**params)
+
+for mention in account.listen_message_mentions():
+ print(mention)
```
#### `add_contact(public_key, display_name=None)`
@@ -1750,7 +1822,6 @@ Returns `list[dict]` where each element represents a community.
| `verified` | `bool` | Whether the community is verified. |
| `tags` | `list[str]` | Tags associated with the community. |
| `is_member` | `bool` | Whether the account is currently a member of the community. |
-| `joined` | `bool` | Whether the account has joined the community. |
| `joined_timestamp` | `datetime.datetime`
`None` | Timestamp when the account joined the community. `None` when the account has not joined. |
| `requested_timestamp` | `datetime.datetime`
`None` | Timestamp when the join request was submitted. `None` when no request was made. |
| `encrypted` | `bool` | Whether the community messaging is encrypted. |
diff --git a/docs/community.md b/docs/community.md
index 85192a6..68b30de 100644
--- a/docs/community.md
+++ b/docs/community.md
@@ -534,11 +534,11 @@ community.delete_channel("announcements")
Listen for join requests to the community **in real time**.
-Returns a `Generator` that yields one `dict` per request event:
+Returns a `Generator` that yields one `models.CommunityRequest` **dataclass** per request event, so the fields are reached as attributes (`request.state`) rather than dictionary keys:
-| Key | Type | Description |
+| Attribute | Type | Description |
|----|----|-------------|
-| `request_id` | `str` | The join request id. Pass this to [`accept`](./community.md#acceptpending_request_id) or [`decline`](./community.md#declinepending_request_id). |
+| `id` | `str` | The join request id. Pass this to [`accept`](./community.md#acceptpending_request_id) or [`decline`](./community.md#declinepending_request_id). |
| `state` | `str` | The state the request moved into - see the table below. |
| `public_key` | `str` | Public key of the requesting member. |
@@ -568,12 +568,12 @@ community = Community(account, url=url)
# Auto-accept everyone who asks to join
for request in community.listen_requests():
- print(f"{request['public_key']}\t{request['state']}")
+ print(f"{request.public_key}\t{request.state}")
- if request["state"] != "pending":
+ if request.state != "pending":
continue
- community.accept(request["request_id"])
+ community.accept(request.id)
community["general"].send_message("Welcome to the community!")
```
@@ -1239,6 +1239,42 @@ message_id = channel.send_image("./meme-67.png", "Daily random meme")
print(f"Sent image: {message_id}")
```
+### `send_emoji_reaction(message_id, emoji_shortname)`
+
+React to a message in the channel with an emoji, the same as reacting to a message in Status App. The reaction is a **toggle** - calling the method again with the same emoji on the same message removes it, so the same call both sets and unsets the reaction.
+
+Emojis are identified by their **shortname**, exactly as Status App names them (`:thumbsup:`, `:heart_eyes:`). The surrounding colons are optional - `thumbsup` and `:thumbsup:` are the same emoji - and the full list of supported shortnames is documented under [Emojis](./utils.md#emojis).
+
+| Name | Type | Required | Description |
+|-----|-----|-----|-------------|
+| `message_id` | `str` | Yes | The `id` of the message to react to. Message IDs can be obtained from the `id` key of [`get_messages`](./community.md#get_messagesstart_timestampnone-end_timestampnone), or directly from the return value of [`send_message`](./community.md#send_messagemessage-reply_to_message_idnone) / [`send_image`](./community.md#send_imagefile_path-messagenone-reply_to_message_idnone). |
+| `emoji_shortname` | `str` | Yes | The emoji shortname as in Status App, with or without the surrounding colons. See [Emojis](./utils.md#emojis) for all supported values. |
+
+```python
+from status_sdk import Account, Community
+
+account = Account()
+params = {
+ "name": "status-app-bot",
+ "password": "SNTPUMP"
+}
+account.login(**params)
+
+url = "https://status.app/c/G3QAAMQn9ueHRsR3W5Ouuy25fkCxziknAIEkCbYAoC04HjyGeQ6X8k45q3GVeyZiksbd38tQ4S_EfhrJKhRV3sDvjhmrCuSoDBIf2QJiEKwAOZipxis8ntNRVyPhC5IoWaEsj9X4P5zw093pcLofZzTV2gM=#zQ3shZeEJqTC1xhGUjxuS4rtHSrhJ8vUYp64v6qWkLpvdy9L9"
+community = Community(account, url=url)
+
+channel = community["general"]
+
+# Messages are returned newest first, so this is the latest message in the channel
+messages = channel.get_messages()
+latest = messages[0]
+
+channel.send_emoji_reaction(latest["id"], ":thumbsup:")
+
+# Reacting with the same emoji again removes the reaction
+channel.send_emoji_reaction(latest["id"], ":thumbsup:")
+```
+
### `get_messages(start_timestamp=None, end_timestamp=None)`
Retrieve messages from the channel within an optional time range. Messages are returned in **descending order** (newest to oldest).
diff --git a/docs/group-chat.md b/docs/group-chat.md
index 2496a9f..58e8b76 100644
--- a/docs/group-chat.md
+++ b/docs/group-chat.md
@@ -252,6 +252,40 @@ message_id = group_chat.send_image("./meme-67.png", "Daily random meme")
print(f"Sent image: {message_id}")
```
+### `send_emoji_reaction(message_id, emoji_shortname)`
+
+React to a message in the group chat with an emoji, the same as reacting to a message in Status App. The reaction is a **toggle** - calling the method again with the same emoji on the same message removes it, so the same call both sets and unsets the reaction.
+
+Emojis are identified by their **shortname**, exactly as Status App names them (`:thumbsup:`, `:heart_eyes:`). The surrounding colons are optional - `thumbsup` and `:thumbsup:` are the same emoji - and the full list of supported shortnames is documented under [Emojis](./utils.md#emojis).
+
+| Name | Type | Required | Description |
+|-----|-----|-----|-------------|
+| `message_id` | `str` | Yes | The `id` of the message to react to. Message IDs can be obtained from the `id` key of [`get_messages`](./group-chat.md#get_messagesstart_timestampnone-end_timestampnone), or directly from the return value of [`send_message`](./group-chat.md#send_messagemessage-reply_to_message_idnone) / [`send_image`](./group-chat.md#send_imagefile_path-messagenone-reply_to_message_idnone). |
+| `emoji_shortname` | `str` | Yes | The emoji shortname as in Status App, with or without the surrounding colons. See [Emojis](./utils.md#emojis) for all supported values. |
+
+```python
+from status_sdk import Account, GroupChat
+
+account = Account()
+params = {
+ "name": "status-app-bot",
+ "password": "SNTPUMP"
+}
+account.login(**params)
+
+chat = [chat for chat in account.chats if chat["type"] == "group_chat"][0]
+group_chat = GroupChat(account, chat["id"])
+
+# Messages are returned newest first, so this is the latest message in the chat
+messages = group_chat.get_messages()
+latest = messages[0]
+
+group_chat.send_emoji_reaction(latest["id"], ":thumbsup:")
+
+# Reacting with the same emoji again removes the reaction
+group_chat.send_emoji_reaction(latest["id"], ":thumbsup:")
+```
+
### `delete_message(id)`
Delete one of your **own** messages from the group chat. The deletion is propagated to the other members, so the message disappears for everybody. You can only delete messages that the logged-in account has sent.
diff --git a/docs/utils.md b/docs/utils.md
index c15eca3..a47fb15 100644
--- a/docs/utils.md
+++ b/docs/utils.md
@@ -136,3 +136,1879 @@ pip install -e .
Treat `dev` as "not installed" rather than as a real release - it is deliberately lower than every published version, so the `packaging` check above will fail against it.
+## Emojis
+
+Status App identifies every emoji by a **shortname** - a lowercase name wrapped in colons, such as `:thumbsup:` or `:heart_eyes:`. The SDK ships the available Status App emojis. All supported shortnames:
+
+| Emoji | Emoji Short Name | unicode |
+|:-------------------------------------------|:---------------------------------------------|:---------------------------------------------|
+| :grinning: | `:grinning:` | `1f600` |
+| :smiley: | `:smiley:` | `1f603` |
+| :smile: | `:smile:` | `1f604` |
+| :grin: | `:grin:` | `1f601` |
+| :laughing: | `:laughing:` | `1f606` |
+| :sweat_smile: | `:sweat_smile:` | `1f605` |
+| :rofl: | `:rofl:` | `1f923` |
+| :joy: | `:joy:` | `1f602` |
+| :slight_smile: | `:slight_smile:` | `1f642` |
+| :upside_down: | `:upside_down:` | `1f643` |
+| :melting_face: | `:melting_face:` | `1fae0` |
+| :wink: | `:wink:` | `1f609` |
+| :blush: | `:blush:` | `1f60a` |
+| :innocent: | `:innocent:` | `1f607` |
+| :smiling_face_with_3_hearts: | `:smiling_face_with_3_hearts:` | `1f970` |
+| :heart_eyes: | `:heart_eyes:` | `1f60d` |
+| :star_struck: | `:star_struck:` | `1f929` |
+| :kissing_heart: | `:kissing_heart:` | `1f618` |
+| :kissing: | `:kissing:` | `1f617` |
+| :relaxed: | `:relaxed:` | `263a` |
+| :kissing_closed_eyes: | `:kissing_closed_eyes:` | `1f61a` |
+| :kissing_smiling_eyes: | `:kissing_smiling_eyes:` | `1f619` |
+| :smiling_face_with_tear: | `:smiling_face_with_tear:` | `1f972` |
+| :yum: | `:yum:` | `1f60b` |
+| :stuck_out_tongue: | `:stuck_out_tongue:` | `1f61b` |
+| :stuck_out_tongue_winking_eye: | `:stuck_out_tongue_winking_eye:` | `1f61c` |
+| :zany_face: | `:zany_face:` | `1f92a` |
+| :stuck_out_tongue_closed_eyes: | `:stuck_out_tongue_closed_eyes:` | `1f61d` |
+| :money_mouth: | `:money_mouth:` | `1f911` |
+| :hugging: | `:hugging:` | `1f917` |
+| :face_with_hand_over_mouth: | `:face_with_hand_over_mouth:` | `1f92d` |
+| :face_with_open_eyes_and_hand_over_mouth: | `:face_with_open_eyes_and_hand_over_mouth:` | `1fae2` |
+| :face_with_peeking_eye: | `:face_with_peeking_eye:` | `1fae3` |
+| :shushing_face: | `:shushing_face:` | `1f92b` |
+| :thinking: | `:thinking:` | `1f914` |
+| :saluting_face: | `:saluting_face:` | `1fae1` |
+| :zipper_mouth: | `:zipper_mouth:` | `1f910` |
+| :face_with_raised_eyebrow: | `:face_with_raised_eyebrow:` | `1f928` |
+| :neutral_face: | `:neutral_face:` | `1f610` |
+| :expressionless: | `:expressionless:` | `1f611` |
+| :no_mouth: | `:no_mouth:` | `1f636` |
+| :dotted_line_face: | `:dotted_line_face:` | `1fae5` |
+| :face_in_clouds: | `:face_in_clouds:` | `1f636-200d-1f32b-fe0f` |
+| :smirk: | `:smirk:` | `1f60f` |
+| :unamused: | `:unamused:` | `1f612` |
+| :rolling_eyes: | `:rolling_eyes:` | `1f644` |
+| :grimacing: | `:grimacing:` | `1f62c` |
+| :face_exhaling: | `:face_exhaling:` | `1f62e-200d-1f4a8` |
+| :lying_face: | `:lying_face:` | `1f925` |
+| :shaking_face: | `:shaking_face:` | `1fae8` |
+| :relieved: | `:relieved:` | `1f60c` |
+| :pensive: | `:pensive:` | `1f614` |
+| :sleepy: | `:sleepy:` | `1f62a` |
+| :drooling_face: | `:drooling_face:` | `1f924` |
+| :sleeping: | `:sleeping:` | `1f634` |
+| :mask: | `:mask:` | `1f637` |
+| :thermometer_face: | `:thermometer_face:` | `1f912` |
+| :head_bandage: | `:head_bandage:` | `1f915` |
+| :nauseated_face: | `:nauseated_face:` | `1f922` |
+| :face_vomiting: | `:face_vomiting:` | `1f92e` |
+| :sneezing_face: | `:sneezing_face:` | `1f927` |
+| :hot_face: | `:hot_face:` | `1f975` |
+| :cold_face: | `:cold_face:` | `1f976` |
+| :woozy_face: | `:woozy_face:` | `1f974` |
+| :dizzy_face: | `:dizzy_face:` | `1f635` |
+| :face_with_spiral_eyes: | `:face_with_spiral_eyes:` | `1f635-200d-1f4ab` |
+| :exploding_head: | `:exploding_head:` | `1f92f` |
+| :cowboy: | `:cowboy:` | `1f920` |
+| :partying_face: | `:partying_face:` | `1f973` |
+| :disguised_face: | `:disguised_face:` | `1f978` |
+| :sunglasses: | `:sunglasses:` | `1f60e` |
+| :nerd: | `:nerd:` | `1f913` |
+| :face_with_monocle: | `:face_with_monocle:` | `1f9d0` |
+| :confused: | `:confused:` | `1f615` |
+| :face_with_diagonal_mouth: | `:face_with_diagonal_mouth:` | `1fae4` |
+| :worried: | `:worried:` | `1f61f` |
+| :slight_frown: | `:slight_frown:` | `1f641` |
+| :frowning2: | `:frowning2:` | `2639` |
+| :open_mouth: | `:open_mouth:` | `1f62e` |
+| :hushed: | `:hushed:` | `1f62f` |
+| :astonished: | `:astonished:` | `1f632` |
+| :flushed: | `:flushed:` | `1f633` |
+| :pleading_face: | `:pleading_face:` | `1f97a` |
+| :face_holding_back_tears: | `:face_holding_back_tears:` | `1f979` |
+| :frowning: | `:frowning:` | `1f626` |
+| :anguished: | `:anguished:` | `1f627` |
+| :fearful: | `:fearful:` | `1f628` |
+| :cold_sweat: | `:cold_sweat:` | `1f630` |
+| :disappointed_relieved: | `:disappointed_relieved:` | `1f625` |
+| :cry: | `:cry:` | `1f622` |
+| :sob: | `:sob:` | `1f62d` |
+| :scream: | `:scream:` | `1f631` |
+| :confounded: | `:confounded:` | `1f616` |
+| :persevere: | `:persevere:` | `1f623` |
+| :disappointed: | `:disappointed:` | `1f61e` |
+| :sweat: | `:sweat:` | `1f613` |
+| :weary: | `:weary:` | `1f629` |
+| :tired_face: | `:tired_face:` | `1f62b` |
+| :yawning_face: | `:yawning_face:` | `1f971` |
+| :triumph: | `:triumph:` | `1f624` |
+| :rage: | `:rage:` | `1f621` |
+| :angry: | `:angry:` | `1f620` |
+| :face_with_symbols_over_mouth: | `:face_with_symbols_over_mouth:` | `1f92c` |
+| :smiling_imp: | `:smiling_imp:` | `1f608` |
+| :imp: | `:imp:` | `1f47f` |
+| :skull: | `:skull:` | `1f480` |
+| :skull_crossbones: | `:skull_crossbones:` | `2620` |
+| :poop: | `:poop:` | `1f4a9` |
+| :clown: | `:clown:` | `1f921` |
+| :japanese_ogre: | `:japanese_ogre:` | `1f479` |
+| :japanese_goblin: | `:japanese_goblin:` | `1f47a` |
+| :ghost: | `:ghost:` | `1f47b` |
+| :alien: | `:alien:` | `1f47d` |
+| :space_invader: | `:space_invader:` | `1f47e` |
+| :robot: | `:robot:` | `1f916` |
+| :smiley_cat: | `:smiley_cat:` | `1f63a` |
+| :smile_cat: | `:smile_cat:` | `1f638` |
+| :joy_cat: | `:joy_cat:` | `1f639` |
+| :heart_eyes_cat: | `:heart_eyes_cat:` | `1f63b` |
+| :smirk_cat: | `:smirk_cat:` | `1f63c` |
+| :kissing_cat: | `:kissing_cat:` | `1f63d` |
+| :scream_cat: | `:scream_cat:` | `1f640` |
+| :crying_cat_face: | `:crying_cat_face:` | `1f63f` |
+| :pouting_cat: | `:pouting_cat:` | `1f63e` |
+| :see_no_evil: | `:see_no_evil:` | `1f648` |
+| :hear_no_evil: | `:hear_no_evil:` | `1f649` |
+| :speak_no_evil: | `:speak_no_evil:` | `1f64a` |
+| :love_letter: | `:love_letter:` | `1f48c` |
+| :cupid: | `:cupid:` | `1f498` |
+| :gift_heart: | `:gift_heart:` | `1f49d` |
+| :sparkling_heart: | `:sparkling_heart:` | `1f496` |
+| :heartpulse: | `:heartpulse:` | `1f497` |
+| :heartbeat: | `:heartbeat:` | `1f493` |
+| :revolving_hearts: | `:revolving_hearts:` | `1f49e` |
+| :two_hearts: | `:two_hearts:` | `1f495` |
+| :heart_decoration: | `:heart_decoration:` | `1f49f` |
+| :heart_exclamation: | `:heart_exclamation:` | `2763` |
+| :broken_heart: | `:broken_heart:` | `1f494` |
+| :heart_on_fire: | `:heart_on_fire:` | `2764-fe0f-200d-1f525` |
+| :mending_heart: | `:mending_heart:` | `2764-fe0f-200d-1fa79` |
+| :heart: | `:heart:` | `2764` |
+| :pink_heart: | `:pink_heart:` | `1fa77` |
+| :orange_heart: | `:orange_heart:` | `1f9e1` |
+| :yellow_heart: | `:yellow_heart:` | `1f49b` |
+| :green_heart: | `:green_heart:` | `1f49a` |
+| :blue_heart: | `:blue_heart:` | `1f499` |
+| :light_blue_heart: | `:light_blue_heart:` | `1fa75` |
+| :purple_heart: | `:purple_heart:` | `1f49c` |
+| :brown_heart: | `:brown_heart:` | `1f90e` |
+| :black_heart: | `:black_heart:` | `1f5a4` |
+| :grey_heart: | `:grey_heart:` | `1fa76` |
+| :white_heart: | `:white_heart:` | `1f90d` |
+| :kiss: | `:kiss:` | `1f48b` |
+| :100: | `:100:` | `1f4af` |
+| :anger: | `:anger:` | `1f4a2` |
+| :boom: | `:boom:` | `1f4a5` |
+| :dizzy: | `:dizzy:` | `1f4ab` |
+| :sweat_drops: | `:sweat_drops:` | `1f4a6` |
+| :dash: | `:dash:` | `1f4a8` |
+| :hole: | `:hole:` | `1f573` |
+| :speech_balloon: | `:speech_balloon:` | `1f4ac` |
+| :eye_in_speech_bubble: | `:eye_in_speech_bubble:` | `1f441-200d-1f5e8` |
+| :speech_left: | `:speech_left:` | `1f5e8` |
+| :anger_right: | `:anger_right:` | `1f5ef` |
+| :thought_balloon: | `:thought_balloon:` | `1f4ad` |
+| :zzz: | `:zzz:` | `1f4a4` |
+| :wave: | `:wave:` | `1f44b` |
+| :raised_back_of_hand: | `:raised_back_of_hand:` | `1f91a` |
+| :hand_splayed: | `:hand_splayed:` | `1f590` |
+| :raised_hand: | `:raised_hand:` | `270b` |
+| :vulcan: | `:vulcan:` | `1f596` |
+| :rightwards_hand: | `:rightwards_hand:` | `1faf1` |
+| :leftwards_hand: | `:leftwards_hand:` | `1faf2` |
+| :palm_down_hand: | `:palm_down_hand:` | `1faf3` |
+| :palm_up_hand: | `:palm_up_hand:` | `1faf4` |
+| :leftwards_pushing_hand: | `:leftwards_pushing_hand:` | `1faf7` |
+| :rightwards_pushing_hand: | `:rightwards_pushing_hand:` | `1faf8` |
+| :ok_hand: | `:ok_hand:` | `1f44c` |
+| :pinched_fingers: | `:pinched_fingers:` | `1f90c` |
+| :pinching_hand: | `:pinching_hand:` | `1f90f` |
+| :v: | `:v:` | `270c` |
+| :fingers_crossed: | `:fingers_crossed:` | `1f91e` |
+| :hand_with_index_finger_and_thumb_crossed: | `:hand_with_index_finger_and_thumb_crossed:` | `1faf0` |
+| :love_you_gesture: | `:love_you_gesture:` | `1f91f` |
+| :metal: | `:metal:` | `1f918` |
+| :call_me: | `:call_me:` | `1f919` |
+| :point_left: | `:point_left:` | `1f448` |
+| :point_right: | `:point_right:` | `1f449` |
+| :point_up_2: | `:point_up_2:` | `1f446` |
+| :middle_finger: | `:middle_finger:` | `1f595` |
+| :point_down: | `:point_down:` | `1f447` |
+| :point_up: | `:point_up:` | `261d` |
+| :index_pointing_at_the_viewer: | `:index_pointing_at_the_viewer:` | `1faf5` |
+| :thumbsup: | `:thumbsup:` | `1f44d` |
+| :thumbsdown: | `:thumbsdown:` | `1f44e` |
+| :fist: | `:fist:` | `270a` |
+| :punch: | `:punch:` | `1f44a` |
+| :left_facing_fist: | `:left_facing_fist:` | `1f91b` |
+| :right_facing_fist: | `:right_facing_fist:` | `1f91c` |
+| :clap: | `:clap:` | `1f44f` |
+| :raised_hands: | `:raised_hands:` | `1f64c` |
+| :heart_hands: | `:heart_hands:` | `1faf6` |
+| :open_hands: | `:open_hands:` | `1f450` |
+| :palms_up_together: | `:palms_up_together:` | `1f932` |
+| :handshake: | `:handshake:` | `1f91d` |
+| :pray: | `:pray:` | `1f64f` |
+| :writing_hand: | `:writing_hand:` | `270d` |
+| :nail_care: | `:nail_care:` | `1f485` |
+| :selfie: | `:selfie:` | `1f933` |
+| :muscle: | `:muscle:` | `1f4aa` |
+| :mechanical_arm: | `:mechanical_arm:` | `1f9be` |
+| :mechanical_leg: | `:mechanical_leg:` | `1f9bf` |
+| :leg: | `:leg:` | `1f9b5` |
+| :foot: | `:foot:` | `1f9b6` |
+| :ear: | `:ear:` | `1f442` |
+| :ear_with_hearing_aid: | `:ear_with_hearing_aid:` | `1f9bb` |
+| :nose: | `:nose:` | `1f443` |
+| :brain: | `:brain:` | `1f9e0` |
+| :anatomical_heart: | `:anatomical_heart:` | `1fac0` |
+| :lungs: | `:lungs:` | `1fac1` |
+| :tooth: | `:tooth:` | `1f9b7` |
+| :bone: | `:bone:` | `1f9b4` |
+| :eyes: | `:eyes:` | `1f440` |
+| :eye: | `:eye:` | `1f441` |
+| :tongue: | `:tongue:` | `1f445` |
+| :lips: | `:lips:` | `1f444` |
+| :biting_lip: | `:biting_lip:` | `1fae6` |
+| :baby: | `:baby:` | `1f476` |
+| :child: | `:child:` | `1f9d2` |
+| :boy: | `:boy:` | `1f466` |
+| :girl: | `:girl:` | `1f467` |
+| :adult: | `:adult:` | `1f9d1` |
+| :blond_haired_person: | `:blond_haired_person:` | `1f471` |
+| :man: | `:man:` | `1f468` |
+| :bearded_person: | `:bearded_person:` | `1f9d4` |
+| :man_beard: | `:man_beard:` | `1f9d4-200d-2642-fe0f` |
+| :woman_beard: | `:woman_beard:` | `1f9d4-200d-2640-fe0f` |
+| :man_red_haired: | `:man_red_haired:` | `1f468-200d-1f9b0` |
+| :man_curly_haired: | `:man_curly_haired:` | `1f468-200d-1f9b1` |
+| :man_white_haired: | `:man_white_haired:` | `1f468-200d-1f9b3` |
+| :man_bald: | `:man_bald:` | `1f468-200d-1f9b2` |
+| :woman: | `:woman:` | `1f469` |
+| :woman_red_haired: | `:woman_red_haired:` | `1f469-200d-1f9b0` |
+| :person_red_hair: | `:person_red_hair:` | `1f9d1-200d-1f9b0` |
+| :woman_curly_haired: | `:woman_curly_haired:` | `1f469-200d-1f9b1` |
+| :person_curly_hair: | `:person_curly_hair:` | `1f9d1-200d-1f9b1` |
+| :woman_white_haired: | `:woman_white_haired:` | `1f469-200d-1f9b3` |
+| :person_white_hair: | `:person_white_hair:` | `1f9d1-200d-1f9b3` |
+| :woman_bald: | `:woman_bald:` | `1f469-200d-1f9b2` |
+| :person_bald: | `:person_bald:` | `1f9d1-200d-1f9b2` |
+| :blond-haired_woman: | `:blond-haired_woman:` | `1f471-200d-2640-fe0f` |
+| :blond-haired_man: | `:blond-haired_man:` | `1f471-200d-2642-fe0f` |
+| :older_adult: | `:older_adult:` | `1f9d3` |
+| :older_man: | `:older_man:` | `1f474` |
+| :older_woman: | `:older_woman:` | `1f475` |
+| :person_frowning: | `:person_frowning:` | `1f64d` |
+| :man_frowning: | `:man_frowning:` | `1f64d-200d-2642-fe0f` |
+| :woman_frowning: | `:woman_frowning:` | `1f64d-200d-2640-fe0f` |
+| :person_pouting: | `:person_pouting:` | `1f64e` |
+| :man_pouting: | `:man_pouting:` | `1f64e-200d-2642-fe0f` |
+| :woman_pouting: | `:woman_pouting:` | `1f64e-200d-2640-fe0f` |
+| :person_gesturing_no: | `:person_gesturing_no:` | `1f645` |
+| :man_gesturing_no: | `:man_gesturing_no:` | `1f645-200d-2642-fe0f` |
+| :woman_gesturing_no: | `:woman_gesturing_no:` | `1f645-200d-2640-fe0f` |
+| :person_gesturing_ok: | `:person_gesturing_ok:` | `1f646` |
+| :man_gesturing_ok: | `:man_gesturing_ok:` | `1f646-200d-2642-fe0f` |
+| :woman_gesturing_ok: | `:woman_gesturing_ok:` | `1f646-200d-2640-fe0f` |
+| :person_tipping_hand: | `:person_tipping_hand:` | `1f481` |
+| :man_tipping_hand: | `:man_tipping_hand:` | `1f481-200d-2642-fe0f` |
+| :woman_tipping_hand: | `:woman_tipping_hand:` | `1f481-200d-2640-fe0f` |
+| :person_raising_hand: | `:person_raising_hand:` | `1f64b` |
+| :man_raising_hand: | `:man_raising_hand:` | `1f64b-200d-2642-fe0f` |
+| :woman_raising_hand: | `:woman_raising_hand:` | `1f64b-200d-2640-fe0f` |
+| :deaf_person: | `:deaf_person:` | `1f9cf` |
+| :deaf_man: | `:deaf_man:` | `1f9cf-200d-2642-fe0f` |
+| :deaf_woman: | `:deaf_woman:` | `1f9cf-200d-2640-fe0f` |
+| :person_bowing: | `:person_bowing:` | `1f647` |
+| :man_bowing: | `:man_bowing:` | `1f647-200d-2642-fe0f` |
+| :woman_bowing: | `:woman_bowing:` | `1f647-200d-2640-fe0f` |
+| :person_facepalming: | `:person_facepalming:` | `1f926` |
+| :man_facepalming: | `:man_facepalming:` | `1f926-200d-2642-fe0f` |
+| :woman_facepalming: | `:woman_facepalming:` | `1f926-200d-2640-fe0f` |
+| :person_shrugging: | `:person_shrugging:` | `1f937` |
+| :man_shrugging: | `:man_shrugging:` | `1f937-200d-2642-fe0f` |
+| :woman_shrugging: | `:woman_shrugging:` | `1f937-200d-2640-fe0f` |
+| :health_worker: | `:health_worker:` | `1f9d1-200d-2695-fe0f` |
+| :man_health_worker: | `:man_health_worker:` | `1f468-200d-2695-fe0f` |
+| :woman_health_worker: | `:woman_health_worker:` | `1f469-200d-2695-fe0f` |
+| :student: | `:student:` | `1f9d1-200d-1f393` |
+| :man_student: | `:man_student:` | `1f468-200d-1f393` |
+| :woman_student: | `:woman_student:` | `1f469-200d-1f393` |
+| :teacher: | `:teacher:` | `1f9d1-200d-1f3eb` |
+| :man_teacher: | `:man_teacher:` | `1f468-200d-1f3eb` |
+| :woman_teacher: | `:woman_teacher:` | `1f469-200d-1f3eb` |
+| :judge: | `:judge:` | `1f9d1-200d-2696-fe0f` |
+| :man_judge: | `:man_judge:` | `1f468-200d-2696-fe0f` |
+| :woman_judge: | `:woman_judge:` | `1f469-200d-2696-fe0f` |
+| :farmer: | `:farmer:` | `1f9d1-200d-1f33e` |
+| :man_farmer: | `:man_farmer:` | `1f468-200d-1f33e` |
+| :woman_farmer: | `:woman_farmer:` | `1f469-200d-1f33e` |
+| :cook: | `:cook:` | `1f9d1-200d-1f373` |
+| :man_cook: | `:man_cook:` | `1f468-200d-1f373` |
+| :woman_cook: | `:woman_cook:` | `1f469-200d-1f373` |
+| :mechanic: | `:mechanic:` | `1f9d1-200d-1f527` |
+| :man_mechanic: | `:man_mechanic:` | `1f468-200d-1f527` |
+| :woman_mechanic: | `:woman_mechanic:` | `1f469-200d-1f527` |
+| :factory_worker: | `:factory_worker:` | `1f9d1-200d-1f3ed` |
+| :man_factory_worker: | `:man_factory_worker:` | `1f468-200d-1f3ed` |
+| :woman_factory_worker: | `:woman_factory_worker:` | `1f469-200d-1f3ed` |
+| :office_worker: | `:office_worker:` | `1f9d1-200d-1f4bc` |
+| :man_office_worker: | `:man_office_worker:` | `1f468-200d-1f4bc` |
+| :woman_office_worker: | `:woman_office_worker:` | `1f469-200d-1f4bc` |
+| :scientist: | `:scientist:` | `1f9d1-200d-1f52c` |
+| :man_scientist: | `:man_scientist:` | `1f468-200d-1f52c` |
+| :woman_scientist: | `:woman_scientist:` | `1f469-200d-1f52c` |
+| :technologist: | `:technologist:` | `1f9d1-200d-1f4bb` |
+| :man_technologist: | `:man_technologist:` | `1f468-200d-1f4bb` |
+| :woman_technologist: | `:woman_technologist:` | `1f469-200d-1f4bb` |
+| :singer: | `:singer:` | `1f9d1-200d-1f3a4` |
+| :man_singer: | `:man_singer:` | `1f468-200d-1f3a4` |
+| :woman_singer: | `:woman_singer:` | `1f469-200d-1f3a4` |
+| :artist: | `:artist:` | `1f9d1-200d-1f3a8` |
+| :man_artist: | `:man_artist:` | `1f468-200d-1f3a8` |
+| :woman_artist: | `:woman_artist:` | `1f469-200d-1f3a8` |
+| :pilot: | `:pilot:` | `1f9d1-200d-2708-fe0f` |
+| :man_pilot: | `:man_pilot:` | `1f468-200d-2708-fe0f` |
+| :woman_pilot: | `:woman_pilot:` | `1f469-200d-2708-fe0f` |
+| :astronaut: | `:astronaut:` | `1f9d1-200d-1f680` |
+| :man_astronaut: | `:man_astronaut:` | `1f468-200d-1f680` |
+| :woman_astronaut: | `:woman_astronaut:` | `1f469-200d-1f680` |
+| :firefighter: | `:firefighter:` | `1f9d1-200d-1f692` |
+| :man_firefighter: | `:man_firefighter:` | `1f468-200d-1f692` |
+| :woman_firefighter: | `:woman_firefighter:` | `1f469-200d-1f692` |
+| :police_officer: | `:police_officer:` | `1f46e` |
+| :man_police_officer: | `:man_police_officer:` | `1f46e-200d-2642-fe0f` |
+| :woman_police_officer: | `:woman_police_officer:` | `1f46e-200d-2640-fe0f` |
+| :detective: | `:detective:` | `1f575` |
+| :man_detective: | `:man_detective:` | `1f575-fe0f-200d-2642-fe0f` |
+| :woman_detective: | `:woman_detective:` | `1f575-fe0f-200d-2640-fe0f` |
+| :guard: | `:guard:` | `1f482` |
+| :man_guard: | `:man_guard:` | `1f482-200d-2642-fe0f` |
+| :woman_guard: | `:woman_guard:` | `1f482-200d-2640-fe0f` |
+| :ninja: | `:ninja:` | `1f977` |
+| :construction_worker: | `:construction_worker:` | `1f477` |
+| :man_construction_worker: | `:man_construction_worker:` | `1f477-200d-2642-fe0f` |
+| :woman_construction_worker: | `:woman_construction_worker:` | `1f477-200d-2640-fe0f` |
+| :person_with_crown: | `:person_with_crown:` | `1fac5` |
+| :prince: | `:prince:` | `1f934` |
+| :princess: | `:princess:` | `1f478` |
+| :person_wearing_turban: | `:person_wearing_turban:` | `1f473` |
+| :man_wearing_turban: | `:man_wearing_turban:` | `1f473-200d-2642-fe0f` |
+| :woman_wearing_turban: | `:woman_wearing_turban:` | `1f473-200d-2640-fe0f` |
+| :man_with_chinese_cap: | `:man_with_chinese_cap:` | `1f472` |
+| :woman_with_headscarf: | `:woman_with_headscarf:` | `1f9d5` |
+| :person_in_tuxedo: | `:person_in_tuxedo:` | `1f935` |
+| :man_in_tuxedo: | `:man_in_tuxedo:` | `1f935-200d-2642-fe0f` |
+| :woman_in_tuxedo: | `:woman_in_tuxedo:` | `1f935-200d-2640-fe0f` |
+| :person_with_veil: | `:person_with_veil:` | `1f470` |
+| :man_with_veil: | `:man_with_veil:` | `1f470-200d-2642-fe0f` |
+| :woman_with_veil: | `:woman_with_veil:` | `1f470-200d-2640-fe0f` |
+| :pregnant_woman: | `:pregnant_woman:` | `1f930` |
+| :pregnant_man: | `:pregnant_man:` | `1fac3` |
+| :pregnant_person: | `:pregnant_person:` | `1fac4` |
+| :breast_feeding: | `:breast_feeding:` | `1f931` |
+| :woman_feeding_baby: | `:woman_feeding_baby:` | `1f469-200d-1f37c` |
+| :man_feeding_baby: | `:man_feeding_baby:` | `1f468-200d-1f37c` |
+| :person_feeding_baby: | `:person_feeding_baby:` | `1f9d1-200d-1f37c` |
+| :angel: | `:angel:` | `1f47c` |
+| :santa: | `:santa:` | `1f385` |
+| :mrs_claus: | `:mrs_claus:` | `1f936` |
+| :mx_claus: | `:mx_claus:` | `1f9d1-200d-1f384` |
+| :superhero: | `:superhero:` | `1f9b8` |
+| :man_superhero: | `:man_superhero:` | `1f9b8-200d-2642-fe0f` |
+| :woman_superhero: | `:woman_superhero:` | `1f9b8-200d-2640-fe0f` |
+| :supervillain: | `:supervillain:` | `1f9b9` |
+| :man_supervillain: | `:man_supervillain:` | `1f9b9-200d-2642-fe0f` |
+| :woman_supervillain: | `:woman_supervillain:` | `1f9b9-200d-2640-fe0f` |
+| :mage: | `:mage:` | `1f9d9` |
+| :man_mage: | `:man_mage:` | `1f9d9-200d-2642-fe0f` |
+| :woman_mage: | `:woman_mage:` | `1f9d9-200d-2640-fe0f` |
+| :fairy: | `:fairy:` | `1f9da` |
+| :man_fairy: | `:man_fairy:` | `1f9da-200d-2642-fe0f` |
+| :woman_fairy: | `:woman_fairy:` | `1f9da-200d-2640-fe0f` |
+| :vampire: | `:vampire:` | `1f9db` |
+| :man_vampire: | `:man_vampire:` | `1f9db-200d-2642-fe0f` |
+| :woman_vampire: | `:woman_vampire:` | `1f9db-200d-2640-fe0f` |
+| :merperson: | `:merperson:` | `1f9dc` |
+| :merman: | `:merman:` | `1f9dc-200d-2642-fe0f` |
+| :mermaid: | `:mermaid:` | `1f9dc-200d-2640-fe0f` |
+| :elf: | `:elf:` | `1f9dd` |
+| :man_elf: | `:man_elf:` | `1f9dd-200d-2642-fe0f` |
+| :woman_elf: | `:woman_elf:` | `1f9dd-200d-2640-fe0f` |
+| :genie: | `:genie:` | `1f9de` |
+| :man_genie: | `:man_genie:` | `1f9de-200d-2642-fe0f` |
+| :woman_genie: | `:woman_genie:` | `1f9de-200d-2640-fe0f` |
+| :zombie: | `:zombie:` | `1f9df` |
+| :man_zombie: | `:man_zombie:` | `1f9df-200d-2642-fe0f` |
+| :woman_zombie: | `:woman_zombie:` | `1f9df-200d-2640-fe0f` |
+| :troll: | `:troll:` | `1f9cc` |
+| :person_getting_massage: | `:person_getting_massage:` | `1f486` |
+| :man_getting_face_massage: | `:man_getting_face_massage:` | `1f486-200d-2642-fe0f` |
+| :woman_getting_face_massage: | `:woman_getting_face_massage:` | `1f486-200d-2640-fe0f` |
+| :person_getting_haircut: | `:person_getting_haircut:` | `1f487` |
+| :man_getting_haircut: | `:man_getting_haircut:` | `1f487-200d-2642-fe0f` |
+| :woman_getting_haircut: | `:woman_getting_haircut:` | `1f487-200d-2640-fe0f` |
+| :person_walking: | `:person_walking:` | `1f6b6` |
+| :man_walking: | `:man_walking:` | `1f6b6-200d-2642-fe0f` |
+| :woman_walking: | `:woman_walking:` | `1f6b6-200d-2640-fe0f` |
+| :person_standing: | `:person_standing:` | `1f9cd` |
+| :man_standing: | `:man_standing:` | `1f9cd-200d-2642-fe0f` |
+| :woman_standing: | `:woman_standing:` | `1f9cd-200d-2640-fe0f` |
+| :person_kneeling: | `:person_kneeling:` | `1f9ce` |
+| :man_kneeling: | `:man_kneeling:` | `1f9ce-200d-2642-fe0f` |
+| :woman_kneeling: | `:woman_kneeling:` | `1f9ce-200d-2640-fe0f` |
+| :person_with_probing_cane: | `:person_with_probing_cane:` | `1f9d1-200d-1f9af` |
+| :man_with_probing_cane: | `:man_with_probing_cane:` | `1f468-200d-1f9af` |
+| :woman_with_probing_cane: | `:woman_with_probing_cane:` | `1f469-200d-1f9af` |
+| :person_in_motorized_wheelchair: | `:person_in_motorized_wheelchair:` | `1f9d1-200d-1f9bc` |
+| :man_in_motorized_wheelchair: | `:man_in_motorized_wheelchair:` | `1f468-200d-1f9bc` |
+| :woman_in_motorized_wheelchair: | `:woman_in_motorized_wheelchair:` | `1f469-200d-1f9bc` |
+| :person_in_manual_wheelchair: | `:person_in_manual_wheelchair:` | `1f9d1-200d-1f9bd` |
+| :man_in_manual_wheelchair: | `:man_in_manual_wheelchair:` | `1f468-200d-1f9bd` |
+| :woman_in_manual_wheelchair: | `:woman_in_manual_wheelchair:` | `1f469-200d-1f9bd` |
+| :person_running: | `:person_running:` | `1f3c3` |
+| :man_running: | `:man_running:` | `1f3c3-200d-2642-fe0f` |
+| :woman_running: | `:woman_running:` | `1f3c3-200d-2640-fe0f` |
+| :dancer: | `:dancer:` | `1f483` |
+| :man_dancing: | `:man_dancing:` | `1f57a` |
+| :levitate: | `:levitate:` | `1f574` |
+| :people_with_bunny_ears_partying: | `:people_with_bunny_ears_partying:` | `1f46f` |
+| :men_with_bunny_ears_partying: | `:men_with_bunny_ears_partying:` | `1f46f-200d-2642-fe0f` |
+| :women_with_bunny_ears_partying: | `:women_with_bunny_ears_partying:` | `1f46f-200d-2640-fe0f` |
+| :person_in_steamy_room: | `:person_in_steamy_room:` | `1f9d6` |
+| :man_in_steamy_room: | `:man_in_steamy_room:` | `1f9d6-200d-2642-fe0f` |
+| :woman_in_steamy_room: | `:woman_in_steamy_room:` | `1f9d6-200d-2640-fe0f` |
+| :person_climbing: | `:person_climbing:` | `1f9d7` |
+| :man_climbing: | `:man_climbing:` | `1f9d7-200d-2642-fe0f` |
+| :woman_climbing: | `:woman_climbing:` | `1f9d7-200d-2640-fe0f` |
+| :person_fencing: | `:person_fencing:` | `1f93a` |
+| :horse_racing: | `:horse_racing:` | `1f3c7` |
+| :skier: | `:skier:` | `26f7` |
+| :snowboarder: | `:snowboarder:` | `1f3c2` |
+| :person_golfing: | `:person_golfing:` | `1f3cc` |
+| :man_golfing: | `:man_golfing:` | `1f3cc-fe0f-200d-2642-fe0f` |
+| :woman_golfing: | `:woman_golfing:` | `1f3cc-fe0f-200d-2640-fe0f` |
+| :person_surfing: | `:person_surfing:` | `1f3c4` |
+| :man_surfing: | `:man_surfing:` | `1f3c4-200d-2642-fe0f` |
+| :woman_surfing: | `:woman_surfing:` | `1f3c4-200d-2640-fe0f` |
+| :person_rowing_boat: | `:person_rowing_boat:` | `1f6a3` |
+| :man_rowing_boat: | `:man_rowing_boat:` | `1f6a3-200d-2642-fe0f` |
+| :woman_rowing_boat: | `:woman_rowing_boat:` | `1f6a3-200d-2640-fe0f` |
+| :person_swimming: | `:person_swimming:` | `1f3ca` |
+| :man_swimming: | `:man_swimming:` | `1f3ca-200d-2642-fe0f` |
+| :woman_swimming: | `:woman_swimming:` | `1f3ca-200d-2640-fe0f` |
+| :person_bouncing_ball: | `:person_bouncing_ball:` | `26f9` |
+| :man_bouncing_ball: | `:man_bouncing_ball:` | `26f9-fe0f-200d-2642-fe0f` |
+| :woman_bouncing_ball: | `:woman_bouncing_ball:` | `26f9-fe0f-200d-2640-fe0f` |
+| :person_lifting_weights: | `:person_lifting_weights:` | `1f3cb` |
+| :man_lifting_weights: | `:man_lifting_weights:` | `1f3cb-fe0f-200d-2642-fe0f` |
+| :woman_lifting_weights: | `:woman_lifting_weights:` | `1f3cb-fe0f-200d-2640-fe0f` |
+| :person_biking: | `:person_biking:` | `1f6b4` |
+| :man_biking: | `:man_biking:` | `1f6b4-200d-2642-fe0f` |
+| :woman_biking: | `:woman_biking:` | `1f6b4-200d-2640-fe0f` |
+| :person_mountain_biking: | `:person_mountain_biking:` | `1f6b5` |
+| :man_mountain_biking: | `:man_mountain_biking:` | `1f6b5-200d-2642-fe0f` |
+| :woman_mountain_biking: | `:woman_mountain_biking:` | `1f6b5-200d-2640-fe0f` |
+| :person_doing_cartwheel: | `:person_doing_cartwheel:` | `1f938` |
+| :man_cartwheeling: | `:man_cartwheeling:` | `1f938-200d-2642-fe0f` |
+| :woman_cartwheeling: | `:woman_cartwheeling:` | `1f938-200d-2640-fe0f` |
+| :people_wrestling: | `:people_wrestling:` | `1f93c` |
+| :men_wrestling: | `:men_wrestling:` | `1f93c-200d-2642-fe0f` |
+| :women_wrestling: | `:women_wrestling:` | `1f93c-200d-2640-fe0f` |
+| :person_playing_water_polo: | `:person_playing_water_polo:` | `1f93d` |
+| :man_playing_water_polo: | `:man_playing_water_polo:` | `1f93d-200d-2642-fe0f` |
+| :woman_playing_water_polo: | `:woman_playing_water_polo:` | `1f93d-200d-2640-fe0f` |
+| :person_playing_handball: | `:person_playing_handball:` | `1f93e` |
+| :man_playing_handball: | `:man_playing_handball:` | `1f93e-200d-2642-fe0f` |
+| :woman_playing_handball: | `:woman_playing_handball:` | `1f93e-200d-2640-fe0f` |
+| :person_juggling: | `:person_juggling:` | `1f939` |
+| :man_juggling: | `:man_juggling:` | `1f939-200d-2642-fe0f` |
+| :woman_juggling: | `:woman_juggling:` | `1f939-200d-2640-fe0f` |
+| :person_in_lotus_position: | `:person_in_lotus_position:` | `1f9d8` |
+| :man_in_lotus_position: | `:man_in_lotus_position:` | `1f9d8-200d-2642-fe0f` |
+| :woman_in_lotus_position: | `:woman_in_lotus_position:` | `1f9d8-200d-2640-fe0f` |
+| :bath: | `:bath:` | `1f6c0` |
+| :sleeping_accommodation: | `:sleeping_accommodation:` | `1f6cc` |
+| :people_holding_hands: | `:people_holding_hands:` | `1f9d1-200d-1f91d-200d-1f9d1` |
+| :two_women_holding_hands: | `:two_women_holding_hands:` | `1f46d` |
+| :couple: | `:couple:` | `1f46b` |
+| :two_men_holding_hands: | `:two_men_holding_hands:` | `1f46c` |
+| :couplekiss: | `:couplekiss:` | `1f48f` |
+| :kiss_woman_man: | `:kiss_woman_man:` | `1f469-200d-2764-fe0f-200d-1f48b-200d-1f468` |
+| :kiss_mm: | `:kiss_mm:` | `1f468-200d-2764-fe0f-200d-1f48b-200d-1f468` |
+| :kiss_ww: | `:kiss_ww:` | `1f469-200d-2764-fe0f-200d-1f48b-200d-1f469` |
+| :couple_with_heart: | `:couple_with_heart:` | `1f491` |
+| :couple_with_heart_woman_man: | `:couple_with_heart_woman_man:` | `1f469-200d-2764-fe0f-200d-1f468` |
+| :couple_mm: | `:couple_mm:` | `1f468-200d-2764-fe0f-200d-1f468` |
+| :couple_ww: | `:couple_ww:` | `1f469-200d-2764-fe0f-200d-1f469` |
+| :family_man_woman_boy: | `:family_man_woman_boy:` | `1f468-200d-1f469-200d-1f466` |
+| :family_mwg: | `:family_mwg:` | `1f468-200d-1f469-200d-1f467` |
+| :family_mwgb: | `:family_mwgb:` | `1f468-200d-1f469-200d-1f467-200d-1f466` |
+| :family_mwbb: | `:family_mwbb:` | `1f468-200d-1f469-200d-1f466-200d-1f466` |
+| :family_mwgg: | `:family_mwgg:` | `1f468-200d-1f469-200d-1f467-200d-1f467` |
+| :family_mmb: | `:family_mmb:` | `1f468-200d-1f468-200d-1f466` |
+| :family_mmg: | `:family_mmg:` | `1f468-200d-1f468-200d-1f467` |
+| :family_mmgb: | `:family_mmgb:` | `1f468-200d-1f468-200d-1f467-200d-1f466` |
+| :family_mmbb: | `:family_mmbb:` | `1f468-200d-1f468-200d-1f466-200d-1f466` |
+| :family_mmgg: | `:family_mmgg:` | `1f468-200d-1f468-200d-1f467-200d-1f467` |
+| :family_wwb: | `:family_wwb:` | `1f469-200d-1f469-200d-1f466` |
+| :family_wwg: | `:family_wwg:` | `1f469-200d-1f469-200d-1f467` |
+| :family_wwgb: | `:family_wwgb:` | `1f469-200d-1f469-200d-1f467-200d-1f466` |
+| :family_wwbb: | `:family_wwbb:` | `1f469-200d-1f469-200d-1f466-200d-1f466` |
+| :family_wwgg: | `:family_wwgg:` | `1f469-200d-1f469-200d-1f467-200d-1f467` |
+| :family_man_boy: | `:family_man_boy:` | `1f468-200d-1f466` |
+| :family_man_boy_boy: | `:family_man_boy_boy:` | `1f468-200d-1f466-200d-1f466` |
+| :family_man_girl: | `:family_man_girl:` | `1f468-200d-1f467` |
+| :family_man_girl_boy: | `:family_man_girl_boy:` | `1f468-200d-1f467-200d-1f466` |
+| :family_man_girl_girl: | `:family_man_girl_girl:` | `1f468-200d-1f467-200d-1f467` |
+| :family_woman_boy: | `:family_woman_boy:` | `1f469-200d-1f466` |
+| :family_woman_boy_boy: | `:family_woman_boy_boy:` | `1f469-200d-1f466-200d-1f466` |
+| :family_woman_girl: | `:family_woman_girl:` | `1f469-200d-1f467` |
+| :family_woman_girl_boy: | `:family_woman_girl_boy:` | `1f469-200d-1f467-200d-1f466` |
+| :family_woman_girl_girl: | `:family_woman_girl_girl:` | `1f469-200d-1f467-200d-1f467` |
+| :speaking_head: | `:speaking_head:` | `1f5e3` |
+| :bust_in_silhouette: | `:bust_in_silhouette:` | `1f464` |
+| :busts_in_silhouette: | `:busts_in_silhouette:` | `1f465` |
+| :people_hugging: | `:people_hugging:` | `1fac2` |
+| :family: | `:family:` | `1f46a` |
+| :footprints: | `:footprints:` | `1f463` |
+| :monkey_face: | `:monkey_face:` | `1f435` |
+| :monkey: | `:monkey:` | `1f412` |
+| :gorilla: | `:gorilla:` | `1f98d` |
+| :orangutan: | `:orangutan:` | `1f9a7` |
+| :dog: | `:dog:` | `1f436` |
+| :dog2: | `:dog2:` | `1f415` |
+| :guide_dog: | `:guide_dog:` | `1f9ae` |
+| :service_dog: | `:service_dog:` | `1f415-200d-1f9ba` |
+| :poodle: | `:poodle:` | `1f429` |
+| :wolf: | `:wolf:` | `1f43a` |
+| :fox: | `:fox:` | `1f98a` |
+| :raccoon: | `:raccoon:` | `1f99d` |
+| :cat: | `:cat:` | `1f431` |
+| :cat2: | `:cat2:` | `1f408` |
+| :black_cat: | `:black_cat:` | `1f408-200d-2b1b` |
+| :lion_face: | `:lion_face:` | `1f981` |
+| :tiger: | `:tiger:` | `1f42f` |
+| :tiger2: | `:tiger2:` | `1f405` |
+| :leopard: | `:leopard:` | `1f406` |
+| :horse: | `:horse:` | `1f434` |
+| :moose: | `:moose:` | `1face` |
+| :donkey: | `:donkey:` | `1facf` |
+| :racehorse: | `:racehorse:` | `1f40e` |
+| :unicorn: | `:unicorn:` | `1f984` |
+| :zebra: | `:zebra:` | `1f993` |
+| :deer: | `:deer:` | `1f98c` |
+| :bison: | `:bison:` | `1f9ac` |
+| :cow: | `:cow:` | `1f42e` |
+| :ox: | `:ox:` | `1f402` |
+| :water_buffalo: | `:water_buffalo:` | `1f403` |
+| :cow2: | `:cow2:` | `1f404` |
+| :pig: | `:pig:` | `1f437` |
+| :pig2: | `:pig2:` | `1f416` |
+| :boar: | `:boar:` | `1f417` |
+| :pig_nose: | `:pig_nose:` | `1f43d` |
+| :ram: | `:ram:` | `1f40f` |
+| :sheep: | `:sheep:` | `1f411` |
+| :goat: | `:goat:` | `1f410` |
+| :dromedary_camel: | `:dromedary_camel:` | `1f42a` |
+| :camel: | `:camel:` | `1f42b` |
+| :llama: | `:llama:` | `1f999` |
+| :giraffe: | `:giraffe:` | `1f992` |
+| :elephant: | `:elephant:` | `1f418` |
+| :mammoth: | `:mammoth:` | `1f9a3` |
+| :rhino: | `:rhino:` | `1f98f` |
+| :hippopotamus: | `:hippopotamus:` | `1f99b` |
+| :mouse: | `:mouse:` | `1f42d` |
+| :mouse2: | `:mouse2:` | `1f401` |
+| :rat: | `:rat:` | `1f400` |
+| :hamster: | `:hamster:` | `1f439` |
+| :rabbit: | `:rabbit:` | `1f430` |
+| :rabbit2: | `:rabbit2:` | `1f407` |
+| :chipmunk: | `:chipmunk:` | `1f43f` |
+| :beaver: | `:beaver:` | `1f9ab` |
+| :hedgehog: | `:hedgehog:` | `1f994` |
+| :bat: | `:bat:` | `1f987` |
+| :bear: | `:bear:` | `1f43b` |
+| :polar_bear: | `:polar_bear:` | `1f43b-200d-2744-fe0f` |
+| :koala: | `:koala:` | `1f428` |
+| :panda_face: | `:panda_face:` | `1f43c` |
+| :sloth: | `:sloth:` | `1f9a5` |
+| :otter: | `:otter:` | `1f9a6` |
+| :skunk: | `:skunk:` | `1f9a8` |
+| :kangaroo: | `:kangaroo:` | `1f998` |
+| :badger: | `:badger:` | `1f9a1` |
+| :feet: | `:feet:` | `1f43e` |
+| :turkey: | `:turkey:` | `1f983` |
+| :chicken: | `:chicken:` | `1f414` |
+| :rooster: | `:rooster:` | `1f413` |
+| :hatching_chick: | `:hatching_chick:` | `1f423` |
+| :baby_chick: | `:baby_chick:` | `1f424` |
+| :hatched_chick: | `:hatched_chick:` | `1f425` |
+| :bird: | `:bird:` | `1f426` |
+| :penguin: | `:penguin:` | `1f427` |
+| :dove: | `:dove:` | `1f54a` |
+| :eagle: | `:eagle:` | `1f985` |
+| :duck: | `:duck:` | `1f986` |
+| :swan: | `:swan:` | `1f9a2` |
+| :owl: | `:owl:` | `1f989` |
+| :dodo: | `:dodo:` | `1f9a4` |
+| :feather: | `:feather:` | `1fab6` |
+| :flamingo: | `:flamingo:` | `1f9a9` |
+| :peacock: | `:peacock:` | `1f99a` |
+| :parrot: | `:parrot:` | `1f99c` |
+| :wing: | `:wing:` | `1fabd` |
+| :black_bird: | `:black_bird:` | `1f426-200d-2b1b` |
+| :goose: | `:goose:` | `1fabf` |
+| :frog: | `:frog:` | `1f438` |
+| :crocodile: | `:crocodile:` | `1f40a` |
+| :turtle: | `:turtle:` | `1f422` |
+| :lizard: | `:lizard:` | `1f98e` |
+| :snake: | `:snake:` | `1f40d` |
+| :dragon_face: | `:dragon_face:` | `1f432` |
+| :dragon: | `:dragon:` | `1f409` |
+| :sauropod: | `:sauropod:` | `1f995` |
+| :t_rex: | `:t_rex:` | `1f996` |
+| :whale: | `:whale:` | `1f433` |
+| :whale2: | `:whale2:` | `1f40b` |
+| :dolphin: | `:dolphin:` | `1f42c` |
+| :seal: | `:seal:` | `1f9ad` |
+| :fish: | `:fish:` | `1f41f` |
+| :tropical_fish: | `:tropical_fish:` | `1f420` |
+| :blowfish: | `:blowfish:` | `1f421` |
+| :shark: | `:shark:` | `1f988` |
+| :octopus: | `:octopus:` | `1f419` |
+| :shell: | `:shell:` | `1f41a` |
+| :coral: | `:coral:` | `1fab8` |
+| :jellyfish: | `:jellyfish:` | `1fabc` |
+| :snail: | `:snail:` | `1f40c` |
+| :butterfly: | `:butterfly:` | `1f98b` |
+| :bug: | `:bug:` | `1f41b` |
+| :ant: | `:ant:` | `1f41c` |
+| :bee: | `:bee:` | `1f41d` |
+| :beetle: | `:beetle:` | `1fab2` |
+| :lady_beetle: | `:lady_beetle:` | `1f41e` |
+| :cricket: | `:cricket:` | `1f997` |
+| :cockroach: | `:cockroach:` | `1fab3` |
+| :spider: | `:spider:` | `1f577` |
+| :spider_web: | `:spider_web:` | `1f578` |
+| :scorpion: | `:scorpion:` | `1f982` |
+| :mosquito: | `:mosquito:` | `1f99f` |
+| :fly: | `:fly:` | `1fab0` |
+| :worm: | `:worm:` | `1fab1` |
+| :microbe: | `:microbe:` | `1f9a0` |
+| :bouquet: | `:bouquet:` | `1f490` |
+| :cherry_blossom: | `:cherry_blossom:` | `1f338` |
+| :white_flower: | `:white_flower:` | `1f4ae` |
+| :lotus: | `:lotus:` | `1fab7` |
+| :rosette: | `:rosette:` | `1f3f5` |
+| :rose: | `:rose:` | `1f339` |
+| :wilted_rose: | `:wilted_rose:` | `1f940` |
+| :hibiscus: | `:hibiscus:` | `1f33a` |
+| :sunflower: | `:sunflower:` | `1f33b` |
+| :blossom: | `:blossom:` | `1f33c` |
+| :tulip: | `:tulip:` | `1f337` |
+| :hyacinth: | `:hyacinth:` | `1fabb` |
+| :seedling: | `:seedling:` | `1f331` |
+| :potted_plant: | `:potted_plant:` | `1fab4` |
+| :evergreen_tree: | `:evergreen_tree:` | `1f332` |
+| :deciduous_tree: | `:deciduous_tree:` | `1f333` |
+| :palm_tree: | `:palm_tree:` | `1f334` |
+| :cactus: | `:cactus:` | `1f335` |
+| :ear_of_rice: | `:ear_of_rice:` | `1f33e` |
+| :herb: | `:herb:` | `1f33f` |
+| :shamrock: | `:shamrock:` | `2618` |
+| :four_leaf_clover: | `:four_leaf_clover:` | `1f340` |
+| :maple_leaf: | `:maple_leaf:` | `1f341` |
+| :fallen_leaf: | `:fallen_leaf:` | `1f342` |
+| :leaves: | `:leaves:` | `1f343` |
+| :empty_nest: | `:empty_nest:` | `1fab9` |
+| :nest_with_eggs: | `:nest_with_eggs:` | `1faba` |
+| :mushroom: | `:mushroom:` | `1f344` |
+| :grapes: | `:grapes:` | `1f347` |
+| :melon: | `:melon:` | `1f348` |
+| :watermelon: | `:watermelon:` | `1f349` |
+| :tangerine: | `:tangerine:` | `1f34a` |
+| :lemon: | `:lemon:` | `1f34b` |
+| :banana: | `:banana:` | `1f34c` |
+| :pineapple: | `:pineapple:` | `1f34d` |
+| :mango: | `:mango:` | `1f96d` |
+| :apple: | `:apple:` | `1f34e` |
+| :green_apple: | `:green_apple:` | `1f34f` |
+| :pear: | `:pear:` | `1f350` |
+| :peach: | `:peach:` | `1f351` |
+| :cherries: | `:cherries:` | `1f352` |
+| :strawberry: | `:strawberry:` | `1f353` |
+| :blueberries: | `:blueberries:` | `1fad0` |
+| :kiwi: | `:kiwi:` | `1f95d` |
+| :tomato: | `:tomato:` | `1f345` |
+| :olive: | `:olive:` | `1fad2` |
+| :coconut: | `:coconut:` | `1f965` |
+| :avocado: | `:avocado:` | `1f951` |
+| :eggplant: | `:eggplant:` | `1f346` |
+| :potato: | `:potato:` | `1f954` |
+| :carrot: | `:carrot:` | `1f955` |
+| :corn: | `:corn:` | `1f33d` |
+| :hot_pepper: | `:hot_pepper:` | `1f336` |
+| :bell_pepper: | `:bell_pepper:` | `1fad1` |
+| :cucumber: | `:cucumber:` | `1f952` |
+| :leafy_green: | `:leafy_green:` | `1f96c` |
+| :broccoli: | `:broccoli:` | `1f966` |
+| :garlic: | `:garlic:` | `1f9c4` |
+| :onion: | `:onion:` | `1f9c5` |
+| :peanuts: | `:peanuts:` | `1f95c` |
+| :beans: | `:beans:` | `1fad8` |
+| :chestnut: | `:chestnut:` | `1f330` |
+| :ginger_root: | `:ginger_root:` | `1fada` |
+| :pea_pod: | `:pea_pod:` | `1fadb` |
+| :bread: | `:bread:` | `1f35e` |
+| :croissant: | `:croissant:` | `1f950` |
+| :french_bread: | `:french_bread:` | `1f956` |
+| :flatbread: | `:flatbread:` | `1fad3` |
+| :pretzel: | `:pretzel:` | `1f968` |
+| :bagel: | `:bagel:` | `1f96f` |
+| :pancakes: | `:pancakes:` | `1f95e` |
+| :waffle: | `:waffle:` | `1f9c7` |
+| :cheese: | `:cheese:` | `1f9c0` |
+| :meat_on_bone: | `:meat_on_bone:` | `1f356` |
+| :poultry_leg: | `:poultry_leg:` | `1f357` |
+| :cut_of_meat: | `:cut_of_meat:` | `1f969` |
+| :bacon: | `:bacon:` | `1f953` |
+| :hamburger: | `:hamburger:` | `1f354` |
+| :fries: | `:fries:` | `1f35f` |
+| :pizza: | `:pizza:` | `1f355` |
+| :hotdog: | `:hotdog:` | `1f32d` |
+| :sandwich: | `:sandwich:` | `1f96a` |
+| :taco: | `:taco:` | `1f32e` |
+| :burrito: | `:burrito:` | `1f32f` |
+| :tamale: | `:tamale:` | `1fad4` |
+| :stuffed_flatbread: | `:stuffed_flatbread:` | `1f959` |
+| :falafel: | `:falafel:` | `1f9c6` |
+| :egg: | `:egg:` | `1f95a` |
+| :cooking: | `:cooking:` | `1f373` |
+| :shallow_pan_of_food: | `:shallow_pan_of_food:` | `1f958` |
+| :stew: | `:stew:` | `1f372` |
+| :fondue: | `:fondue:` | `1fad5` |
+| :bowl_with_spoon: | `:bowl_with_spoon:` | `1f963` |
+| :salad: | `:salad:` | `1f957` |
+| :popcorn: | `:popcorn:` | `1f37f` |
+| :butter: | `:butter:` | `1f9c8` |
+| :salt: | `:salt:` | `1f9c2` |
+| :canned_food: | `:canned_food:` | `1f96b` |
+| :bento: | `:bento:` | `1f371` |
+| :rice_cracker: | `:rice_cracker:` | `1f358` |
+| :rice_ball: | `:rice_ball:` | `1f359` |
+| :rice: | `:rice:` | `1f35a` |
+| :curry: | `:curry:` | `1f35b` |
+| :ramen: | `:ramen:` | `1f35c` |
+| :spaghetti: | `:spaghetti:` | `1f35d` |
+| :sweet_potato: | `:sweet_potato:` | `1f360` |
+| :oden: | `:oden:` | `1f362` |
+| :sushi: | `:sushi:` | `1f363` |
+| :fried_shrimp: | `:fried_shrimp:` | `1f364` |
+| :fish_cake: | `:fish_cake:` | `1f365` |
+| :moon_cake: | `:moon_cake:` | `1f96e` |
+| :dango: | `:dango:` | `1f361` |
+| :dumpling: | `:dumpling:` | `1f95f` |
+| :fortune_cookie: | `:fortune_cookie:` | `1f960` |
+| :takeout_box: | `:takeout_box:` | `1f961` |
+| :crab: | `:crab:` | `1f980` |
+| :lobster: | `:lobster:` | `1f99e` |
+| :shrimp: | `:shrimp:` | `1f990` |
+| :squid: | `:squid:` | `1f991` |
+| :oyster: | `:oyster:` | `1f9aa` |
+| :icecream: | `:icecream:` | `1f366` |
+| :shaved_ice: | `:shaved_ice:` | `1f367` |
+| :ice_cream: | `:ice_cream:` | `1f368` |
+| :doughnut: | `:doughnut:` | `1f369` |
+| :cookie: | `:cookie:` | `1f36a` |
+| :birthday: | `:birthday:` | `1f382` |
+| :cake: | `:cake:` | `1f370` |
+| :cupcake: | `:cupcake:` | `1f9c1` |
+| :pie: | `:pie:` | `1f967` |
+| :chocolate_bar: | `:chocolate_bar:` | `1f36b` |
+| :candy: | `:candy:` | `1f36c` |
+| :lollipop: | `:lollipop:` | `1f36d` |
+| :custard: | `:custard:` | `1f36e` |
+| :honey_pot: | `:honey_pot:` | `1f36f` |
+| :baby_bottle: | `:baby_bottle:` | `1f37c` |
+| :milk: | `:milk:` | `1f95b` |
+| :coffee: | `:coffee:` | `2615` |
+| :teapot: | `:teapot:` | `1fad6` |
+| :tea: | `:tea:` | `1f375` |
+| :sake: | `:sake:` | `1f376` |
+| :champagne: | `:champagne:` | `1f37e` |
+| :wine_glass: | `:wine_glass:` | `1f377` |
+| :cocktail: | `:cocktail:` | `1f378` |
+| :tropical_drink: | `:tropical_drink:` | `1f379` |
+| :beer: | `:beer:` | `1f37a` |
+| :beers: | `:beers:` | `1f37b` |
+| :champagne_glass: | `:champagne_glass:` | `1f942` |
+| :tumbler_glass: | `:tumbler_glass:` | `1f943` |
+| :pouring_liquid: | `:pouring_liquid:` | `1fad7` |
+| :cup_with_straw: | `:cup_with_straw:` | `1f964` |
+| :bubble_tea: | `:bubble_tea:` | `1f9cb` |
+| :beverage_box: | `:beverage_box:` | `1f9c3` |
+| :mate: | `:mate:` | `1f9c9` |
+| :ice_cube: | `:ice_cube:` | `1f9ca` |
+| :chopsticks: | `:chopsticks:` | `1f962` |
+| :fork_knife_plate: | `:fork_knife_plate:` | `1f37d` |
+| :fork_and_knife: | `:fork_and_knife:` | `1f374` |
+| :spoon: | `:spoon:` | `1f944` |
+| :knife: | `:knife:` | `1f52a` |
+| :jar: | `:jar:` | `1fad9` |
+| :amphora: | `:amphora:` | `1f3fa` |
+| :earth_africa: | `:earth_africa:` | `1f30d` |
+| :earth_americas: | `:earth_americas:` | `1f30e` |
+| :earth_asia: | `:earth_asia:` | `1f30f` |
+| :globe_with_meridians: | `:globe_with_meridians:` | `1f310` |
+| :map: | `:map:` | `1f5fa` |
+| :japan: | `:japan:` | `1f5fe` |
+| :compass: | `:compass:` | `1f9ed` |
+| :mountain_snow: | `:mountain_snow:` | `1f3d4` |
+| :mountain: | `:mountain:` | `26f0` |
+| :volcano: | `:volcano:` | `1f30b` |
+| :mount_fuji: | `:mount_fuji:` | `1f5fb` |
+| :camping: | `:camping:` | `1f3d5` |
+| :beach: | `:beach:` | `1f3d6` |
+| :desert: | `:desert:` | `1f3dc` |
+| :island: | `:island:` | `1f3dd` |
+| :park: | `:park:` | `1f3de` |
+| :stadium: | `:stadium:` | `1f3df` |
+| :classical_building: | `:classical_building:` | `1f3db` |
+| :construction_site: | `:construction_site:` | `1f3d7` |
+| :bricks: | `:bricks:` | `1f9f1` |
+| :rock: | `:rock:` | `1faa8` |
+| :wood: | `:wood:` | `1fab5` |
+| :hut: | `:hut:` | `1f6d6` |
+| :homes: | `:homes:` | `1f3d8` |
+| :house_abandoned: | `:house_abandoned:` | `1f3da` |
+| :house: | `:house:` | `1f3e0` |
+| :house_with_garden: | `:house_with_garden:` | `1f3e1` |
+| :office: | `:office:` | `1f3e2` |
+| :post_office: | `:post_office:` | `1f3e3` |
+| :european_post_office: | `:european_post_office:` | `1f3e4` |
+| :hospital: | `:hospital:` | `1f3e5` |
+| :bank: | `:bank:` | `1f3e6` |
+| :hotel: | `:hotel:` | `1f3e8` |
+| :love_hotel: | `:love_hotel:` | `1f3e9` |
+| :convenience_store: | `:convenience_store:` | `1f3ea` |
+| :school: | `:school:` | `1f3eb` |
+| :department_store: | `:department_store:` | `1f3ec` |
+| :factory: | `:factory:` | `1f3ed` |
+| :japanese_castle: | `:japanese_castle:` | `1f3ef` |
+| :european_castle: | `:european_castle:` | `1f3f0` |
+| :wedding: | `:wedding:` | `1f492` |
+| :tokyo_tower: | `:tokyo_tower:` | `1f5fc` |
+| :statue_of_liberty: | `:statue_of_liberty:` | `1f5fd` |
+| :church: | `:church:` | `26ea` |
+| :mosque: | `:mosque:` | `1f54c` |
+| :hindu_temple: | `:hindu_temple:` | `1f6d5` |
+| :synagogue: | `:synagogue:` | `1f54d` |
+| :shinto_shrine: | `:shinto_shrine:` | `26e9` |
+| :kaaba: | `:kaaba:` | `1f54b` |
+| :fountain: | `:fountain:` | `26f2` |
+| :tent: | `:tent:` | `26fa` |
+| :foggy: | `:foggy:` | `1f301` |
+| :night_with_stars: | `:night_with_stars:` | `1f303` |
+| :cityscape: | `:cityscape:` | `1f3d9` |
+| :sunrise_over_mountains: | `:sunrise_over_mountains:` | `1f304` |
+| :sunrise: | `:sunrise:` | `1f305` |
+| :city_dusk: | `:city_dusk:` | `1f306` |
+| :city_sunset: | `:city_sunset:` | `1f307` |
+| :bridge_at_night: | `:bridge_at_night:` | `1f309` |
+| :hotsprings: | `:hotsprings:` | `2668` |
+| :carousel_horse: | `:carousel_horse:` | `1f3a0` |
+| :playground_slide: | `:playground_slide:` | `1f6dd` |
+| :ferris_wheel: | `:ferris_wheel:` | `1f3a1` |
+| :roller_coaster: | `:roller_coaster:` | `1f3a2` |
+| :barber: | `:barber:` | `1f488` |
+| :circus_tent: | `:circus_tent:` | `1f3aa` |
+| :steam_locomotive: | `:steam_locomotive:` | `1f682` |
+| :railway_car: | `:railway_car:` | `1f683` |
+| :bullettrain_side: | `:bullettrain_side:` | `1f684` |
+| :bullettrain_front: | `:bullettrain_front:` | `1f685` |
+| :train2: | `:train2:` | `1f686` |
+| :metro: | `:metro:` | `1f687` |
+| :light_rail: | `:light_rail:` | `1f688` |
+| :station: | `:station:` | `1f689` |
+| :tram: | `:tram:` | `1f68a` |
+| :monorail: | `:monorail:` | `1f69d` |
+| :mountain_railway: | `:mountain_railway:` | `1f69e` |
+| :train: | `:train:` | `1f68b` |
+| :bus: | `:bus:` | `1f68c` |
+| :oncoming_bus: | `:oncoming_bus:` | `1f68d` |
+| :trolleybus: | `:trolleybus:` | `1f68e` |
+| :minibus: | `:minibus:` | `1f690` |
+| :ambulance: | `:ambulance:` | `1f691` |
+| :fire_engine: | `:fire_engine:` | `1f692` |
+| :police_car: | `:police_car:` | `1f693` |
+| :oncoming_police_car: | `:oncoming_police_car:` | `1f694` |
+| :taxi: | `:taxi:` | `1f695` |
+| :oncoming_taxi: | `:oncoming_taxi:` | `1f696` |
+| :red_car: | `:red_car:` | `1f697` |
+| :oncoming_automobile: | `:oncoming_automobile:` | `1f698` |
+| :blue_car: | `:blue_car:` | `1f699` |
+| :pickup_truck: | `:pickup_truck:` | `1f6fb` |
+| :truck: | `:truck:` | `1f69a` |
+| :articulated_lorry: | `:articulated_lorry:` | `1f69b` |
+| :tractor: | `:tractor:` | `1f69c` |
+| :race_car: | `:race_car:` | `1f3ce` |
+| :motorcycle: | `:motorcycle:` | `1f3cd` |
+| :motor_scooter: | `:motor_scooter:` | `1f6f5` |
+| :manual_wheelchair: | `:manual_wheelchair:` | `1f9bd` |
+| :motorized_wheelchair: | `:motorized_wheelchair:` | `1f9bc` |
+| :auto_rickshaw: | `:auto_rickshaw:` | `1f6fa` |
+| :bike: | `:bike:` | `1f6b2` |
+| :scooter: | `:scooter:` | `1f6f4` |
+| :skateboard: | `:skateboard:` | `1f6f9` |
+| :roller_skate: | `:roller_skate:` | `1f6fc` |
+| :busstop: | `:busstop:` | `1f68f` |
+| :motorway: | `:motorway:` | `1f6e3` |
+| :railway_track: | `:railway_track:` | `1f6e4` |
+| :oil: | `:oil:` | `1f6e2` |
+| :fuelpump: | `:fuelpump:` | `26fd` |
+| :wheel: | `:wheel:` | `1f6de` |
+| :rotating_light: | `:rotating_light:` | `1f6a8` |
+| :traffic_light: | `:traffic_light:` | `1f6a5` |
+| :vertical_traffic_light: | `:vertical_traffic_light:` | `1f6a6` |
+| :octagonal_sign: | `:octagonal_sign:` | `1f6d1` |
+| :construction: | `:construction:` | `1f6a7` |
+| :anchor: | `:anchor:` | `2693` |
+| :ring_buoy: | `:ring_buoy:` | `1f6df` |
+| :sailboat: | `:sailboat:` | `26f5` |
+| :canoe: | `:canoe:` | `1f6f6` |
+| :speedboat: | `:speedboat:` | `1f6a4` |
+| :cruise_ship: | `:cruise_ship:` | `1f6f3` |
+| :ferry: | `:ferry:` | `26f4` |
+| :motorboat: | `:motorboat:` | `1f6e5` |
+| :ship: | `:ship:` | `1f6a2` |
+| :airplane: | `:airplane:` | `2708` |
+| :airplane_small: | `:airplane_small:` | `1f6e9` |
+| :airplane_departure: | `:airplane_departure:` | `1f6eb` |
+| :airplane_arriving: | `:airplane_arriving:` | `1f6ec` |
+| :parachute: | `:parachute:` | `1fa82` |
+| :seat: | `:seat:` | `1f4ba` |
+| :helicopter: | `:helicopter:` | `1f681` |
+| :suspension_railway: | `:suspension_railway:` | `1f69f` |
+| :mountain_cableway: | `:mountain_cableway:` | `1f6a0` |
+| :aerial_tramway: | `:aerial_tramway:` | `1f6a1` |
+| :satellite_orbital: | `:satellite_orbital:` | `1f6f0` |
+| :rocket: | `:rocket:` | `1f680` |
+| :flying_saucer: | `:flying_saucer:` | `1f6f8` |
+| :bellhop: | `:bellhop:` | `1f6ce` |
+| :luggage: | `:luggage:` | `1f9f3` |
+| :hourglass: | `:hourglass:` | `231b` |
+| :hourglass_flowing_sand: | `:hourglass_flowing_sand:` | `23f3` |
+| :watch: | `:watch:` | `231a` |
+| :alarm_clock: | `:alarm_clock:` | `23f0` |
+| :stopwatch: | `:stopwatch:` | `23f1` |
+| :timer: | `:timer:` | `23f2` |
+| :clock: | `:clock:` | `1f570` |
+| :clock12: | `:clock12:` | `1f55b` |
+| :clock1230: | `:clock1230:` | `1f567` |
+| :clock1: | `:clock1:` | `1f550` |
+| :clock130: | `:clock130:` | `1f55c` |
+| :clock2: | `:clock2:` | `1f551` |
+| :clock230: | `:clock230:` | `1f55d` |
+| :clock3: | `:clock3:` | `1f552` |
+| :clock330: | `:clock330:` | `1f55e` |
+| :clock4: | `:clock4:` | `1f553` |
+| :clock430: | `:clock430:` | `1f55f` |
+| :clock5: | `:clock5:` | `1f554` |
+| :clock530: | `:clock530:` | `1f560` |
+| :clock6: | `:clock6:` | `1f555` |
+| :clock630: | `:clock630:` | `1f561` |
+| :clock7: | `:clock7:` | `1f556` |
+| :clock730: | `:clock730:` | `1f562` |
+| :clock8: | `:clock8:` | `1f557` |
+| :clock830: | `:clock830:` | `1f563` |
+| :clock9: | `:clock9:` | `1f558` |
+| :clock930: | `:clock930:` | `1f564` |
+| :clock10: | `:clock10:` | `1f559` |
+| :clock1030: | `:clock1030:` | `1f565` |
+| :clock11: | `:clock11:` | `1f55a` |
+| :clock1130: | `:clock1130:` | `1f566` |
+| :new_moon: | `:new_moon:` | `1f311` |
+| :waxing_crescent_moon: | `:waxing_crescent_moon:` | `1f312` |
+| :first_quarter_moon: | `:first_quarter_moon:` | `1f313` |
+| :waxing_gibbous_moon: | `:waxing_gibbous_moon:` | `1f314` |
+| :full_moon: | `:full_moon:` | `1f315` |
+| :waning_gibbous_moon: | `:waning_gibbous_moon:` | `1f316` |
+| :last_quarter_moon: | `:last_quarter_moon:` | `1f317` |
+| :waning_crescent_moon: | `:waning_crescent_moon:` | `1f318` |
+| :crescent_moon: | `:crescent_moon:` | `1f319` |
+| :new_moon_with_face: | `:new_moon_with_face:` | `1f31a` |
+| :first_quarter_moon_with_face: | `:first_quarter_moon_with_face:` | `1f31b` |
+| :last_quarter_moon_with_face: | `:last_quarter_moon_with_face:` | `1f31c` |
+| :thermometer: | `:thermometer:` | `1f321` |
+| :sunny: | `:sunny:` | `2600` |
+| :full_moon_with_face: | `:full_moon_with_face:` | `1f31d` |
+| :sun_with_face: | `:sun_with_face:` | `1f31e` |
+| :ringed_planet: | `:ringed_planet:` | `1fa90` |
+| :star: | `:star:` | `2b50` |
+| :star2: | `:star2:` | `1f31f` |
+| :stars: | `:stars:` | `1f320` |
+| :milky_way: | `:milky_way:` | `1f30c` |
+| :cloud: | `:cloud:` | `2601` |
+| :partly_sunny: | `:partly_sunny:` | `26c5` |
+| :thunder_cloud_rain: | `:thunder_cloud_rain:` | `26c8` |
+| :white_sun_small_cloud: | `:white_sun_small_cloud:` | `1f324` |
+| :white_sun_cloud: | `:white_sun_cloud:` | `1f325` |
+| :white_sun_rain_cloud: | `:white_sun_rain_cloud:` | `1f326` |
+| :cloud_rain: | `:cloud_rain:` | `1f327` |
+| :cloud_snow: | `:cloud_snow:` | `1f328` |
+| :cloud_lightning: | `:cloud_lightning:` | `1f329` |
+| :cloud_tornado: | `:cloud_tornado:` | `1f32a` |
+| :fog: | `:fog:` | `1f32b` |
+| :wind_blowing_face: | `:wind_blowing_face:` | `1f32c` |
+| :cyclone: | `:cyclone:` | `1f300` |
+| :rainbow: | `:rainbow:` | `1f308` |
+| :closed_umbrella: | `:closed_umbrella:` | `1f302` |
+| :umbrella2: | `:umbrella2:` | `2602` |
+| :umbrella: | `:umbrella:` | `2614` |
+| :beach_umbrella: | `:beach_umbrella:` | `26f1` |
+| :zap: | `:zap:` | `26a1` |
+| :snowflake: | `:snowflake:` | `2744` |
+| :snowman2: | `:snowman2:` | `2603` |
+| :snowman: | `:snowman:` | `26c4` |
+| :comet: | `:comet:` | `2604` |
+| :fire: | `:fire:` | `1f525` |
+| :droplet: | `:droplet:` | `1f4a7` |
+| :ocean: | `:ocean:` | `1f30a` |
+| :jack_o_lantern: | `:jack_o_lantern:` | `1f383` |
+| :christmas_tree: | `:christmas_tree:` | `1f384` |
+| :fireworks: | `:fireworks:` | `1f386` |
+| :sparkler: | `:sparkler:` | `1f387` |
+| :firecracker: | `:firecracker:` | `1f9e8` |
+| :sparkles: | `:sparkles:` | `2728` |
+| :balloon: | `:balloon:` | `1f388` |
+| :tada: | `:tada:` | `1f389` |
+| :confetti_ball: | `:confetti_ball:` | `1f38a` |
+| :tanabata_tree: | `:tanabata_tree:` | `1f38b` |
+| :bamboo: | `:bamboo:` | `1f38d` |
+| :dolls: | `:dolls:` | `1f38e` |
+| :flags: | `:flags:` | `1f38f` |
+| :wind_chime: | `:wind_chime:` | `1f390` |
+| :rice_scene: | `:rice_scene:` | `1f391` |
+| :red_envelope: | `:red_envelope:` | `1f9e7` |
+| :ribbon: | `:ribbon:` | `1f380` |
+| :gift: | `:gift:` | `1f381` |
+| :reminder_ribbon: | `:reminder_ribbon:` | `1f397` |
+| :tickets: | `:tickets:` | `1f39f` |
+| :ticket: | `:ticket:` | `1f3ab` |
+| :military_medal: | `:military_medal:` | `1f396` |
+| :trophy: | `:trophy:` | `1f3c6` |
+| :medal: | `:medal:` | `1f3c5` |
+| :first_place: | `:first_place:` | `1f947` |
+| :second_place: | `:second_place:` | `1f948` |
+| :third_place: | `:third_place:` | `1f949` |
+| :soccer: | `:soccer:` | `26bd` |
+| :baseball: | `:baseball:` | `26be` |
+| :softball: | `:softball:` | `1f94e` |
+| :basketball: | `:basketball:` | `1f3c0` |
+| :volleyball: | `:volleyball:` | `1f3d0` |
+| :football: | `:football:` | `1f3c8` |
+| :rugby_football: | `:rugby_football:` | `1f3c9` |
+| :tennis: | `:tennis:` | `1f3be` |
+| :flying_disc: | `:flying_disc:` | `1f94f` |
+| :bowling: | `:bowling:` | `1f3b3` |
+| :cricket_game: | `:cricket_game:` | `1f3cf` |
+| :field_hockey: | `:field_hockey:` | `1f3d1` |
+| :hockey: | `:hockey:` | `1f3d2` |
+| :lacrosse: | `:lacrosse:` | `1f94d` |
+| :ping_pong: | `:ping_pong:` | `1f3d3` |
+| :badminton: | `:badminton:` | `1f3f8` |
+| :boxing_glove: | `:boxing_glove:` | `1f94a` |
+| :martial_arts_uniform: | `:martial_arts_uniform:` | `1f94b` |
+| :goal: | `:goal:` | `1f945` |
+| :golf: | `:golf:` | `26f3` |
+| :ice_skate: | `:ice_skate:` | `26f8` |
+| :fishing_pole_and_fish: | `:fishing_pole_and_fish:` | `1f3a3` |
+| :diving_mask: | `:diving_mask:` | `1f93f` |
+| :running_shirt_with_sash: | `:running_shirt_with_sash:` | `1f3bd` |
+| :ski: | `:ski:` | `1f3bf` |
+| :sled: | `:sled:` | `1f6f7` |
+| :curling_stone: | `:curling_stone:` | `1f94c` |
+| :dart: | `:dart:` | `1f3af` |
+| :yo_yo: | `:yo_yo:` | `1fa80` |
+| :kite: | `:kite:` | `1fa81` |
+| :gun: | `:gun:` | `1f52b` |
+| :8ball: | `:8ball:` | `1f3b1` |
+| :crystal_ball: | `:crystal_ball:` | `1f52e` |
+| :magic_wand: | `:magic_wand:` | `1fa84` |
+| :video_game: | `:video_game:` | `1f3ae` |
+| :joystick: | `:joystick:` | `1f579` |
+| :slot_machine: | `:slot_machine:` | `1f3b0` |
+| :game_die: | `:game_die:` | `1f3b2` |
+| :jigsaw: | `:jigsaw:` | `1f9e9` |
+| :teddy_bear: | `:teddy_bear:` | `1f9f8` |
+| :pinata: | `:pinata:` | `1fa85` |
+| :mirror_ball: | `:mirror_ball:` | `1faa9` |
+| :nesting_dolls: | `:nesting_dolls:` | `1fa86` |
+| :spades: | `:spades:` | `2660` |
+| :hearts: | `:hearts:` | `2665` |
+| :diamonds: | `:diamonds:` | `2666` |
+| :clubs: | `:clubs:` | `2663` |
+| :chess_pawn: | `:chess_pawn:` | `265f` |
+| :black_joker: | `:black_joker:` | `1f0cf` |
+| :mahjong: | `:mahjong:` | `1f004` |
+| :flower_playing_cards: | `:flower_playing_cards:` | `1f3b4` |
+| :performing_arts: | `:performing_arts:` | `1f3ad` |
+| :frame_photo: | `:frame_photo:` | `1f5bc` |
+| :art: | `:art:` | `1f3a8` |
+| :thread: | `:thread:` | `1f9f5` |
+| :sewing_needle: | `:sewing_needle:` | `1faa1` |
+| :yarn: | `:yarn:` | `1f9f6` |
+| :knot: | `:knot:` | `1faa2` |
+| :eyeglasses: | `:eyeglasses:` | `1f453` |
+| :dark_sunglasses: | `:dark_sunglasses:` | `1f576` |
+| :goggles: | `:goggles:` | `1f97d` |
+| :lab_coat: | `:lab_coat:` | `1f97c` |
+| :safety_vest: | `:safety_vest:` | `1f9ba` |
+| :necktie: | `:necktie:` | `1f454` |
+| :shirt: | `:shirt:` | `1f455` |
+| :jeans: | `:jeans:` | `1f456` |
+| :scarf: | `:scarf:` | `1f9e3` |
+| :gloves: | `:gloves:` | `1f9e4` |
+| :coat: | `:coat:` | `1f9e5` |
+| :socks: | `:socks:` | `1f9e6` |
+| :dress: | `:dress:` | `1f457` |
+| :kimono: | `:kimono:` | `1f458` |
+| :sari: | `:sari:` | `1f97b` |
+| :one_piece_swimsuit: | `:one_piece_swimsuit:` | `1fa71` |
+| :briefs: | `:briefs:` | `1fa72` |
+| :shorts: | `:shorts:` | `1fa73` |
+| :bikini: | `:bikini:` | `1f459` |
+| :womans_clothes: | `:womans_clothes:` | `1f45a` |
+| :folding_hand_fan: | `:folding_hand_fan:` | `1faad` |
+| :purse: | `:purse:` | `1f45b` |
+| :handbag: | `:handbag:` | `1f45c` |
+| :pouch: | `:pouch:` | `1f45d` |
+| :shopping_bags: | `:shopping_bags:` | `1f6cd` |
+| :school_satchel: | `:school_satchel:` | `1f392` |
+| :thong_sandal: | `:thong_sandal:` | `1fa74` |
+| :mans_shoe: | `:mans_shoe:` | `1f45e` |
+| :athletic_shoe: | `:athletic_shoe:` | `1f45f` |
+| :hiking_boot: | `:hiking_boot:` | `1f97e` |
+| :womans_flat_shoe: | `:womans_flat_shoe:` | `1f97f` |
+| :high_heel: | `:high_heel:` | `1f460` |
+| :sandal: | `:sandal:` | `1f461` |
+| :ballet_shoes: | `:ballet_shoes:` | `1fa70` |
+| :boot: | `:boot:` | `1f462` |
+| :hair_pick: | `:hair_pick:` | `1faae` |
+| :crown: | `:crown:` | `1f451` |
+| :womans_hat: | `:womans_hat:` | `1f452` |
+| :tophat: | `:tophat:` | `1f3a9` |
+| :mortar_board: | `:mortar_board:` | `1f393` |
+| :billed_cap: | `:billed_cap:` | `1f9e2` |
+| :military_helmet: | `:military_helmet:` | `1fa96` |
+| :helmet_with_cross: | `:helmet_with_cross:` | `26d1` |
+| :prayer_beads: | `:prayer_beads:` | `1f4ff` |
+| :lipstick: | `:lipstick:` | `1f484` |
+| :ring: | `:ring:` | `1f48d` |
+| :gem: | `:gem:` | `1f48e` |
+| :mute: | `:mute:` | `1f507` |
+| :speaker: | `:speaker:` | `1f508` |
+| :sound: | `:sound:` | `1f509` |
+| :loud_sound: | `:loud_sound:` | `1f50a` |
+| :loudspeaker: | `:loudspeaker:` | `1f4e2` |
+| :mega: | `:mega:` | `1f4e3` |
+| :postal_horn: | `:postal_horn:` | `1f4ef` |
+| :bell: | `:bell:` | `1f514` |
+| :no_bell: | `:no_bell:` | `1f515` |
+| :musical_score: | `:musical_score:` | `1f3bc` |
+| :musical_note: | `:musical_note:` | `1f3b5` |
+| :notes: | `:notes:` | `1f3b6` |
+| :microphone2: | `:microphone2:` | `1f399` |
+| :level_slider: | `:level_slider:` | `1f39a` |
+| :control_knobs: | `:control_knobs:` | `1f39b` |
+| :microphone: | `:microphone:` | `1f3a4` |
+| :headphones: | `:headphones:` | `1f3a7` |
+| :radio: | `:radio:` | `1f4fb` |
+| :saxophone: | `:saxophone:` | `1f3b7` |
+| :accordion: | `:accordion:` | `1fa97` |
+| :guitar: | `:guitar:` | `1f3b8` |
+| :musical_keyboard: | `:musical_keyboard:` | `1f3b9` |
+| :trumpet: | `:trumpet:` | `1f3ba` |
+| :violin: | `:violin:` | `1f3bb` |
+| :banjo: | `:banjo:` | `1fa95` |
+| :drum: | `:drum:` | `1f941` |
+| :long_drum: | `:long_drum:` | `1fa98` |
+| :maracas: | `:maracas:` | `1fa87` |
+| :flute: | `:flute:` | `1fa88` |
+| :mobile_phone: | `:mobile_phone:` | `1f4f1` |
+| :calling: | `:calling:` | `1f4f2` |
+| :telephone: | `:telephone:` | `260e` |
+| :telephone_receiver: | `:telephone_receiver:` | `1f4de` |
+| :pager: | `:pager:` | `1f4df` |
+| :fax: | `:fax:` | `1f4e0` |
+| :battery: | `:battery:` | `1f50b` |
+| :low_battery: | `:low_battery:` | `1faab` |
+| :electric_plug: | `:electric_plug:` | `1f50c` |
+| :computer: | `:computer:` | `1f4bb` |
+| :desktop: | `:desktop:` | `1f5a5` |
+| :printer: | `:printer:` | `1f5a8` |
+| :keyboard: | `:keyboard:` | `2328` |
+| :mouse_three_button: | `:mouse_three_button:` | `1f5b1` |
+| :trackball: | `:trackball:` | `1f5b2` |
+| :minidisc: | `:minidisc:` | `1f4bd` |
+| :floppy_disk: | `:floppy_disk:` | `1f4be` |
+| :cd: | `:cd:` | `1f4bf` |
+| :dvd: | `:dvd:` | `1f4c0` |
+| :abacus: | `:abacus:` | `1f9ee` |
+| :movie_camera: | `:movie_camera:` | `1f3a5` |
+| :film_frames: | `:film_frames:` | `1f39e` |
+| :projector: | `:projector:` | `1f4fd` |
+| :clapper: | `:clapper:` | `1f3ac` |
+| :tv: | `:tv:` | `1f4fa` |
+| :camera: | `:camera:` | `1f4f7` |
+| :camera_with_flash: | `:camera_with_flash:` | `1f4f8` |
+| :video_camera: | `:video_camera:` | `1f4f9` |
+| :vhs: | `:vhs:` | `1f4fc` |
+| :mag: | `:mag:` | `1f50d` |
+| :mag_right: | `:mag_right:` | `1f50e` |
+| :candle: | `:candle:` | `1f56f` |
+| :bulb: | `:bulb:` | `1f4a1` |
+| :flashlight: | `:flashlight:` | `1f526` |
+| :izakaya_lantern: | `:izakaya_lantern:` | `1f3ee` |
+| :diya_lamp: | `:diya_lamp:` | `1fa94` |
+| :notebook_with_decorative_cover: | `:notebook_with_decorative_cover:` | `1f4d4` |
+| :closed_book: | `:closed_book:` | `1f4d5` |
+| :book: | `:book:` | `1f4d6` |
+| :green_book: | `:green_book:` | `1f4d7` |
+| :blue_book: | `:blue_book:` | `1f4d8` |
+| :orange_book: | `:orange_book:` | `1f4d9` |
+| :books: | `:books:` | `1f4da` |
+| :notebook: | `:notebook:` | `1f4d3` |
+| :ledger: | `:ledger:` | `1f4d2` |
+| :page_with_curl: | `:page_with_curl:` | `1f4c3` |
+| :scroll: | `:scroll:` | `1f4dc` |
+| :page_facing_up: | `:page_facing_up:` | `1f4c4` |
+| :newspaper: | `:newspaper:` | `1f4f0` |
+| :newspaper2: | `:newspaper2:` | `1f5de` |
+| :bookmark_tabs: | `:bookmark_tabs:` | `1f4d1` |
+| :bookmark: | `:bookmark:` | `1f516` |
+| :label: | `:label:` | `1f3f7` |
+| :moneybag: | `:moneybag:` | `1f4b0` |
+| :coin: | `:coin:` | `1fa99` |
+| :yen: | `:yen:` | `1f4b4` |
+| :dollar: | `:dollar:` | `1f4b5` |
+| :euro: | `:euro:` | `1f4b6` |
+| :pound: | `:pound:` | `1f4b7` |
+| :money_with_wings: | `:money_with_wings:` | `1f4b8` |
+| :credit_card: | `:credit_card:` | `1f4b3` |
+| :receipt: | `:receipt:` | `1f9fe` |
+| :chart: | `:chart:` | `1f4b9` |
+| :envelope: | `:envelope:` | `2709` |
+| :e-mail: | `:e-mail:` | `1f4e7` |
+| :incoming_envelope: | `:incoming_envelope:` | `1f4e8` |
+| :envelope_with_arrow: | `:envelope_with_arrow:` | `1f4e9` |
+| :outbox_tray: | `:outbox_tray:` | `1f4e4` |
+| :inbox_tray: | `:inbox_tray:` | `1f4e5` |
+| :package: | `:package:` | `1f4e6` |
+| :mailbox: | `:mailbox:` | `1f4eb` |
+| :mailbox_closed: | `:mailbox_closed:` | `1f4ea` |
+| :mailbox_with_mail: | `:mailbox_with_mail:` | `1f4ec` |
+| :mailbox_with_no_mail: | `:mailbox_with_no_mail:` | `1f4ed` |
+| :postbox: | `:postbox:` | `1f4ee` |
+| :ballot_box: | `:ballot_box:` | `1f5f3` |
+| :pencil2: | `:pencil2:` | `270f` |
+| :black_nib: | `:black_nib:` | `2712` |
+| :pen_fountain: | `:pen_fountain:` | `1f58b` |
+| :pen_ballpoint: | `:pen_ballpoint:` | `1f58a` |
+| :paintbrush: | `:paintbrush:` | `1f58c` |
+| :crayon: | `:crayon:` | `1f58d` |
+| :pencil: | `:pencil:` | `1f4dd` |
+| :briefcase: | `:briefcase:` | `1f4bc` |
+| :file_folder: | `:file_folder:` | `1f4c1` |
+| :open_file_folder: | `:open_file_folder:` | `1f4c2` |
+| :dividers: | `:dividers:` | `1f5c2` |
+| :date: | `:date:` | `1f4c5` |
+| :calendar: | `:calendar:` | `1f4c6` |
+| :notepad_spiral: | `:notepad_spiral:` | `1f5d2` |
+| :calendar_spiral: | `:calendar_spiral:` | `1f5d3` |
+| :card_index: | `:card_index:` | `1f4c7` |
+| :chart_with_upwards_trend: | `:chart_with_upwards_trend:` | `1f4c8` |
+| :chart_with_downwards_trend: | `:chart_with_downwards_trend:` | `1f4c9` |
+| :bar_chart: | `:bar_chart:` | `1f4ca` |
+| :clipboard: | `:clipboard:` | `1f4cb` |
+| :pushpin: | `:pushpin:` | `1f4cc` |
+| :round_pushpin: | `:round_pushpin:` | `1f4cd` |
+| :paperclip: | `:paperclip:` | `1f4ce` |
+| :paperclips: | `:paperclips:` | `1f587` |
+| :straight_ruler: | `:straight_ruler:` | `1f4cf` |
+| :triangular_ruler: | `:triangular_ruler:` | `1f4d0` |
+| :scissors: | `:scissors:` | `2702` |
+| :card_box: | `:card_box:` | `1f5c3` |
+| :file_cabinet: | `:file_cabinet:` | `1f5c4` |
+| :wastebasket: | `:wastebasket:` | `1f5d1` |
+| :lock: | `:lock:` | `1f512` |
+| :unlock: | `:unlock:` | `1f513` |
+| :lock_with_ink_pen: | `:lock_with_ink_pen:` | `1f50f` |
+| :closed_lock_with_key: | `:closed_lock_with_key:` | `1f510` |
+| :key: | `:key:` | `1f511` |
+| :key2: | `:key2:` | `1f5dd` |
+| :hammer: | `:hammer:` | `1f528` |
+| :axe: | `:axe:` | `1fa93` |
+| :pick: | `:pick:` | `26cf` |
+| :hammer_pick: | `:hammer_pick:` | `2692` |
+| :tools: | `:tools:` | `1f6e0` |
+| :dagger: | `:dagger:` | `1f5e1` |
+| :crossed_swords: | `:crossed_swords:` | `2694` |
+| :bomb: | `:bomb:` | `1f4a3` |
+| :boomerang: | `:boomerang:` | `1fa83` |
+| :bow_and_arrow: | `:bow_and_arrow:` | `1f3f9` |
+| :shield: | `:shield:` | `1f6e1` |
+| :carpentry_saw: | `:carpentry_saw:` | `1fa9a` |
+| :wrench: | `:wrench:` | `1f527` |
+| :screwdriver: | `:screwdriver:` | `1fa9b` |
+| :nut_and_bolt: | `:nut_and_bolt:` | `1f529` |
+| :gear: | `:gear:` | `2699` |
+| :compression: | `:compression:` | `1f5dc` |
+| :scales: | `:scales:` | `2696` |
+| :probing_cane: | `:probing_cane:` | `1f9af` |
+| :link: | `:link:` | `1f517` |
+| :chains: | `:chains:` | `26d3` |
+| :hook: | `:hook:` | `1fa9d` |
+| :toolbox: | `:toolbox:` | `1f9f0` |
+| :magnet: | `:magnet:` | `1f9f2` |
+| :ladder: | `:ladder:` | `1fa9c` |
+| :alembic: | `:alembic:` | `2697` |
+| :test_tube: | `:test_tube:` | `1f9ea` |
+| :petri_dish: | `:petri_dish:` | `1f9eb` |
+| :dna: | `:dna:` | `1f9ec` |
+| :microscope: | `:microscope:` | `1f52c` |
+| :telescope: | `:telescope:` | `1f52d` |
+| :satellite: | `:satellite:` | `1f4e1` |
+| :syringe: | `:syringe:` | `1f489` |
+| :drop_of_blood: | `:drop_of_blood:` | `1fa78` |
+| :pill: | `:pill:` | `1f48a` |
+| :adhesive_bandage: | `:adhesive_bandage:` | `1fa79` |
+| :crutch: | `:crutch:` | `1fa7c` |
+| :stethoscope: | `:stethoscope:` | `1fa7a` |
+| :x_ray: | `:x_ray:` | `1fa7b` |
+| :door: | `:door:` | `1f6aa` |
+| :elevator: | `:elevator:` | `1f6d7` |
+| :mirror: | `:mirror:` | `1fa9e` |
+| :window: | `:window:` | `1fa9f` |
+| :bed: | `:bed:` | `1f6cf` |
+| :couch: | `:couch:` | `1f6cb` |
+| :chair: | `:chair:` | `1fa91` |
+| :toilet: | `:toilet:` | `1f6bd` |
+| :plunger: | `:plunger:` | `1faa0` |
+| :shower: | `:shower:` | `1f6bf` |
+| :bathtub: | `:bathtub:` | `1f6c1` |
+| :mouse_trap: | `:mouse_trap:` | `1faa4` |
+| :razor: | `:razor:` | `1fa92` |
+| :squeeze_bottle: | `:squeeze_bottle:` | `1f9f4` |
+| :safety_pin: | `:safety_pin:` | `1f9f7` |
+| :broom: | `:broom:` | `1f9f9` |
+| :basket: | `:basket:` | `1f9fa` |
+| :roll_of_paper: | `:roll_of_paper:` | `1f9fb` |
+| :bucket: | `:bucket:` | `1faa3` |
+| :soap: | `:soap:` | `1f9fc` |
+| :bubbles: | `:bubbles:` | `1fae7` |
+| :toothbrush: | `:toothbrush:` | `1faa5` |
+| :sponge: | `:sponge:` | `1f9fd` |
+| :fire_extinguisher: | `:fire_extinguisher:` | `1f9ef` |
+| :shopping_cart: | `:shopping_cart:` | `1f6d2` |
+| :smoking: | `:smoking:` | `1f6ac` |
+| :coffin: | `:coffin:` | `26b0` |
+| :headstone: | `:headstone:` | `1faa6` |
+| :urn: | `:urn:` | `26b1` |
+| :nazar_amulet: | `:nazar_amulet:` | `1f9ff` |
+| :hamsa: | `:hamsa:` | `1faac` |
+| :moyai: | `:moyai:` | `1f5ff` |
+| :placard: | `:placard:` | `1faa7` |
+| :identification_card: | `:identification_card:` | `1faaa` |
+| :atm: | `:atm:` | `1f3e7` |
+| :put_litter_in_its_place: | `:put_litter_in_its_place:` | `1f6ae` |
+| :potable_water: | `:potable_water:` | `1f6b0` |
+| :wheelchair: | `:wheelchair:` | `267f` |
+| :mens: | `:mens:` | `1f6b9` |
+| :womens: | `:womens:` | `1f6ba` |
+| :restroom: | `:restroom:` | `1f6bb` |
+| :baby_symbol: | `:baby_symbol:` | `1f6bc` |
+| :wc: | `:wc:` | `1f6be` |
+| :passport_control: | `:passport_control:` | `1f6c2` |
+| :customs: | `:customs:` | `1f6c3` |
+| :baggage_claim: | `:baggage_claim:` | `1f6c4` |
+| :left_luggage: | `:left_luggage:` | `1f6c5` |
+| :warning: | `:warning:` | `26a0` |
+| :children_crossing: | `:children_crossing:` | `1f6b8` |
+| :no_entry: | `:no_entry:` | `26d4` |
+| :no_entry_sign: | `:no_entry_sign:` | `1f6ab` |
+| :no_bicycles: | `:no_bicycles:` | `1f6b3` |
+| :no_smoking: | `:no_smoking:` | `1f6ad` |
+| :do_not_litter: | `:do_not_litter:` | `1f6af` |
+| :non-potable_water: | `:non-potable_water:` | `1f6b1` |
+| :no_pedestrians: | `:no_pedestrians:` | `1f6b7` |
+| :no_mobile_phones: | `:no_mobile_phones:` | `1f4f5` |
+| :underage: | `:underage:` | `1f51e` |
+| :radioactive: | `:radioactive:` | `2622` |
+| :biohazard: | `:biohazard:` | `2623` |
+| :arrow_up: | `:arrow_up:` | `2b06` |
+| :arrow_upper_right: | `:arrow_upper_right:` | `2197` |
+| :arrow_right: | `:arrow_right:` | `27a1` |
+| :arrow_lower_right: | `:arrow_lower_right:` | `2198` |
+| :arrow_down: | `:arrow_down:` | `2b07` |
+| :arrow_lower_left: | `:arrow_lower_left:` | `2199` |
+| :arrow_left: | `:arrow_left:` | `2b05` |
+| :arrow_upper_left: | `:arrow_upper_left:` | `2196` |
+| :arrow_up_down: | `:arrow_up_down:` | `2195` |
+| :left_right_arrow: | `:left_right_arrow:` | `2194` |
+| :leftwards_arrow_with_hook: | `:leftwards_arrow_with_hook:` | `21a9` |
+| :arrow_right_hook: | `:arrow_right_hook:` | `21aa` |
+| :arrow_heading_up: | `:arrow_heading_up:` | `2934` |
+| :arrow_heading_down: | `:arrow_heading_down:` | `2935` |
+| :arrows_clockwise: | `:arrows_clockwise:` | `1f503` |
+| :arrows_counterclockwise: | `:arrows_counterclockwise:` | `1f504` |
+| :back: | `:back:` | `1f519` |
+| :end: | `:end:` | `1f51a` |
+| :on: | `:on:` | `1f51b` |
+| :soon: | `:soon:` | `1f51c` |
+| :top: | `:top:` | `1f51d` |
+| :place_of_worship: | `:place_of_worship:` | `1f6d0` |
+| :atom: | `:atom:` | `269b` |
+| :om_symbol: | `:om_symbol:` | `1f549` |
+| :star_of_david: | `:star_of_david:` | `2721` |
+| :wheel_of_dharma: | `:wheel_of_dharma:` | `2638` |
+| :yin_yang: | `:yin_yang:` | `262f` |
+| :cross: | `:cross:` | `271d` |
+| :orthodox_cross: | `:orthodox_cross:` | `2626` |
+| :star_and_crescent: | `:star_and_crescent:` | `262a` |
+| :peace: | `:peace:` | `262e` |
+| :menorah: | `:menorah:` | `1f54e` |
+| :six_pointed_star: | `:six_pointed_star:` | `1f52f` |
+| :khanda: | `:khanda:` | `1faaf` |
+| :aries: | `:aries:` | `2648` |
+| :taurus: | `:taurus:` | `2649` |
+| :gemini: | `:gemini:` | `264a` |
+| :cancer: | `:cancer:` | `264b` |
+| :leo: | `:leo:` | `264c` |
+| :virgo: | `:virgo:` | `264d` |
+| :libra: | `:libra:` | `264e` |
+| :scorpius: | `:scorpius:` | `264f` |
+| :sagittarius: | `:sagittarius:` | `2650` |
+| :capricorn: | `:capricorn:` | `2651` |
+| :aquarius: | `:aquarius:` | `2652` |
+| :pisces: | `:pisces:` | `2653` |
+| :ophiuchus: | `:ophiuchus:` | `26ce` |
+| :twisted_rightwards_arrows: | `:twisted_rightwards_arrows:` | `1f500` |
+| :repeat: | `:repeat:` | `1f501` |
+| :repeat_one: | `:repeat_one:` | `1f502` |
+| :arrow_forward: | `:arrow_forward:` | `25b6` |
+| :fast_forward: | `:fast_forward:` | `23e9` |
+| :track_next: | `:track_next:` | `23ed` |
+| :play_pause: | `:play_pause:` | `23ef` |
+| :arrow_backward: | `:arrow_backward:` | `25c0` |
+| :rewind: | `:rewind:` | `23ea` |
+| :track_previous: | `:track_previous:` | `23ee` |
+| :arrow_up_small: | `:arrow_up_small:` | `1f53c` |
+| :arrow_double_up: | `:arrow_double_up:` | `23eb` |
+| :arrow_down_small: | `:arrow_down_small:` | `1f53d` |
+| :arrow_double_down: | `:arrow_double_down:` | `23ec` |
+| :pause_button: | `:pause_button:` | `23f8` |
+| :stop_button: | `:stop_button:` | `23f9` |
+| :record_button: | `:record_button:` | `23fa` |
+| :eject: | `:eject:` | `23cf` |
+| :cinema: | `:cinema:` | `1f3a6` |
+| :low_brightness: | `:low_brightness:` | `1f505` |
+| :high_brightness: | `:high_brightness:` | `1f506` |
+| :signal_strength: | `:signal_strength:` | `1f4f6` |
+| :wireless: | `:wireless:` | `1f6dc` |
+| :vibration_mode: | `:vibration_mode:` | `1f4f3` |
+| :mobile_phone_off: | `:mobile_phone_off:` | `1f4f4` |
+| :female_sign: | `:female_sign:` | `2640` |
+| :male_sign: | `:male_sign:` | `2642` |
+| :transgender_symbol: | `:transgender_symbol:` | `26a7` |
+| :heavy_multiplication_x: | `:heavy_multiplication_x:` | `2716` |
+| :heavy_plus_sign: | `:heavy_plus_sign:` | `2795` |
+| :heavy_minus_sign: | `:heavy_minus_sign:` | `2796` |
+| :heavy_division_sign: | `:heavy_division_sign:` | `2797` |
+| :heavy_equals_sign: | `:heavy_equals_sign:` | `1f7f0` |
+| :infinity: | `:infinity:` | `267e` |
+| :bangbang: | `:bangbang:` | `203c` |
+| :interrobang: | `:interrobang:` | `2049` |
+| :question: | `:question:` | `2753` |
+| :grey_question: | `:grey_question:` | `2754` |
+| :grey_exclamation: | `:grey_exclamation:` | `2755` |
+| :exclamation: | `:exclamation:` | `2757` |
+| :wavy_dash: | `:wavy_dash:` | `3030` |
+| :currency_exchange: | `:currency_exchange:` | `1f4b1` |
+| :heavy_dollar_sign: | `:heavy_dollar_sign:` | `1f4b2` |
+| :medical_symbol: | `:medical_symbol:` | `2695` |
+| :recycle: | `:recycle:` | `267b` |
+| :fleur-de-lis: | `:fleur-de-lis:` | `269c` |
+| :trident: | `:trident:` | `1f531` |
+| :name_badge: | `:name_badge:` | `1f4db` |
+| :beginner: | `:beginner:` | `1f530` |
+| :o: | `:o:` | `2b55` |
+| :white_check_mark: | `:white_check_mark:` | `2705` |
+| :ballot_box_with_check: | `:ballot_box_with_check:` | `2611` |
+| :heavy_check_mark: | `:heavy_check_mark:` | `2714` |
+| :x: | `:x:` | `274c` |
+| :negative_squared_cross_mark: | `:negative_squared_cross_mark:` | `274e` |
+| :curly_loop: | `:curly_loop:` | `27b0` |
+| :loop: | `:loop:` | `27bf` |
+| :part_alternation_mark: | `:part_alternation_mark:` | `303d` |
+| :eight_spoked_asterisk: | `:eight_spoked_asterisk:` | `2733` |
+| :eight_pointed_black_star: | `:eight_pointed_black_star:` | `2734` |
+| :sparkle: | `:sparkle:` | `2747` |
+| :copyright: | `:copyright:` | `a9` |
+| :registered: | `:registered:` | `ae` |
+| :tm: | `:tm:` | `2122` |
+| :hash: | `:hash:` | `23-20e3` |
+| :asterisk: | `:asterisk:` | `2a-20e3` |
+| :zero: | `:zero:` | `30-20e3` |
+| :one: | `:one:` | `31-20e3` |
+| :two: | `:two:` | `32-20e3` |
+| :three: | `:three:` | `33-20e3` |
+| :four: | `:four:` | `34-20e3` |
+| :five: | `:five:` | `35-20e3` |
+| :six: | `:six:` | `36-20e3` |
+| :seven: | `:seven:` | `37-20e3` |
+| :eight: | `:eight:` | `38-20e3` |
+| :nine: | `:nine:` | `39-20e3` |
+| :keycap_ten: | `:keycap_ten:` | `1f51f` |
+| :capital_abcd: | `:capital_abcd:` | `1f520` |
+| :abcd: | `:abcd:` | `1f521` |
+| :1234: | `:1234:` | `1f522` |
+| :symbols: | `:symbols:` | `1f523` |
+| :abc: | `:abc:` | `1f524` |
+| :a: | `:a:` | `1f170` |
+| :ab: | `:ab:` | `1f18e` |
+| :b: | `:b:` | `1f171` |
+| :cl: | `:cl:` | `1f191` |
+| :cool: | `:cool:` | `1f192` |
+| :free: | `:free:` | `1f193` |
+| :information_source: | `:information_source:` | `2139` |
+| :id: | `:id:` | `1f194` |
+| :m: | `:m:` | `24c2` |
+| :new: | `:new:` | `1f195` |
+| :ng: | `:ng:` | `1f196` |
+| :o2: | `:o2:` | `1f17e` |
+| :ok: | `:ok:` | `1f197` |
+| :parking: | `:parking:` | `1f17f` |
+| :sos: | `:sos:` | `1f198` |
+| :up: | `:up:` | `1f199` |
+| :vs: | `:vs:` | `1f19a` |
+| :koko: | `:koko:` | `1f201` |
+| :sa: | `:sa:` | `1f202` |
+| :u6708: | `:u6708:` | `1f237` |
+| :u6709: | `:u6709:` | `1f236` |
+| :u6307: | `:u6307:` | `1f22f` |
+| :ideograph_advantage: | `:ideograph_advantage:` | `1f250` |
+| :u5272: | `:u5272:` | `1f239` |
+| :u7121: | `:u7121:` | `1f21a` |
+| :u7981: | `:u7981:` | `1f232` |
+| :accept: | `:accept:` | `1f251` |
+| :u7533: | `:u7533:` | `1f238` |
+| :u5408: | `:u5408:` | `1f234` |
+| :u7a7a: | `:u7a7a:` | `1f233` |
+| :congratulations: | `:congratulations:` | `3297` |
+| :secret: | `:secret:` | `3299` |
+| :u55b6: | `:u55b6:` | `1f23a` |
+| :u6e80: | `:u6e80:` | `1f235` |
+| :red_circle: | `:red_circle:` | `1f534` |
+| :orange_circle: | `:orange_circle:` | `1f7e0` |
+| :yellow_circle: | `:yellow_circle:` | `1f7e1` |
+| :green_circle: | `:green_circle:` | `1f7e2` |
+| :blue_circle: | `:blue_circle:` | `1f535` |
+| :purple_circle: | `:purple_circle:` | `1f7e3` |
+| :brown_circle: | `:brown_circle:` | `1f7e4` |
+| :black_circle: | `:black_circle:` | `26ab` |
+| :white_circle: | `:white_circle:` | `26aa` |
+| :red_square: | `:red_square:` | `1f7e5` |
+| :orange_square: | `:orange_square:` | `1f7e7` |
+| :yellow_square: | `:yellow_square:` | `1f7e8` |
+| :green_square: | `:green_square:` | `1f7e9` |
+| :blue_square: | `:blue_square:` | `1f7e6` |
+| :purple_square: | `:purple_square:` | `1f7ea` |
+| :brown_square: | `:brown_square:` | `1f7eb` |
+| :black_large_square: | `:black_large_square:` | `2b1b` |
+| :white_large_square: | `:white_large_square:` | `2b1c` |
+| :black_medium_square: | `:black_medium_square:` | `25fc` |
+| :white_medium_square: | `:white_medium_square:` | `25fb` |
+| :black_medium_small_square: | `:black_medium_small_square:` | `25fe` |
+| :white_medium_small_square: | `:white_medium_small_square:` | `25fd` |
+| :black_small_square: | `:black_small_square:` | `25aa` |
+| :white_small_square: | `:white_small_square:` | `25ab` |
+| :large_orange_diamond: | `:large_orange_diamond:` | `1f536` |
+| :large_blue_diamond: | `:large_blue_diamond:` | `1f537` |
+| :small_orange_diamond: | `:small_orange_diamond:` | `1f538` |
+| :small_blue_diamond: | `:small_blue_diamond:` | `1f539` |
+| :small_red_triangle: | `:small_red_triangle:` | `1f53a` |
+| :small_red_triangle_down: | `:small_red_triangle_down:` | `1f53b` |
+| :diamond_shape_with_a_dot_inside: | `:diamond_shape_with_a_dot_inside:` | `1f4a0` |
+| :radio_button: | `:radio_button:` | `1f518` |
+| :white_square_button: | `:white_square_button:` | `1f533` |
+| :black_square_button: | `:black_square_button:` | `1f532` |
+| :checkered_flag: | `:checkered_flag:` | `1f3c1` |
+| :triangular_flag_on_post: | `:triangular_flag_on_post:` | `1f6a9` |
+| :crossed_flags: | `:crossed_flags:` | `1f38c` |
+| :flag_black: | `:flag_black:` | `1f3f4` |
+| :flag_white: | `:flag_white:` | `1f3f3` |
+| :rainbow_flag: | `:rainbow_flag:` | `1f3f3-fe0f-200d-1f308` |
+| :transgender_flag: | `:transgender_flag:` | `1f3f3-fe0f-200d-26a7-fe0f` |
+| :pirate_flag: | `:pirate_flag:` | `1f3f4-200d-2620-fe0f` |
+| :flag_ac: | `:flag_ac:` | `1f1e6-1f1e8` |
+| :flag_ad: | `:flag_ad:` | `1f1e6-1f1e9` |
+| :flag_ae: | `:flag_ae:` | `1f1e6-1f1ea` |
+| :flag_af: | `:flag_af:` | `1f1e6-1f1eb` |
+| :flag_ag: | `:flag_ag:` | `1f1e6-1f1ec` |
+| :flag_ai: | `:flag_ai:` | `1f1e6-1f1ee` |
+| :flag_al: | `:flag_al:` | `1f1e6-1f1f1` |
+| :flag_am: | `:flag_am:` | `1f1e6-1f1f2` |
+| :flag_ao: | `:flag_ao:` | `1f1e6-1f1f4` |
+| :flag_aq: | `:flag_aq:` | `1f1e6-1f1f6` |
+| :flag_ar: | `:flag_ar:` | `1f1e6-1f1f7` |
+| :flag_as: | `:flag_as:` | `1f1e6-1f1f8` |
+| :flag_at: | `:flag_at:` | `1f1e6-1f1f9` |
+| :flag_au: | `:flag_au:` | `1f1e6-1f1fa` |
+| :flag_aw: | `:flag_aw:` | `1f1e6-1f1fc` |
+| :flag_ax: | `:flag_ax:` | `1f1e6-1f1fd` |
+| :flag_az: | `:flag_az:` | `1f1e6-1f1ff` |
+| :flag_ba: | `:flag_ba:` | `1f1e7-1f1e6` |
+| :flag_bb: | `:flag_bb:` | `1f1e7-1f1e7` |
+| :flag_bd: | `:flag_bd:` | `1f1e7-1f1e9` |
+| :flag_be: | `:flag_be:` | `1f1e7-1f1ea` |
+| :flag_bf: | `:flag_bf:` | `1f1e7-1f1eb` |
+| :flag_bg: | `:flag_bg:` | `1f1e7-1f1ec` |
+| :flag_bh: | `:flag_bh:` | `1f1e7-1f1ed` |
+| :flag_bi: | `:flag_bi:` | `1f1e7-1f1ee` |
+| :flag_bj: | `:flag_bj:` | `1f1e7-1f1ef` |
+| :flag_bl: | `:flag_bl:` | `1f1e7-1f1f1` |
+| :flag_bm: | `:flag_bm:` | `1f1e7-1f1f2` |
+| :flag_bn: | `:flag_bn:` | `1f1e7-1f1f3` |
+| :flag_bo: | `:flag_bo:` | `1f1e7-1f1f4` |
+| :flag_bq: | `:flag_bq:` | `1f1e7-1f1f6` |
+| :flag_br: | `:flag_br:` | `1f1e7-1f1f7` |
+| :flag_bs: | `:flag_bs:` | `1f1e7-1f1f8` |
+| :flag_bt: | `:flag_bt:` | `1f1e7-1f1f9` |
+| :flag_bv: | `:flag_bv:` | `1f1e7-1f1fb` |
+| :flag_bw: | `:flag_bw:` | `1f1e7-1f1fc` |
+| :flag_by: | `:flag_by:` | `1f1e7-1f1fe` |
+| :flag_bz: | `:flag_bz:` | `1f1e7-1f1ff` |
+| :flag_ca: | `:flag_ca:` | `1f1e8-1f1e6` |
+| :flag_cc: | `:flag_cc:` | `1f1e8-1f1e8` |
+| :flag_cd: | `:flag_cd:` | `1f1e8-1f1e9` |
+| :flag_cf: | `:flag_cf:` | `1f1e8-1f1eb` |
+| :flag_cg: | `:flag_cg:` | `1f1e8-1f1ec` |
+| :flag_ch: | `:flag_ch:` | `1f1e8-1f1ed` |
+| :flag_ci: | `:flag_ci:` | `1f1e8-1f1ee` |
+| :flag_ck: | `:flag_ck:` | `1f1e8-1f1f0` |
+| :flag_cl: | `:flag_cl:` | `1f1e8-1f1f1` |
+| :flag_cm: | `:flag_cm:` | `1f1e8-1f1f2` |
+| :flag_cn: | `:flag_cn:` | `1f1e8-1f1f3` |
+| :flag_co: | `:flag_co:` | `1f1e8-1f1f4` |
+| :flag_cp: | `:flag_cp:` | `1f1e8-1f1f5` |
+| :flag_cr: | `:flag_cr:` | `1f1e8-1f1f7` |
+| :flag_cu: | `:flag_cu:` | `1f1e8-1f1fa` |
+| :flag_cv: | `:flag_cv:` | `1f1e8-1f1fb` |
+| :flag_cw: | `:flag_cw:` | `1f1e8-1f1fc` |
+| :flag_cx: | `:flag_cx:` | `1f1e8-1f1fd` |
+| :flag_cy: | `:flag_cy:` | `1f1e8-1f1fe` |
+| :flag_cz: | `:flag_cz:` | `1f1e8-1f1ff` |
+| :flag_de: | `:flag_de:` | `1f1e9-1f1ea` |
+| :flag_dg: | `:flag_dg:` | `1f1e9-1f1ec` |
+| :flag_dj: | `:flag_dj:` | `1f1e9-1f1ef` |
+| :flag_dk: | `:flag_dk:` | `1f1e9-1f1f0` |
+| :flag_dm: | `:flag_dm:` | `1f1e9-1f1f2` |
+| :flag_do: | `:flag_do:` | `1f1e9-1f1f4` |
+| :flag_dz: | `:flag_dz:` | `1f1e9-1f1ff` |
+| :flag_ea: | `:flag_ea:` | `1f1ea-1f1e6` |
+| :flag_ec: | `:flag_ec:` | `1f1ea-1f1e8` |
+| :flag_ee: | `:flag_ee:` | `1f1ea-1f1ea` |
+| :flag_eg: | `:flag_eg:` | `1f1ea-1f1ec` |
+| :flag_eh: | `:flag_eh:` | `1f1ea-1f1ed` |
+| :flag_er: | `:flag_er:` | `1f1ea-1f1f7` |
+| :flag_es: | `:flag_es:` | `1f1ea-1f1f8` |
+| :flag_et: | `:flag_et:` | `1f1ea-1f1f9` |
+| :flag_eu: | `:flag_eu:` | `1f1ea-1f1fa` |
+| :flag_fi: | `:flag_fi:` | `1f1eb-1f1ee` |
+| :flag_fj: | `:flag_fj:` | `1f1eb-1f1ef` |
+| :flag_fk: | `:flag_fk:` | `1f1eb-1f1f0` |
+| :flag_fm: | `:flag_fm:` | `1f1eb-1f1f2` |
+| :flag_fo: | `:flag_fo:` | `1f1eb-1f1f4` |
+| :flag_fr: | `:flag_fr:` | `1f1eb-1f1f7` |
+| :flag_ga: | `:flag_ga:` | `1f1ec-1f1e6` |
+| :flag_gb: | `:flag_gb:` | `1f1ec-1f1e7` |
+| :flag_gd: | `:flag_gd:` | `1f1ec-1f1e9` |
+| :flag_ge: | `:flag_ge:` | `1f1ec-1f1ea` |
+| :flag_gf: | `:flag_gf:` | `1f1ec-1f1eb` |
+| :flag_gg: | `:flag_gg:` | `1f1ec-1f1ec` |
+| :flag_gh: | `:flag_gh:` | `1f1ec-1f1ed` |
+| :flag_gi: | `:flag_gi:` | `1f1ec-1f1ee` |
+| :flag_gl: | `:flag_gl:` | `1f1ec-1f1f1` |
+| :flag_gm: | `:flag_gm:` | `1f1ec-1f1f2` |
+| :flag_gn: | `:flag_gn:` | `1f1ec-1f1f3` |
+| :flag_gp: | `:flag_gp:` | `1f1ec-1f1f5` |
+| :flag_gq: | `:flag_gq:` | `1f1ec-1f1f6` |
+| :flag_gr: | `:flag_gr:` | `1f1ec-1f1f7` |
+| :flag_gs: | `:flag_gs:` | `1f1ec-1f1f8` |
+| :flag_gt: | `:flag_gt:` | `1f1ec-1f1f9` |
+| :flag_gu: | `:flag_gu:` | `1f1ec-1f1fa` |
+| :flag_gw: | `:flag_gw:` | `1f1ec-1f1fc` |
+| :flag_gy: | `:flag_gy:` | `1f1ec-1f1fe` |
+| :flag_hk: | `:flag_hk:` | `1f1ed-1f1f0` |
+| :flag_hm: | `:flag_hm:` | `1f1ed-1f1f2` |
+| :flag_hn: | `:flag_hn:` | `1f1ed-1f1f3` |
+| :flag_hr: | `:flag_hr:` | `1f1ed-1f1f7` |
+| :flag_ht: | `:flag_ht:` | `1f1ed-1f1f9` |
+| :flag_hu: | `:flag_hu:` | `1f1ed-1f1fa` |
+| :flag_ic: | `:flag_ic:` | `1f1ee-1f1e8` |
+| :flag_id: | `:flag_id:` | `1f1ee-1f1e9` |
+| :flag_ie: | `:flag_ie:` | `1f1ee-1f1ea` |
+| :flag_il: | `:flag_il:` | `1f1ee-1f1f1` |
+| :flag_im: | `:flag_im:` | `1f1ee-1f1f2` |
+| :flag_in: | `:flag_in:` | `1f1ee-1f1f3` |
+| :flag_io: | `:flag_io:` | `1f1ee-1f1f4` |
+| :flag_iq: | `:flag_iq:` | `1f1ee-1f1f6` |
+| :flag_ir: | `:flag_ir:` | `1f1ee-1f1f7` |
+| :flag_is: | `:flag_is:` | `1f1ee-1f1f8` |
+| :flag_it: | `:flag_it:` | `1f1ee-1f1f9` |
+| :flag_je: | `:flag_je:` | `1f1ef-1f1ea` |
+| :flag_jm: | `:flag_jm:` | `1f1ef-1f1f2` |
+| :flag_jo: | `:flag_jo:` | `1f1ef-1f1f4` |
+| :flag_jp: | `:flag_jp:` | `1f1ef-1f1f5` |
+| :flag_ke: | `:flag_ke:` | `1f1f0-1f1ea` |
+| :flag_kg: | `:flag_kg:` | `1f1f0-1f1ec` |
+| :flag_kh: | `:flag_kh:` | `1f1f0-1f1ed` |
+| :flag_ki: | `:flag_ki:` | `1f1f0-1f1ee` |
+| :flag_km: | `:flag_km:` | `1f1f0-1f1f2` |
+| :flag_kn: | `:flag_kn:` | `1f1f0-1f1f3` |
+| :flag_kp: | `:flag_kp:` | `1f1f0-1f1f5` |
+| :flag_kr: | `:flag_kr:` | `1f1f0-1f1f7` |
+| :flag_kw: | `:flag_kw:` | `1f1f0-1f1fc` |
+| :flag_ky: | `:flag_ky:` | `1f1f0-1f1fe` |
+| :flag_kz: | `:flag_kz:` | `1f1f0-1f1ff` |
+| :flag_la: | `:flag_la:` | `1f1f1-1f1e6` |
+| :flag_lb: | `:flag_lb:` | `1f1f1-1f1e7` |
+| :flag_lc: | `:flag_lc:` | `1f1f1-1f1e8` |
+| :flag_li: | `:flag_li:` | `1f1f1-1f1ee` |
+| :flag_lk: | `:flag_lk:` | `1f1f1-1f1f0` |
+| :flag_lr: | `:flag_lr:` | `1f1f1-1f1f7` |
+| :flag_ls: | `:flag_ls:` | `1f1f1-1f1f8` |
+| :flag_lt: | `:flag_lt:` | `1f1f1-1f1f9` |
+| :flag_lu: | `:flag_lu:` | `1f1f1-1f1fa` |
+| :flag_lv: | `:flag_lv:` | `1f1f1-1f1fb` |
+| :flag_ly: | `:flag_ly:` | `1f1f1-1f1fe` |
+| :flag_ma: | `:flag_ma:` | `1f1f2-1f1e6` |
+| :flag_mc: | `:flag_mc:` | `1f1f2-1f1e8` |
+| :flag_md: | `:flag_md:` | `1f1f2-1f1e9` |
+| :flag_me: | `:flag_me:` | `1f1f2-1f1ea` |
+| :flag_mf: | `:flag_mf:` | `1f1f2-1f1eb` |
+| :flag_mg: | `:flag_mg:` | `1f1f2-1f1ec` |
+| :flag_mh: | `:flag_mh:` | `1f1f2-1f1ed` |
+| :flag_mk: | `:flag_mk:` | `1f1f2-1f1f0` |
+| :flag_ml: | `:flag_ml:` | `1f1f2-1f1f1` |
+| :flag_mm: | `:flag_mm:` | `1f1f2-1f1f2` |
+| :flag_mn: | `:flag_mn:` | `1f1f2-1f1f3` |
+| :flag_mo: | `:flag_mo:` | `1f1f2-1f1f4` |
+| :flag_mp: | `:flag_mp:` | `1f1f2-1f1f5` |
+| :flag_mq: | `:flag_mq:` | `1f1f2-1f1f6` |
+| :flag_mr: | `:flag_mr:` | `1f1f2-1f1f7` |
+| :flag_ms: | `:flag_ms:` | `1f1f2-1f1f8` |
+| :flag_mt: | `:flag_mt:` | `1f1f2-1f1f9` |
+| :flag_mu: | `:flag_mu:` | `1f1f2-1f1fa` |
+| :flag_mv: | `:flag_mv:` | `1f1f2-1f1fb` |
+| :flag_mw: | `:flag_mw:` | `1f1f2-1f1fc` |
+| :flag_mx: | `:flag_mx:` | `1f1f2-1f1fd` |
+| :flag_my: | `:flag_my:` | `1f1f2-1f1fe` |
+| :flag_mz: | `:flag_mz:` | `1f1f2-1f1ff` |
+| :flag_na: | `:flag_na:` | `1f1f3-1f1e6` |
+| :flag_nc: | `:flag_nc:` | `1f1f3-1f1e8` |
+| :flag_ne: | `:flag_ne:` | `1f1f3-1f1ea` |
+| :flag_nf: | `:flag_nf:` | `1f1f3-1f1eb` |
+| :flag_ng: | `:flag_ng:` | `1f1f3-1f1ec` |
+| :flag_ni: | `:flag_ni:` | `1f1f3-1f1ee` |
+| :flag_nl: | `:flag_nl:` | `1f1f3-1f1f1` |
+| :flag_no: | `:flag_no:` | `1f1f3-1f1f4` |
+| :flag_np: | `:flag_np:` | `1f1f3-1f1f5` |
+| :flag_nr: | `:flag_nr:` | `1f1f3-1f1f7` |
+| :flag_nu: | `:flag_nu:` | `1f1f3-1f1fa` |
+| :flag_nz: | `:flag_nz:` | `1f1f3-1f1ff` |
+| :flag_om: | `:flag_om:` | `1f1f4-1f1f2` |
+| :flag_pa: | `:flag_pa:` | `1f1f5-1f1e6` |
+| :flag_pe: | `:flag_pe:` | `1f1f5-1f1ea` |
+| :flag_pf: | `:flag_pf:` | `1f1f5-1f1eb` |
+| :flag_pg: | `:flag_pg:` | `1f1f5-1f1ec` |
+| :flag_ph: | `:flag_ph:` | `1f1f5-1f1ed` |
+| :flag_pk: | `:flag_pk:` | `1f1f5-1f1f0` |
+| :flag_pl: | `:flag_pl:` | `1f1f5-1f1f1` |
+| :flag_pm: | `:flag_pm:` | `1f1f5-1f1f2` |
+| :flag_pn: | `:flag_pn:` | `1f1f5-1f1f3` |
+| :flag_pr: | `:flag_pr:` | `1f1f5-1f1f7` |
+| :flag_ps: | `:flag_ps:` | `1f1f5-1f1f8` |
+| :flag_pt: | `:flag_pt:` | `1f1f5-1f1f9` |
+| :flag_pw: | `:flag_pw:` | `1f1f5-1f1fc` |
+| :flag_py: | `:flag_py:` | `1f1f5-1f1fe` |
+| :flag_qa: | `:flag_qa:` | `1f1f6-1f1e6` |
+| :flag_re: | `:flag_re:` | `1f1f7-1f1ea` |
+| :flag_ro: | `:flag_ro:` | `1f1f7-1f1f4` |
+| :flag_rs: | `:flag_rs:` | `1f1f7-1f1f8` |
+| :flag_ru: | `:flag_ru:` | `1f1f7-1f1fa` |
+| :flag_rw: | `:flag_rw:` | `1f1f7-1f1fc` |
+| :flag_sa: | `:flag_sa:` | `1f1f8-1f1e6` |
+| :flag_sb: | `:flag_sb:` | `1f1f8-1f1e7` |
+| :flag_sc: | `:flag_sc:` | `1f1f8-1f1e8` |
+| :flag_sd: | `:flag_sd:` | `1f1f8-1f1e9` |
+| :flag_se: | `:flag_se:` | `1f1f8-1f1ea` |
+| :flag_sg: | `:flag_sg:` | `1f1f8-1f1ec` |
+| :flag_sh: | `:flag_sh:` | `1f1f8-1f1ed` |
+| :flag_si: | `:flag_si:` | `1f1f8-1f1ee` |
+| :flag_sj: | `:flag_sj:` | `1f1f8-1f1ef` |
+| :flag_sk: | `:flag_sk:` | `1f1f8-1f1f0` |
+| :flag_sl: | `:flag_sl:` | `1f1f8-1f1f1` |
+| :flag_sm: | `:flag_sm:` | `1f1f8-1f1f2` |
+| :flag_sn: | `:flag_sn:` | `1f1f8-1f1f3` |
+| :flag_so: | `:flag_so:` | `1f1f8-1f1f4` |
+| :flag_sr: | `:flag_sr:` | `1f1f8-1f1f7` |
+| :flag_ss: | `:flag_ss:` | `1f1f8-1f1f8` |
+| :flag_st: | `:flag_st:` | `1f1f8-1f1f9` |
+| :flag_sv: | `:flag_sv:` | `1f1f8-1f1fb` |
+| :flag_sx: | `:flag_sx:` | `1f1f8-1f1fd` |
+| :flag_sy: | `:flag_sy:` | `1f1f8-1f1fe` |
+| :flag_sz: | `:flag_sz:` | `1f1f8-1f1ff` |
+| :flag_ta: | `:flag_ta:` | `1f1f9-1f1e6` |
+| :flag_tc: | `:flag_tc:` | `1f1f9-1f1e8` |
+| :flag_td: | `:flag_td:` | `1f1f9-1f1e9` |
+| :flag_tf: | `:flag_tf:` | `1f1f9-1f1eb` |
+| :flag_tg: | `:flag_tg:` | `1f1f9-1f1ec` |
+| :flag_th: | `:flag_th:` | `1f1f9-1f1ed` |
+| :flag_tj: | `:flag_tj:` | `1f1f9-1f1ef` |
+| :flag_tk: | `:flag_tk:` | `1f1f9-1f1f0` |
+| :flag_tl: | `:flag_tl:` | `1f1f9-1f1f1` |
+| :flag_tm: | `:flag_tm:` | `1f1f9-1f1f2` |
+| :flag_tn: | `:flag_tn:` | `1f1f9-1f1f3` |
+| :flag_to: | `:flag_to:` | `1f1f9-1f1f4` |
+| :flag_tr: | `:flag_tr:` | `1f1f9-1f1f7` |
+| :flag_tt: | `:flag_tt:` | `1f1f9-1f1f9` |
+| :flag_tv: | `:flag_tv:` | `1f1f9-1f1fb` |
+| :flag_tw: | `:flag_tw:` | `1f1f9-1f1fc` |
+| :flag_tz: | `:flag_tz:` | `1f1f9-1f1ff` |
+| :flag_ua: | `:flag_ua:` | `1f1fa-1f1e6` |
+| :flag_ug: | `:flag_ug:` | `1f1fa-1f1ec` |
+| :flag_um: | `:flag_um:` | `1f1fa-1f1f2` |
+| :united_nations: | `:united_nations:` | `1f1fa-1f1f3` |
+| :flag_us: | `:flag_us:` | `1f1fa-1f1f8` |
+| :flag_uy: | `:flag_uy:` | `1f1fa-1f1fe` |
+| :flag_uz: | `:flag_uz:` | `1f1fa-1f1ff` |
+| :flag_va: | `:flag_va:` | `1f1fb-1f1e6` |
+| :flag_vc: | `:flag_vc:` | `1f1fb-1f1e8` |
+| :flag_ve: | `:flag_ve:` | `1f1fb-1f1ea` |
+| :flag_vg: | `:flag_vg:` | `1f1fb-1f1ec` |
+| :flag_vi: | `:flag_vi:` | `1f1fb-1f1ee` |
+| :flag_vn: | `:flag_vn:` | `1f1fb-1f1f3` |
+| :flag_vu: | `:flag_vu:` | `1f1fb-1f1fa` |
+| :flag_wf: | `:flag_wf:` | `1f1fc-1f1eb` |
+| :flag_ws: | `:flag_ws:` | `1f1fc-1f1f8` |
+| :flag_xk: | `:flag_xk:` | `1f1fd-1f1f0` |
+| :flag_ye: | `:flag_ye:` | `1f1fe-1f1ea` |
+| :flag_yt: | `:flag_yt:` | `1f1fe-1f1f9` |
+| :flag_za: | `:flag_za:` | `1f1ff-1f1e6` |
+| :flag_zm: | `:flag_zm:` | `1f1ff-1f1f2` |
+| :flag_zw: | `:flag_zw:` | `1f1ff-1f1fc` |
+| :england: | `:england:` | `1f3f4-e0067-e0062-e0065-e006e-e0067-e007f` |
+| :scotland: | `:scotland:` | `1f3f4-e0067-e0062-e0073-e0063-e0074-e007f` |
+| :wales: | `:wales:` | `1f3f4-e0067-e0062-e0077-e006c-e0073-e007f` |
diff --git a/examples/agents/main.py b/examples/agents/main.py
index 91b13a7..1faafa4 100644
--- a/examples/agents/main.py
+++ b/examples/agents/main.py
@@ -91,40 +91,27 @@ def normalize_amount(self, amount: str, token_key: str) -> float:
)
for message in status_toolkit.account.listen_messages():
- content = None
- for chat in message["event"]["chats"]:
-
- latest_message: dict = chat.get("lastMessage", {})
- if not latest_message:
- continue
-
- from_public_key = latest_message.get("from")
- if from_public_key != PUBLIC_KEY:
- continue
-
- content = chat["lastMessage"]["text"]
- payment_requests: list[dict] = latest_message.get("paymentRequests", [])
- if payment_requests:
- payment_request = payment_requests[0]
- amount = status_toolkit.normalize_amount(payment_request["amount"], payment_request["tokenKey"])
- chain_id, token_address = payment_request["tokenKey"].split("-")
- payment_content = {
- "Receiver Wallet": payment_request['receiver'],
- "Token Symbol": payment_request['symbol'],
- "Token Address": token_address,
- "Amount": amount,
- "Chain ID": chain_id
- }
- content += f"\n---\n# Payment request\n" + "\n".join([
- f"{name}: {value}"
- for name, value in payment_content.items()
- ])
-
- break
- if not content:
+ if message.from_public_key != PUBLIC_KEY:
continue
+ content = message.content
+ payment_requests = message.payment_requests
+ if payment_requests:
+ payment_request = payment_requests[0]
+ amount = status_toolkit.normalize_amount(payment_request.amount, f"{payment_request.chain_id}-{payment_request.token_address}")
+ payment_content = {
+ "Receiver Wallet": payment_request.to_address,
+ "Token Symbol": payment_request.token_symbol,
+ "Token Address": payment_request.token_address,
+ "Amount": amount,
+ "Chain ID": payment_request.chain_id
+ }
+ content += f"\n---\n# Payment request\n" + "\n".join([
+ f"{name}: {value}"
+ for name, value in payment_content.items()
+ ])
+
result = agent.invoke({
"messages": [
{
diff --git a/examples/community-greet/main.py b/examples/community-greet/main.py
index 953895e..758a038 100644
--- a/examples/community-greet/main.py
+++ b/examples/community-greet/main.py
@@ -111,17 +111,17 @@ def main(channel_name: str, approve: bool):
account.logger.info(f"Listening for incoming {community.name} [{community.id}] requests")
pending_requests = []
for request in community.listen_requests():
- member_public_key: str = request["public_key"]
- request_id: str = request["request_id"]
- if request["state"] == "pending" and member_public_key not in pending_requests:
+ member_public_key: str = request.public_key
+
+ if request.state == "pending" and member_public_key not in pending_requests:
pending_requests.append(member_public_key)
- if approve and request["state"] == "pending":
- community.accept(request_id)
+ if approve and request.state == "pending":
+ community.accept(request.id)
account.logger.info(f"Accepted {member_public_key}")
continue
- if request["state"] != "accept" or member_public_key not in pending_requests:
+ if request.state != "accept" or member_public_key not in pending_requests:
continue
message = generate_message(member_public_key)
diff --git a/examples/group-chat-moderator/main.py b/examples/group-chat-moderator/main.py
index 9875d0a..05927d0 100644
--- a/examples/group-chat-moderator/main.py
+++ b/examples/group-chat-moderator/main.py
@@ -1,5 +1,5 @@
from dotenv import load_dotenv
-from status_sdk import Account, GroupChat, launch_docker_container
+from status_sdk import Account, GroupChat, launch_docker_container, models
from detoxify import Detoxify
import os, threading, torch
@@ -7,16 +7,16 @@
# read-modify-write of a member's warning count must be atomic
warnings_lock = threading.Lock()
-def check_message(account: Account, message: dict, warnings: dict, group_chat: GroupChat, model: Detoxify, threshold: float = 0.6, warning_limit: int = 3):
+def check_message(account: Account, message: models.Message, warnings: dict, group_chat: GroupChat, model: Detoxify, threshold: float = 0.6, warning_limit: int = 3):
"""
Score a single message and warn (or remove) its author.
"""
- public_key = message["from"]
+ public_key = message.from_public_key
if public_key == account.info["public_key"]:
return
- label, score = max(model.predict(message["text"]).items(), key=lambda item: item[1])
- account.logger.info(f"Message: '{message['text']}'\t\t{label} - {(score * 100):.2f}%")
+ label, score = max(model.predict(message.content).items(), key=lambda item: item[1])
+ account.logger.info(f"Message: '{message.content}'\t\t{label} - {(score * 100):.2f}%")
if score < threshold:
return
@@ -26,7 +26,7 @@ def check_message(account: Account, message: dict, warnings: dict, group_chat: G
count = warnings[public_key]
if count < warning_limit:
- group_chat.send_message(f"Warning {count} /{warning_limit} - @{public_key} please keep it civil.", message["id"])
+ group_chat.send_message(f"Warning {count} /{warning_limit} - @{public_key} please keep it civil.", message.id)
account.logger.info(f"Sent warning to {public_key}")
elif count >= warning_limit:
group_chat.send_message(f"Removing @{public_key} member after {warning_limit} warnings.")
@@ -50,15 +50,13 @@ def main():
model = Detoxify("original", device=device)
account.logger.info(f"Listening Group Chat {group_chat.name}")
for message in account.listen_messages():
- for chat in message["event"]["chats"]:
- if chat["id"] != group_chat.id:
- continue
-
- threading.Thread(
- target=check_message,
- args=(account, chat["lastMessage"], warnings, group_chat, model),
- daemon=True
- ).start()
+ if message.chat_id != group_chat.id:
+ continue
+ threading.Thread(
+ target=check_message,
+ args=(account, message, warnings, group_chat, model),
+ daemon=True
+ ).start()
if __name__ == "__main__":
main()
diff --git a/pyproject.toml b/pyproject.toml
index f27fdc6..4228477 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
[project]
name = "status-sdk"
-version = "1.1.2"
+version = "1.1.3"
description = "Private chat. Communities. Multi-chain wallet. Browser. dApps all in one app, powered by SNT."
readme = "README.md"
requires-python = ">=3.11"
diff --git a/status_sdk/__init__.py b/status_sdk/__init__.py
index e9dd45f..f3c258f 100644
--- a/status_sdk/__init__.py
+++ b/status_sdk/__init__.py
@@ -4,7 +4,7 @@
from .group_chat import GroupChat
from .community.base import Community
from .utils import launch_docker_container
-from . import exceptions
+from . import exceptions, models
try:
__version__ = _version("status-sdk")
diff --git a/status_sdk/account.py b/status_sdk/account.py
index 3ccd869..739eac2 100644
--- a/status_sdk/account.py
+++ b/status_sdk/account.py
@@ -8,7 +8,7 @@
from PIL import Image
from PIL.JpegImagePlugin import JpegImageFile
from PIL.PngImagePlugin import PngImageFile
-from . import constants
+from . import constants, models
from .signal import Signal
from .logger import Logger
@@ -490,7 +490,6 @@ def communities(self) -> list[dict]:
"verified": community["verified"],
"tags": community["tags"],
"is_member": community["isMember"],
- "joined": community["verified"],
"joined_timestamp": to_datetime("joinedAt", community),
"requested_timestamp": to_datetime("requestedToJoinAt", community),
"encrypted": community["encrypted"],
@@ -530,6 +529,7 @@ def chats(self) -> list[dict]:
contacts = [
{"type": "contact", "id": contact["chat_id"], "name": contact["display_name"]}
for contact in self.contacts.values()
+ if contact["mutual"]
]
# Group chats in RPC endpoint are chat type 3
@@ -674,6 +674,40 @@ def send_message(self, chat_id: str, message: str, reply_to_message_id: Optional
"""
return self.__send_content(chat_id, message, reply_to_message_id)
+
+ def send_emoji_reaction(self, message_id: str, emoji_shortname: str, chat_id: Optional[str] = None):
+ """
+ Set / unset emoji reaction for a message.
+
+ Parameters:
+ - `message_id`- the `id` of the message
+ - `emoji_shortname` - the emoji shortname as in Status App
+ - `chat_id` - the `id` of the chat. If not provided it will be found from `message_id`
+ """
+ if not emoji_shortname.startswith(":"):
+ emoji_shortname = f":{emoji_shortname}"
+
+ if not emoji_shortname.endswith(":"):
+ emoji_shortname += ":"
+
+ emoji_unicode = constants.EMOJI_UNICODES.get(emoji_shortname)
+ if not emoji_unicode:
+ raise exceptions.EmojiNotFoundError(emoji_shortname)
+
+ if not chat_id:
+ response = self._call_rpc("messaging", "messageByMessageID", [message_id])
+ error = response.get("error", {}) or {}
+ if error:
+ raise exceptions.ChatNotFoundError(error.get("message"))
+
+ chat_id: str = response["result"]["localChatId"]
+
+ params = [chat_id, message_id, emoji_unicode]
+ response = self._call_rpc("messaging", "sendEmojiReaction", params)
+ error = response.get("error", {}) or {}
+ if error:
+ raise exceptions.ChatNotFoundError(error.get("message"))
+
def __send_content(self, chat_id: str, message: Optional[str] = None, reply_to_message_id: Optional[str] = None, image_path: Optional[str] = None) -> str:
"""
Send a message with optional media attached to the given chat.
@@ -794,24 +828,53 @@ def delete_message(self, id: str) -> bool:
return not any(errors) if errors else False
- def listen_contact_requests(self) -> Generator:
+ def listen_contact_requests(self) -> Generator[models.ContactRequest, None, None]:
+ """
+ Listen for incoming contact requests and for contact requests that were accepted. Can be used for real time processing.
+ """
+ accepted_contact_request = re.compile(r"@(0x04[0-9a-fA-F]{128}) accepted your contact request")
+ for message in self.signal.listen(["local-notifications", "messages.new"]):
+ event: dict = message.get("event", {})
+
+ if message["type"] == "local-notifications":
+ category = event.get("category")
+ if category == "contactRequest":
+ yield models.ContactRequest(message["event"]["body"]["message"]["from"], incoming=True)
+
+ if message["type"] == "messages.new" and accepted_contact_request.search(str(message)):
+ for public_key in set(accepted_contact_request.findall(str(message))):
+
+ if self.info["public_key"] == public_key:
+ continue
+
+ yield models.ContactRequest(public_key, accepted=True)
+
+ def listen_message_mentions(self) -> Generator[models.Message, None, None]:
"""
- Listen for new contact requests. Can be used for real time processing.
+ Listen for `@0xpublic-key` mentions. Can be used for real time processing.
"""
+ mention_everyone = "@0x00001"
+ account_mention = f"@{self.info['public_key']}"
+
for message in self.signal.listen("local-notifications"):
event: dict = message.get("event", {})
category = event.get("category")
- if category == "contactRequest":
- yield message
+ if category != "newMessage":
+ continue
+
+ current_text: str = event["body"]["message"]["text"]
+ if mention_everyone in current_text or account_mention in current_text:
+ yield models.Message.from_raw(event["body"]["message"])
- def listen_messages(self) -> Generator:
+ def listen_messages(self) -> Generator[models.Message, None, None]:
"""
Listen for new **RAW** messages continuously. Can be used for real time processing.
"""
for message in self.signal.listen("messages.new"):
event: dict = message.get("event", {})
if "chats" in event or "messages" in event:
- yield message
+ for raw in event["messages"]:
+ yield models.Message.from_raw(raw)
def get_messages(self, chat_id: str, start_timestamp: Optional[Union[str, datetime.datetime, datetime.date, pd.Timestamp]] = None, end_timestamp: Optional[Union[str, datetime.datetime, datetime.date, pd.Timestamp]] = None) -> list[dict]:
"""
diff --git a/status_sdk/community/base.py b/status_sdk/community/base.py
index 1705533..7547fd0 100644
--- a/status_sdk/community/base.py
+++ b/status_sdk/community/base.py
@@ -1,5 +1,5 @@
from ..account import Account
-from .. import exceptions
+from .. import exceptions, models
from .channel import Channel
from typing import Union, Optional, Generator
import pandas as pd
@@ -281,7 +281,7 @@ def delete_channel(self, channel_name: str):
params = [self.id, channel.id.replace(self.id, "")]
self.__account._call_rpc("messaging", "deleteCommunityChat", params)
- def listen_requests(self) -> Generator:
+ def listen_requests(self) -> Generator[models.CommunityRequest, None, None]:
"""
Listen for commnunity requests
"""
@@ -300,11 +300,7 @@ def listen_requests(self) -> Generator:
if not state:
continue
- yield {
- "request_id": request["id"],
- "state": state,
- "public_key": request["publicKey"]
- }
+ yield models.CommunityRequest(request["id"], state, request["publicKey"])
@property
def categories(self) -> dict[str, str]:
diff --git a/status_sdk/community/channel.py b/status_sdk/community/channel.py
index 1736783..b46ed6b 100644
--- a/status_sdk/community/channel.py
+++ b/status_sdk/community/channel.py
@@ -214,6 +214,15 @@ def send_image(self, file_path: str, message: Optional[str] = None, reply_to_mes
"""
return self.__account.send_image(self.id, file_path, message, reply_to_message_id)
+ def send_emoji_reaction(self, message_id: str, emoji_shortname: str):
+ """
+ Set / unset emoji reaction for a message in the channel.
+
+ Parameters:
+ - `message_id` - the `id` of the message, as it appears in `self.get_messages()`
+ - `emoji_shortname` - the emoji shortname as in Status App, with or without the surrounding colons
+ """
+ self.__account.send_emoji_reaction(message_id, emoji_shortname, self.id)
def get_messages(self, start_timestamp: Optional[Union[str, datetime.datetime, datetime.date, pd.Timestamp]] = None, end_timestamp: Optional[Union[str, datetime.datetime, datetime.date, pd.Timestamp]] = None) -> list[dict]:
"""
diff --git a/status_sdk/constants.py b/status_sdk/constants.py
index 7dabeca..9eb494b 100644
--- a/status_sdk/constants.py
+++ b/status_sdk/constants.py
@@ -15,3 +15,1876 @@
"apechain-mainnet": 33139,
"apechain-curtis": 33111,
}
+
+EMOJI_UNICODES = {
+ ":grinning:": "1f600",
+ ":smiley:": "1f603",
+ ":smile:": "1f604",
+ ":grin:": "1f601",
+ ":laughing:": "1f606",
+ ":sweat_smile:": "1f605",
+ ":rofl:": "1f923",
+ ":joy:": "1f602",
+ ":slight_smile:": "1f642",
+ ":upside_down:": "1f643",
+ ":melting_face:": "1fae0",
+ ":wink:": "1f609",
+ ":blush:": "1f60a",
+ ":innocent:": "1f607",
+ ":smiling_face_with_3_hearts:": "1f970",
+ ":heart_eyes:": "1f60d",
+ ":star_struck:": "1f929",
+ ":kissing_heart:": "1f618",
+ ":kissing:": "1f617",
+ ":relaxed:": "263a",
+ ":kissing_closed_eyes:": "1f61a",
+ ":kissing_smiling_eyes:": "1f619",
+ ":smiling_face_with_tear:": "1f972",
+ ":yum:": "1f60b",
+ ":stuck_out_tongue:": "1f61b",
+ ":stuck_out_tongue_winking_eye:": "1f61c",
+ ":zany_face:": "1f92a",
+ ":stuck_out_tongue_closed_eyes:": "1f61d",
+ ":money_mouth:": "1f911",
+ ":hugging:": "1f917",
+ ":face_with_hand_over_mouth:": "1f92d",
+ ":face_with_open_eyes_and_hand_over_mouth:": "1fae2",
+ ":face_with_peeking_eye:": "1fae3",
+ ":shushing_face:": "1f92b",
+ ":thinking:": "1f914",
+ ":saluting_face:": "1fae1",
+ ":zipper_mouth:": "1f910",
+ ":face_with_raised_eyebrow:": "1f928",
+ ":neutral_face:": "1f610",
+ ":expressionless:": "1f611",
+ ":no_mouth:": "1f636",
+ ":dotted_line_face:": "1fae5",
+ ":face_in_clouds:": "1f636-200d-1f32b-fe0f",
+ ":smirk:": "1f60f",
+ ":unamused:": "1f612",
+ ":rolling_eyes:": "1f644",
+ ":grimacing:": "1f62c",
+ ":face_exhaling:": "1f62e-200d-1f4a8",
+ ":lying_face:": "1f925",
+ ":shaking_face:": "1fae8",
+ ":relieved:": "1f60c",
+ ":pensive:": "1f614",
+ ":sleepy:": "1f62a",
+ ":drooling_face:": "1f924",
+ ":sleeping:": "1f634",
+ ":mask:": "1f637",
+ ":thermometer_face:": "1f912",
+ ":head_bandage:": "1f915",
+ ":nauseated_face:": "1f922",
+ ":face_vomiting:": "1f92e",
+ ":sneezing_face:": "1f927",
+ ":hot_face:": "1f975",
+ ":cold_face:": "1f976",
+ ":woozy_face:": "1f974",
+ ":dizzy_face:": "1f635",
+ ":face_with_spiral_eyes:": "1f635-200d-1f4ab",
+ ":exploding_head:": "1f92f",
+ ":cowboy:": "1f920",
+ ":partying_face:": "1f973",
+ ":disguised_face:": "1f978",
+ ":sunglasses:": "1f60e",
+ ":nerd:": "1f913",
+ ":face_with_monocle:": "1f9d0",
+ ":confused:": "1f615",
+ ":face_with_diagonal_mouth:": "1fae4",
+ ":worried:": "1f61f",
+ ":slight_frown:": "1f641",
+ ":frowning2:": "2639",
+ ":open_mouth:": "1f62e",
+ ":hushed:": "1f62f",
+ ":astonished:": "1f632",
+ ":flushed:": "1f633",
+ ":pleading_face:": "1f97a",
+ ":face_holding_back_tears:": "1f979",
+ ":frowning:": "1f626",
+ ":anguished:": "1f627",
+ ":fearful:": "1f628",
+ ":cold_sweat:": "1f630",
+ ":disappointed_relieved:": "1f625",
+ ":cry:": "1f622",
+ ":sob:": "1f62d",
+ ":scream:": "1f631",
+ ":confounded:": "1f616",
+ ":persevere:": "1f623",
+ ":disappointed:": "1f61e",
+ ":sweat:": "1f613",
+ ":weary:": "1f629",
+ ":tired_face:": "1f62b",
+ ":yawning_face:": "1f971",
+ ":triumph:": "1f624",
+ ":rage:": "1f621",
+ ":angry:": "1f620",
+ ":face_with_symbols_over_mouth:": "1f92c",
+ ":smiling_imp:": "1f608",
+ ":imp:": "1f47f",
+ ":skull:": "1f480",
+ ":skull_crossbones:": "2620",
+ ":poop:": "1f4a9",
+ ":clown:": "1f921",
+ ":japanese_ogre:": "1f479",
+ ":japanese_goblin:": "1f47a",
+ ":ghost:": "1f47b",
+ ":alien:": "1f47d",
+ ":space_invader:": "1f47e",
+ ":robot:": "1f916",
+ ":smiley_cat:": "1f63a",
+ ":smile_cat:": "1f638",
+ ":joy_cat:": "1f639",
+ ":heart_eyes_cat:": "1f63b",
+ ":smirk_cat:": "1f63c",
+ ":kissing_cat:": "1f63d",
+ ":scream_cat:": "1f640",
+ ":crying_cat_face:": "1f63f",
+ ":pouting_cat:": "1f63e",
+ ":see_no_evil:": "1f648",
+ ":hear_no_evil:": "1f649",
+ ":speak_no_evil:": "1f64a",
+ ":love_letter:": "1f48c",
+ ":cupid:": "1f498",
+ ":gift_heart:": "1f49d",
+ ":sparkling_heart:": "1f496",
+ ":heartpulse:": "1f497",
+ ":heartbeat:": "1f493",
+ ":revolving_hearts:": "1f49e",
+ ":two_hearts:": "1f495",
+ ":heart_decoration:": "1f49f",
+ ":heart_exclamation:": "2763",
+ ":broken_heart:": "1f494",
+ ":heart_on_fire:": "2764-fe0f-200d-1f525",
+ ":mending_heart:": "2764-fe0f-200d-1fa79",
+ ":heart:": "2764",
+ ":pink_heart:": "1fa77",
+ ":orange_heart:": "1f9e1",
+ ":yellow_heart:": "1f49b",
+ ":green_heart:": "1f49a",
+ ":blue_heart:": "1f499",
+ ":light_blue_heart:": "1fa75",
+ ":purple_heart:": "1f49c",
+ ":brown_heart:": "1f90e",
+ ":black_heart:": "1f5a4",
+ ":grey_heart:": "1fa76",
+ ":white_heart:": "1f90d",
+ ":kiss:": "1f48b",
+ ":100:": "1f4af",
+ ":anger:": "1f4a2",
+ ":boom:": "1f4a5",
+ ":dizzy:": "1f4ab",
+ ":sweat_drops:": "1f4a6",
+ ":dash:": "1f4a8",
+ ":hole:": "1f573",
+ ":speech_balloon:": "1f4ac",
+ ":eye_in_speech_bubble:": "1f441-200d-1f5e8",
+ ":speech_left:": "1f5e8",
+ ":anger_right:": "1f5ef",
+ ":thought_balloon:": "1f4ad",
+ ":zzz:": "1f4a4",
+ ":wave:": "1f44b",
+ ":raised_back_of_hand:": "1f91a",
+ ":hand_splayed:": "1f590",
+ ":raised_hand:": "270b",
+ ":vulcan:": "1f596",
+ ":rightwards_hand:": "1faf1",
+ ":leftwards_hand:": "1faf2",
+ ":palm_down_hand:": "1faf3",
+ ":palm_up_hand:": "1faf4",
+ ":leftwards_pushing_hand:": "1faf7",
+ ":rightwards_pushing_hand:": "1faf8",
+ ":ok_hand:": "1f44c",
+ ":pinched_fingers:": "1f90c",
+ ":pinching_hand:": "1f90f",
+ ":v:": "270c",
+ ":fingers_crossed:": "1f91e",
+ ":hand_with_index_finger_and_thumb_crossed:": "1faf0",
+ ":love_you_gesture:": "1f91f",
+ ":metal:": "1f918",
+ ":call_me:": "1f919",
+ ":point_left:": "1f448",
+ ":point_right:": "1f449",
+ ":point_up_2:": "1f446",
+ ":middle_finger:": "1f595",
+ ":point_down:": "1f447",
+ ":point_up:": "261d",
+ ":index_pointing_at_the_viewer:": "1faf5",
+ ":thumbsup:": "1f44d",
+ ":thumbsdown:": "1f44e",
+ ":fist:": "270a",
+ ":punch:": "1f44a",
+ ":left_facing_fist:": "1f91b",
+ ":right_facing_fist:": "1f91c",
+ ":clap:": "1f44f",
+ ":raised_hands:": "1f64c",
+ ":heart_hands:": "1faf6",
+ ":open_hands:": "1f450",
+ ":palms_up_together:": "1f932",
+ ":handshake:": "1f91d",
+ ":pray:": "1f64f",
+ ":writing_hand:": "270d",
+ ":nail_care:": "1f485",
+ ":selfie:": "1f933",
+ ":muscle:": "1f4aa",
+ ":mechanical_arm:": "1f9be",
+ ":mechanical_leg:": "1f9bf",
+ ":leg:": "1f9b5",
+ ":foot:": "1f9b6",
+ ":ear:": "1f442",
+ ":ear_with_hearing_aid:": "1f9bb",
+ ":nose:": "1f443",
+ ":brain:": "1f9e0",
+ ":anatomical_heart:": "1fac0",
+ ":lungs:": "1fac1",
+ ":tooth:": "1f9b7",
+ ":bone:": "1f9b4",
+ ":eyes:": "1f440",
+ ":eye:": "1f441",
+ ":tongue:": "1f445",
+ ":lips:": "1f444",
+ ":biting_lip:": "1fae6",
+ ":baby:": "1f476",
+ ":child:": "1f9d2",
+ ":boy:": "1f466",
+ ":girl:": "1f467",
+ ":adult:": "1f9d1",
+ ":blond_haired_person:": "1f471",
+ ":man:": "1f468",
+ ":bearded_person:": "1f9d4",
+ ":man_beard:": "1f9d4-200d-2642-fe0f",
+ ":woman_beard:": "1f9d4-200d-2640-fe0f",
+ ":man_red_haired:": "1f468-200d-1f9b0",
+ ":man_curly_haired:": "1f468-200d-1f9b1",
+ ":man_white_haired:": "1f468-200d-1f9b3",
+ ":man_bald:": "1f468-200d-1f9b2",
+ ":woman:": "1f469",
+ ":woman_red_haired:": "1f469-200d-1f9b0",
+ ":person_red_hair:": "1f9d1-200d-1f9b0",
+ ":woman_curly_haired:": "1f469-200d-1f9b1",
+ ":person_curly_hair:": "1f9d1-200d-1f9b1",
+ ":woman_white_haired:": "1f469-200d-1f9b3",
+ ":person_white_hair:": "1f9d1-200d-1f9b3",
+ ":woman_bald:": "1f469-200d-1f9b2",
+ ":person_bald:": "1f9d1-200d-1f9b2",
+ ":blond-haired_woman:": "1f471-200d-2640-fe0f",
+ ":blond-haired_man:": "1f471-200d-2642-fe0f",
+ ":older_adult:": "1f9d3",
+ ":older_man:": "1f474",
+ ":older_woman:": "1f475",
+ ":person_frowning:": "1f64d",
+ ":man_frowning:": "1f64d-200d-2642-fe0f",
+ ":woman_frowning:": "1f64d-200d-2640-fe0f",
+ ":person_pouting:": "1f64e",
+ ":man_pouting:": "1f64e-200d-2642-fe0f",
+ ":woman_pouting:": "1f64e-200d-2640-fe0f",
+ ":person_gesturing_no:": "1f645",
+ ":man_gesturing_no:": "1f645-200d-2642-fe0f",
+ ":woman_gesturing_no:": "1f645-200d-2640-fe0f",
+ ":person_gesturing_ok:": "1f646",
+ ":man_gesturing_ok:": "1f646-200d-2642-fe0f",
+ ":woman_gesturing_ok:": "1f646-200d-2640-fe0f",
+ ":person_tipping_hand:": "1f481",
+ ":man_tipping_hand:": "1f481-200d-2642-fe0f",
+ ":woman_tipping_hand:": "1f481-200d-2640-fe0f",
+ ":person_raising_hand:": "1f64b",
+ ":man_raising_hand:": "1f64b-200d-2642-fe0f",
+ ":woman_raising_hand:": "1f64b-200d-2640-fe0f",
+ ":deaf_person:": "1f9cf",
+ ":deaf_man:": "1f9cf-200d-2642-fe0f",
+ ":deaf_woman:": "1f9cf-200d-2640-fe0f",
+ ":person_bowing:": "1f647",
+ ":man_bowing:": "1f647-200d-2642-fe0f",
+ ":woman_bowing:": "1f647-200d-2640-fe0f",
+ ":person_facepalming:": "1f926",
+ ":man_facepalming:": "1f926-200d-2642-fe0f",
+ ":woman_facepalming:": "1f926-200d-2640-fe0f",
+ ":person_shrugging:": "1f937",
+ ":man_shrugging:": "1f937-200d-2642-fe0f",
+ ":woman_shrugging:": "1f937-200d-2640-fe0f",
+ ":health_worker:": "1f9d1-200d-2695-fe0f",
+ ":man_health_worker:": "1f468-200d-2695-fe0f",
+ ":woman_health_worker:": "1f469-200d-2695-fe0f",
+ ":student:": "1f9d1-200d-1f393",
+ ":man_student:": "1f468-200d-1f393",
+ ":woman_student:": "1f469-200d-1f393",
+ ":teacher:": "1f9d1-200d-1f3eb",
+ ":man_teacher:": "1f468-200d-1f3eb",
+ ":woman_teacher:": "1f469-200d-1f3eb",
+ ":judge:": "1f9d1-200d-2696-fe0f",
+ ":man_judge:": "1f468-200d-2696-fe0f",
+ ":woman_judge:": "1f469-200d-2696-fe0f",
+ ":farmer:": "1f9d1-200d-1f33e",
+ ":man_farmer:": "1f468-200d-1f33e",
+ ":woman_farmer:": "1f469-200d-1f33e",
+ ":cook:": "1f9d1-200d-1f373",
+ ":man_cook:": "1f468-200d-1f373",
+ ":woman_cook:": "1f469-200d-1f373",
+ ":mechanic:": "1f9d1-200d-1f527",
+ ":man_mechanic:": "1f468-200d-1f527",
+ ":woman_mechanic:": "1f469-200d-1f527",
+ ":factory_worker:": "1f9d1-200d-1f3ed",
+ ":man_factory_worker:": "1f468-200d-1f3ed",
+ ":woman_factory_worker:": "1f469-200d-1f3ed",
+ ":office_worker:": "1f9d1-200d-1f4bc",
+ ":man_office_worker:": "1f468-200d-1f4bc",
+ ":woman_office_worker:": "1f469-200d-1f4bc",
+ ":scientist:": "1f9d1-200d-1f52c",
+ ":man_scientist:": "1f468-200d-1f52c",
+ ":woman_scientist:": "1f469-200d-1f52c",
+ ":technologist:": "1f9d1-200d-1f4bb",
+ ":man_technologist:": "1f468-200d-1f4bb",
+ ":woman_technologist:": "1f469-200d-1f4bb",
+ ":singer:": "1f9d1-200d-1f3a4",
+ ":man_singer:": "1f468-200d-1f3a4",
+ ":woman_singer:": "1f469-200d-1f3a4",
+ ":artist:": "1f9d1-200d-1f3a8",
+ ":man_artist:": "1f468-200d-1f3a8",
+ ":woman_artist:": "1f469-200d-1f3a8",
+ ":pilot:": "1f9d1-200d-2708-fe0f",
+ ":man_pilot:": "1f468-200d-2708-fe0f",
+ ":woman_pilot:": "1f469-200d-2708-fe0f",
+ ":astronaut:": "1f9d1-200d-1f680",
+ ":man_astronaut:": "1f468-200d-1f680",
+ ":woman_astronaut:": "1f469-200d-1f680",
+ ":firefighter:": "1f9d1-200d-1f692",
+ ":man_firefighter:": "1f468-200d-1f692",
+ ":woman_firefighter:": "1f469-200d-1f692",
+ ":police_officer:": "1f46e",
+ ":man_police_officer:": "1f46e-200d-2642-fe0f",
+ ":woman_police_officer:": "1f46e-200d-2640-fe0f",
+ ":detective:": "1f575",
+ ":man_detective:": "1f575-fe0f-200d-2642-fe0f",
+ ":woman_detective:": "1f575-fe0f-200d-2640-fe0f",
+ ":guard:": "1f482",
+ ":man_guard:": "1f482-200d-2642-fe0f",
+ ":woman_guard:": "1f482-200d-2640-fe0f",
+ ":ninja:": "1f977",
+ ":construction_worker:": "1f477",
+ ":man_construction_worker:": "1f477-200d-2642-fe0f",
+ ":woman_construction_worker:": "1f477-200d-2640-fe0f",
+ ":person_with_crown:": "1fac5",
+ ":prince:": "1f934",
+ ":princess:": "1f478",
+ ":person_wearing_turban:": "1f473",
+ ":man_wearing_turban:": "1f473-200d-2642-fe0f",
+ ":woman_wearing_turban:": "1f473-200d-2640-fe0f",
+ ":man_with_chinese_cap:": "1f472",
+ ":woman_with_headscarf:": "1f9d5",
+ ":person_in_tuxedo:": "1f935",
+ ":man_in_tuxedo:": "1f935-200d-2642-fe0f",
+ ":woman_in_tuxedo:": "1f935-200d-2640-fe0f",
+ ":person_with_veil:": "1f470",
+ ":man_with_veil:": "1f470-200d-2642-fe0f",
+ ":woman_with_veil:": "1f470-200d-2640-fe0f",
+ ":pregnant_woman:": "1f930",
+ ":pregnant_man:": "1fac3",
+ ":pregnant_person:": "1fac4",
+ ":breast_feeding:": "1f931",
+ ":woman_feeding_baby:": "1f469-200d-1f37c",
+ ":man_feeding_baby:": "1f468-200d-1f37c",
+ ":person_feeding_baby:": "1f9d1-200d-1f37c",
+ ":angel:": "1f47c",
+ ":santa:": "1f385",
+ ":mrs_claus:": "1f936",
+ ":mx_claus:": "1f9d1-200d-1f384",
+ ":superhero:": "1f9b8",
+ ":man_superhero:": "1f9b8-200d-2642-fe0f",
+ ":woman_superhero:": "1f9b8-200d-2640-fe0f",
+ ":supervillain:": "1f9b9",
+ ":man_supervillain:": "1f9b9-200d-2642-fe0f",
+ ":woman_supervillain:": "1f9b9-200d-2640-fe0f",
+ ":mage:": "1f9d9",
+ ":man_mage:": "1f9d9-200d-2642-fe0f",
+ ":woman_mage:": "1f9d9-200d-2640-fe0f",
+ ":fairy:": "1f9da",
+ ":man_fairy:": "1f9da-200d-2642-fe0f",
+ ":woman_fairy:": "1f9da-200d-2640-fe0f",
+ ":vampire:": "1f9db",
+ ":man_vampire:": "1f9db-200d-2642-fe0f",
+ ":woman_vampire:": "1f9db-200d-2640-fe0f",
+ ":merperson:": "1f9dc",
+ ":merman:": "1f9dc-200d-2642-fe0f",
+ ":mermaid:": "1f9dc-200d-2640-fe0f",
+ ":elf:": "1f9dd",
+ ":man_elf:": "1f9dd-200d-2642-fe0f",
+ ":woman_elf:": "1f9dd-200d-2640-fe0f",
+ ":genie:": "1f9de",
+ ":man_genie:": "1f9de-200d-2642-fe0f",
+ ":woman_genie:": "1f9de-200d-2640-fe0f",
+ ":zombie:": "1f9df",
+ ":man_zombie:": "1f9df-200d-2642-fe0f",
+ ":woman_zombie:": "1f9df-200d-2640-fe0f",
+ ":troll:": "1f9cc",
+ ":person_getting_massage:": "1f486",
+ ":man_getting_face_massage:": "1f486-200d-2642-fe0f",
+ ":woman_getting_face_massage:": "1f486-200d-2640-fe0f",
+ ":person_getting_haircut:": "1f487",
+ ":man_getting_haircut:": "1f487-200d-2642-fe0f",
+ ":woman_getting_haircut:": "1f487-200d-2640-fe0f",
+ ":person_walking:": "1f6b6",
+ ":man_walking:": "1f6b6-200d-2642-fe0f",
+ ":woman_walking:": "1f6b6-200d-2640-fe0f",
+ ":person_standing:": "1f9cd",
+ ":man_standing:": "1f9cd-200d-2642-fe0f",
+ ":woman_standing:": "1f9cd-200d-2640-fe0f",
+ ":person_kneeling:": "1f9ce",
+ ":man_kneeling:": "1f9ce-200d-2642-fe0f",
+ ":woman_kneeling:": "1f9ce-200d-2640-fe0f",
+ ":person_with_probing_cane:": "1f9d1-200d-1f9af",
+ ":man_with_probing_cane:": "1f468-200d-1f9af",
+ ":woman_with_probing_cane:": "1f469-200d-1f9af",
+ ":person_in_motorized_wheelchair:": "1f9d1-200d-1f9bc",
+ ":man_in_motorized_wheelchair:": "1f468-200d-1f9bc",
+ ":woman_in_motorized_wheelchair:": "1f469-200d-1f9bc",
+ ":person_in_manual_wheelchair:": "1f9d1-200d-1f9bd",
+ ":man_in_manual_wheelchair:": "1f468-200d-1f9bd",
+ ":woman_in_manual_wheelchair:": "1f469-200d-1f9bd",
+ ":person_running:": "1f3c3",
+ ":man_running:": "1f3c3-200d-2642-fe0f",
+ ":woman_running:": "1f3c3-200d-2640-fe0f",
+ ":dancer:": "1f483",
+ ":man_dancing:": "1f57a",
+ ":levitate:": "1f574",
+ ":people_with_bunny_ears_partying:": "1f46f",
+ ":men_with_bunny_ears_partying:": "1f46f-200d-2642-fe0f",
+ ":women_with_bunny_ears_partying:": "1f46f-200d-2640-fe0f",
+ ":person_in_steamy_room:": "1f9d6",
+ ":man_in_steamy_room:": "1f9d6-200d-2642-fe0f",
+ ":woman_in_steamy_room:": "1f9d6-200d-2640-fe0f",
+ ":person_climbing:": "1f9d7",
+ ":man_climbing:": "1f9d7-200d-2642-fe0f",
+ ":woman_climbing:": "1f9d7-200d-2640-fe0f",
+ ":person_fencing:": "1f93a",
+ ":horse_racing:": "1f3c7",
+ ":skier:": "26f7",
+ ":snowboarder:": "1f3c2",
+ ":person_golfing:": "1f3cc",
+ ":man_golfing:": "1f3cc-fe0f-200d-2642-fe0f",
+ ":woman_golfing:": "1f3cc-fe0f-200d-2640-fe0f",
+ ":person_surfing:": "1f3c4",
+ ":man_surfing:": "1f3c4-200d-2642-fe0f",
+ ":woman_surfing:": "1f3c4-200d-2640-fe0f",
+ ":person_rowing_boat:": "1f6a3",
+ ":man_rowing_boat:": "1f6a3-200d-2642-fe0f",
+ ":woman_rowing_boat:": "1f6a3-200d-2640-fe0f",
+ ":person_swimming:": "1f3ca",
+ ":man_swimming:": "1f3ca-200d-2642-fe0f",
+ ":woman_swimming:": "1f3ca-200d-2640-fe0f",
+ ":person_bouncing_ball:": "26f9",
+ ":man_bouncing_ball:": "26f9-fe0f-200d-2642-fe0f",
+ ":woman_bouncing_ball:": "26f9-fe0f-200d-2640-fe0f",
+ ":person_lifting_weights:": "1f3cb",
+ ":man_lifting_weights:": "1f3cb-fe0f-200d-2642-fe0f",
+ ":woman_lifting_weights:": "1f3cb-fe0f-200d-2640-fe0f",
+ ":person_biking:": "1f6b4",
+ ":man_biking:": "1f6b4-200d-2642-fe0f",
+ ":woman_biking:": "1f6b4-200d-2640-fe0f",
+ ":person_mountain_biking:": "1f6b5",
+ ":man_mountain_biking:": "1f6b5-200d-2642-fe0f",
+ ":woman_mountain_biking:": "1f6b5-200d-2640-fe0f",
+ ":person_doing_cartwheel:": "1f938",
+ ":man_cartwheeling:": "1f938-200d-2642-fe0f",
+ ":woman_cartwheeling:": "1f938-200d-2640-fe0f",
+ ":people_wrestling:": "1f93c",
+ ":men_wrestling:": "1f93c-200d-2642-fe0f",
+ ":women_wrestling:": "1f93c-200d-2640-fe0f",
+ ":person_playing_water_polo:": "1f93d",
+ ":man_playing_water_polo:": "1f93d-200d-2642-fe0f",
+ ":woman_playing_water_polo:": "1f93d-200d-2640-fe0f",
+ ":person_playing_handball:": "1f93e",
+ ":man_playing_handball:": "1f93e-200d-2642-fe0f",
+ ":woman_playing_handball:": "1f93e-200d-2640-fe0f",
+ ":person_juggling:": "1f939",
+ ":man_juggling:": "1f939-200d-2642-fe0f",
+ ":woman_juggling:": "1f939-200d-2640-fe0f",
+ ":person_in_lotus_position:": "1f9d8",
+ ":man_in_lotus_position:": "1f9d8-200d-2642-fe0f",
+ ":woman_in_lotus_position:": "1f9d8-200d-2640-fe0f",
+ ":bath:": "1f6c0",
+ ":sleeping_accommodation:": "1f6cc",
+ ":people_holding_hands:": "1f9d1-200d-1f91d-200d-1f9d1",
+ ":two_women_holding_hands:": "1f46d",
+ ":couple:": "1f46b",
+ ":two_men_holding_hands:": "1f46c",
+ ":couplekiss:": "1f48f",
+ ":kiss_woman_man:": "1f469-200d-2764-fe0f-200d-1f48b-200d-1f468",
+ ":kiss_mm:": "1f468-200d-2764-fe0f-200d-1f48b-200d-1f468",
+ ":kiss_ww:": "1f469-200d-2764-fe0f-200d-1f48b-200d-1f469",
+ ":couple_with_heart:": "1f491",
+ ":couple_with_heart_woman_man:": "1f469-200d-2764-fe0f-200d-1f468",
+ ":couple_mm:": "1f468-200d-2764-fe0f-200d-1f468",
+ ":couple_ww:": "1f469-200d-2764-fe0f-200d-1f469",
+ ":family_man_woman_boy:": "1f468-200d-1f469-200d-1f466",
+ ":family_mwg:": "1f468-200d-1f469-200d-1f467",
+ ":family_mwgb:": "1f468-200d-1f469-200d-1f467-200d-1f466",
+ ":family_mwbb:": "1f468-200d-1f469-200d-1f466-200d-1f466",
+ ":family_mwgg:": "1f468-200d-1f469-200d-1f467-200d-1f467",
+ ":family_mmb:": "1f468-200d-1f468-200d-1f466",
+ ":family_mmg:": "1f468-200d-1f468-200d-1f467",
+ ":family_mmgb:": "1f468-200d-1f468-200d-1f467-200d-1f466",
+ ":family_mmbb:": "1f468-200d-1f468-200d-1f466-200d-1f466",
+ ":family_mmgg:": "1f468-200d-1f468-200d-1f467-200d-1f467",
+ ":family_wwb:": "1f469-200d-1f469-200d-1f466",
+ ":family_wwg:": "1f469-200d-1f469-200d-1f467",
+ ":family_wwgb:": "1f469-200d-1f469-200d-1f467-200d-1f466",
+ ":family_wwbb:": "1f469-200d-1f469-200d-1f466-200d-1f466",
+ ":family_wwgg:": "1f469-200d-1f469-200d-1f467-200d-1f467",
+ ":family_man_boy:": "1f468-200d-1f466",
+ ":family_man_boy_boy:": "1f468-200d-1f466-200d-1f466",
+ ":family_man_girl:": "1f468-200d-1f467",
+ ":family_man_girl_boy:": "1f468-200d-1f467-200d-1f466",
+ ":family_man_girl_girl:": "1f468-200d-1f467-200d-1f467",
+ ":family_woman_boy:": "1f469-200d-1f466",
+ ":family_woman_boy_boy:": "1f469-200d-1f466-200d-1f466",
+ ":family_woman_girl:": "1f469-200d-1f467",
+ ":family_woman_girl_boy:": "1f469-200d-1f467-200d-1f466",
+ ":family_woman_girl_girl:": "1f469-200d-1f467-200d-1f467",
+ ":speaking_head:": "1f5e3",
+ ":bust_in_silhouette:": "1f464",
+ ":busts_in_silhouette:": "1f465",
+ ":people_hugging:": "1fac2",
+ ":family:": "1f46a",
+ ":footprints:": "1f463",
+ ":monkey_face:": "1f435",
+ ":monkey:": "1f412",
+ ":gorilla:": "1f98d",
+ ":orangutan:": "1f9a7",
+ ":dog:": "1f436",
+ ":dog2:": "1f415",
+ ":guide_dog:": "1f9ae",
+ ":service_dog:": "1f415-200d-1f9ba",
+ ":poodle:": "1f429",
+ ":wolf:": "1f43a",
+ ":fox:": "1f98a",
+ ":raccoon:": "1f99d",
+ ":cat:": "1f431",
+ ":cat2:": "1f408",
+ ":black_cat:": "1f408-200d-2b1b",
+ ":lion_face:": "1f981",
+ ":tiger:": "1f42f",
+ ":tiger2:": "1f405",
+ ":leopard:": "1f406",
+ ":horse:": "1f434",
+ ":moose:": "1face",
+ ":donkey:": "1facf",
+ ":racehorse:": "1f40e",
+ ":unicorn:": "1f984",
+ ":zebra:": "1f993",
+ ":deer:": "1f98c",
+ ":bison:": "1f9ac",
+ ":cow:": "1f42e",
+ ":ox:": "1f402",
+ ":water_buffalo:": "1f403",
+ ":cow2:": "1f404",
+ ":pig:": "1f437",
+ ":pig2:": "1f416",
+ ":boar:": "1f417",
+ ":pig_nose:": "1f43d",
+ ":ram:": "1f40f",
+ ":sheep:": "1f411",
+ ":goat:": "1f410",
+ ":dromedary_camel:": "1f42a",
+ ":camel:": "1f42b",
+ ":llama:": "1f999",
+ ":giraffe:": "1f992",
+ ":elephant:": "1f418",
+ ":mammoth:": "1f9a3",
+ ":rhino:": "1f98f",
+ ":hippopotamus:": "1f99b",
+ ":mouse:": "1f42d",
+ ":mouse2:": "1f401",
+ ":rat:": "1f400",
+ ":hamster:": "1f439",
+ ":rabbit:": "1f430",
+ ":rabbit2:": "1f407",
+ ":chipmunk:": "1f43f",
+ ":beaver:": "1f9ab",
+ ":hedgehog:": "1f994",
+ ":bat:": "1f987",
+ ":bear:": "1f43b",
+ ":polar_bear:": "1f43b-200d-2744-fe0f",
+ ":koala:": "1f428",
+ ":panda_face:": "1f43c",
+ ":sloth:": "1f9a5",
+ ":otter:": "1f9a6",
+ ":skunk:": "1f9a8",
+ ":kangaroo:": "1f998",
+ ":badger:": "1f9a1",
+ ":feet:": "1f43e",
+ ":turkey:": "1f983",
+ ":chicken:": "1f414",
+ ":rooster:": "1f413",
+ ":hatching_chick:": "1f423",
+ ":baby_chick:": "1f424",
+ ":hatched_chick:": "1f425",
+ ":bird:": "1f426",
+ ":penguin:": "1f427",
+ ":dove:": "1f54a",
+ ":eagle:": "1f985",
+ ":duck:": "1f986",
+ ":swan:": "1f9a2",
+ ":owl:": "1f989",
+ ":dodo:": "1f9a4",
+ ":feather:": "1fab6",
+ ":flamingo:": "1f9a9",
+ ":peacock:": "1f99a",
+ ":parrot:": "1f99c",
+ ":wing:": "1fabd",
+ ":black_bird:": "1f426-200d-2b1b",
+ ":goose:": "1fabf",
+ ":frog:": "1f438",
+ ":crocodile:": "1f40a",
+ ":turtle:": "1f422",
+ ":lizard:": "1f98e",
+ ":snake:": "1f40d",
+ ":dragon_face:": "1f432",
+ ":dragon:": "1f409",
+ ":sauropod:": "1f995",
+ ":t_rex:": "1f996",
+ ":whale:": "1f433",
+ ":whale2:": "1f40b",
+ ":dolphin:": "1f42c",
+ ":seal:": "1f9ad",
+ ":fish:": "1f41f",
+ ":tropical_fish:": "1f420",
+ ":blowfish:": "1f421",
+ ":shark:": "1f988",
+ ":octopus:": "1f419",
+ ":shell:": "1f41a",
+ ":coral:": "1fab8",
+ ":jellyfish:": "1fabc",
+ ":snail:": "1f40c",
+ ":butterfly:": "1f98b",
+ ":bug:": "1f41b",
+ ":ant:": "1f41c",
+ ":bee:": "1f41d",
+ ":beetle:": "1fab2",
+ ":lady_beetle:": "1f41e",
+ ":cricket:": "1f997",
+ ":cockroach:": "1fab3",
+ ":spider:": "1f577",
+ ":spider_web:": "1f578",
+ ":scorpion:": "1f982",
+ ":mosquito:": "1f99f",
+ ":fly:": "1fab0",
+ ":worm:": "1fab1",
+ ":microbe:": "1f9a0",
+ ":bouquet:": "1f490",
+ ":cherry_blossom:": "1f338",
+ ":white_flower:": "1f4ae",
+ ":lotus:": "1fab7",
+ ":rosette:": "1f3f5",
+ ":rose:": "1f339",
+ ":wilted_rose:": "1f940",
+ ":hibiscus:": "1f33a",
+ ":sunflower:": "1f33b",
+ ":blossom:": "1f33c",
+ ":tulip:": "1f337",
+ ":hyacinth:": "1fabb",
+ ":seedling:": "1f331",
+ ":potted_plant:": "1fab4",
+ ":evergreen_tree:": "1f332",
+ ":deciduous_tree:": "1f333",
+ ":palm_tree:": "1f334",
+ ":cactus:": "1f335",
+ ":ear_of_rice:": "1f33e",
+ ":herb:": "1f33f",
+ ":shamrock:": "2618",
+ ":four_leaf_clover:": "1f340",
+ ":maple_leaf:": "1f341",
+ ":fallen_leaf:": "1f342",
+ ":leaves:": "1f343",
+ ":empty_nest:": "1fab9",
+ ":nest_with_eggs:": "1faba",
+ ":mushroom:": "1f344",
+ ":grapes:": "1f347",
+ ":melon:": "1f348",
+ ":watermelon:": "1f349",
+ ":tangerine:": "1f34a",
+ ":lemon:": "1f34b",
+ ":banana:": "1f34c",
+ ":pineapple:": "1f34d",
+ ":mango:": "1f96d",
+ ":apple:": "1f34e",
+ ":green_apple:": "1f34f",
+ ":pear:": "1f350",
+ ":peach:": "1f351",
+ ":cherries:": "1f352",
+ ":strawberry:": "1f353",
+ ":blueberries:": "1fad0",
+ ":kiwi:": "1f95d",
+ ":tomato:": "1f345",
+ ":olive:": "1fad2",
+ ":coconut:": "1f965",
+ ":avocado:": "1f951",
+ ":eggplant:": "1f346",
+ ":potato:": "1f954",
+ ":carrot:": "1f955",
+ ":corn:": "1f33d",
+ ":hot_pepper:": "1f336",
+ ":bell_pepper:": "1fad1",
+ ":cucumber:": "1f952",
+ ":leafy_green:": "1f96c",
+ ":broccoli:": "1f966",
+ ":garlic:": "1f9c4",
+ ":onion:": "1f9c5",
+ ":peanuts:": "1f95c",
+ ":beans:": "1fad8",
+ ":chestnut:": "1f330",
+ ":ginger_root:": "1fada",
+ ":pea_pod:": "1fadb",
+ ":bread:": "1f35e",
+ ":croissant:": "1f950",
+ ":french_bread:": "1f956",
+ ":flatbread:": "1fad3",
+ ":pretzel:": "1f968",
+ ":bagel:": "1f96f",
+ ":pancakes:": "1f95e",
+ ":waffle:": "1f9c7",
+ ":cheese:": "1f9c0",
+ ":meat_on_bone:": "1f356",
+ ":poultry_leg:": "1f357",
+ ":cut_of_meat:": "1f969",
+ ":bacon:": "1f953",
+ ":hamburger:": "1f354",
+ ":fries:": "1f35f",
+ ":pizza:": "1f355",
+ ":hotdog:": "1f32d",
+ ":sandwich:": "1f96a",
+ ":taco:": "1f32e",
+ ":burrito:": "1f32f",
+ ":tamale:": "1fad4",
+ ":stuffed_flatbread:": "1f959",
+ ":falafel:": "1f9c6",
+ ":egg:": "1f95a",
+ ":cooking:": "1f373",
+ ":shallow_pan_of_food:": "1f958",
+ ":stew:": "1f372",
+ ":fondue:": "1fad5",
+ ":bowl_with_spoon:": "1f963",
+ ":salad:": "1f957",
+ ":popcorn:": "1f37f",
+ ":butter:": "1f9c8",
+ ":salt:": "1f9c2",
+ ":canned_food:": "1f96b",
+ ":bento:": "1f371",
+ ":rice_cracker:": "1f358",
+ ":rice_ball:": "1f359",
+ ":rice:": "1f35a",
+ ":curry:": "1f35b",
+ ":ramen:": "1f35c",
+ ":spaghetti:": "1f35d",
+ ":sweet_potato:": "1f360",
+ ":oden:": "1f362",
+ ":sushi:": "1f363",
+ ":fried_shrimp:": "1f364",
+ ":fish_cake:": "1f365",
+ ":moon_cake:": "1f96e",
+ ":dango:": "1f361",
+ ":dumpling:": "1f95f",
+ ":fortune_cookie:": "1f960",
+ ":takeout_box:": "1f961",
+ ":crab:": "1f980",
+ ":lobster:": "1f99e",
+ ":shrimp:": "1f990",
+ ":squid:": "1f991",
+ ":oyster:": "1f9aa",
+ ":icecream:": "1f366",
+ ":shaved_ice:": "1f367",
+ ":ice_cream:": "1f368",
+ ":doughnut:": "1f369",
+ ":cookie:": "1f36a",
+ ":birthday:": "1f382",
+ ":cake:": "1f370",
+ ":cupcake:": "1f9c1",
+ ":pie:": "1f967",
+ ":chocolate_bar:": "1f36b",
+ ":candy:": "1f36c",
+ ":lollipop:": "1f36d",
+ ":custard:": "1f36e",
+ ":honey_pot:": "1f36f",
+ ":baby_bottle:": "1f37c",
+ ":milk:": "1f95b",
+ ":coffee:": "2615",
+ ":teapot:": "1fad6",
+ ":tea:": "1f375",
+ ":sake:": "1f376",
+ ":champagne:": "1f37e",
+ ":wine_glass:": "1f377",
+ ":cocktail:": "1f378",
+ ":tropical_drink:": "1f379",
+ ":beer:": "1f37a",
+ ":beers:": "1f37b",
+ ":champagne_glass:": "1f942",
+ ":tumbler_glass:": "1f943",
+ ":pouring_liquid:": "1fad7",
+ ":cup_with_straw:": "1f964",
+ ":bubble_tea:": "1f9cb",
+ ":beverage_box:": "1f9c3",
+ ":mate:": "1f9c9",
+ ":ice_cube:": "1f9ca",
+ ":chopsticks:": "1f962",
+ ":fork_knife_plate:": "1f37d",
+ ":fork_and_knife:": "1f374",
+ ":spoon:": "1f944",
+ ":knife:": "1f52a",
+ ":jar:": "1fad9",
+ ":amphora:": "1f3fa",
+ ":earth_africa:": "1f30d",
+ ":earth_americas:": "1f30e",
+ ":earth_asia:": "1f30f",
+ ":globe_with_meridians:": "1f310",
+ ":map:": "1f5fa",
+ ":japan:": "1f5fe",
+ ":compass:": "1f9ed",
+ ":mountain_snow:": "1f3d4",
+ ":mountain:": "26f0",
+ ":volcano:": "1f30b",
+ ":mount_fuji:": "1f5fb",
+ ":camping:": "1f3d5",
+ ":beach:": "1f3d6",
+ ":desert:": "1f3dc",
+ ":island:": "1f3dd",
+ ":park:": "1f3de",
+ ":stadium:": "1f3df",
+ ":classical_building:": "1f3db",
+ ":construction_site:": "1f3d7",
+ ":bricks:": "1f9f1",
+ ":rock:": "1faa8",
+ ":wood:": "1fab5",
+ ":hut:": "1f6d6",
+ ":homes:": "1f3d8",
+ ":house_abandoned:": "1f3da",
+ ":house:": "1f3e0",
+ ":house_with_garden:": "1f3e1",
+ ":office:": "1f3e2",
+ ":post_office:": "1f3e3",
+ ":european_post_office:": "1f3e4",
+ ":hospital:": "1f3e5",
+ ":bank:": "1f3e6",
+ ":hotel:": "1f3e8",
+ ":love_hotel:": "1f3e9",
+ ":convenience_store:": "1f3ea",
+ ":school:": "1f3eb",
+ ":department_store:": "1f3ec",
+ ":factory:": "1f3ed",
+ ":japanese_castle:": "1f3ef",
+ ":european_castle:": "1f3f0",
+ ":wedding:": "1f492",
+ ":tokyo_tower:": "1f5fc",
+ ":statue_of_liberty:": "1f5fd",
+ ":church:": "26ea",
+ ":mosque:": "1f54c",
+ ":hindu_temple:": "1f6d5",
+ ":synagogue:": "1f54d",
+ ":shinto_shrine:": "26e9",
+ ":kaaba:": "1f54b",
+ ":fountain:": "26f2",
+ ":tent:": "26fa",
+ ":foggy:": "1f301",
+ ":night_with_stars:": "1f303",
+ ":cityscape:": "1f3d9",
+ ":sunrise_over_mountains:": "1f304",
+ ":sunrise:": "1f305",
+ ":city_dusk:": "1f306",
+ ":city_sunset:": "1f307",
+ ":bridge_at_night:": "1f309",
+ ":hotsprings:": "2668",
+ ":carousel_horse:": "1f3a0",
+ ":playground_slide:": "1f6dd",
+ ":ferris_wheel:": "1f3a1",
+ ":roller_coaster:": "1f3a2",
+ ":barber:": "1f488",
+ ":circus_tent:": "1f3aa",
+ ":steam_locomotive:": "1f682",
+ ":railway_car:": "1f683",
+ ":bullettrain_side:": "1f684",
+ ":bullettrain_front:": "1f685",
+ ":train2:": "1f686",
+ ":metro:": "1f687",
+ ":light_rail:": "1f688",
+ ":station:": "1f689",
+ ":tram:": "1f68a",
+ ":monorail:": "1f69d",
+ ":mountain_railway:": "1f69e",
+ ":train:": "1f68b",
+ ":bus:": "1f68c",
+ ":oncoming_bus:": "1f68d",
+ ":trolleybus:": "1f68e",
+ ":minibus:": "1f690",
+ ":ambulance:": "1f691",
+ ":fire_engine:": "1f692",
+ ":police_car:": "1f693",
+ ":oncoming_police_car:": "1f694",
+ ":taxi:": "1f695",
+ ":oncoming_taxi:": "1f696",
+ ":red_car:": "1f697",
+ ":oncoming_automobile:": "1f698",
+ ":blue_car:": "1f699",
+ ":pickup_truck:": "1f6fb",
+ ":truck:": "1f69a",
+ ":articulated_lorry:": "1f69b",
+ ":tractor:": "1f69c",
+ ":race_car:": "1f3ce",
+ ":motorcycle:": "1f3cd",
+ ":motor_scooter:": "1f6f5",
+ ":manual_wheelchair:": "1f9bd",
+ ":motorized_wheelchair:": "1f9bc",
+ ":auto_rickshaw:": "1f6fa",
+ ":bike:": "1f6b2",
+ ":scooter:": "1f6f4",
+ ":skateboard:": "1f6f9",
+ ":roller_skate:": "1f6fc",
+ ":busstop:": "1f68f",
+ ":motorway:": "1f6e3",
+ ":railway_track:": "1f6e4",
+ ":oil:": "1f6e2",
+ ":fuelpump:": "26fd",
+ ":wheel:": "1f6de",
+ ":rotating_light:": "1f6a8",
+ ":traffic_light:": "1f6a5",
+ ":vertical_traffic_light:": "1f6a6",
+ ":octagonal_sign:": "1f6d1",
+ ":construction:": "1f6a7",
+ ":anchor:": "2693",
+ ":ring_buoy:": "1f6df",
+ ":sailboat:": "26f5",
+ ":canoe:": "1f6f6",
+ ":speedboat:": "1f6a4",
+ ":cruise_ship:": "1f6f3",
+ ":ferry:": "26f4",
+ ":motorboat:": "1f6e5",
+ ":ship:": "1f6a2",
+ ":airplane:": "2708",
+ ":airplane_small:": "1f6e9",
+ ":airplane_departure:": "1f6eb",
+ ":airplane_arriving:": "1f6ec",
+ ":parachute:": "1fa82",
+ ":seat:": "1f4ba",
+ ":helicopter:": "1f681",
+ ":suspension_railway:": "1f69f",
+ ":mountain_cableway:": "1f6a0",
+ ":aerial_tramway:": "1f6a1",
+ ":satellite_orbital:": "1f6f0",
+ ":rocket:": "1f680",
+ ":flying_saucer:": "1f6f8",
+ ":bellhop:": "1f6ce",
+ ":luggage:": "1f9f3",
+ ":hourglass:": "231b",
+ ":hourglass_flowing_sand:": "23f3",
+ ":watch:": "231a",
+ ":alarm_clock:": "23f0",
+ ":stopwatch:": "23f1",
+ ":timer:": "23f2",
+ ":clock:": "1f570",
+ ":clock12:": "1f55b",
+ ":clock1230:": "1f567",
+ ":clock1:": "1f550",
+ ":clock130:": "1f55c",
+ ":clock2:": "1f551",
+ ":clock230:": "1f55d",
+ ":clock3:": "1f552",
+ ":clock330:": "1f55e",
+ ":clock4:": "1f553",
+ ":clock430:": "1f55f",
+ ":clock5:": "1f554",
+ ":clock530:": "1f560",
+ ":clock6:": "1f555",
+ ":clock630:": "1f561",
+ ":clock7:": "1f556",
+ ":clock730:": "1f562",
+ ":clock8:": "1f557",
+ ":clock830:": "1f563",
+ ":clock9:": "1f558",
+ ":clock930:": "1f564",
+ ":clock10:": "1f559",
+ ":clock1030:": "1f565",
+ ":clock11:": "1f55a",
+ ":clock1130:": "1f566",
+ ":new_moon:": "1f311",
+ ":waxing_crescent_moon:": "1f312",
+ ":first_quarter_moon:": "1f313",
+ ":waxing_gibbous_moon:": "1f314",
+ ":full_moon:": "1f315",
+ ":waning_gibbous_moon:": "1f316",
+ ":last_quarter_moon:": "1f317",
+ ":waning_crescent_moon:": "1f318",
+ ":crescent_moon:": "1f319",
+ ":new_moon_with_face:": "1f31a",
+ ":first_quarter_moon_with_face:": "1f31b",
+ ":last_quarter_moon_with_face:": "1f31c",
+ ":thermometer:": "1f321",
+ ":sunny:": "2600",
+ ":full_moon_with_face:": "1f31d",
+ ":sun_with_face:": "1f31e",
+ ":ringed_planet:": "1fa90",
+ ":star:": "2b50",
+ ":star2:": "1f31f",
+ ":stars:": "1f320",
+ ":milky_way:": "1f30c",
+ ":cloud:": "2601",
+ ":partly_sunny:": "26c5",
+ ":thunder_cloud_rain:": "26c8",
+ ":white_sun_small_cloud:": "1f324",
+ ":white_sun_cloud:": "1f325",
+ ":white_sun_rain_cloud:": "1f326",
+ ":cloud_rain:": "1f327",
+ ":cloud_snow:": "1f328",
+ ":cloud_lightning:": "1f329",
+ ":cloud_tornado:": "1f32a",
+ ":fog:": "1f32b",
+ ":wind_blowing_face:": "1f32c",
+ ":cyclone:": "1f300",
+ ":rainbow:": "1f308",
+ ":closed_umbrella:": "1f302",
+ ":umbrella2:": "2602",
+ ":umbrella:": "2614",
+ ":beach_umbrella:": "26f1",
+ ":zap:": "26a1",
+ ":snowflake:": "2744",
+ ":snowman2:": "2603",
+ ":snowman:": "26c4",
+ ":comet:": "2604",
+ ":fire:": "1f525",
+ ":droplet:": "1f4a7",
+ ":ocean:": "1f30a",
+ ":jack_o_lantern:": "1f383",
+ ":christmas_tree:": "1f384",
+ ":fireworks:": "1f386",
+ ":sparkler:": "1f387",
+ ":firecracker:": "1f9e8",
+ ":sparkles:": "2728",
+ ":balloon:": "1f388",
+ ":tada:": "1f389",
+ ":confetti_ball:": "1f38a",
+ ":tanabata_tree:": "1f38b",
+ ":bamboo:": "1f38d",
+ ":dolls:": "1f38e",
+ ":flags:": "1f38f",
+ ":wind_chime:": "1f390",
+ ":rice_scene:": "1f391",
+ ":red_envelope:": "1f9e7",
+ ":ribbon:": "1f380",
+ ":gift:": "1f381",
+ ":reminder_ribbon:": "1f397",
+ ":tickets:": "1f39f",
+ ":ticket:": "1f3ab",
+ ":military_medal:": "1f396",
+ ":trophy:": "1f3c6",
+ ":medal:": "1f3c5",
+ ":first_place:": "1f947",
+ ":second_place:": "1f948",
+ ":third_place:": "1f949",
+ ":soccer:": "26bd",
+ ":baseball:": "26be",
+ ":softball:": "1f94e",
+ ":basketball:": "1f3c0",
+ ":volleyball:": "1f3d0",
+ ":football:": "1f3c8",
+ ":rugby_football:": "1f3c9",
+ ":tennis:": "1f3be",
+ ":flying_disc:": "1f94f",
+ ":bowling:": "1f3b3",
+ ":cricket_game:": "1f3cf",
+ ":field_hockey:": "1f3d1",
+ ":hockey:": "1f3d2",
+ ":lacrosse:": "1f94d",
+ ":ping_pong:": "1f3d3",
+ ":badminton:": "1f3f8",
+ ":boxing_glove:": "1f94a",
+ ":martial_arts_uniform:": "1f94b",
+ ":goal:": "1f945",
+ ":golf:": "26f3",
+ ":ice_skate:": "26f8",
+ ":fishing_pole_and_fish:": "1f3a3",
+ ":diving_mask:": "1f93f",
+ ":running_shirt_with_sash:": "1f3bd",
+ ":ski:": "1f3bf",
+ ":sled:": "1f6f7",
+ ":curling_stone:": "1f94c",
+ ":dart:": "1f3af",
+ ":yo_yo:": "1fa80",
+ ":kite:": "1fa81",
+ ":gun:": "1f52b",
+ ":8ball:": "1f3b1",
+ ":crystal_ball:": "1f52e",
+ ":magic_wand:": "1fa84",
+ ":video_game:": "1f3ae",
+ ":joystick:": "1f579",
+ ":slot_machine:": "1f3b0",
+ ":game_die:": "1f3b2",
+ ":jigsaw:": "1f9e9",
+ ":teddy_bear:": "1f9f8",
+ ":pinata:": "1fa85",
+ ":mirror_ball:": "1faa9",
+ ":nesting_dolls:": "1fa86",
+ ":spades:": "2660",
+ ":hearts:": "2665",
+ ":diamonds:": "2666",
+ ":clubs:": "2663",
+ ":chess_pawn:": "265f",
+ ":black_joker:": "1f0cf",
+ ":mahjong:": "1f004",
+ ":flower_playing_cards:": "1f3b4",
+ ":performing_arts:": "1f3ad",
+ ":frame_photo:": "1f5bc",
+ ":art:": "1f3a8",
+ ":thread:": "1f9f5",
+ ":sewing_needle:": "1faa1",
+ ":yarn:": "1f9f6",
+ ":knot:": "1faa2",
+ ":eyeglasses:": "1f453",
+ ":dark_sunglasses:": "1f576",
+ ":goggles:": "1f97d",
+ ":lab_coat:": "1f97c",
+ ":safety_vest:": "1f9ba",
+ ":necktie:": "1f454",
+ ":shirt:": "1f455",
+ ":jeans:": "1f456",
+ ":scarf:": "1f9e3",
+ ":gloves:": "1f9e4",
+ ":coat:": "1f9e5",
+ ":socks:": "1f9e6",
+ ":dress:": "1f457",
+ ":kimono:": "1f458",
+ ":sari:": "1f97b",
+ ":one_piece_swimsuit:": "1fa71",
+ ":briefs:": "1fa72",
+ ":shorts:": "1fa73",
+ ":bikini:": "1f459",
+ ":womans_clothes:": "1f45a",
+ ":folding_hand_fan:": "1faad",
+ ":purse:": "1f45b",
+ ":handbag:": "1f45c",
+ ":pouch:": "1f45d",
+ ":shopping_bags:": "1f6cd",
+ ":school_satchel:": "1f392",
+ ":thong_sandal:": "1fa74",
+ ":mans_shoe:": "1f45e",
+ ":athletic_shoe:": "1f45f",
+ ":hiking_boot:": "1f97e",
+ ":womans_flat_shoe:": "1f97f",
+ ":high_heel:": "1f460",
+ ":sandal:": "1f461",
+ ":ballet_shoes:": "1fa70",
+ ":boot:": "1f462",
+ ":hair_pick:": "1faae",
+ ":crown:": "1f451",
+ ":womans_hat:": "1f452",
+ ":tophat:": "1f3a9",
+ ":mortar_board:": "1f393",
+ ":billed_cap:": "1f9e2",
+ ":military_helmet:": "1fa96",
+ ":helmet_with_cross:": "26d1",
+ ":prayer_beads:": "1f4ff",
+ ":lipstick:": "1f484",
+ ":ring:": "1f48d",
+ ":gem:": "1f48e",
+ ":mute:": "1f507",
+ ":speaker:": "1f508",
+ ":sound:": "1f509",
+ ":loud_sound:": "1f50a",
+ ":loudspeaker:": "1f4e2",
+ ":mega:": "1f4e3",
+ ":postal_horn:": "1f4ef",
+ ":bell:": "1f514",
+ ":no_bell:": "1f515",
+ ":musical_score:": "1f3bc",
+ ":musical_note:": "1f3b5",
+ ":notes:": "1f3b6",
+ ":microphone2:": "1f399",
+ ":level_slider:": "1f39a",
+ ":control_knobs:": "1f39b",
+ ":microphone:": "1f3a4",
+ ":headphones:": "1f3a7",
+ ":radio:": "1f4fb",
+ ":saxophone:": "1f3b7",
+ ":accordion:": "1fa97",
+ ":guitar:": "1f3b8",
+ ":musical_keyboard:": "1f3b9",
+ ":trumpet:": "1f3ba",
+ ":violin:": "1f3bb",
+ ":banjo:": "1fa95",
+ ":drum:": "1f941",
+ ":long_drum:": "1fa98",
+ ":maracas:": "1fa87",
+ ":flute:": "1fa88",
+ ":mobile_phone:": "1f4f1",
+ ":calling:": "1f4f2",
+ ":telephone:": "260e",
+ ":telephone_receiver:": "1f4de",
+ ":pager:": "1f4df",
+ ":fax:": "1f4e0",
+ ":battery:": "1f50b",
+ ":low_battery:": "1faab",
+ ":electric_plug:": "1f50c",
+ ":computer:": "1f4bb",
+ ":desktop:": "1f5a5",
+ ":printer:": "1f5a8",
+ ":keyboard:": "2328",
+ ":mouse_three_button:": "1f5b1",
+ ":trackball:": "1f5b2",
+ ":minidisc:": "1f4bd",
+ ":floppy_disk:": "1f4be",
+ ":cd:": "1f4bf",
+ ":dvd:": "1f4c0",
+ ":abacus:": "1f9ee",
+ ":movie_camera:": "1f3a5",
+ ":film_frames:": "1f39e",
+ ":projector:": "1f4fd",
+ ":clapper:": "1f3ac",
+ ":tv:": "1f4fa",
+ ":camera:": "1f4f7",
+ ":camera_with_flash:": "1f4f8",
+ ":video_camera:": "1f4f9",
+ ":vhs:": "1f4fc",
+ ":mag:": "1f50d",
+ ":mag_right:": "1f50e",
+ ":candle:": "1f56f",
+ ":bulb:": "1f4a1",
+ ":flashlight:": "1f526",
+ ":izakaya_lantern:": "1f3ee",
+ ":diya_lamp:": "1fa94",
+ ":notebook_with_decorative_cover:": "1f4d4",
+ ":closed_book:": "1f4d5",
+ ":book:": "1f4d6",
+ ":green_book:": "1f4d7",
+ ":blue_book:": "1f4d8",
+ ":orange_book:": "1f4d9",
+ ":books:": "1f4da",
+ ":notebook:": "1f4d3",
+ ":ledger:": "1f4d2",
+ ":page_with_curl:": "1f4c3",
+ ":scroll:": "1f4dc",
+ ":page_facing_up:": "1f4c4",
+ ":newspaper:": "1f4f0",
+ ":newspaper2:": "1f5de",
+ ":bookmark_tabs:": "1f4d1",
+ ":bookmark:": "1f516",
+ ":label:": "1f3f7",
+ ":moneybag:": "1f4b0",
+ ":coin:": "1fa99",
+ ":yen:": "1f4b4",
+ ":dollar:": "1f4b5",
+ ":euro:": "1f4b6",
+ ":pound:": "1f4b7",
+ ":money_with_wings:": "1f4b8",
+ ":credit_card:": "1f4b3",
+ ":receipt:": "1f9fe",
+ ":chart:": "1f4b9",
+ ":envelope:": "2709",
+ ":e-mail:": "1f4e7",
+ ":incoming_envelope:": "1f4e8",
+ ":envelope_with_arrow:": "1f4e9",
+ ":outbox_tray:": "1f4e4",
+ ":inbox_tray:": "1f4e5",
+ ":package:": "1f4e6",
+ ":mailbox:": "1f4eb",
+ ":mailbox_closed:": "1f4ea",
+ ":mailbox_with_mail:": "1f4ec",
+ ":mailbox_with_no_mail:": "1f4ed",
+ ":postbox:": "1f4ee",
+ ":ballot_box:": "1f5f3",
+ ":pencil2:": "270f",
+ ":black_nib:": "2712",
+ ":pen_fountain:": "1f58b",
+ ":pen_ballpoint:": "1f58a",
+ ":paintbrush:": "1f58c",
+ ":crayon:": "1f58d",
+ ":pencil:": "1f4dd",
+ ":briefcase:": "1f4bc",
+ ":file_folder:": "1f4c1",
+ ":open_file_folder:": "1f4c2",
+ ":dividers:": "1f5c2",
+ ":date:": "1f4c5",
+ ":calendar:": "1f4c6",
+ ":notepad_spiral:": "1f5d2",
+ ":calendar_spiral:": "1f5d3",
+ ":card_index:": "1f4c7",
+ ":chart_with_upwards_trend:": "1f4c8",
+ ":chart_with_downwards_trend:": "1f4c9",
+ ":bar_chart:": "1f4ca",
+ ":clipboard:": "1f4cb",
+ ":pushpin:": "1f4cc",
+ ":round_pushpin:": "1f4cd",
+ ":paperclip:": "1f4ce",
+ ":paperclips:": "1f587",
+ ":straight_ruler:": "1f4cf",
+ ":triangular_ruler:": "1f4d0",
+ ":scissors:": "2702",
+ ":card_box:": "1f5c3",
+ ":file_cabinet:": "1f5c4",
+ ":wastebasket:": "1f5d1",
+ ":lock:": "1f512",
+ ":unlock:": "1f513",
+ ":lock_with_ink_pen:": "1f50f",
+ ":closed_lock_with_key:": "1f510",
+ ":key:": "1f511",
+ ":key2:": "1f5dd",
+ ":hammer:": "1f528",
+ ":axe:": "1fa93",
+ ":pick:": "26cf",
+ ":hammer_pick:": "2692",
+ ":tools:": "1f6e0",
+ ":dagger:": "1f5e1",
+ ":crossed_swords:": "2694",
+ ":bomb:": "1f4a3",
+ ":boomerang:": "1fa83",
+ ":bow_and_arrow:": "1f3f9",
+ ":shield:": "1f6e1",
+ ":carpentry_saw:": "1fa9a",
+ ":wrench:": "1f527",
+ ":screwdriver:": "1fa9b",
+ ":nut_and_bolt:": "1f529",
+ ":gear:": "2699",
+ ":compression:": "1f5dc",
+ ":scales:": "2696",
+ ":probing_cane:": "1f9af",
+ ":link:": "1f517",
+ ":chains:": "26d3",
+ ":hook:": "1fa9d",
+ ":toolbox:": "1f9f0",
+ ":magnet:": "1f9f2",
+ ":ladder:": "1fa9c",
+ ":alembic:": "2697",
+ ":test_tube:": "1f9ea",
+ ":petri_dish:": "1f9eb",
+ ":dna:": "1f9ec",
+ ":microscope:": "1f52c",
+ ":telescope:": "1f52d",
+ ":satellite:": "1f4e1",
+ ":syringe:": "1f489",
+ ":drop_of_blood:": "1fa78",
+ ":pill:": "1f48a",
+ ":adhesive_bandage:": "1fa79",
+ ":crutch:": "1fa7c",
+ ":stethoscope:": "1fa7a",
+ ":x_ray:": "1fa7b",
+ ":door:": "1f6aa",
+ ":elevator:": "1f6d7",
+ ":mirror:": "1fa9e",
+ ":window:": "1fa9f",
+ ":bed:": "1f6cf",
+ ":couch:": "1f6cb",
+ ":chair:": "1fa91",
+ ":toilet:": "1f6bd",
+ ":plunger:": "1faa0",
+ ":shower:": "1f6bf",
+ ":bathtub:": "1f6c1",
+ ":mouse_trap:": "1faa4",
+ ":razor:": "1fa92",
+ ":squeeze_bottle:": "1f9f4",
+ ":safety_pin:": "1f9f7",
+ ":broom:": "1f9f9",
+ ":basket:": "1f9fa",
+ ":roll_of_paper:": "1f9fb",
+ ":bucket:": "1faa3",
+ ":soap:": "1f9fc",
+ ":bubbles:": "1fae7",
+ ":toothbrush:": "1faa5",
+ ":sponge:": "1f9fd",
+ ":fire_extinguisher:": "1f9ef",
+ ":shopping_cart:": "1f6d2",
+ ":smoking:": "1f6ac",
+ ":coffin:": "26b0",
+ ":headstone:": "1faa6",
+ ":urn:": "26b1",
+ ":nazar_amulet:": "1f9ff",
+ ":hamsa:": "1faac",
+ ":moyai:": "1f5ff",
+ ":placard:": "1faa7",
+ ":identification_card:": "1faaa",
+ ":atm:": "1f3e7",
+ ":put_litter_in_its_place:": "1f6ae",
+ ":potable_water:": "1f6b0",
+ ":wheelchair:": "267f",
+ ":mens:": "1f6b9",
+ ":womens:": "1f6ba",
+ ":restroom:": "1f6bb",
+ ":baby_symbol:": "1f6bc",
+ ":wc:": "1f6be",
+ ":passport_control:": "1f6c2",
+ ":customs:": "1f6c3",
+ ":baggage_claim:": "1f6c4",
+ ":left_luggage:": "1f6c5",
+ ":warning:": "26a0",
+ ":children_crossing:": "1f6b8",
+ ":no_entry:": "26d4",
+ ":no_entry_sign:": "1f6ab",
+ ":no_bicycles:": "1f6b3",
+ ":no_smoking:": "1f6ad",
+ ":do_not_litter:": "1f6af",
+ ":non-potable_water:": "1f6b1",
+ ":no_pedestrians:": "1f6b7",
+ ":no_mobile_phones:": "1f4f5",
+ ":underage:": "1f51e",
+ ":radioactive:": "2622",
+ ":biohazard:": "2623",
+ ":arrow_up:": "2b06",
+ ":arrow_upper_right:": "2197",
+ ":arrow_right:": "27a1",
+ ":arrow_lower_right:": "2198",
+ ":arrow_down:": "2b07",
+ ":arrow_lower_left:": "2199",
+ ":arrow_left:": "2b05",
+ ":arrow_upper_left:": "2196",
+ ":arrow_up_down:": "2195",
+ ":left_right_arrow:": "2194",
+ ":leftwards_arrow_with_hook:": "21a9",
+ ":arrow_right_hook:": "21aa",
+ ":arrow_heading_up:": "2934",
+ ":arrow_heading_down:": "2935",
+ ":arrows_clockwise:": "1f503",
+ ":arrows_counterclockwise:": "1f504",
+ ":back:": "1f519",
+ ":end:": "1f51a",
+ ":on:": "1f51b",
+ ":soon:": "1f51c",
+ ":top:": "1f51d",
+ ":place_of_worship:": "1f6d0",
+ ":atom:": "269b",
+ ":om_symbol:": "1f549",
+ ":star_of_david:": "2721",
+ ":wheel_of_dharma:": "2638",
+ ":yin_yang:": "262f",
+ ":cross:": "271d",
+ ":orthodox_cross:": "2626",
+ ":star_and_crescent:": "262a",
+ ":peace:": "262e",
+ ":menorah:": "1f54e",
+ ":six_pointed_star:": "1f52f",
+ ":khanda:": "1faaf",
+ ":aries:": "2648",
+ ":taurus:": "2649",
+ ":gemini:": "264a",
+ ":cancer:": "264b",
+ ":leo:": "264c",
+ ":virgo:": "264d",
+ ":libra:": "264e",
+ ":scorpius:": "264f",
+ ":sagittarius:": "2650",
+ ":capricorn:": "2651",
+ ":aquarius:": "2652",
+ ":pisces:": "2653",
+ ":ophiuchus:": "26ce",
+ ":twisted_rightwards_arrows:": "1f500",
+ ":repeat:": "1f501",
+ ":repeat_one:": "1f502",
+ ":arrow_forward:": "25b6",
+ ":fast_forward:": "23e9",
+ ":track_next:": "23ed",
+ ":play_pause:": "23ef",
+ ":arrow_backward:": "25c0",
+ ":rewind:": "23ea",
+ ":track_previous:": "23ee",
+ ":arrow_up_small:": "1f53c",
+ ":arrow_double_up:": "23eb",
+ ":arrow_down_small:": "1f53d",
+ ":arrow_double_down:": "23ec",
+ ":pause_button:": "23f8",
+ ":stop_button:": "23f9",
+ ":record_button:": "23fa",
+ ":eject:": "23cf",
+ ":cinema:": "1f3a6",
+ ":low_brightness:": "1f505",
+ ":high_brightness:": "1f506",
+ ":signal_strength:": "1f4f6",
+ ":wireless:": "1f6dc",
+ ":vibration_mode:": "1f4f3",
+ ":mobile_phone_off:": "1f4f4",
+ ":female_sign:": "2640",
+ ":male_sign:": "2642",
+ ":transgender_symbol:": "26a7",
+ ":heavy_multiplication_x:": "2716",
+ ":heavy_plus_sign:": "2795",
+ ":heavy_minus_sign:": "2796",
+ ":heavy_division_sign:": "2797",
+ ":heavy_equals_sign:": "1f7f0",
+ ":infinity:": "267e",
+ ":bangbang:": "203c",
+ ":interrobang:": "2049",
+ ":question:": "2753",
+ ":grey_question:": "2754",
+ ":grey_exclamation:": "2755",
+ ":exclamation:": "2757",
+ ":wavy_dash:": "3030",
+ ":currency_exchange:": "1f4b1",
+ ":heavy_dollar_sign:": "1f4b2",
+ ":medical_symbol:": "2695",
+ ":recycle:": "267b",
+ ":fleur-de-lis:": "269c",
+ ":trident:": "1f531",
+ ":name_badge:": "1f4db",
+ ":beginner:": "1f530",
+ ":o:": "2b55",
+ ":white_check_mark:": "2705",
+ ":ballot_box_with_check:": "2611",
+ ":heavy_check_mark:": "2714",
+ ":x:": "274c",
+ ":negative_squared_cross_mark:": "274e",
+ ":curly_loop:": "27b0",
+ ":loop:": "27bf",
+ ":part_alternation_mark:": "303d",
+ ":eight_spoked_asterisk:": "2733",
+ ":eight_pointed_black_star:": "2734",
+ ":sparkle:": "2747",
+ ":copyright:": "a9",
+ ":registered:": "ae",
+ ":tm:": "2122",
+ ":hash:": "23-20e3",
+ ":asterisk:": "2a-20e3",
+ ":zero:": "30-20e3",
+ ":one:": "31-20e3",
+ ":two:": "32-20e3",
+ ":three:": "33-20e3",
+ ":four:": "34-20e3",
+ ":five:": "35-20e3",
+ ":six:": "36-20e3",
+ ":seven:": "37-20e3",
+ ":eight:": "38-20e3",
+ ":nine:": "39-20e3",
+ ":keycap_ten:": "1f51f",
+ ":capital_abcd:": "1f520",
+ ":abcd:": "1f521",
+ ":1234:": "1f522",
+ ":symbols:": "1f523",
+ ":abc:": "1f524",
+ ":a:": "1f170",
+ ":ab:": "1f18e",
+ ":b:": "1f171",
+ ":cl:": "1f191",
+ ":cool:": "1f192",
+ ":free:": "1f193",
+ ":information_source:": "2139",
+ ":id:": "1f194",
+ ":m:": "24c2",
+ ":new:": "1f195",
+ ":ng:": "1f196",
+ ":o2:": "1f17e",
+ ":ok:": "1f197",
+ ":parking:": "1f17f",
+ ":sos:": "1f198",
+ ":up:": "1f199",
+ ":vs:": "1f19a",
+ ":koko:": "1f201",
+ ":sa:": "1f202",
+ ":u6708:": "1f237",
+ ":u6709:": "1f236",
+ ":u6307:": "1f22f",
+ ":ideograph_advantage:": "1f250",
+ ":u5272:": "1f239",
+ ":u7121:": "1f21a",
+ ":u7981:": "1f232",
+ ":accept:": "1f251",
+ ":u7533:": "1f238",
+ ":u5408:": "1f234",
+ ":u7a7a:": "1f233",
+ ":congratulations:": "3297",
+ ":secret:": "3299",
+ ":u55b6:": "1f23a",
+ ":u6e80:": "1f235",
+ ":red_circle:": "1f534",
+ ":orange_circle:": "1f7e0",
+ ":yellow_circle:": "1f7e1",
+ ":green_circle:": "1f7e2",
+ ":blue_circle:": "1f535",
+ ":purple_circle:": "1f7e3",
+ ":brown_circle:": "1f7e4",
+ ":black_circle:": "26ab",
+ ":white_circle:": "26aa",
+ ":red_square:": "1f7e5",
+ ":orange_square:": "1f7e7",
+ ":yellow_square:": "1f7e8",
+ ":green_square:": "1f7e9",
+ ":blue_square:": "1f7e6",
+ ":purple_square:": "1f7ea",
+ ":brown_square:": "1f7eb",
+ ":black_large_square:": "2b1b",
+ ":white_large_square:": "2b1c",
+ ":black_medium_square:": "25fc",
+ ":white_medium_square:": "25fb",
+ ":black_medium_small_square:": "25fe",
+ ":white_medium_small_square:": "25fd",
+ ":black_small_square:": "25aa",
+ ":white_small_square:": "25ab",
+ ":large_orange_diamond:": "1f536",
+ ":large_blue_diamond:": "1f537",
+ ":small_orange_diamond:": "1f538",
+ ":small_blue_diamond:": "1f539",
+ ":small_red_triangle:": "1f53a",
+ ":small_red_triangle_down:": "1f53b",
+ ":diamond_shape_with_a_dot_inside:": "1f4a0",
+ ":radio_button:": "1f518",
+ ":white_square_button:": "1f533",
+ ":black_square_button:": "1f532",
+ ":checkered_flag:": "1f3c1",
+ ":triangular_flag_on_post:": "1f6a9",
+ ":crossed_flags:": "1f38c",
+ ":flag_black:": "1f3f4",
+ ":flag_white:": "1f3f3",
+ ":rainbow_flag:": "1f3f3-fe0f-200d-1f308",
+ ":transgender_flag:": "1f3f3-fe0f-200d-26a7-fe0f",
+ ":pirate_flag:": "1f3f4-200d-2620-fe0f",
+ ":flag_ac:": "1f1e6-1f1e8",
+ ":flag_ad:": "1f1e6-1f1e9",
+ ":flag_ae:": "1f1e6-1f1ea",
+ ":flag_af:": "1f1e6-1f1eb",
+ ":flag_ag:": "1f1e6-1f1ec",
+ ":flag_ai:": "1f1e6-1f1ee",
+ ":flag_al:": "1f1e6-1f1f1",
+ ":flag_am:": "1f1e6-1f1f2",
+ ":flag_ao:": "1f1e6-1f1f4",
+ ":flag_aq:": "1f1e6-1f1f6",
+ ":flag_ar:": "1f1e6-1f1f7",
+ ":flag_as:": "1f1e6-1f1f8",
+ ":flag_at:": "1f1e6-1f1f9",
+ ":flag_au:": "1f1e6-1f1fa",
+ ":flag_aw:": "1f1e6-1f1fc",
+ ":flag_ax:": "1f1e6-1f1fd",
+ ":flag_az:": "1f1e6-1f1ff",
+ ":flag_ba:": "1f1e7-1f1e6",
+ ":flag_bb:": "1f1e7-1f1e7",
+ ":flag_bd:": "1f1e7-1f1e9",
+ ":flag_be:": "1f1e7-1f1ea",
+ ":flag_bf:": "1f1e7-1f1eb",
+ ":flag_bg:": "1f1e7-1f1ec",
+ ":flag_bh:": "1f1e7-1f1ed",
+ ":flag_bi:": "1f1e7-1f1ee",
+ ":flag_bj:": "1f1e7-1f1ef",
+ ":flag_bl:": "1f1e7-1f1f1",
+ ":flag_bm:": "1f1e7-1f1f2",
+ ":flag_bn:": "1f1e7-1f1f3",
+ ":flag_bo:": "1f1e7-1f1f4",
+ ":flag_bq:": "1f1e7-1f1f6",
+ ":flag_br:": "1f1e7-1f1f7",
+ ":flag_bs:": "1f1e7-1f1f8",
+ ":flag_bt:": "1f1e7-1f1f9",
+ ":flag_bv:": "1f1e7-1f1fb",
+ ":flag_bw:": "1f1e7-1f1fc",
+ ":flag_by:": "1f1e7-1f1fe",
+ ":flag_bz:": "1f1e7-1f1ff",
+ ":flag_ca:": "1f1e8-1f1e6",
+ ":flag_cc:": "1f1e8-1f1e8",
+ ":flag_cd:": "1f1e8-1f1e9",
+ ":flag_cf:": "1f1e8-1f1eb",
+ ":flag_cg:": "1f1e8-1f1ec",
+ ":flag_ch:": "1f1e8-1f1ed",
+ ":flag_ci:": "1f1e8-1f1ee",
+ ":flag_ck:": "1f1e8-1f1f0",
+ ":flag_cl:": "1f1e8-1f1f1",
+ ":flag_cm:": "1f1e8-1f1f2",
+ ":flag_cn:": "1f1e8-1f1f3",
+ ":flag_co:": "1f1e8-1f1f4",
+ ":flag_cp:": "1f1e8-1f1f5",
+ ":flag_cr:": "1f1e8-1f1f7",
+ ":flag_cu:": "1f1e8-1f1fa",
+ ":flag_cv:": "1f1e8-1f1fb",
+ ":flag_cw:": "1f1e8-1f1fc",
+ ":flag_cx:": "1f1e8-1f1fd",
+ ":flag_cy:": "1f1e8-1f1fe",
+ ":flag_cz:": "1f1e8-1f1ff",
+ ":flag_de:": "1f1e9-1f1ea",
+ ":flag_dg:": "1f1e9-1f1ec",
+ ":flag_dj:": "1f1e9-1f1ef",
+ ":flag_dk:": "1f1e9-1f1f0",
+ ":flag_dm:": "1f1e9-1f1f2",
+ ":flag_do:": "1f1e9-1f1f4",
+ ":flag_dz:": "1f1e9-1f1ff",
+ ":flag_ea:": "1f1ea-1f1e6",
+ ":flag_ec:": "1f1ea-1f1e8",
+ ":flag_ee:": "1f1ea-1f1ea",
+ ":flag_eg:": "1f1ea-1f1ec",
+ ":flag_eh:": "1f1ea-1f1ed",
+ ":flag_er:": "1f1ea-1f1f7",
+ ":flag_es:": "1f1ea-1f1f8",
+ ":flag_et:": "1f1ea-1f1f9",
+ ":flag_eu:": "1f1ea-1f1fa",
+ ":flag_fi:": "1f1eb-1f1ee",
+ ":flag_fj:": "1f1eb-1f1ef",
+ ":flag_fk:": "1f1eb-1f1f0",
+ ":flag_fm:": "1f1eb-1f1f2",
+ ":flag_fo:": "1f1eb-1f1f4",
+ ":flag_fr:": "1f1eb-1f1f7",
+ ":flag_ga:": "1f1ec-1f1e6",
+ ":flag_gb:": "1f1ec-1f1e7",
+ ":flag_gd:": "1f1ec-1f1e9",
+ ":flag_ge:": "1f1ec-1f1ea",
+ ":flag_gf:": "1f1ec-1f1eb",
+ ":flag_gg:": "1f1ec-1f1ec",
+ ":flag_gh:": "1f1ec-1f1ed",
+ ":flag_gi:": "1f1ec-1f1ee",
+ ":flag_gl:": "1f1ec-1f1f1",
+ ":flag_gm:": "1f1ec-1f1f2",
+ ":flag_gn:": "1f1ec-1f1f3",
+ ":flag_gp:": "1f1ec-1f1f5",
+ ":flag_gq:": "1f1ec-1f1f6",
+ ":flag_gr:": "1f1ec-1f1f7",
+ ":flag_gs:": "1f1ec-1f1f8",
+ ":flag_gt:": "1f1ec-1f1f9",
+ ":flag_gu:": "1f1ec-1f1fa",
+ ":flag_gw:": "1f1ec-1f1fc",
+ ":flag_gy:": "1f1ec-1f1fe",
+ ":flag_hk:": "1f1ed-1f1f0",
+ ":flag_hm:": "1f1ed-1f1f2",
+ ":flag_hn:": "1f1ed-1f1f3",
+ ":flag_hr:": "1f1ed-1f1f7",
+ ":flag_ht:": "1f1ed-1f1f9",
+ ":flag_hu:": "1f1ed-1f1fa",
+ ":flag_ic:": "1f1ee-1f1e8",
+ ":flag_id:": "1f1ee-1f1e9",
+ ":flag_ie:": "1f1ee-1f1ea",
+ ":flag_il:": "1f1ee-1f1f1",
+ ":flag_im:": "1f1ee-1f1f2",
+ ":flag_in:": "1f1ee-1f1f3",
+ ":flag_io:": "1f1ee-1f1f4",
+ ":flag_iq:": "1f1ee-1f1f6",
+ ":flag_ir:": "1f1ee-1f1f7",
+ ":flag_is:": "1f1ee-1f1f8",
+ ":flag_it:": "1f1ee-1f1f9",
+ ":flag_je:": "1f1ef-1f1ea",
+ ":flag_jm:": "1f1ef-1f1f2",
+ ":flag_jo:": "1f1ef-1f1f4",
+ ":flag_jp:": "1f1ef-1f1f5",
+ ":flag_ke:": "1f1f0-1f1ea",
+ ":flag_kg:": "1f1f0-1f1ec",
+ ":flag_kh:": "1f1f0-1f1ed",
+ ":flag_ki:": "1f1f0-1f1ee",
+ ":flag_km:": "1f1f0-1f1f2",
+ ":flag_kn:": "1f1f0-1f1f3",
+ ":flag_kp:": "1f1f0-1f1f5",
+ ":flag_kr:": "1f1f0-1f1f7",
+ ":flag_kw:": "1f1f0-1f1fc",
+ ":flag_ky:": "1f1f0-1f1fe",
+ ":flag_kz:": "1f1f0-1f1ff",
+ ":flag_la:": "1f1f1-1f1e6",
+ ":flag_lb:": "1f1f1-1f1e7",
+ ":flag_lc:": "1f1f1-1f1e8",
+ ":flag_li:": "1f1f1-1f1ee",
+ ":flag_lk:": "1f1f1-1f1f0",
+ ":flag_lr:": "1f1f1-1f1f7",
+ ":flag_ls:": "1f1f1-1f1f8",
+ ":flag_lt:": "1f1f1-1f1f9",
+ ":flag_lu:": "1f1f1-1f1fa",
+ ":flag_lv:": "1f1f1-1f1fb",
+ ":flag_ly:": "1f1f1-1f1fe",
+ ":flag_ma:": "1f1f2-1f1e6",
+ ":flag_mc:": "1f1f2-1f1e8",
+ ":flag_md:": "1f1f2-1f1e9",
+ ":flag_me:": "1f1f2-1f1ea",
+ ":flag_mf:": "1f1f2-1f1eb",
+ ":flag_mg:": "1f1f2-1f1ec",
+ ":flag_mh:": "1f1f2-1f1ed",
+ ":flag_mk:": "1f1f2-1f1f0",
+ ":flag_ml:": "1f1f2-1f1f1",
+ ":flag_mm:": "1f1f2-1f1f2",
+ ":flag_mn:": "1f1f2-1f1f3",
+ ":flag_mo:": "1f1f2-1f1f4",
+ ":flag_mp:": "1f1f2-1f1f5",
+ ":flag_mq:": "1f1f2-1f1f6",
+ ":flag_mr:": "1f1f2-1f1f7",
+ ":flag_ms:": "1f1f2-1f1f8",
+ ":flag_mt:": "1f1f2-1f1f9",
+ ":flag_mu:": "1f1f2-1f1fa",
+ ":flag_mv:": "1f1f2-1f1fb",
+ ":flag_mw:": "1f1f2-1f1fc",
+ ":flag_mx:": "1f1f2-1f1fd",
+ ":flag_my:": "1f1f2-1f1fe",
+ ":flag_mz:": "1f1f2-1f1ff",
+ ":flag_na:": "1f1f3-1f1e6",
+ ":flag_nc:": "1f1f3-1f1e8",
+ ":flag_ne:": "1f1f3-1f1ea",
+ ":flag_nf:": "1f1f3-1f1eb",
+ ":flag_ng:": "1f1f3-1f1ec",
+ ":flag_ni:": "1f1f3-1f1ee",
+ ":flag_nl:": "1f1f3-1f1f1",
+ ":flag_no:": "1f1f3-1f1f4",
+ ":flag_np:": "1f1f3-1f1f5",
+ ":flag_nr:": "1f1f3-1f1f7",
+ ":flag_nu:": "1f1f3-1f1fa",
+ ":flag_nz:": "1f1f3-1f1ff",
+ ":flag_om:": "1f1f4-1f1f2",
+ ":flag_pa:": "1f1f5-1f1e6",
+ ":flag_pe:": "1f1f5-1f1ea",
+ ":flag_pf:": "1f1f5-1f1eb",
+ ":flag_pg:": "1f1f5-1f1ec",
+ ":flag_ph:": "1f1f5-1f1ed",
+ ":flag_pk:": "1f1f5-1f1f0",
+ ":flag_pl:": "1f1f5-1f1f1",
+ ":flag_pm:": "1f1f5-1f1f2",
+ ":flag_pn:": "1f1f5-1f1f3",
+ ":flag_pr:": "1f1f5-1f1f7",
+ ":flag_ps:": "1f1f5-1f1f8",
+ ":flag_pt:": "1f1f5-1f1f9",
+ ":flag_pw:": "1f1f5-1f1fc",
+ ":flag_py:": "1f1f5-1f1fe",
+ ":flag_qa:": "1f1f6-1f1e6",
+ ":flag_re:": "1f1f7-1f1ea",
+ ":flag_ro:": "1f1f7-1f1f4",
+ ":flag_rs:": "1f1f7-1f1f8",
+ ":flag_ru:": "1f1f7-1f1fa",
+ ":flag_rw:": "1f1f7-1f1fc",
+ ":flag_sa:": "1f1f8-1f1e6",
+ ":flag_sb:": "1f1f8-1f1e7",
+ ":flag_sc:": "1f1f8-1f1e8",
+ ":flag_sd:": "1f1f8-1f1e9",
+ ":flag_se:": "1f1f8-1f1ea",
+ ":flag_sg:": "1f1f8-1f1ec",
+ ":flag_sh:": "1f1f8-1f1ed",
+ ":flag_si:": "1f1f8-1f1ee",
+ ":flag_sj:": "1f1f8-1f1ef",
+ ":flag_sk:": "1f1f8-1f1f0",
+ ":flag_sl:": "1f1f8-1f1f1",
+ ":flag_sm:": "1f1f8-1f1f2",
+ ":flag_sn:": "1f1f8-1f1f3",
+ ":flag_so:": "1f1f8-1f1f4",
+ ":flag_sr:": "1f1f8-1f1f7",
+ ":flag_ss:": "1f1f8-1f1f8",
+ ":flag_st:": "1f1f8-1f1f9",
+ ":flag_sv:": "1f1f8-1f1fb",
+ ":flag_sx:": "1f1f8-1f1fd",
+ ":flag_sy:": "1f1f8-1f1fe",
+ ":flag_sz:": "1f1f8-1f1ff",
+ ":flag_ta:": "1f1f9-1f1e6",
+ ":flag_tc:": "1f1f9-1f1e8",
+ ":flag_td:": "1f1f9-1f1e9",
+ ":flag_tf:": "1f1f9-1f1eb",
+ ":flag_tg:": "1f1f9-1f1ec",
+ ":flag_th:": "1f1f9-1f1ed",
+ ":flag_tj:": "1f1f9-1f1ef",
+ ":flag_tk:": "1f1f9-1f1f0",
+ ":flag_tl:": "1f1f9-1f1f1",
+ ":flag_tm:": "1f1f9-1f1f2",
+ ":flag_tn:": "1f1f9-1f1f3",
+ ":flag_to:": "1f1f9-1f1f4",
+ ":flag_tr:": "1f1f9-1f1f7",
+ ":flag_tt:": "1f1f9-1f1f9",
+ ":flag_tv:": "1f1f9-1f1fb",
+ ":flag_tw:": "1f1f9-1f1fc",
+ ":flag_tz:": "1f1f9-1f1ff",
+ ":flag_ua:": "1f1fa-1f1e6",
+ ":flag_ug:": "1f1fa-1f1ec",
+ ":flag_um:": "1f1fa-1f1f2",
+ ":united_nations:": "1f1fa-1f1f3",
+ ":flag_us:": "1f1fa-1f1f8",
+ ":flag_uy:": "1f1fa-1f1fe",
+ ":flag_uz:": "1f1fa-1f1ff",
+ ":flag_va:": "1f1fb-1f1e6",
+ ":flag_vc:": "1f1fb-1f1e8",
+ ":flag_ve:": "1f1fb-1f1ea",
+ ":flag_vg:": "1f1fb-1f1ec",
+ ":flag_vi:": "1f1fb-1f1ee",
+ ":flag_vn:": "1f1fb-1f1f3",
+ ":flag_vu:": "1f1fb-1f1fa",
+ ":flag_wf:": "1f1fc-1f1eb",
+ ":flag_ws:": "1f1fc-1f1f8",
+ ":flag_xk:": "1f1fd-1f1f0",
+ ":flag_ye:": "1f1fe-1f1ea",
+ ":flag_yt:": "1f1fe-1f1f9",
+ ":flag_za:": "1f1ff-1f1e6",
+ ":flag_zm:": "1f1ff-1f1f2",
+ ":flag_zw:": "1f1ff-1f1fc",
+ ":england:": "1f3f4-e0067-e0062-e0065-e006e-e0067-e007f",
+ ":scotland:": "1f3f4-e0067-e0062-e0073-e0063-e0074-e007f",
+ ":wales:": "1f3f4-e0067-e0062-e0077-e006c-e0073-e007f",
+}
diff --git a/status_sdk/exceptions.py b/status_sdk/exceptions.py
index 28c496a..7a6f550 100644
--- a/status_sdk/exceptions.py
+++ b/status_sdk/exceptions.py
@@ -74,6 +74,13 @@ class InvalidCommunityChannelColourError(ValueError):
class InvalidCommunityChannelEmojiError(ValueError):
pass
+class ChatNotFoundError(Exception):
+ pass
+
+class EmojiNotFoundError(Exception):
+ def __init__(self, shortname: str):
+ super().__init__(f"Emoji shortcode '{shortname}' does not exist...")
+
class GroupChatCreationError(Exception):
pass
diff --git a/status_sdk/group_chat.py b/status_sdk/group_chat.py
index 0f76c98..ee65b6b 100644
--- a/status_sdk/group_chat.py
+++ b/status_sdk/group_chat.py
@@ -84,6 +84,15 @@ def send_image(self, file_path: str, message: Optional[str] = None, reply_to_mes
"""
return self.__account.send_image(self.id, file_path, message, reply_to_message_id)
+ def send_emoji_reaction(self, message_id: str, emoji_shortname: str):
+ """
+ Set / unset emoji reaction for a message in the group chat.
+
+ Parameters:
+ - `message_id` - the `id` of the message, as it appears in `self.get_messages()`
+ - `emoji_shortname` - the emoji shortname as in Status App, with or without the surrounding colons
+ """
+ self.__account.send_emoji_reaction(message_id, emoji_shortname, self.id)
def get_messages(self, start_timestamp: Optional[Union[str, datetime.datetime, datetime.date, pd.Timestamp]] = None, end_timestamp: Optional[Union[str, datetime.datetime, datetime.date, pd.Timestamp]] = None) -> list[dict]:
"""
diff --git a/status_sdk/models.py b/status_sdk/models.py
new file mode 100644
index 0000000..61cefb2
--- /dev/null
+++ b/status_sdk/models.py
@@ -0,0 +1,99 @@
+from dataclasses import dataclass, field
+from typing import Self, Optional
+import datetime
+
+@dataclass
+class ContactRequest:
+ public_key: str
+ incoming: bool = False
+ accepted: bool = False
+
+ def __post_init__(self):
+ if not (self.incoming or self.accepted):
+ raise ValueError("A ContactRequest must be `incoming` or `accepted`")
+
+@dataclass
+class PaymentRequest:
+ to_address: str
+ token_symbol: str
+ token_address: str
+ chain_id: int
+ amount: str
+
+ @classmethod
+ def from_raw(cls, raw: dict) -> Self:
+ chain_id, token_address = raw["tokenKey"].split("-")
+ params = {
+ "to_address": raw["receiver"],
+ "token_symbol": raw["symbol"],
+ "token_address": token_address,
+ "chain_id": int(chain_id),
+ "amount": raw["amount"]
+ }
+ return cls(**params)
+
+@dataclass
+class Message:
+ id: str
+ chat_id: str
+ content: str
+ content_type: str
+ from_public_key: str
+ timestamp: datetime.datetime
+ chat_type: str
+ reply_id: Optional[str] = None
+ payment_requests: list[PaymentRequest] = field(default_factory=list)
+
+ @classmethod
+ def from_raw(cls, raw: dict) -> Self:
+ content_type: int = raw["contentType"]
+ msg_type: int = raw["messageType"]
+ params = {
+ "id": raw["id"],
+ "chat_id": raw["chatId"],
+ "from_public_key": raw["from"],
+ "timestamp": datetime.datetime.fromtimestamp(raw["whisperTimestamp"] / 1_000)
+ }
+
+ if len(raw["responseTo"]) > 0:
+ params["reply_id"] = raw["responseTo"]
+
+ if msg_type == 5:
+ params["chat_type"] = "community"
+
+ elif msg_type == 1:
+ params["chat_type"] = "private"
+
+ elif msg_type in [2, 3]:
+ params["chat_type"] = "group"
+
+ # Text & Emojis
+ if content_type in [1, 4]:
+ params["content"] = raw["text"]
+ params["content_type"] = "text" if content_type == 1 else "image"
+ # Sticker
+ elif content_type == 2:
+ params["content"] = raw["sticker"]["url"]
+ params["content_type"] = "sticker"
+ # Image
+ elif content_type == 7:
+ img_path = raw["image"]
+ text = raw["text"]
+ caption = f"{text}\n\n" if len(text) > 0 else ""
+ params["content"] = f"{caption}{img_path}"
+ params["content_type"] = "image"
+
+ payments = raw.get("paymentRequests", [])
+ if payments:
+ params["payment_requests"] = [
+ PaymentRequest.from_raw(payment)
+ for payment in payments
+ ]
+ return cls(**params)
+
+
+@dataclass
+class CommunityRequest:
+ id: str
+ state: str
+ public_key: str
diff --git a/status_sdk/signal.py b/status_sdk/signal.py
index dd2265a..7fefd16 100644
--- a/status_sdk/signal.py
+++ b/status_sdk/signal.py
@@ -102,13 +102,18 @@ def __listen_message(self, ws: websocket.WebSocketApp, signal: str):
Listen continuously for Status Backend signals
"""
signal: dict = json.loads(signal)
- if signal["type"] != self.__signal_type:
+
+ if isinstance(self.__signal_type, str) and self.__signal_type != signal["type"]:
+ return
+
+ if isinstance(self.__signal_type, list) and signal["type"] not in self.__signal_type:
return
event: Optional[dict] = signal.get("event", {}) or {}
data = {
"timestamp": datetime.datetime.fromtimestamp(signal["timestamp"]),
"is_error": not isinstance(event.get("error"), type(None)),
+ "type": signal["type"],
"error_message": event.get("error"),
"event": event
}
@@ -124,13 +129,16 @@ def __close_thread(self):
if self.__thread.is_alive():
self.__thread.join(1)
- def listen(self, signal_type: str):
+ def listen(self, signal_type: Optional[Union[str, list[str]]] = None):
"""
Listen for a specific Signal forever
Parameters:
- `signal_type` - the "type" as it is in Status Backend
"""
+ if isinstance(signal_type, list) and len(signal_type) == 0:
+ signal_type = None
+
self.__signal_type = signal_type
ws = websocket.WebSocketApp(
self.__url,