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() + }) } } }