diff --git a/app/src/main/assets/emoji.json b/app/src/main/assets/emoji.json
new file mode 100644
index 0000000000000000000000000000000000000000..16303c22f39152ffca89ffbc7265d332dae9136c
--- /dev/null
+++ b/app/src/main/assets/emoji.json
@@ -0,0 +1,6042 @@
+[
+  {
+    "shortcode": ":100:",
+    "replacement": "\ud83d\udcaf"
+  },
+  {
+    "shortcode": ":1234:",
+    "replacement": "\ud83d\udd22"
+  },
+  {
+    "shortcode": ":+1:",
+    "replacement": "\ud83d\udc4d"
+  },
+  {
+    "shortcode": ":-1:",
+    "replacement": "\ud83d\udc4e"
+  },
+  {
+    "shortcode": ":1st_place_medal:",
+    "replacement": "\ud83e\udd47"
+  },
+  {
+    "shortcode": ":2nd_place_medal:",
+    "replacement": "\ud83e\udd48"
+  },
+  {
+    "shortcode": ":3rd_place_medal:",
+    "replacement": "\ud83e\udd49"
+  },
+  {
+    "shortcode": ":8ball:",
+    "replacement": "\ud83c\udfb1"
+  },
+  {
+    "shortcode": ":a:",
+    "replacement": "\ud83c\udd70"
+  },
+  {
+    "shortcode": ":ab:",
+    "replacement": "\ud83c\udd8e"
+  },
+  {
+    "shortcode": ":abc:",
+    "replacement": "\ud83d\udd24"
+  },
+  {
+    "shortcode": ":abcd:",
+    "replacement": "\ud83d\udd21"
+  },
+  {
+    "shortcode": ":accept:",
+    "replacement": "\ud83c\ude51"
+  },
+  {
+    "shortcode": ":aerial_tramway:",
+    "replacement": "\ud83d\udea1"
+  },
+  {
+    "shortcode": ":afghanistan:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":airplane:",
+    "replacement": "\ud7c9\udf08"
+  },
+  {
+    "shortcode": ":aland_islands:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":alarm_clock:",
+    "replacement": "\ud7c8\udff0"
+  },
+  {
+    "shortcode": ":albania:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":alembic:",
+    "replacement": "\ud7c9\ude97"
+  },
+  {
+    "shortcode": ":algeria:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":alien:",
+    "replacement": "\ud83d\udc7d"
+  },
+  {
+    "shortcode": ":ambulance:",
+    "replacement": "\ud83d\ude91"
+  },
+  {
+    "shortcode": ":american_samoa:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":amphora:",
+    "replacement": "\ud83c\udffa"
+  },
+  {
+    "shortcode": ":anchor:",
+    "replacement": "\ud7c9\ude93"
+  },
+  {
+    "shortcode": ":andorra:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":angel:",
+    "replacement": "\ud83d\udc7c"
+  },
+  {
+    "shortcode": ":anger:",
+    "replacement": "\ud83d\udca2"
+  },
+  {
+    "shortcode": ":angola:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":angry:",
+    "replacement": "\ud83d\ude20"
+  },
+  {
+    "shortcode": ":anguilla:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":anguished:",
+    "replacement": "\ud83d\ude27"
+  },
+  {
+    "shortcode": ":ant:",
+    "replacement": "\ud83d\udc1c"
+  },
+  {
+    "shortcode": ":antarctica:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":antigua_barbuda:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":apple:",
+    "replacement": "\ud83c\udf4e"
+  },
+  {
+    "shortcode": ":aquarius:",
+    "replacement": "\ud7c9\ude52"
+  },
+  {
+    "shortcode": ":argentina:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":aries:",
+    "replacement": "\ud7c9\ude48"
+  },
+  {
+    "shortcode": ":armenia:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":arrow_backward:",
+    "replacement": "\ud7c9\uddc0"
+  },
+  {
+    "shortcode": ":arrow_double_down:",
+    "replacement": "\ud7c8\udfec"
+  },
+  {
+    "shortcode": ":arrow_double_up:",
+    "replacement": "\ud7c8\udfeb"
+  },
+  {
+    "shortcode": ":arrow_down:",
+    "replacement": "\ud7ca\udf07"
+  },
+  {
+    "shortcode": ":arrow_down_small:",
+    "replacement": "\ud83d\udd3d"
+  },
+  {
+    "shortcode": ":arrow_forward:",
+    "replacement": "\ud7c9\uddb6"
+  },
+  {
+    "shortcode": ":arrow_heading_down:",
+    "replacement": "\ud7ca\udd35"
+  },
+  {
+    "shortcode": ":arrow_heading_up:",
+    "replacement": "\ud7ca\udd34"
+  },
+  {
+    "shortcode": ":arrow_left:",
+    "replacement": "\ud7ca\udf05"
+  },
+  {
+    "shortcode": ":arrow_lower_left:",
+    "replacement": "\ud7c8\udd99"
+  },
+  {
+    "shortcode": ":arrow_lower_right:",
+    "replacement": "\ud7c8\udd98"
+  },
+  {
+    "shortcode": ":arrow_right:",
+    "replacement": "\ud7c9\udfa1"
+  },
+  {
+    "shortcode": ":arrow_right_hook:",
+    "replacement": "\ud7c8\uddaa"
+  },
+  {
+    "shortcode": ":arrow_up:",
+    "replacement": "\ud7ca\udf06"
+  },
+  {
+    "shortcode": ":arrow_up_down:",
+    "replacement": "\ud7c8\udd95"
+  },
+  {
+    "shortcode": ":arrow_up_small:",
+    "replacement": "\ud83d\udd3c"
+  },
+  {
+    "shortcode": ":arrow_upper_left:",
+    "replacement": "\ud7c8\udd96"
+  },
+  {
+    "shortcode": ":arrow_upper_right:",
+    "replacement": "\ud7c8\udd97"
+  },
+  {
+    "shortcode": ":arrows_clockwise:",
+    "replacement": "\ud83d\udd03"
+  },
+  {
+    "shortcode": ":arrows_counterclockwise:",
+    "replacement": "\ud83d\udd04"
+  },
+  {
+    "shortcode": ":art:",
+    "replacement": "\ud83c\udfa8"
+  },
+  {
+    "shortcode": ":articulated_lorry:",
+    "replacement": "\ud83d\ude9b"
+  },
+  {
+    "shortcode": ":artificial_satellite:",
+    "replacement": "\ud83d\udef0"
+  },
+  {
+    "shortcode": ":aruba:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":asterisk:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":astonished:",
+    "replacement": "\ud83d\ude32"
+  },
+  {
+    "shortcode": ":athletic_shoe:",
+    "replacement": "\ud83d\udc5f"
+  },
+  {
+    "shortcode": ":atm:",
+    "replacement": "\ud83c\udfe7"
+  },
+  {
+    "shortcode": ":atom:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":atom_symbol:",
+    "replacement": "\ud7c9\ude9b"
+  },
+  {
+    "shortcode": ":australia:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":austria:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":avocado:",
+    "replacement": "\ud83e\udd51"
+  },
+  {
+    "shortcode": ":azerbaijan:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":b:",
+    "replacement": "\ud83c\udd71"
+  },
+  {
+    "shortcode": ":baby:",
+    "replacement": "\ud83d\udc76"
+  },
+  {
+    "shortcode": ":baby_bottle:",
+    "replacement": "\ud83c\udf7c"
+  },
+  {
+    "shortcode": ":baby_chick:",
+    "replacement": "\ud83d\udc24"
+  },
+  {
+    "shortcode": ":baby_symbol:",
+    "replacement": "\ud83d\udebc"
+  },
+  {
+    "shortcode": ":back:",
+    "replacement": "\ud83d\udd19"
+  },
+  {
+    "shortcode": ":bacon:",
+    "replacement": "\ud83e\udd53"
+  },
+  {
+    "shortcode": ":badminton:",
+    "replacement": "\ud83c\udff8"
+  },
+  {
+    "shortcode": ":baggage_claim:",
+    "replacement": "\ud83d\udec4"
+  },
+  {
+    "shortcode": ":baguette_bread:",
+    "replacement": "\ud83e\udd56"
+  },
+  {
+    "shortcode": ":bahamas:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":bahrain:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":balance_scale:",
+    "replacement": "\ud7c9\ude96"
+  },
+  {
+    "shortcode": ":balloon:",
+    "replacement": "\ud83c\udf88"
+  },
+  {
+    "shortcode": ":ballot_box:",
+    "replacement": "\ud83d\uddf3"
+  },
+  {
+    "shortcode": ":ballot_box_with_check:",
+    "replacement": "\ud7c9\ude11"
+  },
+  {
+    "shortcode": ":bamboo:",
+    "replacement": "\ud83c\udf8d"
+  },
+  {
+    "shortcode": ":banana:",
+    "replacement": "\ud83c\udf4c"
+  },
+  {
+    "shortcode": ":bangbang:",
+    "replacement": "\ud7c8\udc3c"
+  },
+  {
+    "shortcode": ":bangladesh:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":bank:",
+    "replacement": "\ud83c\udfe6"
+  },
+  {
+    "shortcode": ":bar_chart:",
+    "replacement": "\ud83d\udcca"
+  },
+  {
+    "shortcode": ":barbados:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":barber:",
+    "replacement": "\ud83d\udc88"
+  },
+  {
+    "shortcode": ":baseball:",
+    "replacement": "\ud7c9\udebe"
+  },
+  {
+    "shortcode": ":basecamp:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":basecampy:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":basketball:",
+    "replacement": "\ud83c\udfc0"
+  },
+  {
+    "shortcode": ":basketball_man:",
+    "replacement": "\ud7c9\udef9"
+  },
+  {
+    "shortcode": ":basketball_woman:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":bat:",
+    "replacement": "\ud83e\udd87"
+  },
+  {
+    "shortcode": ":bath:",
+    "replacement": "\ud83d\udec0"
+  },
+  {
+    "shortcode": ":bathtub:",
+    "replacement": "\ud83d\udec1"
+  },
+  {
+    "shortcode": ":battery:",
+    "replacement": "\ud83d\udd0b"
+  },
+  {
+    "shortcode": ":beach_umbrella:",
+    "replacement": "\ud83c\udfd6"
+  },
+  {
+    "shortcode": ":bear:",
+    "replacement": "\ud83d\udc3b"
+  },
+  {
+    "shortcode": ":bed:",
+    "replacement": "\ud83d\udecf"
+  },
+  {
+    "shortcode": ":bee:",
+    "replacement": "\ud83d\udc1d"
+  },
+  {
+    "shortcode": ":beer:",
+    "replacement": "\ud83c\udf7a"
+  },
+  {
+    "shortcode": ":beers:",
+    "replacement": "\ud83c\udf7b"
+  },
+  {
+    "shortcode": ":beetle:",
+    "replacement": "\ud83d\udc1e"
+  },
+  {
+    "shortcode": ":beginner:",
+    "replacement": "\ud83d\udd30"
+  },
+  {
+    "shortcode": ":belarus:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":belgium:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":belize:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":bell:",
+    "replacement": "\ud83d\udd14"
+  },
+  {
+    "shortcode": ":bellhop_bell:",
+    "replacement": "\ud83d\udece"
+  },
+  {
+    "shortcode": ":benin:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":bento:",
+    "replacement": "\ud83c\udf71"
+  },
+  {
+    "shortcode": ":bermuda:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":bhutan:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":bicyclist:",
+    "replacement": "\ud83d\udeb4"
+  },
+  {
+    "shortcode": ":bike:",
+    "replacement": "\ud83d\udeb2"
+  },
+  {
+    "shortcode": ":biking_man:",
+    "replacement": "\ud83d\udeb4"
+  },
+  {
+    "shortcode": ":biking_woman:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":bikini:",
+    "replacement": "\ud83d\udc59"
+  },
+  {
+    "shortcode": ":biohazard:",
+    "replacement": "\ud7c9\ude23"
+  },
+  {
+    "shortcode": ":bird:",
+    "replacement": "\ud83d\udc26"
+  },
+  {
+    "shortcode": ":birthday:",
+    "replacement": "\ud83c\udf82"
+  },
+  {
+    "shortcode": ":black_circle:",
+    "replacement": "\ud7c9\udeab"
+  },
+  {
+    "shortcode": ":black_flag:",
+    "replacement": "\ud83c\udff4"
+  },
+  {
+    "shortcode": ":black_heart:",
+    "replacement": "\ud83d\udda4"
+  },
+  {
+    "shortcode": ":black_joker:",
+    "replacement": "\ud83c\udccf"
+  },
+  {
+    "shortcode": ":black_large_square:",
+    "replacement": "\ud7ca\udf1b"
+  },
+  {
+    "shortcode": ":black_medium_small_square:",
+    "replacement": "\ud7c9\uddfe"
+  },
+  {
+    "shortcode": ":black_medium_square:",
+    "replacement": "\ud7c9\uddfc"
+  },
+  {
+    "shortcode": ":black_nib:",
+    "replacement": "\ud7c9\udf12"
+  },
+  {
+    "shortcode": ":black_small_square:",
+    "replacement": "\ud7c9\uddaa"
+  },
+  {
+    "shortcode": ":black_square_button:",
+    "replacement": "\ud83d\udd32"
+  },
+  {
+    "shortcode": ":blonde_man:",
+    "replacement": "\ud83d\udc71"
+  },
+  {
+    "shortcode": ":blonde_woman:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":blossom:",
+    "replacement": "\ud83c\udf3c"
+  },
+  {
+    "shortcode": ":blowfish:",
+    "replacement": "\ud83d\udc21"
+  },
+  {
+    "shortcode": ":blue_book:",
+    "replacement": "\ud83d\udcd8"
+  },
+  {
+    "shortcode": ":blue_car:",
+    "replacement": "\ud83d\ude99"
+  },
+  {
+    "shortcode": ":blue_heart:",
+    "replacement": "\ud83d\udc99"
+  },
+  {
+    "shortcode": ":blush:",
+    "replacement": "\ud83d\ude0a"
+  },
+  {
+    "shortcode": ":boar:",
+    "replacement": "\ud83d\udc17"
+  },
+  {
+    "shortcode": ":boat:",
+    "replacement": "\ud7c9\udef5"
+  },
+  {
+    "shortcode": ":bolivia:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":bomb:",
+    "replacement": "\ud83d\udca3"
+  },
+  {
+    "shortcode": ":book:",
+    "replacement": "\ud83d\udcd6"
+  },
+  {
+    "shortcode": ":bookmark:",
+    "replacement": "\ud83d\udd16"
+  },
+  {
+    "shortcode": ":bookmark_tabs:",
+    "replacement": "\ud83d\udcd1"
+  },
+  {
+    "shortcode": ":books:",
+    "replacement": "\ud83d\udcda"
+  },
+  {
+    "shortcode": ":boom:",
+    "replacement": "\ud83d\udca5"
+  },
+  {
+    "shortcode": ":boot:",
+    "replacement": "\ud83d\udc62"
+  },
+  {
+    "shortcode": ":bosnia_herzegovina:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":botswana:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":bouquet:",
+    "replacement": "\ud83d\udc90"
+  },
+  {
+    "shortcode": ":bow:",
+    "replacement": "\ud83d\ude47"
+  },
+  {
+    "shortcode": ":bow_and_arrow:",
+    "replacement": "\ud83c\udff9"
+  },
+  {
+    "shortcode": ":bowing_man:",
+    "replacement": "\ud83d\ude47"
+  },
+  {
+    "shortcode": ":bowing_woman:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":bowling:",
+    "replacement": "\ud83c\udfb3"
+  },
+  {
+    "shortcode": ":bowtie:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":boxing_glove:",
+    "replacement": "\ud83e\udd4a"
+  },
+  {
+    "shortcode": ":boy:",
+    "replacement": "\ud83d\udc66"
+  },
+  {
+    "shortcode": ":brazil:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":bread:",
+    "replacement": "\ud83c\udf5e"
+  },
+  {
+    "shortcode": ":bride_with_veil:",
+    "replacement": "\ud83d\udc70"
+  },
+  {
+    "shortcode": ":bridge_at_night:",
+    "replacement": "\ud83c\udf09"
+  },
+  {
+    "shortcode": ":briefcase:",
+    "replacement": "\ud83d\udcbc"
+  },
+  {
+    "shortcode": ":british_indian_ocean_territory:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":british_virgin_islands:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":broken_heart:",
+    "replacement": "\ud83d\udc94"
+  },
+  {
+    "shortcode": ":brunei:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":bug:",
+    "replacement": "\ud83d\udc1b"
+  },
+  {
+    "shortcode": ":building_construction:",
+    "replacement": "\ud83c\udfd7"
+  },
+  {
+    "shortcode": ":bulb:",
+    "replacement": "\ud83d\udca1"
+  },
+  {
+    "shortcode": ":bulgaria:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":bullettrain_front:",
+    "replacement": "\ud83d\ude85"
+  },
+  {
+    "shortcode": ":bullettrain_side:",
+    "replacement": "\ud83d\ude84"
+  },
+  {
+    "shortcode": ":burkina_faso:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":burrito:",
+    "replacement": "\ud83c\udf2f"
+  },
+  {
+    "shortcode": ":burundi:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":bus:",
+    "replacement": "\ud83d\ude8c"
+  },
+  {
+    "shortcode": ":business_suit_levitating:",
+    "replacement": "\ud83d\udd74"
+  },
+  {
+    "shortcode": ":busstop:",
+    "replacement": "\ud83d\ude8f"
+  },
+  {
+    "shortcode": ":bust_in_silhouette:",
+    "replacement": "\ud83d\udc64"
+  },
+  {
+    "shortcode": ":busts_in_silhouette:",
+    "replacement": "\ud83d\udc65"
+  },
+  {
+    "shortcode": ":butterfly:",
+    "replacement": "\ud83e\udd8b"
+  },
+  {
+    "shortcode": ":cactus:",
+    "replacement": "\ud83c\udf35"
+  },
+  {
+    "shortcode": ":cake:",
+    "replacement": "\ud83c\udf70"
+  },
+  {
+    "shortcode": ":calendar:",
+    "replacement": "\ud83d\udcc6"
+  },
+  {
+    "shortcode": ":call_me_hand:",
+    "replacement": "\ud83e\udd19"
+  },
+  {
+    "shortcode": ":calling:",
+    "replacement": "\ud83d\udcf2"
+  },
+  {
+    "shortcode": ":cambodia:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":camel:",
+    "replacement": "\ud83d\udc2b"
+  },
+  {
+    "shortcode": ":camera:",
+    "replacement": "\ud83d\udcf7"
+  },
+  {
+    "shortcode": ":camera_flash:",
+    "replacement": "\ud83d\udcf8"
+  },
+  {
+    "shortcode": ":cameroon:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":camping:",
+    "replacement": "\ud83c\udfd5"
+  },
+  {
+    "shortcode": ":canada:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":canary_islands:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":cancer:",
+    "replacement": "\ud7c9\ude4b"
+  },
+  {
+    "shortcode": ":candle:",
+    "replacement": "\ud83d\udd6f"
+  },
+  {
+    "shortcode": ":candy:",
+    "replacement": "\ud83c\udf6c"
+  },
+  {
+    "shortcode": ":canoe:",
+    "replacement": "\ud83d\udef6"
+  },
+  {
+    "shortcode": ":cape_verde:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":capital_abcd:",
+    "replacement": "\ud83d\udd20"
+  },
+  {
+    "shortcode": ":capricorn:",
+    "replacement": "\ud7c9\ude51"
+  },
+  {
+    "shortcode": ":car:",
+    "replacement": "\ud83d\ude97"
+  },
+  {
+    "shortcode": ":card_file_box:",
+    "replacement": "\ud83d\uddc3"
+  },
+  {
+    "shortcode": ":card_index:",
+    "replacement": "\ud83d\udcc7"
+  },
+  {
+    "shortcode": ":card_index_dividers:",
+    "replacement": "\ud83d\uddc2"
+  },
+  {
+    "shortcode": ":caribbean_netherlands:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":carousel_horse:",
+    "replacement": "\ud83c\udfa0"
+  },
+  {
+    "shortcode": ":carrot:",
+    "replacement": "\ud83e\udd55"
+  },
+  {
+    "shortcode": ":cat:",
+    "replacement": "\ud83d\udc31"
+  },
+  {
+    "shortcode": ":cat2:",
+    "replacement": "\ud83d\udc08"
+  },
+  {
+    "shortcode": ":cayman_islands:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":cd:",
+    "replacement": "\ud83d\udcbf"
+  },
+  {
+    "shortcode": ":central_african_republic:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":chad:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":chains:",
+    "replacement": "\ud7c9\uded3"
+  },
+  {
+    "shortcode": ":champagne:",
+    "replacement": "\ud83c\udf7e"
+  },
+  {
+    "shortcode": ":chart:",
+    "replacement": "\ud83d\udcb9"
+  },
+  {
+    "shortcode": ":chart_with_downwards_trend:",
+    "replacement": "\ud83d\udcc9"
+  },
+  {
+    "shortcode": ":chart_with_upwards_trend:",
+    "replacement": "\ud83d\udcc8"
+  },
+  {
+    "shortcode": ":checkered_flag:",
+    "replacement": "\ud83c\udfc1"
+  },
+  {
+    "shortcode": ":cheese:",
+    "replacement": "\ud83e\uddc0"
+  },
+  {
+    "shortcode": ":cherries:",
+    "replacement": "\ud83c\udf52"
+  },
+  {
+    "shortcode": ":cherry_blossom:",
+    "replacement": "\ud83c\udf38"
+  },
+  {
+    "shortcode": ":chestnut:",
+    "replacement": "\ud83c\udf30"
+  },
+  {
+    "shortcode": ":chicken:",
+    "replacement": "\ud83d\udc14"
+  },
+  {
+    "shortcode": ":children_crossing:",
+    "replacement": "\ud83d\udeb8"
+  },
+  {
+    "shortcode": ":chile:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":chipmunk:",
+    "replacement": "\ud83d\udc3f"
+  },
+  {
+    "shortcode": ":chocolate_bar:",
+    "replacement": "\ud83c\udf6b"
+  },
+  {
+    "shortcode": ":christmas_island:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":christmas_tree:",
+    "replacement": "\ud83c\udf84"
+  },
+  {
+    "shortcode": ":church:",
+    "replacement": "\ud7c9\udeea"
+  },
+  {
+    "shortcode": ":cinema:",
+    "replacement": "\ud83c\udfa6"
+  },
+  {
+    "shortcode": ":circus_tent:",
+    "replacement": "\ud83c\udfaa"
+  },
+  {
+    "shortcode": ":city_sunrise:",
+    "replacement": "\ud83c\udf07"
+  },
+  {
+    "shortcode": ":city_sunset:",
+    "replacement": "\ud83c\udf06"
+  },
+  {
+    "shortcode": ":cityscape:",
+    "replacement": "\ud83c\udfd9"
+  },
+  {
+    "shortcode": ":cl:",
+    "replacement": "\ud83c\udd91"
+  },
+  {
+    "shortcode": ":clamp:",
+    "replacement": "\ud83d\udddc"
+  },
+  {
+    "shortcode": ":clap:",
+    "replacement": "\ud83d\udc4f"
+  },
+  {
+    "shortcode": ":clapper:",
+    "replacement": "\ud83c\udfac"
+  },
+  {
+    "shortcode": ":classical_building:",
+    "replacement": "\ud83c\udfdb"
+  },
+  {
+    "shortcode": ":clinking_glasses:",
+    "replacement": "\ud83e\udd42"
+  },
+  {
+    "shortcode": ":clipboard:",
+    "replacement": "\ud83d\udccb"
+  },
+  {
+    "shortcode": ":clock1:",
+    "replacement": "\ud83d\udd50"
+  },
+  {
+    "shortcode": ":clock10:",
+    "replacement": "\ud83d\udd59"
+  },
+  {
+    "shortcode": ":clock1030:",
+    "replacement": "\ud83d\udd65"
+  },
+  {
+    "shortcode": ":clock11:",
+    "replacement": "\ud83d\udd5a"
+  },
+  {
+    "shortcode": ":clock1130:",
+    "replacement": "\ud83d\udd66"
+  },
+  {
+    "shortcode": ":clock12:",
+    "replacement": "\ud83d\udd5b"
+  },
+  {
+    "shortcode": ":clock1230:",
+    "replacement": "\ud83d\udd67"
+  },
+  {
+    "shortcode": ":clock130:",
+    "replacement": "\ud83d\udd5c"
+  },
+  {
+    "shortcode": ":clock2:",
+    "replacement": "\ud83d\udd51"
+  },
+  {
+    "shortcode": ":clock230:",
+    "replacement": "\ud83d\udd5d"
+  },
+  {
+    "shortcode": ":clock3:",
+    "replacement": "\ud83d\udd52"
+  },
+  {
+    "shortcode": ":clock330:",
+    "replacement": "\ud83d\udd5e"
+  },
+  {
+    "shortcode": ":clock4:",
+    "replacement": "\ud83d\udd53"
+  },
+  {
+    "shortcode": ":clock430:",
+    "replacement": "\ud83d\udd5f"
+  },
+  {
+    "shortcode": ":clock5:",
+    "replacement": "\ud83d\udd54"
+  },
+  {
+    "shortcode": ":clock530:",
+    "replacement": "\ud83d\udd60"
+  },
+  {
+    "shortcode": ":clock6:",
+    "replacement": "\ud83d\udd55"
+  },
+  {
+    "shortcode": ":clock630:",
+    "replacement": "\ud83d\udd61"
+  },
+  {
+    "shortcode": ":clock7:",
+    "replacement": "\ud83d\udd56"
+  },
+  {
+    "shortcode": ":clock730:",
+    "replacement": "\ud83d\udd62"
+  },
+  {
+    "shortcode": ":clock8:",
+    "replacement": "\ud83d\udd57"
+  },
+  {
+    "shortcode": ":clock830:",
+    "replacement": "\ud83d\udd63"
+  },
+  {
+    "shortcode": ":clock9:",
+    "replacement": "\ud83d\udd58"
+  },
+  {
+    "shortcode": ":clock930:",
+    "replacement": "\ud83d\udd64"
+  },
+  {
+    "shortcode": ":closed_book:",
+    "replacement": "\ud83d\udcd5"
+  },
+  {
+    "shortcode": ":closed_lock_with_key:",
+    "replacement": "\ud83d\udd10"
+  },
+  {
+    "shortcode": ":closed_umbrella:",
+    "replacement": "\ud83c\udf02"
+  },
+  {
+    "shortcode": ":cloud:",
+    "replacement": "\ud7c9\ude01"
+  },
+  {
+    "shortcode": ":cloud_with_lightning:",
+    "replacement": "\ud83c\udf29"
+  },
+  {
+    "shortcode": ":cloud_with_lightning_and_rain:",
+    "replacement": "\ud7c9\udec8"
+  },
+  {
+    "shortcode": ":cloud_with_rain:",
+    "replacement": "\ud83c\udf27"
+  },
+  {
+    "shortcode": ":cloud_with_snow:",
+    "replacement": "\ud83c\udf28"
+  },
+  {
+    "shortcode": ":clown_face:",
+    "replacement": "\ud83e\udd21"
+  },
+  {
+    "shortcode": ":clubs:",
+    "replacement": "\ud7c9\ude63"
+  },
+  {
+    "shortcode": ":cn:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":cocktail:",
+    "replacement": "\ud83c\udf78"
+  },
+  {
+    "shortcode": ":cocos_islands:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":coffee:",
+    "replacement": "\ud7c9\ude15"
+  },
+  {
+    "shortcode": ":coffin:",
+    "replacement": "\ud7c9\udeb0"
+  },
+  {
+    "shortcode": ":cold_sweat:",
+    "replacement": "\ud83d\ude30"
+  },
+  {
+    "shortcode": ":collision:",
+    "replacement": "\ud83d\udca5"
+  },
+  {
+    "shortcode": ":colombia:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":comet:",
+    "replacement": "\ud7c9\ude04"
+  },
+  {
+    "shortcode": ":comoros:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":computer:",
+    "replacement": "\ud83d\udcbb"
+  },
+  {
+    "shortcode": ":computer_mouse:",
+    "replacement": "\ud83d\uddb1"
+  },
+  {
+    "shortcode": ":confetti_ball:",
+    "replacement": "\ud83c\udf8a"
+  },
+  {
+    "shortcode": ":confounded:",
+    "replacement": "\ud83d\ude16"
+  },
+  {
+    "shortcode": ":confused:",
+    "replacement": "\ud83d\ude15"
+  },
+  {
+    "shortcode": ":congo_brazzaville:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":congo_kinshasa:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":congratulations:",
+    "replacement": "\ud7cc\ude97"
+  },
+  {
+    "shortcode": ":construction:",
+    "replacement": "\ud83d\udea7"
+  },
+  {
+    "shortcode": ":construction_worker:",
+    "replacement": "\ud83d\udc77"
+  },
+  {
+    "shortcode": ":construction_worker_man:",
+    "replacement": "\ud83d\udc77"
+  },
+  {
+    "shortcode": ":construction_worker_woman:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":control_knobs:",
+    "replacement": "\ud83c\udf9b"
+  },
+  {
+    "shortcode": ":convenience_store:",
+    "replacement": "\ud83c\udfea"
+  },
+  {
+    "shortcode": ":cook_islands:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":cookie:",
+    "replacement": "\ud83c\udf6a"
+  },
+  {
+    "shortcode": ":cool:",
+    "replacement": "\ud83c\udd92"
+  },
+  {
+    "shortcode": ":cop:",
+    "replacement": "\ud83d\udc6e"
+  },
+  {
+    "shortcode": ":copyright:",
+    "replacement": "\ud7c0\udca9"
+  },
+  {
+    "shortcode": ":corn:",
+    "replacement": "\ud83c\udf3d"
+  },
+  {
+    "shortcode": ":costa_rica:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":cote_divoire:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":couch_and_lamp:",
+    "replacement": "\ud83d\udecb"
+  },
+  {
+    "shortcode": ":couple:",
+    "replacement": "\ud83d\udc6b"
+  },
+  {
+    "shortcode": ":couple_with_heart:",
+    "replacement": "\ud83d\udc91"
+  },
+  {
+    "shortcode": ":couple_with_heart_man_man:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":couple_with_heart_woman_man:",
+    "replacement": "\ud83d\udc91"
+  },
+  {
+    "shortcode": ":couple_with_heart_woman_woman:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":couplekiss_man_man:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":couplekiss_man_woman:",
+    "replacement": "\ud83d\udc8f"
+  },
+  {
+    "shortcode": ":couplekiss_woman_woman:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":cow:",
+    "replacement": "\ud83d\udc2e"
+  },
+  {
+    "shortcode": ":cow2:",
+    "replacement": "\ud83d\udc04"
+  },
+  {
+    "shortcode": ":cowboy_hat_face:",
+    "replacement": "\ud83e\udd20"
+  },
+  {
+    "shortcode": ":crab:",
+    "replacement": "\ud83e\udd80"
+  },
+  {
+    "shortcode": ":crayon:",
+    "replacement": "\ud83d\udd8d"
+  },
+  {
+    "shortcode": ":credit_card:",
+    "replacement": "\ud83d\udcb3"
+  },
+  {
+    "shortcode": ":crescent_moon:",
+    "replacement": "\ud83c\udf19"
+  },
+  {
+    "shortcode": ":cricket:",
+    "replacement": "\ud83c\udfcf"
+  },
+  {
+    "shortcode": ":croatia:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":crocodile:",
+    "replacement": "\ud83d\udc0a"
+  },
+  {
+    "shortcode": ":croissant:",
+    "replacement": "\ud83e\udd50"
+  },
+  {
+    "shortcode": ":crossed_fingers:",
+    "replacement": "\ud83e\udd1e"
+  },
+  {
+    "shortcode": ":crossed_flags:",
+    "replacement": "\ud83c\udf8c"
+  },
+  {
+    "shortcode": ":crossed_swords:",
+    "replacement": "\ud7c9\ude94"
+  },
+  {
+    "shortcode": ":crown:",
+    "replacement": "\ud83d\udc51"
+  },
+  {
+    "shortcode": ":cry:",
+    "replacement": "\ud83d\ude22"
+  },
+  {
+    "shortcode": ":crying_cat_face:",
+    "replacement": "\ud83d\ude3f"
+  },
+  {
+    "shortcode": ":crystal_ball:",
+    "replacement": "\ud83d\udd2e"
+  },
+  {
+    "shortcode": ":cuba:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":cucumber:",
+    "replacement": "\ud83e\udd52"
+  },
+  {
+    "shortcode": ":cupid:",
+    "replacement": "\ud83d\udc98"
+  },
+  {
+    "shortcode": ":curacao:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":curly_loop:",
+    "replacement": "\ud7c9\udfb0"
+  },
+  {
+    "shortcode": ":currency_exchange:",
+    "replacement": "\ud83d\udcb1"
+  },
+  {
+    "shortcode": ":curry:",
+    "replacement": "\ud83c\udf5b"
+  },
+  {
+    "shortcode": ":custard:",
+    "replacement": "\ud83c\udf6e"
+  },
+  {
+    "shortcode": ":customs:",
+    "replacement": "\ud83d\udec3"
+  },
+  {
+    "shortcode": ":cyclone:",
+    "replacement": "\ud83c\udf00"
+  },
+  {
+    "shortcode": ":cyprus:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":czech_republic:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":dagger:",
+    "replacement": "\ud83d\udde1"
+  },
+  {
+    "shortcode": ":dancer:",
+    "replacement": "\ud83d\udc83"
+  },
+  {
+    "shortcode": ":dancers:",
+    "replacement": "\ud83d\udc6f"
+  },
+  {
+    "shortcode": ":dancing_men:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":dancing_women:",
+    "replacement": "\ud83d\udc6f"
+  },
+  {
+    "shortcode": ":dango:",
+    "replacement": "\ud83c\udf61"
+  },
+  {
+    "shortcode": ":dark_sunglasses:",
+    "replacement": "\ud83d\udd76"
+  },
+  {
+    "shortcode": ":dart:",
+    "replacement": "\ud83c\udfaf"
+  },
+  {
+    "shortcode": ":dash:",
+    "replacement": "\ud83d\udca8"
+  },
+  {
+    "shortcode": ":date:",
+    "replacement": "\ud83d\udcc5"
+  },
+  {
+    "shortcode": ":de:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":deciduous_tree:",
+    "replacement": "\ud83c\udf33"
+  },
+  {
+    "shortcode": ":deer:",
+    "replacement": "\ud83e\udd8c"
+  },
+  {
+    "shortcode": ":denmark:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":department_store:",
+    "replacement": "\ud83c\udfec"
+  },
+  {
+    "shortcode": ":derelict_house:",
+    "replacement": "\ud83c\udfda"
+  },
+  {
+    "shortcode": ":desert:",
+    "replacement": "\ud83c\udfdc"
+  },
+  {
+    "shortcode": ":desert_island:",
+    "replacement": "\ud83c\udfdd"
+  },
+  {
+    "shortcode": ":desktop_computer:",
+    "replacement": "\ud83d\udda5"
+  },
+  {
+    "shortcode": ":detective:",
+    "replacement": "\ud83d\udd75"
+  },
+  {
+    "shortcode": ":diamond_shape_with_a_dot_inside:",
+    "replacement": "\ud83d\udca0"
+  },
+  {
+    "shortcode": ":diamonds:",
+    "replacement": "\ud7c9\ude66"
+  },
+  {
+    "shortcode": ":disappointed:",
+    "replacement": "\ud83d\ude1e"
+  },
+  {
+    "shortcode": ":disappointed_relieved:",
+    "replacement": "\ud83d\ude25"
+  },
+  {
+    "shortcode": ":dizzy:",
+    "replacement": "\ud83d\udcab"
+  },
+  {
+    "shortcode": ":dizzy_face:",
+    "replacement": "\ud83d\ude35"
+  },
+  {
+    "shortcode": ":djibouti:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":do_not_litter:",
+    "replacement": "\ud83d\udeaf"
+  },
+  {
+    "shortcode": ":dog:",
+    "replacement": "\ud83d\udc36"
+  },
+  {
+    "shortcode": ":dog2:",
+    "replacement": "\ud83d\udc15"
+  },
+  {
+    "shortcode": ":dollar:",
+    "replacement": "\ud83d\udcb5"
+  },
+  {
+    "shortcode": ":dolls:",
+    "replacement": "\ud83c\udf8e"
+  },
+  {
+    "shortcode": ":dolphin:",
+    "replacement": "\ud83d\udc2c"
+  },
+  {
+    "shortcode": ":dominica:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":dominican_republic:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":door:",
+    "replacement": "\ud83d\udeaa"
+  },
+  {
+    "shortcode": ":doughnut:",
+    "replacement": "\ud83c\udf69"
+  },
+  {
+    "shortcode": ":dove:",
+    "replacement": "\ud83d\udd4a"
+  },
+  {
+    "shortcode": ":dragon:",
+    "replacement": "\ud83d\udc09"
+  },
+  {
+    "shortcode": ":dragon_face:",
+    "replacement": "\ud83d\udc32"
+  },
+  {
+    "shortcode": ":dress:",
+    "replacement": "\ud83d\udc57"
+  },
+  {
+    "shortcode": ":dromedary_camel:",
+    "replacement": "\ud83d\udc2a"
+  },
+  {
+    "shortcode": ":drooling_face:",
+    "replacement": "\ud83e\udd24"
+  },
+  {
+    "shortcode": ":droplet:",
+    "replacement": "\ud83d\udca7"
+  },
+  {
+    "shortcode": ":drum:",
+    "replacement": "\ud83e\udd41"
+  },
+  {
+    "shortcode": ":duck:",
+    "replacement": "\ud83e\udd86"
+  },
+  {
+    "shortcode": ":dvd:",
+    "replacement": "\ud83d\udcc0"
+  },
+  {
+    "shortcode": ":e-mail:",
+    "replacement": "\ud83d\udce7"
+  },
+  {
+    "shortcode": ":eagle:",
+    "replacement": "\ud83e\udd85"
+  },
+  {
+    "shortcode": ":ear:",
+    "replacement": "\ud83d\udc42"
+  },
+  {
+    "shortcode": ":ear_of_rice:",
+    "replacement": "\ud83c\udf3e"
+  },
+  {
+    "shortcode": ":earth_africa:",
+    "replacement": "\ud83c\udf0d"
+  },
+  {
+    "shortcode": ":earth_americas:",
+    "replacement": "\ud83c\udf0e"
+  },
+  {
+    "shortcode": ":earth_asia:",
+    "replacement": "\ud83c\udf0f"
+  },
+  {
+    "shortcode": ":ecuador:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":egg:",
+    "replacement": "\ud83e\udd5a"
+  },
+  {
+    "shortcode": ":eggplant:",
+    "replacement": "\ud83c\udf46"
+  },
+  {
+    "shortcode": ":egypt:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":eight:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":eight_pointed_black_star:",
+    "replacement": "\ud7c9\udf34"
+  },
+  {
+    "shortcode": ":eight_spoked_asterisk:",
+    "replacement": "\ud7c9\udf33"
+  },
+  {
+    "shortcode": ":el_salvador:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":electric_plug:",
+    "replacement": "\ud83d\udd0c"
+  },
+  {
+    "shortcode": ":electron:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":elephant:",
+    "replacement": "\ud83d\udc18"
+  },
+  {
+    "shortcode": ":email:",
+    "replacement": "\ud7c9\udf09"
+  },
+  {
+    "shortcode": ":end:",
+    "replacement": "\ud83d\udd1a"
+  },
+  {
+    "shortcode": ":envelope:",
+    "replacement": "\ud7c9\udf09"
+  },
+  {
+    "shortcode": ":envelope_with_arrow:",
+    "replacement": "\ud83d\udce9"
+  },
+  {
+    "shortcode": ":equatorial_guinea:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":eritrea:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":es:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":estonia:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":ethiopia:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":eu:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":euro:",
+    "replacement": "\ud83d\udcb6"
+  },
+  {
+    "shortcode": ":european_castle:",
+    "replacement": "\ud83c\udff0"
+  },
+  {
+    "shortcode": ":european_post_office:",
+    "replacement": "\ud83c\udfe4"
+  },
+  {
+    "shortcode": ":european_union:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":evergreen_tree:",
+    "replacement": "\ud83c\udf32"
+  },
+  {
+    "shortcode": ":exclamation:",
+    "replacement": "\ud7c9\udf57"
+  },
+  {
+    "shortcode": ":expressionless:",
+    "replacement": "\ud83d\ude11"
+  },
+  {
+    "shortcode": ":eye:",
+    "replacement": "\ud83d\udc41"
+  },
+  {
+    "shortcode": ":eye_speech_bubble:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":eyeglasses:",
+    "replacement": "\ud83d\udc53"
+  },
+  {
+    "shortcode": ":eyes:",
+    "replacement": "\ud83d\udc40"
+  },
+  {
+    "shortcode": ":face_with_head_bandage:",
+    "replacement": "\ud83e\udd15"
+  },
+  {
+    "shortcode": ":face_with_thermometer:",
+    "replacement": "\ud83e\udd12"
+  },
+  {
+    "shortcode": ":facepunch:",
+    "replacement": "\ud83d\udc4a"
+  },
+  {
+    "shortcode": ":factory:",
+    "replacement": "\ud83c\udfed"
+  },
+  {
+    "shortcode": ":falkland_islands:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":fallen_leaf:",
+    "replacement": "\ud83c\udf42"
+  },
+  {
+    "shortcode": ":family:",
+    "replacement": "\ud83d\udc6a"
+  },
+  {
+    "shortcode": ":family_man_boy:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":family_man_boy_boy:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":family_man_girl:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":family_man_girl_boy:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":family_man_girl_girl:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":family_man_man_boy:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":family_man_man_boy_boy:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":family_man_man_girl:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":family_man_man_girl_boy:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":family_man_man_girl_girl:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":family_man_woman_boy:",
+    "replacement": "\ud83d\udc6a"
+  },
+  {
+    "shortcode": ":family_man_woman_boy_boy:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":family_man_woman_girl:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":family_man_woman_girl_boy:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":family_man_woman_girl_girl:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":family_woman_boy:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":family_woman_boy_boy:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":family_woman_girl:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":family_woman_girl_boy:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":family_woman_girl_girl:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":family_woman_woman_boy:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":family_woman_woman_boy_boy:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":family_woman_woman_girl:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":family_woman_woman_girl_boy:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":family_woman_woman_girl_girl:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":faroe_islands:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":fast_forward:",
+    "replacement": "\ud7c8\udfe9"
+  },
+  {
+    "shortcode": ":fax:",
+    "replacement": "\ud83d\udce0"
+  },
+  {
+    "shortcode": ":fearful:",
+    "replacement": "\ud83d\ude28"
+  },
+  {
+    "shortcode": ":feelsgood:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":feet:",
+    "replacement": "\ud83d\udc3e"
+  },
+  {
+    "shortcode": ":female_detective:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":ferris_wheel:",
+    "replacement": "\ud83c\udfa1"
+  },
+  {
+    "shortcode": ":ferry:",
+    "replacement": "\ud7c9\udef4"
+  },
+  {
+    "shortcode": ":field_hockey:",
+    "replacement": "\ud83c\udfd1"
+  },
+  {
+    "shortcode": ":fiji:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":file_cabinet:",
+    "replacement": "\ud83d\uddc4"
+  },
+  {
+    "shortcode": ":file_folder:",
+    "replacement": "\ud83d\udcc1"
+  },
+  {
+    "shortcode": ":film_projector:",
+    "replacement": "\ud83d\udcfd"
+  },
+  {
+    "shortcode": ":film_strip:",
+    "replacement": "\ud83c\udf9e"
+  },
+  {
+    "shortcode": ":finland:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":finnadie:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":fire:",
+    "replacement": "\ud83d\udd25"
+  },
+  {
+    "shortcode": ":fire_engine:",
+    "replacement": "\ud83d\ude92"
+  },
+  {
+    "shortcode": ":fireworks:",
+    "replacement": "\ud83c\udf86"
+  },
+  {
+    "shortcode": ":first_quarter_moon:",
+    "replacement": "\ud83c\udf13"
+  },
+  {
+    "shortcode": ":first_quarter_moon_with_face:",
+    "replacement": "\ud83c\udf1b"
+  },
+  {
+    "shortcode": ":fish:",
+    "replacement": "\ud83d\udc1f"
+  },
+  {
+    "shortcode": ":fish_cake:",
+    "replacement": "\ud83c\udf65"
+  },
+  {
+    "shortcode": ":fishing_pole_and_fish:",
+    "replacement": "\ud83c\udfa3"
+  },
+  {
+    "shortcode": ":fist:",
+    "replacement": "\ud7c9\udf0a"
+  },
+  {
+    "shortcode": ":fist_left:",
+    "replacement": "\ud83e\udd1b"
+  },
+  {
+    "shortcode": ":fist_oncoming:",
+    "replacement": "\ud83d\udc4a"
+  },
+  {
+    "shortcode": ":fist_raised:",
+    "replacement": "\ud7c9\udf0a"
+  },
+  {
+    "shortcode": ":fist_right:",
+    "replacement": "\ud83e\udd1c"
+  },
+  {
+    "shortcode": ":five:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":flags:",
+    "replacement": "\ud83c\udf8f"
+  },
+  {
+    "shortcode": ":flashlight:",
+    "replacement": "\ud83d\udd26"
+  },
+  {
+    "shortcode": ":fleur_de_lis:",
+    "replacement": "\ud7c9\ude9c"
+  },
+  {
+    "shortcode": ":flight_arrival:",
+    "replacement": "\ud83d\udeec"
+  },
+  {
+    "shortcode": ":flight_departure:",
+    "replacement": "\ud83d\udeeb"
+  },
+  {
+    "shortcode": ":flipper:",
+    "replacement": "\ud83d\udc2c"
+  },
+  {
+    "shortcode": ":floppy_disk:",
+    "replacement": "\ud83d\udcbe"
+  },
+  {
+    "shortcode": ":flower_playing_cards:",
+    "replacement": "\ud83c\udfb4"
+  },
+  {
+    "shortcode": ":flushed:",
+    "replacement": "\ud83d\ude33"
+  },
+  {
+    "shortcode": ":fog:",
+    "replacement": "\ud83c\udf2b"
+  },
+  {
+    "shortcode": ":foggy:",
+    "replacement": "\ud83c\udf01"
+  },
+  {
+    "shortcode": ":football:",
+    "replacement": "\ud83c\udfc8"
+  },
+  {
+    "shortcode": ":footprints:",
+    "replacement": "\ud83d\udc63"
+  },
+  {
+    "shortcode": ":fork_and_knife:",
+    "replacement": "\ud83c\udf74"
+  },
+  {
+    "shortcode": ":fountain:",
+    "replacement": "\ud7c9\udef2"
+  },
+  {
+    "shortcode": ":fountain_pen:",
+    "replacement": "\ud83d\udd8b"
+  },
+  {
+    "shortcode": ":four:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":four_leaf_clover:",
+    "replacement": "\ud83c\udf40"
+  },
+  {
+    "shortcode": ":fox_face:",
+    "replacement": "\ud83e\udd8a"
+  },
+  {
+    "shortcode": ":fr:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":framed_picture:",
+    "replacement": "\ud83d\uddbc"
+  },
+  {
+    "shortcode": ":free:",
+    "replacement": "\ud83c\udd93"
+  },
+  {
+    "shortcode": ":french_guiana:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":french_polynesia:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":french_southern_territories:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":fried_egg:",
+    "replacement": "\ud83c\udf73"
+  },
+  {
+    "shortcode": ":fried_shrimp:",
+    "replacement": "\ud83c\udf64"
+  },
+  {
+    "shortcode": ":fries:",
+    "replacement": "\ud83c\udf5f"
+  },
+  {
+    "shortcode": ":frog:",
+    "replacement": "\ud83d\udc38"
+  },
+  {
+    "shortcode": ":frowning:",
+    "replacement": "\ud83d\ude26"
+  },
+  {
+    "shortcode": ":frowning_face:",
+    "replacement": "\ud7c9\ude39"
+  },
+  {
+    "shortcode": ":frowning_man:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":frowning_woman:",
+    "replacement": "\ud83d\ude4d"
+  },
+  {
+    "shortcode": ":fu:",
+    "replacement": "\ud83d\udd95"
+  },
+  {
+    "shortcode": ":fuelpump:",
+    "replacement": "\ud7c9\udefd"
+  },
+  {
+    "shortcode": ":full_moon:",
+    "replacement": "\ud83c\udf15"
+  },
+  {
+    "shortcode": ":full_moon_with_face:",
+    "replacement": "\ud83c\udf1d"
+  },
+  {
+    "shortcode": ":funeral_urn:",
+    "replacement": "\ud7c9\udeb1"
+  },
+  {
+    "shortcode": ":gabon:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":gambia:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":game_die:",
+    "replacement": "\ud83c\udfb2"
+  },
+  {
+    "shortcode": ":gb:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":gear:",
+    "replacement": "\ud7c9\ude99"
+  },
+  {
+    "shortcode": ":gem:",
+    "replacement": "\ud83d\udc8e"
+  },
+  {
+    "shortcode": ":gemini:",
+    "replacement": "\ud7c9\ude4a"
+  },
+  {
+    "shortcode": ":georgia:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":ghana:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":ghost:",
+    "replacement": "\ud83d\udc7b"
+  },
+  {
+    "shortcode": ":gibraltar:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":gift:",
+    "replacement": "\ud83c\udf81"
+  },
+  {
+    "shortcode": ":gift_heart:",
+    "replacement": "\ud83d\udc9d"
+  },
+  {
+    "shortcode": ":girl:",
+    "replacement": "\ud83d\udc67"
+  },
+  {
+    "shortcode": ":globe_with_meridians:",
+    "replacement": "\ud83c\udf10"
+  },
+  {
+    "shortcode": ":goal_net:",
+    "replacement": "\ud83e\udd45"
+  },
+  {
+    "shortcode": ":goat:",
+    "replacement": "\ud83d\udc10"
+  },
+  {
+    "shortcode": ":goberserk:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":godmode:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":golf:",
+    "replacement": "\ud7c9\udef3"
+  },
+  {
+    "shortcode": ":golfing_man:",
+    "replacement": "\ud83c\udfcc"
+  },
+  {
+    "shortcode": ":golfing_woman:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":gorilla:",
+    "replacement": "\ud83e\udd8d"
+  },
+  {
+    "shortcode": ":grapes:",
+    "replacement": "\ud83c\udf47"
+  },
+  {
+    "shortcode": ":greece:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":green_apple:",
+    "replacement": "\ud83c\udf4f"
+  },
+  {
+    "shortcode": ":green_book:",
+    "replacement": "\ud83d\udcd7"
+  },
+  {
+    "shortcode": ":green_heart:",
+    "replacement": "\ud83d\udc9a"
+  },
+  {
+    "shortcode": ":green_salad:",
+    "replacement": "\ud83e\udd57"
+  },
+  {
+    "shortcode": ":greenland:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":grenada:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":grey_exclamation:",
+    "replacement": "\ud7c9\udf55"
+  },
+  {
+    "shortcode": ":grey_question:",
+    "replacement": "\ud7c9\udf54"
+  },
+  {
+    "shortcode": ":grimacing:",
+    "replacement": "\ud83d\ude2c"
+  },
+  {
+    "shortcode": ":grin:",
+    "replacement": "\ud83d\ude01"
+  },
+  {
+    "shortcode": ":grinning:",
+    "replacement": "\ud83d\ude00"
+  },
+  {
+    "shortcode": ":guadeloupe:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":guam:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":guardsman:",
+    "replacement": "\ud83d\udc82"
+  },
+  {
+    "shortcode": ":guardswoman:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":guatemala:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":guernsey:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":guinea:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":guinea_bissau:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":guitar:",
+    "replacement": "\ud83c\udfb8"
+  },
+  {
+    "shortcode": ":gun:",
+    "replacement": "\ud83d\udd2b"
+  },
+  {
+    "shortcode": ":guyana:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":haircut:",
+    "replacement": "\ud83d\udc87"
+  },
+  {
+    "shortcode": ":haircut_man:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":haircut_woman:",
+    "replacement": "\ud83d\udc87"
+  },
+  {
+    "shortcode": ":haiti:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":hamburger:",
+    "replacement": "\ud83c\udf54"
+  },
+  {
+    "shortcode": ":hammer:",
+    "replacement": "\ud83d\udd28"
+  },
+  {
+    "shortcode": ":hammer_and_pick:",
+    "replacement": "\ud7c9\ude92"
+  },
+  {
+    "shortcode": ":hammer_and_wrench:",
+    "replacement": "\ud83d\udee0"
+  },
+  {
+    "shortcode": ":hamster:",
+    "replacement": "\ud83d\udc39"
+  },
+  {
+    "shortcode": ":hand:",
+    "replacement": "\ud7c9\udf0b"
+  },
+  {
+    "shortcode": ":handbag:",
+    "replacement": "\ud83d\udc5c"
+  },
+  {
+    "shortcode": ":handshake:",
+    "replacement": "\ud83e\udd1d"
+  },
+  {
+    "shortcode": ":hankey:",
+    "replacement": "\ud83d\udca9"
+  },
+  {
+    "shortcode": ":hash:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":hatched_chick:",
+    "replacement": "\ud83d\udc25"
+  },
+  {
+    "shortcode": ":hatching_chick:",
+    "replacement": "\ud83d\udc23"
+  },
+  {
+    "shortcode": ":headphones:",
+    "replacement": "\ud83c\udfa7"
+  },
+  {
+    "shortcode": ":hear_no_evil:",
+    "replacement": "\ud83d\ude49"
+  },
+  {
+    "shortcode": ":heart:",
+    "replacement": "\ud7c9\udf64"
+  },
+  {
+    "shortcode": ":heart_decoration:",
+    "replacement": "\ud83d\udc9f"
+  },
+  {
+    "shortcode": ":heart_eyes:",
+    "replacement": "\ud83d\ude0d"
+  },
+  {
+    "shortcode": ":heart_eyes_cat:",
+    "replacement": "\ud83d\ude3b"
+  },
+  {
+    "shortcode": ":heartbeat:",
+    "replacement": "\ud83d\udc93"
+  },
+  {
+    "shortcode": ":heartpulse:",
+    "replacement": "\ud83d\udc97"
+  },
+  {
+    "shortcode": ":hearts:",
+    "replacement": "\ud7c9\ude65"
+  },
+  {
+    "shortcode": ":heavy_check_mark:",
+    "replacement": "\ud7c9\udf14"
+  },
+  {
+    "shortcode": ":heavy_division_sign:",
+    "replacement": "\ud7c9\udf97"
+  },
+  {
+    "shortcode": ":heavy_dollar_sign:",
+    "replacement": "\ud83d\udcb2"
+  },
+  {
+    "shortcode": ":heavy_exclamation_mark:",
+    "replacement": "\ud7c9\udf57"
+  },
+  {
+    "shortcode": ":heavy_heart_exclamation:",
+    "replacement": "\ud7c9\udf63"
+  },
+  {
+    "shortcode": ":heavy_minus_sign:",
+    "replacement": "\ud7c9\udf96"
+  },
+  {
+    "shortcode": ":heavy_multiplication_x:",
+    "replacement": "\ud7c9\udf16"
+  },
+  {
+    "shortcode": ":heavy_plus_sign:",
+    "replacement": "\ud7c9\udf95"
+  },
+  {
+    "shortcode": ":helicopter:",
+    "replacement": "\ud83d\ude81"
+  },
+  {
+    "shortcode": ":herb:",
+    "replacement": "\ud83c\udf3f"
+  },
+  {
+    "shortcode": ":hibiscus:",
+    "replacement": "\ud83c\udf3a"
+  },
+  {
+    "shortcode": ":high_brightness:",
+    "replacement": "\ud83d\udd06"
+  },
+  {
+    "shortcode": ":high_heel:",
+    "replacement": "\ud83d\udc60"
+  },
+  {
+    "shortcode": ":hocho:",
+    "replacement": "\ud83d\udd2a"
+  },
+  {
+    "shortcode": ":hole:",
+    "replacement": "\ud83d\udd73"
+  },
+  {
+    "shortcode": ":honduras:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":honey_pot:",
+    "replacement": "\ud83c\udf6f"
+  },
+  {
+    "shortcode": ":honeybee:",
+    "replacement": "\ud83d\udc1d"
+  },
+  {
+    "shortcode": ":hong_kong:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":horse:",
+    "replacement": "\ud83d\udc34"
+  },
+  {
+    "shortcode": ":horse_racing:",
+    "replacement": "\ud83c\udfc7"
+  },
+  {
+    "shortcode": ":hospital:",
+    "replacement": "\ud83c\udfe5"
+  },
+  {
+    "shortcode": ":hot_pepper:",
+    "replacement": "\ud83c\udf36"
+  },
+  {
+    "shortcode": ":hotdog:",
+    "replacement": "\ud83c\udf2d"
+  },
+  {
+    "shortcode": ":hotel:",
+    "replacement": "\ud83c\udfe8"
+  },
+  {
+    "shortcode": ":hotsprings:",
+    "replacement": "\ud7c9\ude68"
+  },
+  {
+    "shortcode": ":hourglass:",
+    "replacement": "\ud7c8\udf1b"
+  },
+  {
+    "shortcode": ":hourglass_flowing_sand:",
+    "replacement": "\ud7c8\udff3"
+  },
+  {
+    "shortcode": ":house:",
+    "replacement": "\ud83c\udfe0"
+  },
+  {
+    "shortcode": ":house_with_garden:",
+    "replacement": "\ud83c\udfe1"
+  },
+  {
+    "shortcode": ":houses:",
+    "replacement": "\ud83c\udfd8"
+  },
+  {
+    "shortcode": ":hugs:",
+    "replacement": "\ud83e\udd17"
+  },
+  {
+    "shortcode": ":hungary:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":hurtrealbad:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":hushed:",
+    "replacement": "\ud83d\ude2f"
+  },
+  {
+    "shortcode": ":ice_cream:",
+    "replacement": "\ud83c\udf68"
+  },
+  {
+    "shortcode": ":ice_hockey:",
+    "replacement": "\ud83c\udfd2"
+  },
+  {
+    "shortcode": ":ice_skate:",
+    "replacement": "\ud7c9\udef8"
+  },
+  {
+    "shortcode": ":icecream:",
+    "replacement": "\ud83c\udf66"
+  },
+  {
+    "shortcode": ":iceland:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":id:",
+    "replacement": "\ud83c\udd94"
+  },
+  {
+    "shortcode": ":ideograph_advantage:",
+    "replacement": "\ud83c\ude50"
+  },
+  {
+    "shortcode": ":imp:",
+    "replacement": "\ud83d\udc7f"
+  },
+  {
+    "shortcode": ":inbox_tray:",
+    "replacement": "\ud83d\udce5"
+  },
+  {
+    "shortcode": ":incoming_envelope:",
+    "replacement": "\ud83d\udce8"
+  },
+  {
+    "shortcode": ":india:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":indonesia:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":information_desk_person:",
+    "replacement": "\ud83d\udc81"
+  },
+  {
+    "shortcode": ":information_source:",
+    "replacement": "\ud7c8\udd39"
+  },
+  {
+    "shortcode": ":innocent:",
+    "replacement": "\ud83d\ude07"
+  },
+  {
+    "shortcode": ":interrobang:",
+    "replacement": "\ud7c8\udc49"
+  },
+  {
+    "shortcode": ":iphone:",
+    "replacement": "\ud83d\udcf1"
+  },
+  {
+    "shortcode": ":iran:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":iraq:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":ireland:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":isle_of_man:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":israel:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":it:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":izakaya_lantern:",
+    "replacement": "\ud83c\udfee"
+  },
+  {
+    "shortcode": ":jack_o_lantern:",
+    "replacement": "\ud83c\udf83"
+  },
+  {
+    "shortcode": ":jamaica:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":japan:",
+    "replacement": "\ud83d\uddfe"
+  },
+  {
+    "shortcode": ":japanese_castle:",
+    "replacement": "\ud83c\udfef"
+  },
+  {
+    "shortcode": ":japanese_goblin:",
+    "replacement": "\ud83d\udc7a"
+  },
+  {
+    "shortcode": ":japanese_ogre:",
+    "replacement": "\ud83d\udc79"
+  },
+  {
+    "shortcode": ":jeans:",
+    "replacement": "\ud83d\udc56"
+  },
+  {
+    "shortcode": ":jersey:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":jordan:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":joy:",
+    "replacement": "\ud83d\ude02"
+  },
+  {
+    "shortcode": ":joy_cat:",
+    "replacement": "\ud83d\ude39"
+  },
+  {
+    "shortcode": ":joystick:",
+    "replacement": "\ud83d\udd79"
+  },
+  {
+    "shortcode": ":jp:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":kaaba:",
+    "replacement": "\ud83d\udd4b"
+  },
+  {
+    "shortcode": ":kazakhstan:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":kenya:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":key:",
+    "replacement": "\ud83d\udd11"
+  },
+  {
+    "shortcode": ":keyboard:",
+    "replacement": "\ud7c8\udf28"
+  },
+  {
+    "shortcode": ":keycap_ten:",
+    "replacement": "\ud83d\udd1f"
+  },
+  {
+    "shortcode": ":kick_scooter:",
+    "replacement": "\ud83d\udef4"
+  },
+  {
+    "shortcode": ":kimono:",
+    "replacement": "\ud83d\udc58"
+  },
+  {
+    "shortcode": ":kiribati:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":kiss:",
+    "replacement": "\ud83d\udc8b"
+  },
+  {
+    "shortcode": ":kissing:",
+    "replacement": "\ud83d\ude17"
+  },
+  {
+    "shortcode": ":kissing_cat:",
+    "replacement": "\ud83d\ude3d"
+  },
+  {
+    "shortcode": ":kissing_closed_eyes:",
+    "replacement": "\ud83d\ude1a"
+  },
+  {
+    "shortcode": ":kissing_heart:",
+    "replacement": "\ud83d\ude18"
+  },
+  {
+    "shortcode": ":kissing_smiling_eyes:",
+    "replacement": "\ud83d\ude19"
+  },
+  {
+    "shortcode": ":kiwi_fruit:",
+    "replacement": "\ud83e\udd5d"
+  },
+  {
+    "shortcode": ":knife:",
+    "replacement": "\ud83d\udd2a"
+  },
+  {
+    "shortcode": ":koala:",
+    "replacement": "\ud83d\udc28"
+  },
+  {
+    "shortcode": ":koko:",
+    "replacement": "\ud83c\ude01"
+  },
+  {
+    "shortcode": ":kosovo:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":kr:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":kuwait:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":kyrgyzstan:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":label:",
+    "replacement": "\ud83c\udff7"
+  },
+  {
+    "shortcode": ":lantern:",
+    "replacement": "\ud83c\udfee"
+  },
+  {
+    "shortcode": ":laos:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":large_blue_circle:",
+    "replacement": "\ud83d\udd35"
+  },
+  {
+    "shortcode": ":large_blue_diamond:",
+    "replacement": "\ud83d\udd37"
+  },
+  {
+    "shortcode": ":large_orange_diamond:",
+    "replacement": "\ud83d\udd36"
+  },
+  {
+    "shortcode": ":last_quarter_moon:",
+    "replacement": "\ud83c\udf17"
+  },
+  {
+    "shortcode": ":last_quarter_moon_with_face:",
+    "replacement": "\ud83c\udf1c"
+  },
+  {
+    "shortcode": ":latin_cross:",
+    "replacement": "\ud7c9\udf1d"
+  },
+  {
+    "shortcode": ":latvia:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":laughing:",
+    "replacement": "\ud83d\ude06"
+  },
+  {
+    "shortcode": ":leaves:",
+    "replacement": "\ud83c\udf43"
+  },
+  {
+    "shortcode": ":lebanon:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":ledger:",
+    "replacement": "\ud83d\udcd2"
+  },
+  {
+    "shortcode": ":left_luggage:",
+    "replacement": "\ud83d\udec5"
+  },
+  {
+    "shortcode": ":left_right_arrow:",
+    "replacement": "\ud7c8\udd94"
+  },
+  {
+    "shortcode": ":leftwards_arrow_with_hook:",
+    "replacement": "\ud7c8\udda9"
+  },
+  {
+    "shortcode": ":lemon:",
+    "replacement": "\ud83c\udf4b"
+  },
+  {
+    "shortcode": ":leo:",
+    "replacement": "\ud7c9\ude4c"
+  },
+  {
+    "shortcode": ":leopard:",
+    "replacement": "\ud83d\udc06"
+  },
+  {
+    "shortcode": ":lesotho:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":level_slider:",
+    "replacement": "\ud83c\udf9a"
+  },
+  {
+    "shortcode": ":liberia:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":libra:",
+    "replacement": "\ud7c9\ude4e"
+  },
+  {
+    "shortcode": ":libya:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":liechtenstein:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":light_rail:",
+    "replacement": "\ud83d\ude88"
+  },
+  {
+    "shortcode": ":link:",
+    "replacement": "\ud83d\udd17"
+  },
+  {
+    "shortcode": ":lion:",
+    "replacement": "\ud83e\udd81"
+  },
+  {
+    "shortcode": ":lips:",
+    "replacement": "\ud83d\udc44"
+  },
+  {
+    "shortcode": ":lipstick:",
+    "replacement": "\ud83d\udc84"
+  },
+  {
+    "shortcode": ":lithuania:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":lizard:",
+    "replacement": "\ud83e\udd8e"
+  },
+  {
+    "shortcode": ":lock:",
+    "replacement": "\ud83d\udd12"
+  },
+  {
+    "shortcode": ":lock_with_ink_pen:",
+    "replacement": "\ud83d\udd0f"
+  },
+  {
+    "shortcode": ":lollipop:",
+    "replacement": "\ud83c\udf6d"
+  },
+  {
+    "shortcode": ":loop:",
+    "replacement": "\ud7c9\udfbf"
+  },
+  {
+    "shortcode": ":loud_sound:",
+    "replacement": "\ud83d\udd0a"
+  },
+  {
+    "shortcode": ":loudspeaker:",
+    "replacement": "\ud83d\udce2"
+  },
+  {
+    "shortcode": ":love_hotel:",
+    "replacement": "\ud83c\udfe9"
+  },
+  {
+    "shortcode": ":love_letter:",
+    "replacement": "\ud83d\udc8c"
+  },
+  {
+    "shortcode": ":low_brightness:",
+    "replacement": "\ud83d\udd05"
+  },
+  {
+    "shortcode": ":luxembourg:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":lying_face:",
+    "replacement": "\ud83e\udd25"
+  },
+  {
+    "shortcode": ":m:",
+    "replacement": "\ud7c9\udcc2"
+  },
+  {
+    "shortcode": ":macau:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":macedonia:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":madagascar:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":mag:",
+    "replacement": "\ud83d\udd0d"
+  },
+  {
+    "shortcode": ":mag_right:",
+    "replacement": "\ud83d\udd0e"
+  },
+  {
+    "shortcode": ":mahjong:",
+    "replacement": "\ud83c\udc04"
+  },
+  {
+    "shortcode": ":mailbox:",
+    "replacement": "\ud83d\udceb"
+  },
+  {
+    "shortcode": ":mailbox_closed:",
+    "replacement": "\ud83d\udcea"
+  },
+  {
+    "shortcode": ":mailbox_with_mail:",
+    "replacement": "\ud83d\udcec"
+  },
+  {
+    "shortcode": ":mailbox_with_no_mail:",
+    "replacement": "\ud83d\udced"
+  },
+  {
+    "shortcode": ":malawi:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":malaysia:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":maldives:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":male_detective:",
+    "replacement": "\ud83d\udd75"
+  },
+  {
+    "shortcode": ":mali:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":malta:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":man:",
+    "replacement": "\ud83d\udc68"
+  },
+  {
+    "shortcode": ":man_artist:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":man_astronaut:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":man_cartwheeling:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":man_cook:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":man_dancing:",
+    "replacement": "\ud83d\udd7a"
+  },
+  {
+    "shortcode": ":man_facepalming:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":man_factory_worker:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":man_farmer:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":man_firefighter:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":man_health_worker:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":man_in_tuxedo:",
+    "replacement": "\ud83e\udd35"
+  },
+  {
+    "shortcode": ":man_judge:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":man_juggling:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":man_mechanic:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":man_office_worker:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":man_pilot:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":man_playing_handball:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":man_playing_water_polo:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":man_scientist:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":man_shrugging:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":man_singer:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":man_student:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":man_teacher:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":man_technologist:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":man_with_gua_pi_mao:",
+    "replacement": "\ud83d\udc72"
+  },
+  {
+    "shortcode": ":man_with_turban:",
+    "replacement": "\ud83d\udc73"
+  },
+  {
+    "shortcode": ":mandarin:",
+    "replacement": "\ud83c\udf4a"
+  },
+  {
+    "shortcode": ":mans_shoe:",
+    "replacement": "\ud83d\udc5e"
+  },
+  {
+    "shortcode": ":mantelpiece_clock:",
+    "replacement": "\ud83d\udd70"
+  },
+  {
+    "shortcode": ":maple_leaf:",
+    "replacement": "\ud83c\udf41"
+  },
+  {
+    "shortcode": ":marshall_islands:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":martial_arts_uniform:",
+    "replacement": "\ud83e\udd4b"
+  },
+  {
+    "shortcode": ":martinique:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":mask:",
+    "replacement": "\ud83d\ude37"
+  },
+  {
+    "shortcode": ":massage:",
+    "replacement": "\ud83d\udc86"
+  },
+  {
+    "shortcode": ":massage_man:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":massage_woman:",
+    "replacement": "\ud83d\udc86"
+  },
+  {
+    "shortcode": ":mauritania:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":mauritius:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":mayotte:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":meat_on_bone:",
+    "replacement": "\ud83c\udf56"
+  },
+  {
+    "shortcode": ":medal_military:",
+    "replacement": "\ud83c\udf96"
+  },
+  {
+    "shortcode": ":medal_sports:",
+    "replacement": "\ud83c\udfc5"
+  },
+  {
+    "shortcode": ":mega:",
+    "replacement": "\ud83d\udce3"
+  },
+  {
+    "shortcode": ":melon:",
+    "replacement": "\ud83c\udf48"
+  },
+  {
+    "shortcode": ":memo:",
+    "replacement": "\ud83d\udcdd"
+  },
+  {
+    "shortcode": ":men_wrestling:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":menorah:",
+    "replacement": "\ud83d\udd4e"
+  },
+  {
+    "shortcode": ":mens:",
+    "replacement": "\ud83d\udeb9"
+  },
+  {
+    "shortcode": ":metal:",
+    "replacement": "\ud83e\udd18"
+  },
+  {
+    "shortcode": ":metro:",
+    "replacement": "\ud83d\ude87"
+  },
+  {
+    "shortcode": ":mexico:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":micronesia:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":microphone:",
+    "replacement": "\ud83c\udfa4"
+  },
+  {
+    "shortcode": ":microscope:",
+    "replacement": "\ud83d\udd2c"
+  },
+  {
+    "shortcode": ":middle_finger:",
+    "replacement": "\ud83d\udd95"
+  },
+  {
+    "shortcode": ":milk_glass:",
+    "replacement": "\ud83e\udd5b"
+  },
+  {
+    "shortcode": ":milky_way:",
+    "replacement": "\ud83c\udf0c"
+  },
+  {
+    "shortcode": ":minibus:",
+    "replacement": "\ud83d\ude90"
+  },
+  {
+    "shortcode": ":minidisc:",
+    "replacement": "\ud83d\udcbd"
+  },
+  {
+    "shortcode": ":mobile_phone_off:",
+    "replacement": "\ud83d\udcf4"
+  },
+  {
+    "shortcode": ":moldova:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":monaco:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":money_mouth_face:",
+    "replacement": "\ud83e\udd11"
+  },
+  {
+    "shortcode": ":money_with_wings:",
+    "replacement": "\ud83d\udcb8"
+  },
+  {
+    "shortcode": ":moneybag:",
+    "replacement": "\ud83d\udcb0"
+  },
+  {
+    "shortcode": ":mongolia:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":monkey:",
+    "replacement": "\ud83d\udc12"
+  },
+  {
+    "shortcode": ":monkey_face:",
+    "replacement": "\ud83d\udc35"
+  },
+  {
+    "shortcode": ":monorail:",
+    "replacement": "\ud83d\ude9d"
+  },
+  {
+    "shortcode": ":montenegro:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":montserrat:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":moon:",
+    "replacement": "\ud83c\udf14"
+  },
+  {
+    "shortcode": ":morocco:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":mortar_board:",
+    "replacement": "\ud83c\udf93"
+  },
+  {
+    "shortcode": ":mosque:",
+    "replacement": "\ud83d\udd4c"
+  },
+  {
+    "shortcode": ":motor_boat:",
+    "replacement": "\ud83d\udee5"
+  },
+  {
+    "shortcode": ":motor_scooter:",
+    "replacement": "\ud83d\udef5"
+  },
+  {
+    "shortcode": ":motorcycle:",
+    "replacement": "\ud83c\udfcd"
+  },
+  {
+    "shortcode": ":motorway:",
+    "replacement": "\ud83d\udee3"
+  },
+  {
+    "shortcode": ":mount_fuji:",
+    "replacement": "\ud83d\uddfb"
+  },
+  {
+    "shortcode": ":mountain:",
+    "replacement": "\ud7c9\udef0"
+  },
+  {
+    "shortcode": ":mountain_bicyclist:",
+    "replacement": "\ud83d\udeb5"
+  },
+  {
+    "shortcode": ":mountain_biking_man:",
+    "replacement": "\ud83d\udeb5"
+  },
+  {
+    "shortcode": ":mountain_biking_woman:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":mountain_cableway:",
+    "replacement": "\ud83d\udea0"
+  },
+  {
+    "shortcode": ":mountain_railway:",
+    "replacement": "\ud83d\ude9e"
+  },
+  {
+    "shortcode": ":mountain_snow:",
+    "replacement": "\ud83c\udfd4"
+  },
+  {
+    "shortcode": ":mouse:",
+    "replacement": "\ud83d\udc2d"
+  },
+  {
+    "shortcode": ":mouse2:",
+    "replacement": "\ud83d\udc01"
+  },
+  {
+    "shortcode": ":movie_camera:",
+    "replacement": "\ud83c\udfa5"
+  },
+  {
+    "shortcode": ":moyai:",
+    "replacement": "\ud83d\uddff"
+  },
+  {
+    "shortcode": ":mozambique:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":mrs_claus:",
+    "replacement": "\ud83e\udd36"
+  },
+  {
+    "shortcode": ":muscle:",
+    "replacement": "\ud83d\udcaa"
+  },
+  {
+    "shortcode": ":mushroom:",
+    "replacement": "\ud83c\udf44"
+  },
+  {
+    "shortcode": ":musical_keyboard:",
+    "replacement": "\ud83c\udfb9"
+  },
+  {
+    "shortcode": ":musical_note:",
+    "replacement": "\ud83c\udfb5"
+  },
+  {
+    "shortcode": ":musical_score:",
+    "replacement": "\ud83c\udfbc"
+  },
+  {
+    "shortcode": ":mute:",
+    "replacement": "\ud83d\udd07"
+  },
+  {
+    "shortcode": ":myanmar:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":nail_care:",
+    "replacement": "\ud83d\udc85"
+  },
+  {
+    "shortcode": ":name_badge:",
+    "replacement": "\ud83d\udcdb"
+  },
+  {
+    "shortcode": ":namibia:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":national_park:",
+    "replacement": "\ud83c\udfde"
+  },
+  {
+    "shortcode": ":nauru:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":nauseated_face:",
+    "replacement": "\ud83e\udd22"
+  },
+  {
+    "shortcode": ":neckbeard:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":necktie:",
+    "replacement": "\ud83d\udc54"
+  },
+  {
+    "shortcode": ":negative_squared_cross_mark:",
+    "replacement": "\ud7c9\udf4e"
+  },
+  {
+    "shortcode": ":nepal:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":nerd_face:",
+    "replacement": "\ud83e\udd13"
+  },
+  {
+    "shortcode": ":netherlands:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":neutral_face:",
+    "replacement": "\ud83d\ude10"
+  },
+  {
+    "shortcode": ":new:",
+    "replacement": "\ud83c\udd95"
+  },
+  {
+    "shortcode": ":new_caledonia:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":new_moon:",
+    "replacement": "\ud83c\udf11"
+  },
+  {
+    "shortcode": ":new_moon_with_face:",
+    "replacement": "\ud83c\udf1a"
+  },
+  {
+    "shortcode": ":new_zealand:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":newspaper:",
+    "replacement": "\ud83d\udcf0"
+  },
+  {
+    "shortcode": ":newspaper_roll:",
+    "replacement": "\ud83d\uddde"
+  },
+  {
+    "shortcode": ":next_track_button:",
+    "replacement": "\ud7c8\udfed"
+  },
+  {
+    "shortcode": ":ng:",
+    "replacement": "\ud83c\udd96"
+  },
+  {
+    "shortcode": ":ng_man:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":ng_woman:",
+    "replacement": "\ud83d\ude45"
+  },
+  {
+    "shortcode": ":nicaragua:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":niger:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":nigeria:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":night_with_stars:",
+    "replacement": "\ud83c\udf03"
+  },
+  {
+    "shortcode": ":nine:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":niue:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":no_bell:",
+    "replacement": "\ud83d\udd15"
+  },
+  {
+    "shortcode": ":no_bicycles:",
+    "replacement": "\ud83d\udeb3"
+  },
+  {
+    "shortcode": ":no_entry:",
+    "replacement": "\ud7c9\uded4"
+  },
+  {
+    "shortcode": ":no_entry_sign:",
+    "replacement": "\ud83d\udeab"
+  },
+  {
+    "shortcode": ":no_good:",
+    "replacement": "\ud83d\ude45"
+  },
+  {
+    "shortcode": ":no_good_man:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":no_good_woman:",
+    "replacement": "\ud83d\ude45"
+  },
+  {
+    "shortcode": ":no_mobile_phones:",
+    "replacement": "\ud83d\udcf5"
+  },
+  {
+    "shortcode": ":no_mouth:",
+    "replacement": "\ud83d\ude36"
+  },
+  {
+    "shortcode": ":no_pedestrians:",
+    "replacement": "\ud83d\udeb7"
+  },
+  {
+    "shortcode": ":no_smoking:",
+    "replacement": "\ud83d\udead"
+  },
+  {
+    "shortcode": ":non-potable_water:",
+    "replacement": "\ud83d\udeb1"
+  },
+  {
+    "shortcode": ":norfolk_island:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":north_korea:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":northern_mariana_islands:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":norway:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":nose:",
+    "replacement": "\ud83d\udc43"
+  },
+  {
+    "shortcode": ":notebook:",
+    "replacement": "\ud83d\udcd3"
+  },
+  {
+    "shortcode": ":notebook_with_decorative_cover:",
+    "replacement": "\ud83d\udcd4"
+  },
+  {
+    "shortcode": ":notes:",
+    "replacement": "\ud83c\udfb6"
+  },
+  {
+    "shortcode": ":nut_and_bolt:",
+    "replacement": "\ud83d\udd29"
+  },
+  {
+    "shortcode": ":o:",
+    "replacement": "\ud7ca\udf55"
+  },
+  {
+    "shortcode": ":o2:",
+    "replacement": "\ud83c\udd7e"
+  },
+  {
+    "shortcode": ":ocean:",
+    "replacement": "\ud83c\udf0a"
+  },
+  {
+    "shortcode": ":octocat:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":octopus:",
+    "replacement": "\ud83d\udc19"
+  },
+  {
+    "shortcode": ":oden:",
+    "replacement": "\ud83c\udf62"
+  },
+  {
+    "shortcode": ":office:",
+    "replacement": "\ud83c\udfe2"
+  },
+  {
+    "shortcode": ":oil_drum:",
+    "replacement": "\ud83d\udee2"
+  },
+  {
+    "shortcode": ":ok:",
+    "replacement": "\ud83c\udd97"
+  },
+  {
+    "shortcode": ":ok_hand:",
+    "replacement": "\ud83d\udc4c"
+  },
+  {
+    "shortcode": ":ok_man:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":ok_woman:",
+    "replacement": "\ud83d\ude46"
+  },
+  {
+    "shortcode": ":old_key:",
+    "replacement": "\ud83d\udddd"
+  },
+  {
+    "shortcode": ":older_man:",
+    "replacement": "\ud83d\udc74"
+  },
+  {
+    "shortcode": ":older_woman:",
+    "replacement": "\ud83d\udc75"
+  },
+  {
+    "shortcode": ":om:",
+    "replacement": "\ud83d\udd49"
+  },
+  {
+    "shortcode": ":oman:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":on:",
+    "replacement": "\ud83d\udd1b"
+  },
+  {
+    "shortcode": ":oncoming_automobile:",
+    "replacement": "\ud83d\ude98"
+  },
+  {
+    "shortcode": ":oncoming_bus:",
+    "replacement": "\ud83d\ude8d"
+  },
+  {
+    "shortcode": ":oncoming_police_car:",
+    "replacement": "\ud83d\ude94"
+  },
+  {
+    "shortcode": ":oncoming_taxi:",
+    "replacement": "\ud83d\ude96"
+  },
+  {
+    "shortcode": ":one:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":open_book:",
+    "replacement": "\ud83d\udcd6"
+  },
+  {
+    "shortcode": ":open_file_folder:",
+    "replacement": "\ud83d\udcc2"
+  },
+  {
+    "shortcode": ":open_hands:",
+    "replacement": "\ud83d\udc50"
+  },
+  {
+    "shortcode": ":open_mouth:",
+    "replacement": "\ud83d\ude2e"
+  },
+  {
+    "shortcode": ":open_umbrella:",
+    "replacement": "\ud7c9\ude02"
+  },
+  {
+    "shortcode": ":ophiuchus:",
+    "replacement": "\ud7c9\udece"
+  },
+  {
+    "shortcode": ":orange:",
+    "replacement": "\ud83c\udf4a"
+  },
+  {
+    "shortcode": ":orange_book:",
+    "replacement": "\ud83d\udcd9"
+  },
+  {
+    "shortcode": ":orthodox_cross:",
+    "replacement": "\ud7c9\ude26"
+  },
+  {
+    "shortcode": ":outbox_tray:",
+    "replacement": "\ud83d\udce4"
+  },
+  {
+    "shortcode": ":owl:",
+    "replacement": "\ud83e\udd89"
+  },
+  {
+    "shortcode": ":ox:",
+    "replacement": "\ud83d\udc02"
+  },
+  {
+    "shortcode": ":package:",
+    "replacement": "\ud83d\udce6"
+  },
+  {
+    "shortcode": ":page_facing_up:",
+    "replacement": "\ud83d\udcc4"
+  },
+  {
+    "shortcode": ":page_with_curl:",
+    "replacement": "\ud83d\udcc3"
+  },
+  {
+    "shortcode": ":pager:",
+    "replacement": "\ud83d\udcdf"
+  },
+  {
+    "shortcode": ":paintbrush:",
+    "replacement": "\ud83d\udd8c"
+  },
+  {
+    "shortcode": ":pakistan:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":palau:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":palestinian_territories:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":palm_tree:",
+    "replacement": "\ud83c\udf34"
+  },
+  {
+    "shortcode": ":panama:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":pancakes:",
+    "replacement": "\ud83e\udd5e"
+  },
+  {
+    "shortcode": ":panda_face:",
+    "replacement": "\ud83d\udc3c"
+  },
+  {
+    "shortcode": ":paperclip:",
+    "replacement": "\ud83d\udcce"
+  },
+  {
+    "shortcode": ":paperclips:",
+    "replacement": "\ud83d\udd87"
+  },
+  {
+    "shortcode": ":papua_new_guinea:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":paraguay:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":parasol_on_ground:",
+    "replacement": "\ud7c9\udef1"
+  },
+  {
+    "shortcode": ":parking:",
+    "replacement": "\ud83c\udd7f"
+  },
+  {
+    "shortcode": ":part_alternation_mark:",
+    "replacement": "\ud7cc\udc3d"
+  },
+  {
+    "shortcode": ":partly_sunny:",
+    "replacement": "\ud7c9\udec5"
+  },
+  {
+    "shortcode": ":passenger_ship:",
+    "replacement": "\ud83d\udef3"
+  },
+  {
+    "shortcode": ":passport_control:",
+    "replacement": "\ud83d\udec2"
+  },
+  {
+    "shortcode": ":pause_button:",
+    "replacement": "\ud7c8\udff8"
+  },
+  {
+    "shortcode": ":paw_prints:",
+    "replacement": "\ud83d\udc3e"
+  },
+  {
+    "shortcode": ":peace_symbol:",
+    "replacement": "\ud7c9\ude2e"
+  },
+  {
+    "shortcode": ":peach:",
+    "replacement": "\ud83c\udf51"
+  },
+  {
+    "shortcode": ":peanuts:",
+    "replacement": "\ud83e\udd5c"
+  },
+  {
+    "shortcode": ":pear:",
+    "replacement": "\ud83c\udf50"
+  },
+  {
+    "shortcode": ":pen:",
+    "replacement": "\ud83d\udd8a"
+  },
+  {
+    "shortcode": ":pencil:",
+    "replacement": "\ud83d\udcdd"
+  },
+  {
+    "shortcode": ":pencil2:",
+    "replacement": "\ud7c9\udf0f"
+  },
+  {
+    "shortcode": ":penguin:",
+    "replacement": "\ud83d\udc27"
+  },
+  {
+    "shortcode": ":pensive:",
+    "replacement": "\ud83d\ude14"
+  },
+  {
+    "shortcode": ":performing_arts:",
+    "replacement": "\ud83c\udfad"
+  },
+  {
+    "shortcode": ":persevere:",
+    "replacement": "\ud83d\ude23"
+  },
+  {
+    "shortcode": ":person_fencing:",
+    "replacement": "\ud83e\udd3a"
+  },
+  {
+    "shortcode": ":person_frowning:",
+    "replacement": "\ud83d\ude4d"
+  },
+  {
+    "shortcode": ":person_with_blond_hair:",
+    "replacement": "\ud83d\udc71"
+  },
+  {
+    "shortcode": ":person_with_pouting_face:",
+    "replacement": "\ud83d\ude4e"
+  },
+  {
+    "shortcode": ":peru:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":philippines:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":phone:",
+    "replacement": "\ud7c9\ude0e"
+  },
+  {
+    "shortcode": ":pick:",
+    "replacement": "\ud7c9\udecf"
+  },
+  {
+    "shortcode": ":pig:",
+    "replacement": "\ud83d\udc37"
+  },
+  {
+    "shortcode": ":pig2:",
+    "replacement": "\ud83d\udc16"
+  },
+  {
+    "shortcode": ":pig_nose:",
+    "replacement": "\ud83d\udc3d"
+  },
+  {
+    "shortcode": ":pill:",
+    "replacement": "\ud83d\udc8a"
+  },
+  {
+    "shortcode": ":pineapple:",
+    "replacement": "\ud83c\udf4d"
+  },
+  {
+    "shortcode": ":ping_pong:",
+    "replacement": "\ud83c\udfd3"
+  },
+  {
+    "shortcode": ":pisces:",
+    "replacement": "\ud7c9\ude53"
+  },
+  {
+    "shortcode": ":pitcairn_islands:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":pizza:",
+    "replacement": "\ud83c\udf55"
+  },
+  {
+    "shortcode": ":place_of_worship:",
+    "replacement": "\ud83d\uded0"
+  },
+  {
+    "shortcode": ":plate_with_cutlery:",
+    "replacement": "\ud83c\udf7d"
+  },
+  {
+    "shortcode": ":play_or_pause_button:",
+    "replacement": "\ud7c8\udfef"
+  },
+  {
+    "shortcode": ":point_down:",
+    "replacement": "\ud83d\udc47"
+  },
+  {
+    "shortcode": ":point_left:",
+    "replacement": "\ud83d\udc48"
+  },
+  {
+    "shortcode": ":point_right:",
+    "replacement": "\ud83d\udc49"
+  },
+  {
+    "shortcode": ":point_up:",
+    "replacement": "\ud7c9\ude1d"
+  },
+  {
+    "shortcode": ":point_up_2:",
+    "replacement": "\ud83d\udc46"
+  },
+  {
+    "shortcode": ":poland:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":police_car:",
+    "replacement": "\ud83d\ude93"
+  },
+  {
+    "shortcode": ":policeman:",
+    "replacement": "\ud83d\udc6e"
+  },
+  {
+    "shortcode": ":policewoman:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":poodle:",
+    "replacement": "\ud83d\udc29"
+  },
+  {
+    "shortcode": ":poop:",
+    "replacement": "\ud83d\udca9"
+  },
+  {
+    "shortcode": ":popcorn:",
+    "replacement": "\ud83c\udf7f"
+  },
+  {
+    "shortcode": ":portugal:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":post_office:",
+    "replacement": "\ud83c\udfe3"
+  },
+  {
+    "shortcode": ":postal_horn:",
+    "replacement": "\ud83d\udcef"
+  },
+  {
+    "shortcode": ":postbox:",
+    "replacement": "\ud83d\udcee"
+  },
+  {
+    "shortcode": ":potable_water:",
+    "replacement": "\ud83d\udeb0"
+  },
+  {
+    "shortcode": ":potato:",
+    "replacement": "\ud83e\udd54"
+  },
+  {
+    "shortcode": ":pouch:",
+    "replacement": "\ud83d\udc5d"
+  },
+  {
+    "shortcode": ":poultry_leg:",
+    "replacement": "\ud83c\udf57"
+  },
+  {
+    "shortcode": ":pound:",
+    "replacement": "\ud83d\udcb7"
+  },
+  {
+    "shortcode": ":pout:",
+    "replacement": "\ud83d\ude21"
+  },
+  {
+    "shortcode": ":pouting_cat:",
+    "replacement": "\ud83d\ude3e"
+  },
+  {
+    "shortcode": ":pouting_man:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":pouting_woman:",
+    "replacement": "\ud83d\ude4e"
+  },
+  {
+    "shortcode": ":pray:",
+    "replacement": "\ud83d\ude4f"
+  },
+  {
+    "shortcode": ":prayer_beads:",
+    "replacement": "\ud83d\udcff"
+  },
+  {
+    "shortcode": ":pregnant_woman:",
+    "replacement": "\ud83e\udd30"
+  },
+  {
+    "shortcode": ":previous_track_button:",
+    "replacement": "\ud7c8\udfee"
+  },
+  {
+    "shortcode": ":prince:",
+    "replacement": "\ud83e\udd34"
+  },
+  {
+    "shortcode": ":princess:",
+    "replacement": "\ud83d\udc78"
+  },
+  {
+    "shortcode": ":printer:",
+    "replacement": "\ud83d\udda8"
+  },
+  {
+    "shortcode": ":puerto_rico:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":punch:",
+    "replacement": "\ud83d\udc4a"
+  },
+  {
+    "shortcode": ":purple_heart:",
+    "replacement": "\ud83d\udc9c"
+  },
+  {
+    "shortcode": ":purse:",
+    "replacement": "\ud83d\udc5b"
+  },
+  {
+    "shortcode": ":pushpin:",
+    "replacement": "\ud83d\udccc"
+  },
+  {
+    "shortcode": ":put_litter_in_its_place:",
+    "replacement": "\ud83d\udeae"
+  },
+  {
+    "shortcode": ":qatar:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":question:",
+    "replacement": "\ud7c9\udf53"
+  },
+  {
+    "shortcode": ":rabbit:",
+    "replacement": "\ud83d\udc30"
+  },
+  {
+    "shortcode": ":rabbit2:",
+    "replacement": "\ud83d\udc07"
+  },
+  {
+    "shortcode": ":racehorse:",
+    "replacement": "\ud83d\udc0e"
+  },
+  {
+    "shortcode": ":racing_car:",
+    "replacement": "\ud83c\udfce"
+  },
+  {
+    "shortcode": ":radio:",
+    "replacement": "\ud83d\udcfb"
+  },
+  {
+    "shortcode": ":radio_button:",
+    "replacement": "\ud83d\udd18"
+  },
+  {
+    "shortcode": ":radioactive:",
+    "replacement": "\ud7c9\ude22"
+  },
+  {
+    "shortcode": ":rage:",
+    "replacement": "\ud83d\ude21"
+  },
+  {
+    "shortcode": ":rage1:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":rage2:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":rage3:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":rage4:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":railway_car:",
+    "replacement": "\ud83d\ude83"
+  },
+  {
+    "shortcode": ":railway_track:",
+    "replacement": "\ud83d\udee4"
+  },
+  {
+    "shortcode": ":rainbow:",
+    "replacement": "\ud83c\udf08"
+  },
+  {
+    "shortcode": ":rainbow_flag:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":raised_back_of_hand:",
+    "replacement": "\ud83e\udd1a"
+  },
+  {
+    "shortcode": ":raised_hand:",
+    "replacement": "\ud7c9\udf0b"
+  },
+  {
+    "shortcode": ":raised_hand_with_fingers_splayed:",
+    "replacement": "\ud83d\udd90"
+  },
+  {
+    "shortcode": ":raised_hands:",
+    "replacement": "\ud83d\ude4c"
+  },
+  {
+    "shortcode": ":raising_hand:",
+    "replacement": "\ud83d\ude4b"
+  },
+  {
+    "shortcode": ":raising_hand_man:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":raising_hand_woman:",
+    "replacement": "\ud83d\ude4b"
+  },
+  {
+    "shortcode": ":ram:",
+    "replacement": "\ud83d\udc0f"
+  },
+  {
+    "shortcode": ":ramen:",
+    "replacement": "\ud83c\udf5c"
+  },
+  {
+    "shortcode": ":rat:",
+    "replacement": "\ud83d\udc00"
+  },
+  {
+    "shortcode": ":record_button:",
+    "replacement": "\ud7c8\udffa"
+  },
+  {
+    "shortcode": ":recycle:",
+    "replacement": "\ud7c9\ude7b"
+  },
+  {
+    "shortcode": ":red_car:",
+    "replacement": "\ud83d\ude97"
+  },
+  {
+    "shortcode": ":red_circle:",
+    "replacement": "\ud83d\udd34"
+  },
+  {
+    "shortcode": ":registered:",
+    "replacement": "\ud7c0\udcae"
+  },
+  {
+    "shortcode": ":relaxed:",
+    "replacement": "\ud7c9\ude3a"
+  },
+  {
+    "shortcode": ":relieved:",
+    "replacement": "\ud83d\ude0c"
+  },
+  {
+    "shortcode": ":reminder_ribbon:",
+    "replacement": "\ud83c\udf97"
+  },
+  {
+    "shortcode": ":repeat:",
+    "replacement": "\ud83d\udd01"
+  },
+  {
+    "shortcode": ":repeat_one:",
+    "replacement": "\ud83d\udd02"
+  },
+  {
+    "shortcode": ":rescue_worker_helmet:",
+    "replacement": "\ud7c9\uded1"
+  },
+  {
+    "shortcode": ":restroom:",
+    "replacement": "\ud83d\udebb"
+  },
+  {
+    "shortcode": ":reunion:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":revolving_hearts:",
+    "replacement": "\ud83d\udc9e"
+  },
+  {
+    "shortcode": ":rewind:",
+    "replacement": "\ud7c8\udfea"
+  },
+  {
+    "shortcode": ":rhinoceros:",
+    "replacement": "\ud83e\udd8f"
+  },
+  {
+    "shortcode": ":ribbon:",
+    "replacement": "\ud83c\udf80"
+  },
+  {
+    "shortcode": ":rice:",
+    "replacement": "\ud83c\udf5a"
+  },
+  {
+    "shortcode": ":rice_ball:",
+    "replacement": "\ud83c\udf59"
+  },
+  {
+    "shortcode": ":rice_cracker:",
+    "replacement": "\ud83c\udf58"
+  },
+  {
+    "shortcode": ":rice_scene:",
+    "replacement": "\ud83c\udf91"
+  },
+  {
+    "shortcode": ":right_anger_bubble:",
+    "replacement": "\ud83d\uddef"
+  },
+  {
+    "shortcode": ":ring:",
+    "replacement": "\ud83d\udc8d"
+  },
+  {
+    "shortcode": ":robot:",
+    "replacement": "\ud83e\udd16"
+  },
+  {
+    "shortcode": ":rocket:",
+    "replacement": "\ud83d\ude80"
+  },
+  {
+    "shortcode": ":rofl:",
+    "replacement": "\ud83e\udd23"
+  },
+  {
+    "shortcode": ":roll_eyes:",
+    "replacement": "\ud83d\ude44"
+  },
+  {
+    "shortcode": ":roller_coaster:",
+    "replacement": "\ud83c\udfa2"
+  },
+  {
+    "shortcode": ":romania:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":rooster:",
+    "replacement": "\ud83d\udc13"
+  },
+  {
+    "shortcode": ":rose:",
+    "replacement": "\ud83c\udf39"
+  },
+  {
+    "shortcode": ":rosette:",
+    "replacement": "\ud83c\udff5"
+  },
+  {
+    "shortcode": ":rotating_light:",
+    "replacement": "\ud83d\udea8"
+  },
+  {
+    "shortcode": ":round_pushpin:",
+    "replacement": "\ud83d\udccd"
+  },
+  {
+    "shortcode": ":rowboat:",
+    "replacement": "\ud83d\udea3"
+  },
+  {
+    "shortcode": ":rowing_man:",
+    "replacement": "\ud83d\udea3"
+  },
+  {
+    "shortcode": ":rowing_woman:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":ru:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":rugby_football:",
+    "replacement": "\ud83c\udfc9"
+  },
+  {
+    "shortcode": ":runner:",
+    "replacement": "\ud83c\udfc3"
+  },
+  {
+    "shortcode": ":running:",
+    "replacement": "\ud83c\udfc3"
+  },
+  {
+    "shortcode": ":running_man:",
+    "replacement": "\ud83c\udfc3"
+  },
+  {
+    "shortcode": ":running_shirt_with_sash:",
+    "replacement": "\ud83c\udfbd"
+  },
+  {
+    "shortcode": ":running_woman:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":rwanda:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":sa:",
+    "replacement": "\ud83c\ude02"
+  },
+  {
+    "shortcode": ":sagittarius:",
+    "replacement": "\ud7c9\ude50"
+  },
+  {
+    "shortcode": ":sailboat:",
+    "replacement": "\ud7c9\udef5"
+  },
+  {
+    "shortcode": ":sake:",
+    "replacement": "\ud83c\udf76"
+  },
+  {
+    "shortcode": ":samoa:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":san_marino:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":sandal:",
+    "replacement": "\ud83d\udc61"
+  },
+  {
+    "shortcode": ":santa:",
+    "replacement": "\ud83c\udf85"
+  },
+  {
+    "shortcode": ":sao_tome_principe:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":sassy_man:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":sassy_woman:",
+    "replacement": "\ud83d\udc81"
+  },
+  {
+    "shortcode": ":satellite:",
+    "replacement": "\ud83d\udce1"
+  },
+  {
+    "shortcode": ":satisfied:",
+    "replacement": "\ud83d\ude06"
+  },
+  {
+    "shortcode": ":saudi_arabia:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":saxophone:",
+    "replacement": "\ud83c\udfb7"
+  },
+  {
+    "shortcode": ":school:",
+    "replacement": "\ud83c\udfeb"
+  },
+  {
+    "shortcode": ":school_satchel:",
+    "replacement": "\ud83c\udf92"
+  },
+  {
+    "shortcode": ":scissors:",
+    "replacement": "\ud7c9\udf02"
+  },
+  {
+    "shortcode": ":scorpion:",
+    "replacement": "\ud83e\udd82"
+  },
+  {
+    "shortcode": ":scorpius:",
+    "replacement": "\ud7c9\ude4f"
+  },
+  {
+    "shortcode": ":scream:",
+    "replacement": "\ud83d\ude31"
+  },
+  {
+    "shortcode": ":scream_cat:",
+    "replacement": "\ud83d\ude40"
+  },
+  {
+    "shortcode": ":scroll:",
+    "replacement": "\ud83d\udcdc"
+  },
+  {
+    "shortcode": ":seat:",
+    "replacement": "\ud83d\udcba"
+  },
+  {
+    "shortcode": ":secret:",
+    "replacement": "\ud7cc\ude99"
+  },
+  {
+    "shortcode": ":see_no_evil:",
+    "replacement": "\ud83d\ude48"
+  },
+  {
+    "shortcode": ":seedling:",
+    "replacement": "\ud83c\udf31"
+  },
+  {
+    "shortcode": ":selfie:",
+    "replacement": "\ud83e\udd33"
+  },
+  {
+    "shortcode": ":senegal:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":serbia:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":seven:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":seychelles:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":shallow_pan_of_food:",
+    "replacement": "\ud83e\udd58"
+  },
+  {
+    "shortcode": ":shamrock:",
+    "replacement": "\ud7c9\ude18"
+  },
+  {
+    "shortcode": ":shark:",
+    "replacement": "\ud83e\udd88"
+  },
+  {
+    "shortcode": ":shaved_ice:",
+    "replacement": "\ud83c\udf67"
+  },
+  {
+    "shortcode": ":sheep:",
+    "replacement": "\ud83d\udc11"
+  },
+  {
+    "shortcode": ":shell:",
+    "replacement": "\ud83d\udc1a"
+  },
+  {
+    "shortcode": ":shield:",
+    "replacement": "\ud83d\udee1"
+  },
+  {
+    "shortcode": ":shinto_shrine:",
+    "replacement": "\ud7c9\udee9"
+  },
+  {
+    "shortcode": ":ship:",
+    "replacement": "\ud83d\udea2"
+  },
+  {
+    "shortcode": ":shipit:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":shirt:",
+    "replacement": "\ud83d\udc55"
+  },
+  {
+    "shortcode": ":shit:",
+    "replacement": "\ud83d\udca9"
+  },
+  {
+    "shortcode": ":shoe:",
+    "replacement": "\ud83d\udc5e"
+  },
+  {
+    "shortcode": ":shopping:",
+    "replacement": "\ud83d\udecd"
+  },
+  {
+    "shortcode": ":shopping_cart:",
+    "replacement": "\ud83d\uded2"
+  },
+  {
+    "shortcode": ":shower:",
+    "replacement": "\ud83d\udebf"
+  },
+  {
+    "shortcode": ":shrimp:",
+    "replacement": "\ud83e\udd90"
+  },
+  {
+    "shortcode": ":sierra_leone:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":signal_strength:",
+    "replacement": "\ud83d\udcf6"
+  },
+  {
+    "shortcode": ":singapore:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":sint_maarten:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":six:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":six_pointed_star:",
+    "replacement": "\ud83d\udd2f"
+  },
+  {
+    "shortcode": ":ski:",
+    "replacement": "\ud83c\udfbf"
+  },
+  {
+    "shortcode": ":skier:",
+    "replacement": "\ud7c9\udef7"
+  },
+  {
+    "shortcode": ":skull:",
+    "replacement": "\ud83d\udc80"
+  },
+  {
+    "shortcode": ":skull_and_crossbones:",
+    "replacement": "\ud7c9\ude20"
+  },
+  {
+    "shortcode": ":sleeping:",
+    "replacement": "\ud83d\ude34"
+  },
+  {
+    "shortcode": ":sleeping_bed:",
+    "replacement": "\ud83d\udecc"
+  },
+  {
+    "shortcode": ":sleepy:",
+    "replacement": "\ud83d\ude2a"
+  },
+  {
+    "shortcode": ":slightly_frowning_face:",
+    "replacement": "\ud83d\ude41"
+  },
+  {
+    "shortcode": ":slightly_smiling_face:",
+    "replacement": "\ud83d\ude42"
+  },
+  {
+    "shortcode": ":slot_machine:",
+    "replacement": "\ud83c\udfb0"
+  },
+  {
+    "shortcode": ":slovakia:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":slovenia:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":small_airplane:",
+    "replacement": "\ud83d\udee9"
+  },
+  {
+    "shortcode": ":small_blue_diamond:",
+    "replacement": "\ud83d\udd39"
+  },
+  {
+    "shortcode": ":small_orange_diamond:",
+    "replacement": "\ud83d\udd38"
+  },
+  {
+    "shortcode": ":small_red_triangle:",
+    "replacement": "\ud83d\udd3a"
+  },
+  {
+    "shortcode": ":small_red_triangle_down:",
+    "replacement": "\ud83d\udd3b"
+  },
+  {
+    "shortcode": ":smile:",
+    "replacement": "\ud83d\ude04"
+  },
+  {
+    "shortcode": ":smile_cat:",
+    "replacement": "\ud83d\ude38"
+  },
+  {
+    "shortcode": ":smiley:",
+    "replacement": "\ud83d\ude03"
+  },
+  {
+    "shortcode": ":smiley_cat:",
+    "replacement": "\ud83d\ude3a"
+  },
+  {
+    "shortcode": ":smiling_imp:",
+    "replacement": "\ud83d\ude08"
+  },
+  {
+    "shortcode": ":smirk:",
+    "replacement": "\ud83d\ude0f"
+  },
+  {
+    "shortcode": ":smirk_cat:",
+    "replacement": "\ud83d\ude3c"
+  },
+  {
+    "shortcode": ":smoking:",
+    "replacement": "\ud83d\udeac"
+  },
+  {
+    "shortcode": ":snail:",
+    "replacement": "\ud83d\udc0c"
+  },
+  {
+    "shortcode": ":snake:",
+    "replacement": "\ud83d\udc0d"
+  },
+  {
+    "shortcode": ":sneezing_face:",
+    "replacement": "\ud83e\udd27"
+  },
+  {
+    "shortcode": ":snowboarder:",
+    "replacement": "\ud83c\udfc2"
+  },
+  {
+    "shortcode": ":snowflake:",
+    "replacement": "\ud7c9\udf44"
+  },
+  {
+    "shortcode": ":snowman:",
+    "replacement": "\ud7c9\udec4"
+  },
+  {
+    "shortcode": ":snowman_with_snow:",
+    "replacement": "\ud7c9\ude03"
+  },
+  {
+    "shortcode": ":sob:",
+    "replacement": "\ud83d\ude2d"
+  },
+  {
+    "shortcode": ":soccer:",
+    "replacement": "\ud7c9\udebd"
+  },
+  {
+    "shortcode": ":solomon_islands:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":somalia:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":soon:",
+    "replacement": "\ud83d\udd1c"
+  },
+  {
+    "shortcode": ":sos:",
+    "replacement": "\ud83c\udd98"
+  },
+  {
+    "shortcode": ":sound:",
+    "replacement": "\ud83d\udd09"
+  },
+  {
+    "shortcode": ":south_africa:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":south_georgia_south_sandwich_islands:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":south_sudan:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":space_invader:",
+    "replacement": "\ud83d\udc7e"
+  },
+  {
+    "shortcode": ":spades:",
+    "replacement": "\ud7c9\ude60"
+  },
+  {
+    "shortcode": ":spaghetti:",
+    "replacement": "\ud83c\udf5d"
+  },
+  {
+    "shortcode": ":sparkle:",
+    "replacement": "\ud7c9\udf47"
+  },
+  {
+    "shortcode": ":sparkler:",
+    "replacement": "\ud83c\udf87"
+  },
+  {
+    "shortcode": ":sparkles:",
+    "replacement": "\ud7c9\udf28"
+  },
+  {
+    "shortcode": ":sparkling_heart:",
+    "replacement": "\ud83d\udc96"
+  },
+  {
+    "shortcode": ":speak_no_evil:",
+    "replacement": "\ud83d\ude4a"
+  },
+  {
+    "shortcode": ":speaker:",
+    "replacement": "\ud83d\udd08"
+  },
+  {
+    "shortcode": ":speaking_head:",
+    "replacement": "\ud83d\udde3"
+  },
+  {
+    "shortcode": ":speech_balloon:",
+    "replacement": "\ud83d\udcac"
+  },
+  {
+    "shortcode": ":speedboat:",
+    "replacement": "\ud83d\udea4"
+  },
+  {
+    "shortcode": ":spider:",
+    "replacement": "\ud83d\udd77"
+  },
+  {
+    "shortcode": ":spider_web:",
+    "replacement": "\ud83d\udd78"
+  },
+  {
+    "shortcode": ":spiral_calendar:",
+    "replacement": "\ud83d\uddd3"
+  },
+  {
+    "shortcode": ":spiral_notepad:",
+    "replacement": "\ud83d\uddd2"
+  },
+  {
+    "shortcode": ":spoon:",
+    "replacement": "\ud83e\udd44"
+  },
+  {
+    "shortcode": ":squid:",
+    "replacement": "\ud83e\udd91"
+  },
+  {
+    "shortcode": ":squirrel:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":sri_lanka:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":st_barthelemy:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":st_helena:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":st_kitts_nevis:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":st_lucia:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":st_pierre_miquelon:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":st_vincent_grenadines:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":stadium:",
+    "replacement": "\ud83c\udfdf"
+  },
+  {
+    "shortcode": ":star:",
+    "replacement": "\ud7ca\udf50"
+  },
+  {
+    "shortcode": ":star2:",
+    "replacement": "\ud83c\udf1f"
+  },
+  {
+    "shortcode": ":star_and_crescent:",
+    "replacement": "\ud7c9\ude2a"
+  },
+  {
+    "shortcode": ":star_of_david:",
+    "replacement": "\ud7c9\udf21"
+  },
+  {
+    "shortcode": ":stars:",
+    "replacement": "\ud83c\udf20"
+  },
+  {
+    "shortcode": ":station:",
+    "replacement": "\ud83d\ude89"
+  },
+  {
+    "shortcode": ":statue_of_liberty:",
+    "replacement": "\ud83d\uddfd"
+  },
+  {
+    "shortcode": ":steam_locomotive:",
+    "replacement": "\ud83d\ude82"
+  },
+  {
+    "shortcode": ":stew:",
+    "replacement": "\ud83c\udf72"
+  },
+  {
+    "shortcode": ":stop_button:",
+    "replacement": "\ud7c8\udff9"
+  },
+  {
+    "shortcode": ":stop_sign:",
+    "replacement": "\ud83d\uded1"
+  },
+  {
+    "shortcode": ":stopwatch:",
+    "replacement": "\ud7c8\udff1"
+  },
+  {
+    "shortcode": ":straight_ruler:",
+    "replacement": "\ud83d\udccf"
+  },
+  {
+    "shortcode": ":strawberry:",
+    "replacement": "\ud83c\udf53"
+  },
+  {
+    "shortcode": ":stuck_out_tongue:",
+    "replacement": "\ud83d\ude1b"
+  },
+  {
+    "shortcode": ":stuck_out_tongue_closed_eyes:",
+    "replacement": "\ud83d\ude1d"
+  },
+  {
+    "shortcode": ":stuck_out_tongue_winking_eye:",
+    "replacement": "\ud83d\ude1c"
+  },
+  {
+    "shortcode": ":studio_microphone:",
+    "replacement": "\ud83c\udf99"
+  },
+  {
+    "shortcode": ":stuffed_flatbread:",
+    "replacement": "\ud83e\udd59"
+  },
+  {
+    "shortcode": ":sudan:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":sun_behind_large_cloud:",
+    "replacement": "\ud83c\udf25"
+  },
+  {
+    "shortcode": ":sun_behind_rain_cloud:",
+    "replacement": "\ud83c\udf26"
+  },
+  {
+    "shortcode": ":sun_behind_small_cloud:",
+    "replacement": "\ud83c\udf24"
+  },
+  {
+    "shortcode": ":sun_with_face:",
+    "replacement": "\ud83c\udf1e"
+  },
+  {
+    "shortcode": ":sunflower:",
+    "replacement": "\ud83c\udf3b"
+  },
+  {
+    "shortcode": ":sunglasses:",
+    "replacement": "\ud83d\ude0e"
+  },
+  {
+    "shortcode": ":sunny:",
+    "replacement": "\ud7c9\ude00"
+  },
+  {
+    "shortcode": ":sunrise:",
+    "replacement": "\ud83c\udf05"
+  },
+  {
+    "shortcode": ":sunrise_over_mountains:",
+    "replacement": "\ud83c\udf04"
+  },
+  {
+    "shortcode": ":surfer:",
+    "replacement": "\ud83c\udfc4"
+  },
+  {
+    "shortcode": ":surfing_man:",
+    "replacement": "\ud83c\udfc4"
+  },
+  {
+    "shortcode": ":surfing_woman:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":suriname:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":sushi:",
+    "replacement": "\ud83c\udf63"
+  },
+  {
+    "shortcode": ":suspect:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":suspension_railway:",
+    "replacement": "\ud83d\ude9f"
+  },
+  {
+    "shortcode": ":swaziland:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":sweat:",
+    "replacement": "\ud83d\ude13"
+  },
+  {
+    "shortcode": ":sweat_drops:",
+    "replacement": "\ud83d\udca6"
+  },
+  {
+    "shortcode": ":sweat_smile:",
+    "replacement": "\ud83d\ude05"
+  },
+  {
+    "shortcode": ":sweden:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":sweet_potato:",
+    "replacement": "\ud83c\udf60"
+  },
+  {
+    "shortcode": ":swimmer:",
+    "replacement": "\ud83c\udfca"
+  },
+  {
+    "shortcode": ":swimming_man:",
+    "replacement": "\ud83c\udfca"
+  },
+  {
+    "shortcode": ":swimming_woman:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":switzerland:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":symbols:",
+    "replacement": "\ud83d\udd23"
+  },
+  {
+    "shortcode": ":synagogue:",
+    "replacement": "\ud83d\udd4d"
+  },
+  {
+    "shortcode": ":syria:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":syringe:",
+    "replacement": "\ud83d\udc89"
+  },
+  {
+    "shortcode": ":taco:",
+    "replacement": "\ud83c\udf2e"
+  },
+  {
+    "shortcode": ":tada:",
+    "replacement": "\ud83c\udf89"
+  },
+  {
+    "shortcode": ":taiwan:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":tajikistan:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":tanabata_tree:",
+    "replacement": "\ud83c\udf8b"
+  },
+  {
+    "shortcode": ":tangerine:",
+    "replacement": "\ud83c\udf4a"
+  },
+  {
+    "shortcode": ":tanzania:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":taurus:",
+    "replacement": "\ud7c9\ude49"
+  },
+  {
+    "shortcode": ":taxi:",
+    "replacement": "\ud83d\ude95"
+  },
+  {
+    "shortcode": ":tea:",
+    "replacement": "\ud83c\udf75"
+  },
+  {
+    "shortcode": ":telephone:",
+    "replacement": "\ud7c9\ude0e"
+  },
+  {
+    "shortcode": ":telephone_receiver:",
+    "replacement": "\ud83d\udcde"
+  },
+  {
+    "shortcode": ":telescope:",
+    "replacement": "\ud83d\udd2d"
+  },
+  {
+    "shortcode": ":tennis:",
+    "replacement": "\ud83c\udfbe"
+  },
+  {
+    "shortcode": ":tent:",
+    "replacement": "\ud7c9\udefa"
+  },
+  {
+    "shortcode": ":thailand:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":thermometer:",
+    "replacement": "\ud83c\udf21"
+  },
+  {
+    "shortcode": ":thinking:",
+    "replacement": "\ud83e\udd14"
+  },
+  {
+    "shortcode": ":thought_balloon:",
+    "replacement": "\ud83d\udcad"
+  },
+  {
+    "shortcode": ":three:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":thumbsdown:",
+    "replacement": "\ud83d\udc4e"
+  },
+  {
+    "shortcode": ":thumbsup:",
+    "replacement": "\ud83d\udc4d"
+  },
+  {
+    "shortcode": ":ticket:",
+    "replacement": "\ud83c\udfab"
+  },
+  {
+    "shortcode": ":tickets:",
+    "replacement": "\ud83c\udf9f"
+  },
+  {
+    "shortcode": ":tiger:",
+    "replacement": "\ud83d\udc2f"
+  },
+  {
+    "shortcode": ":tiger2:",
+    "replacement": "\ud83d\udc05"
+  },
+  {
+    "shortcode": ":timer_clock:",
+    "replacement": "\ud7c8\udff2"
+  },
+  {
+    "shortcode": ":timor_leste:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":tipping_hand_man:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":tipping_hand_woman:",
+    "replacement": "\ud83d\udc81"
+  },
+  {
+    "shortcode": ":tired_face:",
+    "replacement": "\ud83d\ude2b"
+  },
+  {
+    "shortcode": ":tm:",
+    "replacement": "\ud7c8\udd22"
+  },
+  {
+    "shortcode": ":togo:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":toilet:",
+    "replacement": "\ud83d\udebd"
+  },
+  {
+    "shortcode": ":tokelau:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":tokyo_tower:",
+    "replacement": "\ud83d\uddfc"
+  },
+  {
+    "shortcode": ":tomato:",
+    "replacement": "\ud83c\udf45"
+  },
+  {
+    "shortcode": ":tonga:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":tongue:",
+    "replacement": "\ud83d\udc45"
+  },
+  {
+    "shortcode": ":top:",
+    "replacement": "\ud83d\udd1d"
+  },
+  {
+    "shortcode": ":tophat:",
+    "replacement": "\ud83c\udfa9"
+  },
+  {
+    "shortcode": ":tornado:",
+    "replacement": "\ud83c\udf2a"
+  },
+  {
+    "shortcode": ":tr:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":trackball:",
+    "replacement": "\ud83d\uddb2"
+  },
+  {
+    "shortcode": ":tractor:",
+    "replacement": "\ud83d\ude9c"
+  },
+  {
+    "shortcode": ":traffic_light:",
+    "replacement": "\ud83d\udea5"
+  },
+  {
+    "shortcode": ":train:",
+    "replacement": "\ud83d\ude8b"
+  },
+  {
+    "shortcode": ":train2:",
+    "replacement": "\ud83d\ude86"
+  },
+  {
+    "shortcode": ":tram:",
+    "replacement": "\ud83d\ude8a"
+  },
+  {
+    "shortcode": ":triangular_flag_on_post:",
+    "replacement": "\ud83d\udea9"
+  },
+  {
+    "shortcode": ":triangular_ruler:",
+    "replacement": "\ud83d\udcd0"
+  },
+  {
+    "shortcode": ":trident:",
+    "replacement": "\ud83d\udd31"
+  },
+  {
+    "shortcode": ":trinidad_tobago:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":triumph:",
+    "replacement": "\ud83d\ude24"
+  },
+  {
+    "shortcode": ":trolleybus:",
+    "replacement": "\ud83d\ude8e"
+  },
+  {
+    "shortcode": ":trollface:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":trophy:",
+    "replacement": "\ud83c\udfc6"
+  },
+  {
+    "shortcode": ":tropical_drink:",
+    "replacement": "\ud83c\udf79"
+  },
+  {
+    "shortcode": ":tropical_fish:",
+    "replacement": "\ud83d\udc20"
+  },
+  {
+    "shortcode": ":truck:",
+    "replacement": "\ud83d\ude9a"
+  },
+  {
+    "shortcode": ":trumpet:",
+    "replacement": "\ud83c\udfba"
+  },
+  {
+    "shortcode": ":tshirt:",
+    "replacement": "\ud83d\udc55"
+  },
+  {
+    "shortcode": ":tulip:",
+    "replacement": "\ud83c\udf37"
+  },
+  {
+    "shortcode": ":tumbler_glass:",
+    "replacement": "\ud83e\udd43"
+  },
+  {
+    "shortcode": ":tunisia:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":turkey:",
+    "replacement": "\ud83e\udd83"
+  },
+  {
+    "shortcode": ":turkmenistan:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":turks_caicos_islands:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":turtle:",
+    "replacement": "\ud83d\udc22"
+  },
+  {
+    "shortcode": ":tuvalu:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":tv:",
+    "replacement": "\ud83d\udcfa"
+  },
+  {
+    "shortcode": ":twisted_rightwards_arrows:",
+    "replacement": "\ud83d\udd00"
+  },
+  {
+    "shortcode": ":two:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":two_hearts:",
+    "replacement": "\ud83d\udc95"
+  },
+  {
+    "shortcode": ":two_men_holding_hands:",
+    "replacement": "\ud83d\udc6c"
+  },
+  {
+    "shortcode": ":two_women_holding_hands:",
+    "replacement": "\ud83d\udc6d"
+  },
+  {
+    "shortcode": ":u5272:",
+    "replacement": "\ud83c\ude39"
+  },
+  {
+    "shortcode": ":u5408:",
+    "replacement": "\ud83c\ude34"
+  },
+  {
+    "shortcode": ":u55b6:",
+    "replacement": "\ud83c\ude3a"
+  },
+  {
+    "shortcode": ":u6307:",
+    "replacement": "\ud83c\ude2f"
+  },
+  {
+    "shortcode": ":u6708:",
+    "replacement": "\ud83c\ude37"
+  },
+  {
+    "shortcode": ":u6709:",
+    "replacement": "\ud83c\ude36"
+  },
+  {
+    "shortcode": ":u6e80:",
+    "replacement": "\ud83c\ude35"
+  },
+  {
+    "shortcode": ":u7121:",
+    "replacement": "\ud83c\ude1a"
+  },
+  {
+    "shortcode": ":u7533:",
+    "replacement": "\ud83c\ude38"
+  },
+  {
+    "shortcode": ":u7981:",
+    "replacement": "\ud83c\ude32"
+  },
+  {
+    "shortcode": ":u7a7a:",
+    "replacement": "\ud83c\ude33"
+  },
+  {
+    "shortcode": ":uganda:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":uk:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":ukraine:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":umbrella:",
+    "replacement": "\ud7c9\ude14"
+  },
+  {
+    "shortcode": ":unamused:",
+    "replacement": "\ud83d\ude12"
+  },
+  {
+    "shortcode": ":underage:",
+    "replacement": "\ud83d\udd1e"
+  },
+  {
+    "shortcode": ":unicorn:",
+    "replacement": "\ud83e\udd84"
+  },
+  {
+    "shortcode": ":united_arab_emirates:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":unlock:",
+    "replacement": "\ud83d\udd13"
+  },
+  {
+    "shortcode": ":up:",
+    "replacement": "\ud83c\udd99"
+  },
+  {
+    "shortcode": ":upside_down_face:",
+    "replacement": "\ud83d\ude43"
+  },
+  {
+    "shortcode": ":uruguay:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":us:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":us_virgin_islands:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":uzbekistan:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":v:",
+    "replacement": "\ud7c9\udf0c"
+  },
+  {
+    "shortcode": ":vanuatu:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":vatican_city:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":venezuela:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":vertical_traffic_light:",
+    "replacement": "\ud83d\udea6"
+  },
+  {
+    "shortcode": ":vhs:",
+    "replacement": "\ud83d\udcfc"
+  },
+  {
+    "shortcode": ":vibration_mode:",
+    "replacement": "\ud83d\udcf3"
+  },
+  {
+    "shortcode": ":video_camera:",
+    "replacement": "\ud83d\udcf9"
+  },
+  {
+    "shortcode": ":video_game:",
+    "replacement": "\ud83c\udfae"
+  },
+  {
+    "shortcode": ":vietnam:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":violin:",
+    "replacement": "\ud83c\udfbb"
+  },
+  {
+    "shortcode": ":virgo:",
+    "replacement": "\ud7c9\ude4d"
+  },
+  {
+    "shortcode": ":volcano:",
+    "replacement": "\ud83c\udf0b"
+  },
+  {
+    "shortcode": ":volleyball:",
+    "replacement": "\ud83c\udfd0"
+  },
+  {
+    "shortcode": ":vs:",
+    "replacement": "\ud83c\udd9a"
+  },
+  {
+    "shortcode": ":vulcan_salute:",
+    "replacement": "\ud83d\udd96"
+  },
+  {
+    "shortcode": ":walking:",
+    "replacement": "\ud83d\udeb6"
+  },
+  {
+    "shortcode": ":walking_man:",
+    "replacement": "\ud83d\udeb6"
+  },
+  {
+    "shortcode": ":walking_woman:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":wallis_futuna:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":waning_crescent_moon:",
+    "replacement": "\ud83c\udf18"
+  },
+  {
+    "shortcode": ":waning_gibbous_moon:",
+    "replacement": "\ud83c\udf16"
+  },
+  {
+    "shortcode": ":warning:",
+    "replacement": "\ud7c9\udea0"
+  },
+  {
+    "shortcode": ":wastebasket:",
+    "replacement": "\ud83d\uddd1"
+  },
+  {
+    "shortcode": ":watch:",
+    "replacement": "\ud7c8\udf1a"
+  },
+  {
+    "shortcode": ":water_buffalo:",
+    "replacement": "\ud83d\udc03"
+  },
+  {
+    "shortcode": ":watermelon:",
+    "replacement": "\ud83c\udf49"
+  },
+  {
+    "shortcode": ":wave:",
+    "replacement": "\ud83d\udc4b"
+  },
+  {
+    "shortcode": ":wavy_dash:",
+    "replacement": "\ud7cc\udc30"
+  },
+  {
+    "shortcode": ":waxing_crescent_moon:",
+    "replacement": "\ud83c\udf12"
+  },
+  {
+    "shortcode": ":waxing_gibbous_moon:",
+    "replacement": "\ud83c\udf14"
+  },
+  {
+    "shortcode": ":wc:",
+    "replacement": "\ud83d\udebe"
+  },
+  {
+    "shortcode": ":weary:",
+    "replacement": "\ud83d\ude29"
+  },
+  {
+    "shortcode": ":wedding:",
+    "replacement": "\ud83d\udc92"
+  },
+  {
+    "shortcode": ":weight_lifting_man:",
+    "replacement": "\ud83c\udfcb"
+  },
+  {
+    "shortcode": ":weight_lifting_woman:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":western_sahara:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":whale:",
+    "replacement": "\ud83d\udc33"
+  },
+  {
+    "shortcode": ":whale2:",
+    "replacement": "\ud83d\udc0b"
+  },
+  {
+    "shortcode": ":wheel_of_dharma:",
+    "replacement": "\ud7c9\ude38"
+  },
+  {
+    "shortcode": ":wheelchair:",
+    "replacement": "\ud7c9\ude7f"
+  },
+  {
+    "shortcode": ":white_check_mark:",
+    "replacement": "\ud7c9\udf05"
+  },
+  {
+    "shortcode": ":white_circle:",
+    "replacement": "\ud7c9\udeaa"
+  },
+  {
+    "shortcode": ":white_flag:",
+    "replacement": "\ud83c\udff3"
+  },
+  {
+    "shortcode": ":white_flower:",
+    "replacement": "\ud83d\udcae"
+  },
+  {
+    "shortcode": ":white_large_square:",
+    "replacement": "\ud7ca\udf1c"
+  },
+  {
+    "shortcode": ":white_medium_small_square:",
+    "replacement": "\ud7c9\uddfd"
+  },
+  {
+    "shortcode": ":white_medium_square:",
+    "replacement": "\ud7c9\uddfb"
+  },
+  {
+    "shortcode": ":white_small_square:",
+    "replacement": "\ud7c9\uddab"
+  },
+  {
+    "shortcode": ":white_square_button:",
+    "replacement": "\ud83d\udd33"
+  },
+  {
+    "shortcode": ":wilted_flower:",
+    "replacement": "\ud83e\udd40"
+  },
+  {
+    "shortcode": ":wind_chime:",
+    "replacement": "\ud83c\udf90"
+  },
+  {
+    "shortcode": ":wind_face:",
+    "replacement": "\ud83c\udf2c"
+  },
+  {
+    "shortcode": ":wine_glass:",
+    "replacement": "\ud83c\udf77"
+  },
+  {
+    "shortcode": ":wink:",
+    "replacement": "\ud83d\ude09"
+  },
+  {
+    "shortcode": ":wolf:",
+    "replacement": "\ud83d\udc3a"
+  },
+  {
+    "shortcode": ":woman:",
+    "replacement": "\ud83d\udc69"
+  },
+  {
+    "shortcode": ":woman_artist:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":woman_astronaut:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":woman_cartwheeling:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":woman_cook:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":woman_facepalming:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":woman_factory_worker:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":woman_farmer:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":woman_firefighter:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":woman_health_worker:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":woman_judge:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":woman_juggling:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":woman_mechanic:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":woman_office_worker:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":woman_pilot:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":woman_playing_handball:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":woman_playing_water_polo:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":woman_scientist:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":woman_shrugging:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":woman_singer:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":woman_student:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":woman_teacher:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":woman_technologist:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":woman_with_turban:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":womans_clothes:",
+    "replacement": "\ud83d\udc5a"
+  },
+  {
+    "shortcode": ":womans_hat:",
+    "replacement": "\ud83d\udc52"
+  },
+  {
+    "shortcode": ":women_wrestling:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":womens:",
+    "replacement": "\ud83d\udeba"
+  },
+  {
+    "shortcode": ":world_map:",
+    "replacement": "\ud83d\uddfa"
+  },
+  {
+    "shortcode": ":worried:",
+    "replacement": "\ud83d\ude1f"
+  },
+  {
+    "shortcode": ":wrench:",
+    "replacement": "\ud83d\udd27"
+  },
+  {
+    "shortcode": ":writing_hand:",
+    "replacement": "\ud7c9\udf0d"
+  },
+  {
+    "shortcode": ":x:",
+    "replacement": "\ud7c9\udf4c"
+  },
+  {
+    "shortcode": ":yellow_heart:",
+    "replacement": "\ud83d\udc9b"
+  },
+  {
+    "shortcode": ":yemen:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":yen:",
+    "replacement": "\ud83d\udcb4"
+  },
+  {
+    "shortcode": ":yin_yang:",
+    "replacement": "\ud7c9\ude2f"
+  },
+  {
+    "shortcode": ":yum:",
+    "replacement": "\ud83d\ude0b"
+  },
+  {
+    "shortcode": ":zambia:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":zap:",
+    "replacement": "\ud7c9\udea1"
+  },
+  {
+    "shortcode": ":zero:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":zimbabwe:",
+    "replacement": "\ud800\udc00"
+  },
+  {
+    "shortcode": ":zipper_mouth_face:",
+    "replacement": "\ud83e\udd10"
+  },
+  {
+    "shortcode": ":zzz:",
+    "replacement": "\ud83d\udca4"
+  }
+]
diff --git a/app/src/main/java/de/kuschku/quasseldroid/settings/AutoCompleteSettings.kt b/app/src/main/java/de/kuschku/quasseldroid/settings/AutoCompleteSettings.kt
index 4d8c96b151e49e3a91005a5f86c709b26dac8cb5..ac58474a2f7810e87b876d4a75eab3087c6ec764 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/settings/AutoCompleteSettings.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/settings/AutoCompleteSettings.kt
@@ -27,7 +27,8 @@ data class AutoCompleteSettings(
   val prefix: Boolean = true,
   val nicks: Boolean = true,
   val buffers: Boolean = true,
-  val aliases: Boolean = true
+  val aliases: Boolean = true,
+  val emoji: Boolean = true
 ) {
   companion object {
     val DEFAULT = AutoCompleteSettings()
diff --git a/app/src/main/java/de/kuschku/quasseldroid/settings/MessageSettings.kt b/app/src/main/java/de/kuschku/quasseldroid/settings/MessageSettings.kt
index 3539e5be757531e33597ada106d723132e70de2d..a914d9d420e79cf08ff2fa4a98745895407d4ce2 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/settings/MessageSettings.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/settings/MessageSettings.kt
@@ -37,7 +37,8 @@ data class MessageSettings(
   val showGravatarAvatars: Boolean = false,
   val showMatrixAvatars: Boolean = false,
   val largerEmoji: Boolean = false,
-  val highlightOwnMessages: Boolean = false
+  val highlightOwnMessages: Boolean = false,
+  val replaceEmoji: Boolean = true
 ) {
 
   enum class ColorizeNicknamesMode {
diff --git a/app/src/main/java/de/kuschku/quasseldroid/settings/Settings.kt b/app/src/main/java/de/kuschku/quasseldroid/settings/Settings.kt
index 67f20e414bc26d6fd808dd8a0708b59ee3bd470e..69341309b360eaab29639162580b37766ce92607 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/settings/Settings.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/settings/Settings.kt
@@ -132,6 +132,10 @@ object Settings {
       highlightOwnMessages = getBoolean(
         context.getString(R.string.preference_highlight_own_messages_key),
         MessageSettings.DEFAULT.highlightOwnMessages
+      ),
+      replaceEmoji = getBoolean(
+        context.getString(R.string.preference_replace_emoji_key),
+        MessageSettings.DEFAULT.replaceEmoji
       )
     )
   }
@@ -216,6 +220,10 @@ object Settings {
       aliases = getBoolean(
         context.getString(R.string.preference_autocomplete_aliases_key),
         AutoCompleteSettings.DEFAULT.aliases
+      ),
+      emoji = getBoolean(
+        context.getString(R.string.preference_autocomplete_emoji_key),
+        AutoCompleteSettings.DEFAULT.emoji
       )
     )
   }
diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/input/AutoCompleteAdapter.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/input/AutoCompleteAdapter.kt
index 039d6b34e3e6b7ac302b9d88d4f965cbbeccd0ba..6c88633fd5dea9c67adcc41adfc6dbee10b760f0 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/input/AutoCompleteAdapter.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/input/AutoCompleteAdapter.kt
@@ -80,6 +80,11 @@ class AutoCompleteAdapter @Inject constructor(
         .inflate(R.layout.widget_alias, parent, false),
       clickListener = clickListener
     )
+    VIEWTYPE_EMOJI                           -> AutoCompleteViewHolder.EmojiViewHolder(
+      LayoutInflater.from(parent.context)
+        .inflate(R.layout.widget_emoji, parent, false),
+      clickListener = clickListener
+    )
     else                                     -> throw IllegalArgumentException(
       "Invoked with wrong item type"
     )
@@ -92,6 +97,7 @@ class AutoCompleteAdapter @Inject constructor(
     when {
       it is AutoCompleteItem.ChannelItem         -> VIEWTYPE_CHANNEL
       it is AutoCompleteItem.AliasItem           -> VIEWTYPE_ALIAS
+      it is AutoCompleteItem.EmojiItem           -> VIEWTYPE_EMOJI
       it is AutoCompleteItem.UserItem && it.away -> VIEWTYPE_NICK_AWAY
       else                                       -> VIEWTYPE_NICK_ACTIVE
     }
@@ -105,6 +111,8 @@ class AutoCompleteAdapter @Inject constructor(
         this.bindImpl(data, messageSettings)
       data is AutoCompleteItem.AliasItem && this is AliasViewHolder     ->
         this.bindImpl(data, messageSettings)
+      data is AutoCompleteItem.EmojiItem && this is EmojiViewHolder     ->
+        this.bindImpl(data, messageSettings)
       else                                                              ->
         throw IllegalArgumentException("Invoked with wrong item type")
     }
@@ -209,6 +217,35 @@ class AutoCompleteAdapter @Inject constructor(
         expansion.text = data.expansion
       }
     }
+
+    class EmojiViewHolder(
+      itemView: View,
+      private val clickListener: ((String, String) -> Unit)? = null
+    ) : AutoCompleteViewHolder(itemView) {
+      @BindView(R.id.emoji)
+      lateinit var emoji: TextView
+
+      @BindView(R.id.shortCode)
+      lateinit var shortCode: TextView
+
+      var value: AutoCompleteItem? = null
+
+      init {
+        ButterKnife.bind(this, itemView)
+        itemView.setOnClickListener {
+          val value = value
+          if (value != null)
+            clickListener?.invoke(value.name, value.suffix)
+        }
+      }
+
+      fun bindImpl(data: AutoCompleteItem.EmojiItem, messageSettings: MessageSettings) {
+        value = data
+
+        emoji.text = data.replacement
+        shortCode.text = data.shortCodes.joinToString(", ")
+      }
+    }
   }
 
   companion object {
@@ -216,5 +253,6 @@ class AutoCompleteAdapter @Inject constructor(
     const val VIEWTYPE_NICK_ACTIVE = 1
     const val VIEWTYPE_NICK_AWAY = 2
     const val VIEWTYPE_ALIAS = 3
+    const val VIEWTYPE_EMOJI = 4
   }
 }
diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/input/AutoCompleteHelper.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/input/AutoCompleteHelper.kt
index 0993a610a08be43e024361ea9e7e53abb907363a..a3250d1de13bf017eb0d6f4cecf7e19d627c1465 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/input/AutoCompleteHelper.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/input/AutoCompleteHelper.kt
@@ -42,6 +42,7 @@ import de.kuschku.quasseldroid.settings.AutoCompleteSettings
 import de.kuschku.quasseldroid.settings.MessageSettings
 import de.kuschku.quasseldroid.util.ColorContext
 import de.kuschku.quasseldroid.util.avatars.AvatarHelper
+import de.kuschku.quasseldroid.util.emoji.EmojiData
 import de.kuschku.quasseldroid.util.helper.styledAttributes
 import de.kuschku.quasseldroid.util.helper.toLiveData
 import de.kuschku.quasseldroid.util.irc.format.IrcFormatDeserializer
@@ -92,12 +93,14 @@ class AutoCompleteHelper(
         (autoCompleteSettings.auto && query.length >= 3) ||
         (autoCompleteSettings.prefix && autoCompleteSettings.nicks && query.startsWith('@')) ||
         (autoCompleteSettings.prefix && autoCompleteSettings.buffers && query.startsWith('#')) ||
-        (autoCompleteSettings.prefix && autoCompleteSettings.aliases && query.startsWith('/'))
+        (autoCompleteSettings.prefix && autoCompleteSettings.aliases && query.startsWith('/')) ||
+        (autoCompleteSettings.prefix && autoCompleteSettings.emoji && query.startsWith(':'))
       val list = if (shouldShowResults) it?.second.orEmpty() else emptyList()
       val data = list.filter {
         it is AutoCompleteItem.AliasItem && autoCompleteSettings.aliases ||
         it is AutoCompleteItem.UserItem && autoCompleteSettings.nicks ||
-        it is AutoCompleteItem.ChannelItem && autoCompleteSettings.buffers
+        it is AutoCompleteItem.ChannelItem && autoCompleteSettings.buffers ||
+        it is AutoCompleteItem.EmojiItem && autoCompleteSettings.emoji
       }.map {
         when (it) {
           is AutoCompleteItem.UserItem    -> {
@@ -184,15 +187,25 @@ class AutoCompleteHelper(
         network.ircChannel(bufferInfo.bufferName) ?: IrcChannel.NULL
       } else IrcChannel.NULL
       val users = ircChannel.ircUsers()
-      fun processResults(list: List<AutoCompleteItem>) = list.filter {
-        it.name.trimStart(*IGNORED_CHARS)
+      fun filterStart(name: String): Boolean {
+        return name.trimStart(*IGNORED_CHARS)
           .startsWith(
             lastWord.first.trimStart(*IGNORED_CHARS),
             ignoreCase = true
           )
-      }.sorted()
+      }
+
+      fun filter(name: String): Boolean {
+        return name.trim(*IGNORED_CHARS)
+          .contains(
+            lastWord.first.trim(*IGNORED_CHARS),
+            ignoreCase = true
+          )
+      }
 
-      fun getAliases() = aliases.map {
+      fun getAliases() = aliases.filter {
+        filterStart(it.name ?: "")
+      }.map {
         AutoCompleteItem.AliasItem(
           "/${it.name}",
           it.expansion
@@ -200,6 +213,8 @@ class AutoCompleteHelper(
       }
 
       fun getBuffers() = infos.filter {
+        filterStart(it.bufferName ?: "")
+      }.filter {
         it.type.toInt() == Buffer_Type.ChannelBuffer.toInt()
       }.mapNotNull { info ->
         networks[info.networkId]?.let { info to it }
@@ -230,7 +245,9 @@ class AutoCompleteHelper(
           emptySet()
       }
 
-      fun getNicks() = getUsers().map { user ->
+      fun getNicks() = getUsers().filter {
+        filterStart(it.nick())
+      }.map { user ->
         val userModes = ircChannel.userModes(user)
         val prefixModes = network.prefixModes()
 
@@ -249,12 +266,19 @@ class AutoCompleteHelper(
         )
       }
 
-      when (lastWord.first.firstOrNull()) {
-        '/'  -> processResults(getAliases())
-        '@'  -> processResults(getNicks())
-        '#'  -> processResults(getBuffers())
-        else -> processResults(getNicks())
+      fun getEmojis() = EmojiData.processedEmojiMap.filter {
+        it.shortCodes.any {
+          it.contains(lastWord.first.trim(':'))
+        }
       }
+
+      when (lastWord.first.firstOrNull()) {
+        '/'  -> getAliases()
+        '@'  -> getNicks()
+        '#'  -> getBuffers()
+        ':'  -> getEmojis()
+        else -> getNicks()
+      }.sorted()
     } else {
       emptyList()
     }
@@ -269,7 +293,8 @@ class AutoCompleteHelper(
         }?.filter {
           it is AutoCompleteItem.AliasItem && autoCompleteSettings.aliases ||
           it is AutoCompleteItem.UserItem && autoCompleteSettings.nicks ||
-          it is AutoCompleteItem.ChannelItem && autoCompleteSettings.buffers
+          it is AutoCompleteItem.ChannelItem && autoCompleteSettings.buffers ||
+          it is AutoCompleteItem.EmojiItem && autoCompleteSettings.emoji
         }.orEmpty()
 
         if (previous != null && originalWord.first == previous.originalWord && originalWord.second.start == previous.range.start) {
diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/input/ChatlineFragment.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/input/ChatlineFragment.kt
index 6692139a883040dccf1899bec922a42a0d2b6123..6b5375b9ade40ea208044b5d9a4ba2ca8304451e 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/input/ChatlineFragment.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/input/ChatlineFragment.kt
@@ -39,6 +39,7 @@ import de.kuschku.quasseldroid.R
 import de.kuschku.quasseldroid.settings.AppearanceSettings
 import de.kuschku.quasseldroid.settings.AutoCompleteSettings
 import de.kuschku.quasseldroid.settings.MessageSettings
+import de.kuschku.quasseldroid.util.emoji.EmojiData
 import de.kuschku.quasseldroid.util.helper.*
 import de.kuschku.quasseldroid.util.irc.format.IrcFormatDeserializer
 import de.kuschku.quasseldroid.util.irc.format.IrcFormatSerializer
@@ -168,8 +169,12 @@ class ChatlineFragment : ServiceBoundFragment() {
     }
 
     fun send() {
-      if (chatline.safeText.isNotEmpty()) {
-        val lines = chatline.safeText.lineSequence().map {
+      val safeText =
+        if (messageSettings.replaceEmoji) EmojiData.replaceShortCodes(chatline.safeText)
+        else chatline.safeText
+
+      if (safeText.isNotEmpty()) {
+        val lines = safeText.lineSequence().map {
           SpannableString(it).apply {
             for (span in getSpans(0, length, Any::class.java)) {
               if (getSpanFlags(span) and Spanned.SPAN_COMPOSING != 0) {
diff --git a/app/src/main/res/layout/widget_buffer.xml b/app/src/main/res/layout/widget_buffer.xml
index e5d92d591056deb695f1ec032e52c803d4e23daf..6ad80d229c8296a2735e46878d0b076142c4730a 100644
--- a/app/src/main/res/layout/widget_buffer.xml
+++ b/app/src/main/res/layout/widget_buffer.xml
@@ -76,6 +76,8 @@
 
   <androidx.appcompat.widget.AppCompatImageView
     android:id="@+id/handle"
+    android:visibility="gone"
+    tools:visibility="visible"
     android:layout_width="24dp"
     android:layout_height="24dp"
     android:layout_gravity="center_vertical"
diff --git a/app/src/main/res/layout/widget_emoji.xml b/app/src/main/res/layout/widget_emoji.xml
new file mode 100644
index 0000000000000000000000000000000000000000..41e2c57a50caa75891e5c582cad0e82a31ebfd32
--- /dev/null
+++ b/app/src/main/res/layout/widget_emoji.xml
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="utf-8"?><!--
+  Quasseldroid - Quassel client for Android
+
+  Copyright (c) 2019 Janne Mareike Koschinski
+  Copyright (c) 2019 The Quassel Project
+
+  This program is free software: you can redistribute it and/or modify it
+  under the terms of the GNU General Public License version 3 as published
+  by the Free Software Foundation.
+
+  This program is distributed in the hope that it will be useful,
+  but WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+  GNU General Public License for more details.
+
+  You should have received a copy of the GNU General Public License along
+  with this program. If not, see <http://www.gnu.org/licenses/>.
+  -->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+  xmlns:tools="http://schemas.android.com/tools"
+  android:layout_width="match_parent"
+  android:layout_height="wrap_content"
+  android:background="?attr/backgroundMenuItem"
+  android:minHeight="48dp"
+  android:paddingLeft="16dp"
+  android:paddingTop="8dp"
+  android:paddingRight="16dp"
+  android:paddingBottom="8dp">
+
+  <TextView
+    android:id="@+id/emoji"
+    android:layout_width="32dp"
+    android:layout_height="32dp"
+    android:layout_gravity="center_vertical|start"
+    android:layout_marginEnd="16dp"
+    android:layout_marginRight="16dp"
+    android:fontFamily="sans-serif-medium"
+    android:gravity="center_vertical|start"
+    android:singleLine="true"
+    android:textColor="?attr/colorTextPrimary"
+    android:textSize="24dp"
+    tools:ignore="SpUsage"
+    tools:text="♥" />
+
+  <TextView
+    android:id="@+id/shortCode"
+    android:layout_width="wrap_content"
+    android:layout_height="wrap_content"
+    android:layout_gravity="center_vertical|start"
+    android:singleLine="true"
+    android:textColor="?attr/colorTextSecondary"
+    android:textSize="12sp"
+    tools:text=":heart:" />
+</LinearLayout>
diff --git a/app/src/main/res/values/strings_preferences.xml b/app/src/main/res/values/strings_preferences.xml
index 13f75be67b056e7df2b8d89eba6d878105f5b2ec..553900122f12d9fa4d243a8cf19d3f0315bd3155 100644
--- a/app/src/main/res/values/strings_preferences.xml
+++ b/app/src/main/res/values/strings_preferences.xml
@@ -256,6 +256,10 @@
   <string name="preference_highlight_own_messages_title">Highlight own messages</string>
   <string name="preference_highlight_own_messages_summary">Shows your own messages more prominently</string>
 
+  <string name="preference_replace_emoji_key" translatable="false">replace_emoji</string>
+  <string name="preference_replace_emoji_title">Replace Emoji Shortcodes</string>
+  <string name="preference_replace_emoji_summary">Automatically replaces shortcodes such as :+1: or :like: with emoji</string>
+
 
   <string name="preference_autocomplete_title">Autocomplete</string>
 
@@ -288,6 +292,9 @@
   <string name="preference_autocomplete_aliases_key" translatable="false">autocomplete_aliases</string>
   <string name="preference_autocomplete_aliases_title">Autocomplete Commands</string>
 
+  <string name="preference_autocomplete_emoji_key" translatable="false">autocomplete_emoji</string>
+  <string name="preference_autocomplete_emoji_title">Autocomplete Emoji</string>
+
 
   <string name="preference_backlog_title">Backlog</string>
 
diff --git a/app/src/main/res/xml/preferences.xml b/app/src/main/res/xml/preferences.xml
index f1c858f35efbe9e8aa67a78c4ca3f6db416e2e49..29c70bd45db9902221724e7368ed2f483f926a64 100644
--- a/app/src/main/res/xml/preferences.xml
+++ b/app/src/main/res/xml/preferences.xml
@@ -239,6 +239,11 @@
       android:key="@string/preference_highlight_own_messages_key"
       android:summary="@string/preference_highlight_own_messages_summary"
       android:title="@string/preference_highlight_own_messages_title" />
+    <SwitchPreference
+      android:defaultValue="true"
+      android:key="@string/preference_replace_emoji_key"
+      android:summary="@string/preference_replace_emoji_summary"
+      android:title="@string/preference_replace_emoji_title" />
   </PreferenceCategory>
 
   <PreferenceCategory android:layout="@layout/widget_preference_divider" />
@@ -289,6 +294,11 @@
       android:defaultValue="true"
       android:key="@string/preference_autocomplete_aliases_key"
       android:title="@string/preference_autocomplete_aliases_title" />
+
+    <SwitchPreference
+      android:defaultValue="true"
+      android:key="@string/preference_autocomplete_emoji_key"
+      android:title="@string/preference_autocomplete_emoji_title" />
   </PreferenceCategory>
 
   <PreferenceCategory android:layout="@layout/widget_preference_divider" />
diff --git a/app/src/test/java/de/kuschku/quasseldroid/testutil/StringEscaper.kt b/app/src/test/java/de/kuschku/quasseldroid/testutil/StringEscaper.kt
new file mode 100644
index 0000000000000000000000000000000000000000..a5663ff3954c2c66a756e728bf4d08b91803a2ac
--- /dev/null
+++ b/app/src/test/java/de/kuschku/quasseldroid/testutil/StringEscaper.kt
@@ -0,0 +1,52 @@
+/*
+ * Quasseldroid - Quassel client for Android
+ *
+ * Copyright (c) 2019 Janne Mareike Koschinski
+ * Copyright (c) 2019 The Quassel Project
+ *
+ * This program is free software: you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 3 as published
+ * by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+package de.kuschku.quasseldroid.testutil
+
+object StringEscaper {
+  private fun escape(text: String): String {
+    val stringBuilder = StringBuilder()
+    escape(stringBuilder, text)
+    return stringBuilder.toString()
+  }
+
+  private fun escape(stringBuilder: StringBuilder, text: String) {
+    for (char in text) {
+      escape(stringBuilder, char)
+    }
+  }
+
+  private fun escape(stringBuilder: StringBuilder, text: Char) {
+    if (text > '\u007f') {
+      // write \udddd
+      stringBuilder.append("\\u")
+      val hex = StringBuffer(Integer.toHexString(text.toInt()))
+      hex.reverse()
+      val length = 4 - hex.length
+      for (j in 0 until length) {
+        hex.append('0')
+      }
+      for (j in 0..3) {
+        stringBuilder.append(hex[3 - j])
+      }
+    } else {
+      stringBuilder.append(Character.toString(text))
+    }
+  }
+}
diff --git a/app/src/test/java/de/kuschku/quasseldroid/util/emoji/EmojiDataTest.kt b/app/src/test/java/de/kuschku/quasseldroid/util/emoji/EmojiDataTest.kt
new file mode 100644
index 0000000000000000000000000000000000000000..3615a8d44e6d870a2f25d992f04c916fcd1ba1c0
--- /dev/null
+++ b/app/src/test/java/de/kuschku/quasseldroid/util/emoji/EmojiDataTest.kt
@@ -0,0 +1,44 @@
+/*
+ * Quasseldroid - Quassel client for Android
+ *
+ * Copyright (c) 2019 Janne Mareike Koschinski
+ * Copyright (c) 2019 The Quassel Project
+ *
+ * This program is free software: you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 3 as published
+ * by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+package de.kuschku.quasseldroid.util.emoji
+
+import android.text.SpannableStringBuilder
+import de.kuschku.quasseldroid.QuasseldroidTest
+import org.junit.Assert.assertEquals
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.robolectric.RobolectricTestRunner
+import org.robolectric.annotation.Config
+
+@Config(application = QuasseldroidTest::class)
+@RunWith(RobolectricTestRunner::class)
+class EmojiDataTest {
+  @Test
+  fun replaceShortCodes() {
+    assertEquals("\ud83d\udc4d", replaceShortCodes(":like:"))
+    assertEquals("this\ud83d\udc4disa\ud83d\udc1e\ud83d\udc4dtest",
+                 replaceShortCodes("this:like:isa:beetle::+1:test"))
+  }
+
+  companion object {
+    private fun replaceShortCodes(text: String): String =
+      EmojiData.replaceShortCodes(SpannableStringBuilder(text)).toString()
+  }
+}
diff --git a/app/src/main/java/de/kuschku/quasseldroid/util/emoji/EmojiData.kt b/viewmodel/src/main/java/de/kuschku/quasseldroid/util/emoji/EmojiData.kt
similarity index 98%
rename from app/src/main/java/de/kuschku/quasseldroid/util/emoji/EmojiData.kt
rename to viewmodel/src/main/java/de/kuschku/quasseldroid/util/emoji/EmojiData.kt
index 9b626d5ba77f14f14042a0253d4c50dc1262e5dc..df7b5083ddae59646b52519709a6bcc07fdba1f4 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/util/emoji/EmojiData.kt
+++ b/viewmodel/src/main/java/de/kuschku/quasseldroid/util/emoji/EmojiData.kt
@@ -20,6 +20,8 @@
 package de.kuschku.quasseldroid.util.emoji
 
 import android.os.Build
+import android.text.Editable
+import de.kuschku.quasseldroid.viewmodel.data.AutoCompleteItem
 
 object EmojiData {
   val rawEmojiMap = mapOf(
@@ -1637,7 +1639,7 @@ object EmojiData {
     "secret" to "\u3299\uFE0F"
   )
 
-  val emojiMap = rawEmojiMap + mapOf(
+  val emojiReplacementMap = mapOf(
     // Aliases imported from IRCCloud and Slack
     "like" to rawEmojiMap["+1"],
     "doge" to rawEmojiMap["dog"],
@@ -1646,20 +1648,9 @@ object EmojiData {
     "party_popper" to rawEmojiMap["tada"],
     "shock" to rawEmojiMap["scream"],
     "atom" to rawEmojiMap["atom_symbol"],
-    "<3" to rawEmojiMap["heart"],
-    "</3" to rawEmojiMap["broken_heart"],
-    ")" to rawEmojiMap["smiley"],
-    "')" to rawEmojiMap["smiley"],
-    "-)" to rawEmojiMap["disappointed"],
-    "(" to rawEmojiMap["cry"],
-    "_(" to rawEmojiMap["sob"],
     "loudly_crying_face" to rawEmojiMap["sob"],
     "sad_tears" to rawEmojiMap["sob"],
     "bawl" to rawEmojiMap["sob"],
-    ";)" to rawEmojiMap["wink"],
-    ";p" to rawEmojiMap["stuck_out_tongue_winking_eye"],
-    "simple_smile" to ":)",
-    "slightly_smiling_face" to ":)",
     "ufo" to rawEmojiMap["flying_saucer"],
     "throwing_up" to rawEmojiMap["face_with_open_mouth_vomiting"],
     "being_sick" to rawEmojiMap["face_with_open_mouth_vomiting"],
@@ -1699,6 +1690,24 @@ object EmojiData {
     "steam_train" to rawEmojiMap["steam_locomotive"]
   )
 
+  val emojiAsciiMap = mapOf(
+    "<3" to rawEmojiMap["heart"],
+    "</3" to rawEmojiMap["broken_heart"],
+    ")" to rawEmojiMap["smiley"],
+    "')" to rawEmojiMap["smiley"],
+    "-)" to rawEmojiMap["disappointed"],
+    "(" to rawEmojiMap["cry"],
+    "_(" to rawEmojiMap["sob"],
+    ";)" to rawEmojiMap["wink"],
+    ";p" to rawEmojiMap["stuck_out_tongue_winking_eye"]
+  )
+
+  val processedEmojiMap = (rawEmojiMap + emojiReplacementMap).toList()
+    .groupBy(Pair<String, String?>::second, Pair<String, String?>::first)
+    .map { (replacement, shortCodes) ->
+      AutoCompleteItem.EmojiItem(shortCodes.sorted(), replacement ?: "")
+    }
+
   val conversionMap = mapOf(
     "\u0030\u20E3" to "\uDBBA\uDC37", // ZERO
     "\u0031\u20E3" to "\uDBBA\uDC2E", // ONE
@@ -1741,5 +1750,22 @@ object EmojiData {
     )
   } else emptyMap()
 
-  val emojis = EmojiData.conversionMap.values.toSet() + EmojiData.rawEmojiMap.values.toSet() + "\u200d" + "\ufe0f"
+  val emojis = conversionMap.values.toSet() + rawEmojiMap.values.toSet() + "\u200d" + "\ufe0f"
+
+  fun replaceShortCodes(source: Editable): Editable {
+    var result = source
+    for (emoji in processedEmojiMap) {
+      for (rawShortCode in emoji.shortCodes) {
+        val shortCode = ":$rawShortCode:"
+        var index: Int
+        while (true) {
+          index = result.indexOf(shortCode)
+          if (index == -1) break
+
+          result = result.replace(index, index + shortCode.length, emoji.replacement)
+        }
+      }
+    }
+    return result
+  }
 }
diff --git a/viewmodel/src/main/java/de/kuschku/quasseldroid/viewmodel/data/AutoCompleteItem.kt b/viewmodel/src/main/java/de/kuschku/quasseldroid/viewmodel/data/AutoCompleteItem.kt
index e34a3a2ed2229d0224ab676bc9494dbcfaacf93e..729ba8727df50f4e26e518695dc99938096bb9ad 100644
--- a/viewmodel/src/main/java/de/kuschku/quasseldroid/viewmodel/data/AutoCompleteItem.kt
+++ b/viewmodel/src/main/java/de/kuschku/quasseldroid/viewmodel/data/AutoCompleteItem.kt
@@ -131,4 +131,27 @@ sealed class AutoCompleteItem(open val name: String, val suffix: String, private
       return result
     }
   }
+
+  data class EmojiItem(
+    val shortCodes: List<String>,
+    val replacement: String
+  ) : AutoCompleteItem(replacement, " ", 3) {
+    override fun equals(other: Any?): Boolean {
+      if (this === other) return true
+      if (javaClass != other?.javaClass) return false
+
+      other as EmojiItem
+
+      if (shortCodes != other.shortCodes) return false
+      if (replacement != other.replacement) return false
+
+      return true
+    }
+
+    override fun hashCode(): Int {
+      var result = shortCodes.hashCode()
+      result = 31 * result + replacement.hashCode()
+      return result
+    }
+  }
 }
diff --git a/viewmodel/src/main/java/de/kuschku/quasseldroid/viewmodel/helper/EditorViewModelHelper.kt b/viewmodel/src/main/java/de/kuschku/quasseldroid/viewmodel/helper/EditorViewModelHelper.kt
index cb09100f690396f85858d5950e015e648ad7f41f..e4db3b366ee2af2eab5092ac48375ac6b8fa46a9 100644
--- a/viewmodel/src/main/java/de/kuschku/quasseldroid/viewmodel/helper/EditorViewModelHelper.kt
+++ b/viewmodel/src/main/java/de/kuschku/quasseldroid/viewmodel/helper/EditorViewModelHelper.kt
@@ -32,6 +32,7 @@ import de.kuschku.libquassel.util.helper.combineLatest
 import de.kuschku.libquassel.util.helper.mapNullable
 import de.kuschku.libquassel.util.helper.nullIf
 import de.kuschku.libquassel.util.helper.safeSwitchMap
+import de.kuschku.quasseldroid.util.emoji.EmojiData
 import de.kuschku.quasseldroid.viewmodel.ChatViewModel
 import de.kuschku.quasseldroid.viewmodel.EditorViewModel
 import de.kuschku.quasseldroid.viewmodel.QuasselViewModel
@@ -47,14 +48,13 @@ open class EditorViewModelHelper @Inject constructor(
   quassel: QuasselViewModel
 ) : ChatViewModelHelper(chat, quassel) {
   val rawAutoCompleteData: Observable<Triple<Optional<ISession>, BufferId, Pair<String, IntRange>>> =
-    combineLatest(connectedSession, chat.bufferId, editor.lastWord)
-      .safeSwitchMap { (sessionOptional, id, lastWordWrapper) ->
-        lastWordWrapper
-          .distinctUntilChanged()
-          .map { lastWord ->
-            Triple(sessionOptional, id, lastWord)
-          }
-      }
+    combineLatest(
+      connectedSession,
+      chat.bufferId,
+      editor.lastWord.safeSwitchMap {
+        it
+      }.distinctUntilChanged()
+    )
 
   val autoCompleteData: Observable<Pair<String, List<AutoCompleteItem>>> = rawAutoCompleteData
     .distinctUntilChanged()
@@ -72,51 +72,63 @@ open class EditorViewModelHelper @Inject constructor(
                 network.ircChannel(bufferInfo.bufferName) ?: IrcChannel.NULL
               } else IrcChannel.NULL
               ircChannel.liveIrcUsers().safeSwitchMap { users ->
+                fun filterStart(name: String): Boolean {
+                  return name.trimStart(*IGNORED_CHARS)
+                    .startsWith(
+                      lastWord.first.trimStart(*IGNORED_CHARS),
+                      ignoreCase = true
+                    )
+                }
+
+                fun filter(name: String): Boolean {
+                  return name.trim(*IGNORED_CHARS)
+                    .contains(
+                      lastWord.first.trim(*IGNORED_CHARS),
+                      ignoreCase = true
+                    )
+                }
+
                 fun processResults(results: List<Observable<out AutoCompleteItem>>) =
                   combineLatest<AutoCompleteItem>(results)
                     .map { list ->
-                      val filtered = list.filter {
-                        it.name.trimStart(*IGNORED_CHARS)
-                          .startsWith(
-                            lastWord.first.trimStart(*IGNORED_CHARS),
-                            ignoreCase = true
-                          )
-                      }
                       Pair(
                         lastWord.first,
-                        filtered.sorted()
+                        list.sorted()
                       )
                     }
 
-                fun getAliases() = aliases.map {
+                fun getAliases() = aliases.filter {
+                  filterStart(it.name ?: "")
+                }.map {
                   Observable.just(AutoCompleteItem.AliasItem(
                     "/${it.name}",
                     it.expansion
                   ))
                 }
 
-                fun getBuffers() = infos.values
-                  .filter {
-                    it.type.toInt() == Buffer_Type.ChannelBuffer.toInt()
-                  }.mapNotNull { info ->
-                    networks[info.networkId]?.let { info to it }
-                  }.map { (info, network) ->
-                    network.liveIrcChannel(
-                      info.bufferName
-                    ).safeSwitchMap { channel ->
-                      channel.updates().mapNullable(IrcChannel.NULL) {
-                        AutoCompleteItem.ChannelItem(
-                          info = info,
-                          network = network.networkInfo(),
-                          bufferStatus = when (it) {
-                            null -> BufferStatus.OFFLINE
-                            else -> BufferStatus.ONLINE
-                          },
-                          description = it?.topic() ?: ""
-                        )
-                      }
+                fun getBuffers() = infos.values.filter {
+                  filterStart(it.bufferName ?: "")
+                }.filter {
+                  it.type.toInt() == Buffer_Type.ChannelBuffer.toInt()
+                }.mapNotNull { info ->
+                  networks[info.networkId]?.let { info to it }
+                }.map { (info, network) ->
+                  network.liveIrcChannel(
+                    info.bufferName
+                  ).safeSwitchMap { channel ->
+                    channel.updates().mapNullable(IrcChannel.NULL) {
+                      AutoCompleteItem.ChannelItem(
+                        info = info,
+                        network = network.networkInfo(),
+                        bufferStatus = when (it) {
+                          null -> BufferStatus.OFFLINE
+                          else -> BufferStatus.ONLINE
+                        },
+                        description = it?.topic() ?: ""
+                      )
                     }
                   }
+                }
 
                 fun getUsers(): Set<IrcUser> = when {
                   bufferInfo?.type?.hasFlag(Buffer_Type.ChannelBuffer) == true ->
@@ -129,7 +141,9 @@ open class EditorViewModelHelper @Inject constructor(
                     emptySet()
                 }
 
-                fun getNicks() = getUsers().map<IrcUser, Observable<AutoCompleteItem.UserItem>> {
+                fun getNicks() = getUsers().filter {
+                  filterStart(it.nick())
+                }.map<IrcUser, Observable<AutoCompleteItem.UserItem>> {
                   it.updates().map { user ->
                     val userModes = ircChannel.userModes(user)
                     val prefixModes = network.prefixModes()
@@ -150,12 +164,21 @@ open class EditorViewModelHelper @Inject constructor(
                   }
                 }
 
-                when (lastWord.first.firstOrNull()) {
-                  '/'  -> processResults(getAliases())
-                  '@'  -> processResults(getNicks())
-                  '#'  -> processResults(getBuffers())
-                  else -> processResults(getAliases() + getNicks() + getBuffers())
+                fun getEmojis() = EmojiData.processedEmojiMap.filter {
+                  it.shortCodes.any {
+                    it.contains(lastWord.first.trim(':'))
+                  }
+                }.map {
+                  Observable.just(it)
                 }
+
+                processResults(when (lastWord.first.firstOrNull()) {
+                                 '/'  -> getAliases()
+                                 '@'  -> getNicks()
+                                 '#'  -> getBuffers()
+                                 ':'  -> getEmojis()
+                                 else -> getAliases() + getNicks() + getBuffers() + getEmojis()
+                               })
               }
             }
           }