diff --git a/app/soapbox/features/emoji/__tests__/emoji.test.ts b/app/soapbox/features/emoji/__tests__/emoji.test.ts index f1374e8c1..d6bf5b0dd 100644 --- a/app/soapbox/features/emoji/__tests__/emoji.test.ts +++ b/app/soapbox/features/emoji/__tests__/emoji.test.ts @@ -1,4 +1,4 @@ -import emojify from '../emoji'; +import emojify from '../index'; describe('emoji', () => { describe('.emojify', () => { @@ -32,13 +32,13 @@ describe('emoji', () => { it('does multiple unicode', () => { expect(emojify('\u2757 #\uFE0F\u20E3')).toEqual( - '❗ #️⃣'); + '❗ #️⃣'); expect(emojify('\u2757#\uFE0F\u20E3')).toEqual( - '❗#️⃣'); + '❗#️⃣'); expect(emojify('\u2757 #\uFE0F\u20E3 \u2757')).toEqual( - '❗ #️⃣ ❗'); + '❗ #️⃣ ❗'); expect(emojify('foo \u2757 #\uFE0F\u20E3 bar')).toEqual( - 'foo ❗ #️⃣ bar'); + 'foo ❗ #️⃣ bar'); }); it('ignores unicode inside of tags', () => { @@ -54,26 +54,6 @@ describe('emoji', () => { expect(emojify('👁‍🗨')).toEqual('👁‍🗨'); }); - it('does an emoji whose filename is irregular', () => { - expect(emojify('↙️')).toEqual('↙️'); - }); - - it('avoid emojifying on invisible text', () => { - expect(emojify('example.com/te')) - .toEqual('example.com/te'); - expect(emojify('', { ':luigi:': { static_url: 'luigi.exe' } })) - .toEqual(''); - }); - - it('avoid emojifying on invisible text with nested tags', () => { - expect(emojify('😇')) - .toEqual('😇'); - expect(emojify('😇')) - .toEqual('😇'); - expect(emojify('😇')) - .toEqual('😇'); - }); - it('skips the textual presentation VS15 character', () => { expect(emojify('✴︎')) // This is U+2734 EIGHT POINTED BLACK STAR then U+FE0E VARIATION SELECTOR-15 .toEqual('✴'); diff --git a/app/soapbox/features/emoji/__tests__/emoji_index.test.ts b/app/soapbox/features/emoji/__tests__/emoji_index.test.ts index 78698981a..cc7a12bbc 100644 --- a/app/soapbox/features/emoji/__tests__/emoji_index.test.ts +++ b/app/soapbox/features/emoji/__tests__/emoji_index.test.ts @@ -1,8 +1,7 @@ -// @ts-ignore -import { emojiIndex } from 'emoji-mart'; +// import { emojiIndex } from 'emoji-mart'; import pick from 'lodash/pick'; -import { search } from '../emoji_mart_search_light'; +import search from '../search'; const trimEmojis = (emoji: any) => pick(emoji, ['id', 'unified', 'native', 'custom']); @@ -16,7 +15,7 @@ describe('emoji_index', () => { }, ]; expect(search('pineapple').map(trimEmojis)).toEqual(expected); - expect(emojiIndex.search('pineapple').map(trimEmojis)).toEqual(expected); + // expect(emojiIndex.search('pineapple').map(trimEmojis)).toEqual(expected); }); it('orders search results correctly', () => { @@ -43,12 +42,7 @@ describe('emoji_index', () => { }, ]; expect(search('apple').map(trimEmojis)).toEqual(expected); - expect(emojiIndex.search('apple').map(trimEmojis)).toEqual(expected); - }); - - it('can include/exclude categories', () => { - expect(search('flag', { include: ['people'] } as any)).toEqual([]); - expect(emojiIndex.search('flag', { include: ['people'] })).toEqual([]); + // expect(emojiIndex.search('apple').map(trimEmojis)).toEqual(expected); }); it('(different behavior from emoji-mart) do not erases custom emoji if not passed again', () => { @@ -64,8 +58,9 @@ describe('emoji_index', () => { custom: true, }, ]; - search('', { custom } as any); - emojiIndex.search('', { custom }); + search('', { custom }); + // emojiIndex.search('', { custom }); + // const expected = []; const lightExpected = [ { id: 'mastodon', @@ -73,7 +68,7 @@ describe('emoji_index', () => { }, ]; expect(search('masto').map(trimEmojis)).toEqual(lightExpected); - expect(emojiIndex.search('masto').map(trimEmojis)).toEqual([]); + // expect(emojiIndex.search('masto').map(trimEmojis)).toEqual(expected); }); it('(different behavior from emoji-mart) erases custom emoji if another is passed', () => { @@ -89,10 +84,11 @@ describe('emoji_index', () => { custom: true, }, ]; - search('', { custom } as any); - emojiIndex.search('', { custom }); - expect(search('masto', { custom: [] } as any).map(trimEmojis)).toEqual([]); - expect(emojiIndex.search('masto').map(trimEmojis)).toEqual([]); + search('', { custom }); + // emojiIndex.search('', { custom }); + // const expected = []; + expect(search('masto', { custom: [] }).map(trimEmojis)).toEqual(expected); + // expect(emojiIndex.search('masto').map(trimEmojis)).toEqual(expected); }); it('handles custom emoji', () => { @@ -108,24 +104,16 @@ describe('emoji_index', () => { custom: true, }, ]; - search('', { custom } as any); - emojiIndex.search('', { custom }); + search('', { custom }); + // emojiIndex.search('', { custom }); const expected = [ { id: 'mastodon', custom: true, }, ]; - expect(search('masto', { custom } as any).map(trimEmojis)).toEqual(expected); - expect(emojiIndex.search('masto', { custom }).map(trimEmojis)).toEqual(expected); - }); - - it('should filter only emojis we care about, exclude pineapple', () => { - const emojisToShowFilter = (emoji: any) => emoji.unified !== '1F34D'; - expect(search('apple', { emojisToShowFilter } as any).map((obj: any) => obj.id)) - .not.toContain('pineapple'); - expect(emojiIndex.search('apple', { emojisToShowFilter }).map((obj: any) => obj.id)) - .not.toContain('pineapple'); + expect(search('masto', { custom }).map(trimEmojis)).toEqual(expected); + // expect(emojiIndex.search('masto', { custom }).map(trimEmojis)).toEqual(expected); }); it('does an emoji whose unified name is irregular', () => { @@ -147,7 +135,7 @@ describe('emoji_index', () => { }, ]; expect(search('polo').map(trimEmojis)).toEqual(expected); - expect(emojiIndex.search('polo').map(trimEmojis)).toEqual(expected); + // expect(emojiIndex.search('polo').map(trimEmojis)).toEqual(expected); }); it('can search for thinking_face', () => { @@ -159,7 +147,7 @@ describe('emoji_index', () => { }, ]; expect(search('thinking_fac').map(trimEmojis)).toEqual(expected); - expect(emojiIndex.search('thinking_fac').map(trimEmojis)).toEqual(expected); + // expect(emojiIndex.search('thinking_fac').map(trimEmojis)).toEqual(expected); }); it('can search for woman-facepalming', () => { @@ -171,6 +159,6 @@ describe('emoji_index', () => { }, ]; expect(search('woman-facep').map(trimEmojis)).toEqual(expected); - expect(emojiIndex.search('woman-facep').map(trimEmojis)).toEqual(expected); + // expect(emojiIndex.search('woman-facep').map(trimEmojis)).toEqual(expected); }); }); diff --git a/app/soapbox/features/emoji/index.ts b/app/soapbox/features/emoji/index.ts index c85990f17..7a9800cc7 100644 --- a/app/soapbox/features/emoji/index.ts +++ b/app/soapbox/features/emoji/index.ts @@ -1,3 +1,5 @@ +import split from 'graphemesplit'; + import unicodeMapping from './mapping'; import type { Emoji as EmojiMart, CustomEmoji as EmojiMartCustom } from 'emoji-mart'; @@ -68,7 +70,7 @@ const convertCustom = (shortname: string, filename: string) => { const convertUnicode = (c: string) => { const { unified, shortcode } = unicodeMapping[c]; - return `${c}`; + return `${c}`; }; const convertEmoji = (str: string, customEmojis: any) => { @@ -98,7 +100,11 @@ export const emojifyText = (str: string, customEmojis = {}) => { let stack = ''; let open = false; - for (const c of Array.from(str)) { // chunk by unicode codepoint with Array.from + for (let c of split(str)) { + if (c.codePointAt(1) === 65038) { + c = String.fromCodePoint(c.codePointAt(0) as number); + } + if (c in unicodeMapping) { if (open) { // unicode emoji inside colon buf += popStack(stack, open); diff --git a/app/soapbox/features/emoji/search.ts b/app/soapbox/features/emoji/search.ts index aeb3830f0..a24a67e14 100644 --- a/app/soapbox/features/emoji/search.ts +++ b/app/soapbox/features/emoji/search.ts @@ -6,8 +6,9 @@ import type { Emoji } from './index'; import type { Emoji as EmojiMart, CustomEmoji } from 'emoji-mart'; const index = new Index({ - tokenize: 'forward', + tokenize: 'full', optimize: true, + context: true, }); for (const [key, emoji] of Object.entries(data.emojis)) { @@ -16,6 +17,7 @@ for (const [key, emoji] of Object.entries(data.emojis)) { export interface searchOptions { maxResults?: number; + custom?: any, } export const addCustomToPool = (customEmojis: EmojiMart[]) => { @@ -26,8 +28,8 @@ export const addCustomToPool = (customEmojis: EmojiMart[]) => { } }; -const search = (str: string, options: searchOptions, custom_emojis: any): Emoji[] => { - return index.search(str, options.maxResults) +const search = (str: string, { maxResults = 5, custom }: searchOptions = {}, custom_emojis?: any): Emoji[] => { + return index.search(str, maxResults, { suggest: true }) .flatMap(id => { if (Number.isInteger(id)) { const { shortcode, static_url } = custom_emojis.get(id).toJS(); diff --git a/data.json b/data.json new file mode 100644 index 000000000..18fc9727c --- /dev/null +++ b/data.json @@ -0,0 +1,29887 @@ +{ + "categories": [{ + "id": "people", + "emojis": ["grinning", "smiley", "smile", "grin", "laughing", "sweat_smile", "rolling_on_the_floor_laughing", "joy", "slightly_smiling_face", "upside_down_face", "melting_face", "wink", "blush", "innocent", "smiling_face_with_3_hearts", "heart_eyes", "star-struck", "kissing_heart", "kissing", "relaxed", "kissing_closed_eyes", "kissing_smiling_eyes", "smiling_face_with_tear", "yum", "stuck_out_tongue", "stuck_out_tongue_winking_eye", "zany_face", "stuck_out_tongue_closed_eyes", "money_mouth_face", "hugging_face", "face_with_hand_over_mouth", "face_with_open_eyes_and_hand_over_mouth", "face_with_peeking_eye", "shushing_face", "thinking_face", "saluting_face", "zipper_mouth_face", "face_with_raised_eyebrow", "neutral_face", "expressionless", "no_mouth", "dotted_line_face", "face_in_clouds", "smirk", "unamused", "face_with_rolling_eyes", "grimacing", "face_exhaling", "lying_face", "relieved", "pensive", "sleepy", "drooling_face", "sleeping", "mask", "face_with_thermometer", "face_with_head_bandage", "nauseated_face", "face_vomiting", "sneezing_face", "hot_face", "cold_face", "woozy_face", "dizzy_face", "face_with_spiral_eyes", "exploding_head", "face_with_cowboy_hat", "partying_face", "disguised_face", "sunglasses", "nerd_face", "face_with_monocle", "confused", "face_with_diagonal_mouth", "worried", "slightly_frowning_face", "white_frowning_face", "open_mouth", "hushed", "astonished", "flushed", "pleading_face", "face_holding_back_tears", "frowning", "anguished", "fearful", "cold_sweat", "disappointed_relieved", "cry", "sob", "scream", "confounded", "persevere", "disappointed", "sweat", "weary", "tired_face", "yawning_face", "triumph", "rage", "angry", "face_with_symbols_on_mouth", "smiling_imp", "imp", "skull", "skull_and_crossbones", "hankey", "clown_face", "japanese_ogre", "japanese_goblin", "ghost", "alien", "space_invader", "robot_face", "wave", "raised_back_of_hand", "raised_hand_with_fingers_splayed", "hand", "spock-hand", "rightwards_hand", "leftwards_hand", "palm_down_hand", "palm_up_hand", "ok_hand", "pinched_fingers", "pinching_hand", "v", "crossed_fingers", "hand_with_index_finger_and_thumb_crossed", "i_love_you_hand_sign", "the_horns", "call_me_hand", "point_left", "point_right", "point_up_2", "middle_finger", "point_down", "point_up", "index_pointing_at_the_viewer", "+1", "-1", "fist", "facepunch", "left-facing_fist", "right-facing_fist", "clap", "raised_hands", "heart_hands", "open_hands", "palms_up_together", "handshake", "pray", "writing_hand", "nail_care", "selfie", "muscle", "mechanical_arm", "mechanical_leg", "leg", "foot", "ear", "ear_with_hearing_aid", "nose", "brain", "anatomical_heart", "lungs", "tooth", "bone", "eyes", "eye", "tongue", "lips", "biting_lip", "baby", "child", "boy", "girl", "adult", "person_with_blond_hair", "man", "bearded_person", "man_with_beard", "woman_with_beard", "red_haired_man", "curly_haired_man", "white_haired_man", "bald_man", "woman", "red_haired_woman", "red_haired_person", "curly_haired_woman", "curly_haired_person", "white_haired_woman", "white_haired_person", "bald_woman", "bald_person", "blond-haired-woman", "blond-haired-man", "older_adult", "older_man", "older_woman", "person_frowning", "man-frowning", "woman-frowning", "person_with_pouting_face", "man-pouting", "woman-pouting", "no_good", "man-gesturing-no", "woman-gesturing-no", "ok_woman", "man-gesturing-ok", "woman-gesturing-ok", "information_desk_person", "man-tipping-hand", "woman-tipping-hand", "raising_hand", "man-raising-hand", "woman-raising-hand", "deaf_person", "deaf_man", "deaf_woman", "bow", "man-bowing", "woman-bowing", "face_palm", "man-facepalming", "woman-facepalming", "shrug", "man-shrugging", "woman-shrugging", "health_worker", "male-doctor", "female-doctor", "student", "male-student", "female-student", "teacher", "male-teacher", "female-teacher", "judge", "male-judge", "female-judge", "farmer", "male-farmer", "female-farmer", "cook", "male-cook", "female-cook", "mechanic", "male-mechanic", "female-mechanic", "factory_worker", "male-factory-worker", "female-factory-worker", "office_worker", "male-office-worker", "female-office-worker", "scientist", "male-scientist", "female-scientist", "technologist", "male-technologist", "female-technologist", "singer", "male-singer", "female-singer", "artist", "male-artist", "female-artist", "pilot", "male-pilot", "female-pilot", "astronaut", "male-astronaut", "female-astronaut", "firefighter", "male-firefighter", "female-firefighter", "cop", "male-police-officer", "female-police-officer", "sleuth_or_spy", "male-detective", "female-detective", "guardsman", "male-guard", "female-guard", "ninja", "construction_worker", "male-construction-worker", "female-construction-worker", "person_with_crown", "prince", "princess", "man_with_turban", "man-wearing-turban", "woman-wearing-turban", "man_with_gua_pi_mao", "person_with_headscarf", "person_in_tuxedo", "man_in_tuxedo", "woman_in_tuxedo", "bride_with_veil", "man_with_veil", "woman_with_veil", "pregnant_woman", "pregnant_man", "pregnant_person", "breast-feeding", "woman_feeding_baby", "man_feeding_baby", "person_feeding_baby", "angel", "santa", "mrs_claus", "mx_claus", "superhero", "male_superhero", "female_superhero", "supervillain", "male_supervillain", "female_supervillain", "mage", "male_mage", "female_mage", "fairy", "male_fairy", "female_fairy", "vampire", "male_vampire", "female_vampire", "merperson", "merman", "mermaid", "elf", "male_elf", "female_elf", "genie", "male_genie", "female_genie", "zombie", "male_zombie", "female_zombie", "troll", "massage", "man-getting-massage", "woman-getting-massage", "haircut", "man-getting-haircut", "woman-getting-haircut", "walking", "man-walking", "woman-walking", "standing_person", "man_standing", "woman_standing", "kneeling_person", "man_kneeling", "woman_kneeling", "person_with_probing_cane", "man_with_probing_cane", "woman_with_probing_cane", "person_in_motorized_wheelchair", "man_in_motorized_wheelchair", "woman_in_motorized_wheelchair", "person_in_manual_wheelchair", "man_in_manual_wheelchair", "woman_in_manual_wheelchair", "runner", "man-running", "woman-running", "dancer", "man_dancing", "man_in_business_suit_levitating", "dancers", "men-with-bunny-ears-partying", "women-with-bunny-ears-partying", "person_in_steamy_room", "man_in_steamy_room", "woman_in_steamy_room", "person_climbing", "man_climbing", "woman_climbing", "fencer", "horse_racing", "skier", "snowboarder", "golfer", "man-golfing", "woman-golfing", "surfer", "man-surfing", "woman-surfing", "rowboat", "man-rowing-boat", "woman-rowing-boat", "swimmer", "man-swimming", "woman-swimming", "person_with_ball", "man-bouncing-ball", "woman-bouncing-ball", "weight_lifter", "man-lifting-weights", "woman-lifting-weights", "bicyclist", "man-biking", "woman-biking", "mountain_bicyclist", "man-mountain-biking", "woman-mountain-biking", "person_doing_cartwheel", "man-cartwheeling", "woman-cartwheeling", "wrestlers", "man-wrestling", "woman-wrestling", "water_polo", "man-playing-water-polo", "woman-playing-water-polo", "handball", "man-playing-handball", "woman-playing-handball", "juggling", "man-juggling", "woman-juggling", "person_in_lotus_position", "man_in_lotus_position", "woman_in_lotus_position", "bath", "sleeping_accommodation", "people_holding_hands", "two_women_holding_hands", "man_and_woman_holding_hands", "two_men_holding_hands", "couplekiss", "woman-kiss-man", "man-kiss-man", "woman-kiss-woman", "couple_with_heart", "woman-heart-man", "man-heart-man", "woman-heart-woman", "family", "man-woman-boy", "man-woman-girl", "man-woman-girl-boy", "man-woman-boy-boy", "man-woman-girl-girl", "man-man-boy", "man-man-girl", "man-man-girl-boy", "man-man-boy-boy", "man-man-girl-girl", "woman-woman-boy", "woman-woman-girl", "woman-woman-girl-boy", "woman-woman-boy-boy", "woman-woman-girl-girl", "man-boy", "man-boy-boy", "man-girl", "man-girl-boy", "man-girl-girl", "woman-boy", "woman-boy-boy", "woman-girl", "woman-girl-boy", "woman-girl-girl", "speaking_head_in_silhouette", "bust_in_silhouette", "busts_in_silhouette", "people_hugging", "footprints", "smiley_cat", "smile_cat", "joy_cat", "heart_eyes_cat", "smirk_cat", "kissing_cat", "scream_cat", "crying_cat_face", "pouting_cat", "see_no_evil", "hear_no_evil", "speak_no_evil", "kiss", "love_letter", "cupid", "gift_heart", "sparkling_heart", "heartpulse", "heartbeat", "revolving_hearts", "two_hearts", "heart_decoration", "heavy_heart_exclamation_mark_ornament", "broken_heart", "heart_on_fire", "mending_heart", "heart", "orange_heart", "yellow_heart", "green_heart", "blue_heart", "purple_heart", "brown_heart", "black_heart", "white_heart", "100", "anger", "boom", "dizzy", "sweat_drops", "dash", "hole", "bomb", "speech_balloon", "eye-in-speech-bubble", "left_speech_bubble", "right_anger_bubble", "thought_balloon", "zzz"] + }, { + "id": "nature", + "emojis": ["monkey_face", "monkey", "gorilla", "orangutan", "dog", "dog2", "guide_dog", "service_dog", "poodle", "wolf", "fox_face", "raccoon", "cat", "cat2", "black_cat", "lion_face", "tiger", "tiger2", "leopard", "horse", "racehorse", "unicorn_face", "zebra_face", "deer", "bison", "cow", "ox", "water_buffalo", "cow2", "pig", "pig2", "boar", "pig_nose", "ram", "sheep", "goat", "dromedary_camel", "camel", "llama", "giraffe_face", "elephant", "mammoth", "rhinoceros", "hippopotamus", "mouse", "mouse2", "rat", "hamster", "rabbit", "rabbit2", "chipmunk", "beaver", "hedgehog", "bat", "bear", "polar_bear", "koala", "panda_face", "sloth", "otter", "skunk", "kangaroo", "badger", "feet", "turkey", "chicken", "rooster", "hatching_chick", "baby_chick", "hatched_chick", "bird", "penguin", "dove_of_peace", "eagle", "duck", "swan", "owl", "dodo", "feather", "flamingo", "peacock", "parrot", "frog", "crocodile", "turtle", "lizard", "snake", "dragon_face", "dragon", "sauropod", "t-rex", "whale", "whale2", "dolphin", "seal", "fish", "tropical_fish", "blowfish", "shark", "octopus", "shell", "coral", "snail", "butterfly", "bug", "ant", "bee", "beetle", "ladybug", "cricket", "cockroach", "spider", "spider_web", "scorpion", "mosquito", "fly", "worm", "microbe", "bouquet", "cherry_blossom", "white_flower", "lotus", "rosette", "rose", "wilted_flower", "hibiscus", "sunflower", "blossom", "tulip", "seedling", "potted_plant", "evergreen_tree", "deciduous_tree", "palm_tree", "cactus", "ear_of_rice", "herb", "shamrock", "four_leaf_clover", "maple_leaf", "fallen_leaf", "leaves", "empty_nest", "nest_with_eggs"] + }, { + "id": "foods", + "emojis": ["grapes", "melon", "watermelon", "tangerine", "lemon", "banana", "pineapple", "mango", "apple", "green_apple", "pear", "peach", "cherries", "strawberry", "blueberries", "kiwifruit", "tomato", "olive", "coconut", "avocado", "eggplant", "potato", "carrot", "corn", "hot_pepper", "bell_pepper", "cucumber", "leafy_green", "broccoli", "garlic", "onion", "mushroom", "peanuts", "beans", "chestnut", "bread", "croissant", "baguette_bread", "flatbread", "pretzel", "bagel", "pancakes", "waffle", "cheese_wedge", "meat_on_bone", "poultry_leg", "cut_of_meat", "bacon", "hamburger", "fries", "pizza", "hotdog", "sandwich", "taco", "burrito", "tamale", "stuffed_flatbread", "falafel", "egg", "fried_egg", "shallow_pan_of_food", "stew", "fondue", "bowl_with_spoon", "green_salad", "popcorn", "butter", "salt", "canned_food", "bento", "rice_cracker", "rice_ball", "rice", "curry", "ramen", "spaghetti", "sweet_potato", "oden", "sushi", "fried_shrimp", "fish_cake", "moon_cake", "dango", "dumpling", "fortune_cookie", "takeout_box", "crab", "lobster", "shrimp", "squid", "oyster", "icecream", "shaved_ice", "ice_cream", "doughnut", "cookie", "birthday", "cake", "cupcake", "pie", "chocolate_bar", "candy", "lollipop", "custard", "honey_pot", "baby_bottle", "glass_of_milk", "coffee", "teapot", "tea", "sake", "champagne", "wine_glass", "cocktail", "tropical_drink", "beer", "beers", "clinking_glasses", "tumbler_glass", "pouring_liquid", "cup_with_straw", "bubble_tea", "beverage_box", "mate_drink", "ice_cube", "chopsticks", "knife_fork_plate", "fork_and_knife", "spoon", "hocho", "jar", "amphora"] + }, { + "id": "activity", + "emojis": ["jack_o_lantern", "christmas_tree", "fireworks", "sparkler", "firecracker", "sparkles", "balloon", "tada", "confetti_ball", "tanabata_tree", "bamboo", "dolls", "flags", "wind_chime", "rice_scene", "red_envelope", "ribbon", "gift", "reminder_ribbon", "admission_tickets", "ticket", "medal", "trophy", "sports_medal", "first_place_medal", "second_place_medal", "third_place_medal", "soccer", "baseball", "softball", "basketball", "volleyball", "football", "rugby_football", "tennis", "flying_disc", "bowling", "cricket_bat_and_ball", "field_hockey_stick_and_ball", "ice_hockey_stick_and_puck", "lacrosse", "table_tennis_paddle_and_ball", "badminton_racquet_and_shuttlecock", "boxing_glove", "martial_arts_uniform", "goal_net", "golf", "ice_skate", "fishing_pole_and_fish", "diving_mask", "running_shirt_with_sash", "ski", "sled", "curling_stone", "dart", "yo-yo", "kite", "8ball", "crystal_ball", "magic_wand", "nazar_amulet", "hamsa", "video_game", "joystick", "slot_machine", "game_die", "jigsaw", "teddy_bear", "pinata", "mirror_ball", "nesting_dolls", "spades", "hearts", "diamonds", "clubs", "chess_pawn", "black_joker", "mahjong", "flower_playing_cards", "performing_arts", "frame_with_picture", "art", "thread", "sewing_needle", "yarn", "knot"] + }, { + "id": "places", + "emojis": ["earth_africa", "earth_americas", "earth_asia", "globe_with_meridians", "world_map", "japan", "compass", "snow_capped_mountain", "mountain", "volcano", "mount_fuji", "camping", "beach_with_umbrella", "desert", "desert_island", "national_park", "stadium", "classical_building", "building_construction", "bricks", "rock", "wood", "hut", "house_buildings", "derelict_house_building", "house", "house_with_garden", "office", "post_office", "european_post_office", "hospital", "bank", "hotel", "love_hotel", "convenience_store", "school", "department_store", "factory", "japanese_castle", "european_castle", "wedding", "tokyo_tower", "statue_of_liberty", "church", "mosque", "hindu_temple", "synagogue", "shinto_shrine", "kaaba", "fountain", "tent", "foggy", "night_with_stars", "cityscape", "sunrise_over_mountains", "sunrise", "city_sunset", "city_sunrise", "bridge_at_night", "hotsprings", "carousel_horse", "playground_slide", "ferris_wheel", "roller_coaster", "barber", "circus_tent", "steam_locomotive", "railway_car", "bullettrain_side", "bullettrain_front", "train2", "metro", "light_rail", "station", "tram", "monorail", "mountain_railway", "train", "bus", "oncoming_bus", "trolleybus", "minibus", "ambulance", "fire_engine", "police_car", "oncoming_police_car", "taxi", "oncoming_taxi", "car", "oncoming_automobile", "blue_car", "pickup_truck", "truck", "articulated_lorry", "tractor", "racing_car", "racing_motorcycle", "motor_scooter", "manual_wheelchair", "motorized_wheelchair", "auto_rickshaw", "bike", "scooter", "skateboard", "roller_skate", "busstop", "motorway", "railway_track", "oil_drum", "fuelpump", "wheel", "rotating_light", "traffic_light", "vertical_traffic_light", "octagonal_sign", "construction", "anchor", "ring_buoy", "boat", "canoe", "speedboat", "passenger_ship", "ferry", "motor_boat", "ship", "airplane", "small_airplane", "airplane_departure", "airplane_arriving", "parachute", "seat", "helicopter", "suspension_railway", "mountain_cableway", "aerial_tramway", "satellite", "rocket", "flying_saucer", "bellhop_bell", "luggage", "hourglass", "hourglass_flowing_sand", "watch", "alarm_clock", "stopwatch", "timer_clock", "mantelpiece_clock", "clock12", "clock1230", "clock1", "clock130", "clock2", "clock230", "clock3", "clock330", "clock4", "clock430", "clock5", "clock530", "clock6", "clock630", "clock7", "clock730", "clock8", "clock830", "clock9", "clock930", "clock10", "clock1030", "clock11", "clock1130", "new_moon", "waxing_crescent_moon", "first_quarter_moon", "moon", "full_moon", "waning_gibbous_moon", "last_quarter_moon", "waning_crescent_moon", "crescent_moon", "new_moon_with_face", "first_quarter_moon_with_face", "last_quarter_moon_with_face", "thermometer", "sunny", "full_moon_with_face", "sun_with_face", "ringed_planet", "star", "star2", "stars", "milky_way", "cloud", "partly_sunny", "thunder_cloud_and_rain", "mostly_sunny", "barely_sunny", "partly_sunny_rain", "rain_cloud", "snow_cloud", "lightning", "tornado", "fog", "wind_blowing_face", "cyclone", "rainbow", "closed_umbrella", "umbrella", "umbrella_with_rain_drops", "umbrella_on_ground", "zap", "snowflake", "snowman", "snowman_without_snow", "comet", "fire", "droplet", "ocean"] + }, { + "id": "objects", + "emojis": ["eyeglasses", "dark_sunglasses", "goggles", "lab_coat", "safety_vest", "necktie", "shirt", "jeans", "scarf", "gloves", "coat", "socks", "dress", "kimono", "sari", "one-piece_swimsuit", "briefs", "shorts", "bikini", "womans_clothes", "purse", "handbag", "pouch", "shopping_bags", "school_satchel", "thong_sandal", "mans_shoe", "athletic_shoe", "hiking_boot", "womans_flat_shoe", "high_heel", "sandal", "ballet_shoes", "boot", "crown", "womans_hat", "tophat", "mortar_board", "billed_cap", "military_helmet", "helmet_with_white_cross", "prayer_beads", "lipstick", "ring", "gem", "mute", "speaker", "sound", "loud_sound", "loudspeaker", "mega", "postal_horn", "bell", "no_bell", "musical_score", "musical_note", "notes", "studio_microphone", "level_slider", "control_knobs", "microphone", "headphones", "radio", "saxophone", "accordion", "guitar", "musical_keyboard", "trumpet", "violin", "banjo", "drum_with_drumsticks", "long_drum", "iphone", "calling", "phone", "telephone_receiver", "pager", "fax", "battery", "low_battery", "electric_plug", "computer", "desktop_computer", "printer", "keyboard", "three_button_mouse", "trackball", "minidisc", "floppy_disk", "cd", "dvd", "abacus", "movie_camera", "film_frames", "film_projector", "clapper", "tv", "camera", "camera_with_flash", "video_camera", "vhs", "mag", "mag_right", "candle", "bulb", "flashlight", "izakaya_lantern", "diya_lamp", "notebook_with_decorative_cover", "closed_book", "book", "green_book", "blue_book", "orange_book", "books", "notebook", "ledger", "page_with_curl", "scroll", "page_facing_up", "newspaper", "rolled_up_newspaper", "bookmark_tabs", "bookmark", "label", "moneybag", "coin", "yen", "dollar", "euro", "pound", "money_with_wings", "credit_card", "receipt", "chart", "email", "e-mail", "incoming_envelope", "envelope_with_arrow", "outbox_tray", "inbox_tray", "package", "mailbox", "mailbox_closed", "mailbox_with_mail", "mailbox_with_no_mail", "postbox", "ballot_box_with_ballot", "pencil2", "black_nib", "lower_left_fountain_pen", "lower_left_ballpoint_pen", "lower_left_paintbrush", "lower_left_crayon", "memo", "briefcase", "file_folder", "open_file_folder", "card_index_dividers", "date", "calendar", "spiral_note_pad", "spiral_calendar_pad", "card_index", "chart_with_upwards_trend", "chart_with_downwards_trend", "bar_chart", "clipboard", "pushpin", "round_pushpin", "paperclip", "linked_paperclips", "straight_ruler", "triangular_ruler", "scissors", "card_file_box", "file_cabinet", "wastebasket", "lock", "unlock", "lock_with_ink_pen", "closed_lock_with_key", "key", "old_key", "hammer", "axe", "pick", "hammer_and_pick", "hammer_and_wrench", "dagger_knife", "crossed_swords", "gun", "boomerang", "bow_and_arrow", "shield", "carpentry_saw", "wrench", "screwdriver", "nut_and_bolt", "gear", "compression", "scales", "probing_cane", "link", "chains", "hook", "toolbox", "magnet", "ladder", "alembic", "test_tube", "petri_dish", "dna", "microscope", "telescope", "satellite_antenna", "syringe", "drop_of_blood", "pill", "adhesive_bandage", "crutch", "stethoscope", "x-ray", "door", "elevator", "mirror", "window", "bed", "couch_and_lamp", "chair", "toilet", "plunger", "shower", "bathtub", "mouse_trap", "razor", "lotion_bottle", "safety_pin", "broom", "basket", "roll_of_paper", "bucket", "soap", "bubbles", "toothbrush", "sponge", "fire_extinguisher", "shopping_trolley", "smoking", "coffin", "headstone", "funeral_urn", "moyai", "placard", "identification_card"] + }, { + "id": "symbols", + "emojis": ["atm", "put_litter_in_its_place", "potable_water", "wheelchair", "mens", "womens", "restroom", "baby_symbol", "wc", "passport_control", "customs", "baggage_claim", "left_luggage", "warning", "children_crossing", "no_entry", "no_entry_sign", "no_bicycles", "no_smoking", "do_not_litter", "non-potable_water", "no_pedestrians", "no_mobile_phones", "underage", "radioactive_sign", "biohazard_sign", "arrow_up", "arrow_upper_right", "arrow_right", "arrow_lower_right", "arrow_down", "arrow_lower_left", "arrow_left", "arrow_upper_left", "arrow_up_down", "left_right_arrow", "leftwards_arrow_with_hook", "arrow_right_hook", "arrow_heading_up", "arrow_heading_down", "arrows_clockwise", "arrows_counterclockwise", "back", "end", "on", "soon", "top", "place_of_worship", "atom_symbol", "om_symbol", "star_of_david", "wheel_of_dharma", "yin_yang", "latin_cross", "orthodox_cross", "star_and_crescent", "peace_symbol", "menorah_with_nine_branches", "six_pointed_star", "aries", "taurus", "gemini", "cancer", "leo", "virgo", "libra", "scorpius", "sagittarius", "capricorn", "aquarius", "pisces", "ophiuchus", "twisted_rightwards_arrows", "repeat", "repeat_one", "arrow_forward", "fast_forward", "black_right_pointing_double_triangle_with_vertical_bar", "black_right_pointing_triangle_with_double_vertical_bar", "arrow_backward", "rewind", "black_left_pointing_double_triangle_with_vertical_bar", "arrow_up_small", "arrow_double_up", "arrow_down_small", "arrow_double_down", "double_vertical_bar", "black_square_for_stop", "black_circle_for_record", "eject", "cinema", "low_brightness", "high_brightness", "signal_strength", "vibration_mode", "mobile_phone_off", "female_sign", "male_sign", "transgender_symbol", "heavy_multiplication_x", "heavy_plus_sign", "heavy_minus_sign", "heavy_division_sign", "heavy_equals_sign", "infinity", "bangbang", "interrobang", "question", "grey_question", "grey_exclamation", "exclamation", "wavy_dash", "currency_exchange", "heavy_dollar_sign", "medical_symbol", "recycle", "fleur_de_lis", "trident", "name_badge", "beginner", "o", "white_check_mark", "ballot_box_with_check", "heavy_check_mark", "x", "negative_squared_cross_mark", "curly_loop", "loop", "part_alternation_mark", "eight_spoked_asterisk", "eight_pointed_black_star", "sparkle", "copyright", "registered", "tm", "hash", "keycap_star", "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "keycap_ten", "capital_abcd", "abcd", "1234", "symbols", "abc", "a", "ab", "b", "cl", "cool", "free", "information_source", "id", "m", "new", "ng", "o2", "ok", "parking", "sos", "up", "vs", "koko", "sa", "u6708", "u6709", "u6307", "ideograph_advantage", "u5272", "u7121", "u7981", "accept", "u7533", "u5408", "u7a7a", "congratulations", "secret", "u55b6", "u6e80", "red_circle", "large_orange_circle", "large_yellow_circle", "large_green_circle", "large_blue_circle", "large_purple_circle", "large_brown_circle", "black_circle", "white_circle", "large_red_square", "large_orange_square", "large_yellow_square", "large_green_square", "large_blue_square", "large_purple_square", "large_brown_square", "black_large_square", "white_large_square", "black_medium_square", "white_medium_square", "black_medium_small_square", "white_medium_small_square", "black_small_square", "white_small_square", "large_orange_diamond", "large_blue_diamond", "small_orange_diamond", "small_blue_diamond", "small_red_triangle", "small_red_triangle_down", "diamond_shape_with_a_dot_inside", "radio_button", "white_square_button", "black_square_button"] + }, { + "id": "flags", + "emojis": ["checkered_flag", "cn", "crossed_flags", "de", "es", "flag-ac", "flag-ad", "flag-ae", "flag-af", "flag-ag", "flag-ai", "flag-al", "flag-am", "flag-ao", "flag-aq", "flag-ar", "flag-as", "flag-at", "flag-au", "flag-aw", "flag-ax", "flag-az", "flag-ba", "flag-bb", "flag-bd", "flag-be", "flag-bf", "flag-bg", "flag-bh", "flag-bi", "flag-bj", "flag-bl", "flag-bm", "flag-bn", "flag-bo", "flag-bq", "flag-br", "flag-bs", "flag-bt", "flag-bv", "flag-bw", "flag-by", "flag-bz", "flag-ca", "flag-cc", "flag-cd", "flag-cf", "flag-cg", "flag-ch", "flag-ci", "flag-ck", "flag-cl", "flag-cm", "flag-co", "flag-cp", "flag-cr", "flag-cu", "flag-cv", "flag-cw", "flag-cx", "flag-cy", "flag-cz", "flag-dg", "flag-dj", "flag-dk", "flag-dm", "flag-do", "flag-dz", "flag-ea", "flag-ec", "flag-ee", "flag-eg", "flag-eh", "flag-england", "flag-er", "flag-et", "flag-eu", "flag-fi", "flag-fj", "flag-fk", "flag-fm", "flag-fo", "flag-ga", "flag-gd", "flag-ge", "flag-gf", "flag-gg", "flag-gh", "flag-gi", "flag-gl", "flag-gm", "flag-gn", "flag-gp", "flag-gq", "flag-gr", "flag-gs", "flag-gt", "flag-gu", "flag-gw", "flag-gy", "flag-hk", "flag-hm", "flag-hn", "flag-hr", "flag-ht", "flag-hu", "flag-ic", "flag-id", "flag-ie", "flag-il", "flag-im", "flag-in", "flag-io", "flag-iq", "flag-ir", "flag-is", "flag-je", "flag-jm", "flag-jo", "flag-ke", "flag-kg", "flag-kh", "flag-ki", "flag-km", "flag-kn", "flag-kp", "flag-kw", "flag-ky", "flag-kz", "flag-la", "flag-lb", "flag-lc", "flag-li", "flag-lk", "flag-lr", "flag-ls", "flag-lt", "flag-lu", "flag-lv", "flag-ly", "flag-ma", "flag-mc", "flag-md", "flag-me", "flag-mf", "flag-mg", "flag-mh", "flag-mk", "flag-ml", "flag-mm", "flag-mn", "flag-mo", "flag-mp", "flag-mq", "flag-mr", "flag-ms", "flag-mt", "flag-mu", "flag-mv", "flag-mw", "flag-mx", "flag-my", "flag-mz", "flag-na", "flag-nc", "flag-ne", "flag-nf", "flag-ng", "flag-ni", "flag-nl", "flag-no", "flag-np", "flag-nr", "flag-nu", "flag-nz", "flag-om", "flag-pa", "flag-pe", "flag-pf", "flag-pg", "flag-ph", "flag-pk", "flag-pl", "flag-pm", "flag-pn", "flag-pr", "flag-ps", "flag-pt", "flag-pw", "flag-py", "flag-qa", "flag-re", "flag-ro", "flag-rs", "flag-rw", "flag-sa", "flag-sb", "flag-sc", "flag-scotland", "flag-sd", "flag-se", "flag-sg", "flag-sh", "flag-si", "flag-sj", "flag-sk", "flag-sl", "flag-sm", "flag-sn", "flag-so", "flag-sr", "flag-ss", "flag-st", "flag-sv", "flag-sx", "flag-sy", "flag-sz", "flag-ta", "flag-tc", "flag-td", "flag-tf", "flag-tg", "flag-th", "flag-tj", "flag-tk", "flag-tl", "flag-tm", "flag-tn", "flag-to", "flag-tr", "flag-tt", "flag-tv", "flag-tw", "flag-tz", "flag-ua", "flag-ug", "flag-um", "flag-un", "flag-uy", "flag-uz", "flag-va", "flag-vc", "flag-ve", "flag-vg", "flag-vi", "flag-vn", "flag-vu", "flag-wales", "flag-wf", "flag-ws", "flag-xk", "flag-ye", "flag-yt", "flag-za", "flag-zm", "flag-zw", "fr", "gb", "it", "jp", "kr", "pirate_flag", "rainbow-flag", "ru", "transgender_flag", "triangular_flag_on_post", "us", "waving_black_flag", "waving_white_flag"] + }], + "emojis": { + "100": { + "id": "100", + "name": "Hundred Points", + "keywords": ["100", "score", "perfect", "numbers", "century", "exam", "quiz", "test", "pass"], + "skins": [{ + "unified": "1f4af", + "native": "💯", + "x": 28, + "y": 6 + }], + "version": 1 + }, + "1234": { + "id": "1234", + "name": "Input Numbers", + "keywords": ["1234", "blue", "square"], + "skins": [{ + "unified": "1f522", + "native": "🔢", + "x": 29, + "y": 59 + }], + "version": 1 + }, + "grinning": { + "id": "grinning", + "name": "Grinning Face", + "emoticons": [":D"], + "keywords": ["smile", "happy", "joy", ":D"], + "skins": [{ + "unified": "1f600", + "native": "😀", + "x": 32, + "y": 20 + }], + "version": 1 + }, + "smiley": { + "id": "smiley", + "name": "Grinning Face with Big Eyes", + "emoticons": [":)", "=)", "=-)"], + "keywords": ["smiley", "happy", "joy", "haha", ":D", ":)", "smile", "funny"], + "skins": [{ + "unified": "1f603", + "native": "😃", + "x": 32, + "y": 23 + }], + "version": 1 + }, + "smile": { + "id": "smile", + "name": "Grinning Face with Smiling Eyes", + "emoticons": [":)", "C:", "c:", ":D", ":-D"], + "keywords": ["smile", "happy", "joy", "funny", "haha", "laugh", "like", ":D", ":)"], + "skins": [{ + "unified": "1f604", + "native": "😄", + "x": 32, + "y": 24 + }], + "version": 1 + }, + "grin": { + "id": "grin", + "name": "Beaming Face with Smiling Eyes", + "keywords": ["grin", "happy", "smile", "joy", "kawaii"], + "skins": [{ + "unified": "1f601", + "native": "😁", + "x": 32, + "y": 21 + }], + "version": 1 + }, + "laughing": { + "id": "laughing", + "name": "Grinning Squinting Face", + "emoticons": [":>", ":->"], + "keywords": ["laughing", "satisfied", "happy", "joy", "lol", "haha", "glad", "XD", "laugh"], + "skins": [{ + "unified": "1f606", + "native": "😆", + "x": 32, + "y": 26 + }], + "version": 1 + }, + "sweat_smile": { + "id": "sweat_smile", + "name": "Grinning Face with Sweat", + "keywords": ["smile", "hot", "happy", "laugh", "relief"], + "skins": [{ + "unified": "1f605", + "native": "😅", + "x": 32, + "y": 25 + }], + "version": 1 + }, + "rolling_on_the_floor_laughing": { + "id": "rolling_on_the_floor_laughing", + "name": "Rolling on the Floor Laughing", + "keywords": ["face", "lol", "haha", "rofl"], + "skins": [{ + "unified": "1f923", + "native": "🤣", + "x": 40, + "y": 15 + }], + "version": 3 + }, + "joy": { + "id": "joy", + "name": "Face with Tears of Joy", + "keywords": ["cry", "weep", "happy", "happytears", "haha"], + "skins": [{ + "unified": "1f602", + "native": "😂", + "x": 32, + "y": 22 + }], + "version": 1 + }, + "slightly_smiling_face": { + "id": "slightly_smiling_face", + "name": "Slightly Smiling Face", + "emoticons": [":)", "(:", ":-)"], + "keywords": ["smile"], + "skins": [{ + "unified": "1f642", + "native": "🙂", + "x": 33, + "y": 28 + }], + "version": 1 + }, + "upside_down_face": { + "id": "upside_down_face", + "name": "Upside-Down Face", + "keywords": ["flipped", "silly", "smile"], + "skins": [{ + "unified": "1f643", + "native": "🙃", + "x": 33, + "y": 29 + }], + "version": 1 + }, + "melting_face": { + "id": "melting_face", + "name": "Melting Face", + "keywords": ["hot", "heat"], + "skins": [{ + "unified": "1fae0", + "native": "🫠", + "x": 55, + "y": 12 + }], + "version": 14 + }, + "wink": { + "id": "wink", + "name": "Winking Face", + "emoticons": [";)", ";-)"], + "keywords": ["happy", "mischievous", "secret", ";)", "smile", "eye"], + "skins": [{ + "unified": "1f609", + "native": "😉", + "x": 32, + "y": 29 + }], + "version": 1 + }, + "blush": { + "id": "blush", + "name": "Smiling Face with Smiling Eyes", + "emoticons": [":)"], + "keywords": ["blush", "smile", "happy", "flushed", "crush", "embarrassed", "shy", "joy"], + "skins": [{ + "unified": "1f60a", + "native": "😊", + "x": 32, + "y": 30 + }], + "version": 1 + }, + "innocent": { + "id": "innocent", + "name": "Smiling Face with Halo", + "keywords": ["innocent", "angel", "heaven"], + "skins": [{ + "unified": "1f607", + "native": "😇", + "x": 32, + "y": 27 + }], + "version": 1 + }, + "smiling_face_with_3_hearts": { + "id": "smiling_face_with_3_hearts", + "name": "Smiling Face with Hearts", + "keywords": ["3", "love", "like", "affection", "valentines", "infatuation", "crush", "adore"], + "skins": [{ + "unified": "1f970", + "native": "🥰", + "x": 43, + "y": 58 + }], + "version": 11 + }, + "heart_eyes": { + "id": "heart_eyes", + "name": "Smiling Face with Heart-Eyes", + "keywords": ["love", "like", "affection", "valentines", "infatuation", "crush"], + "skins": [{ + "unified": "1f60d", + "native": "😍", + "x": 32, + "y": 33 + }], + "version": 1 + }, + "star-struck": { + "id": "star-struck", + "name": "Star-Struck", + "keywords": ["grinning", "face", "with", "eyes", "smile", "starry"], + "skins": [{ + "unified": "1f929", + "native": "🤩", + "x": 40, + "y": 38 + }], + "version": 5 + }, + "kissing_heart": { + "id": "kissing_heart", + "name": "Face Blowing a Kiss", + "emoticons": [":*", ":-*"], + "keywords": ["kissing", "heart", "love", "like", "affection", "valentines", "infatuation"], + "skins": [{ + "unified": "1f618", + "native": "😘", + "x": 32, + "y": 44 + }], + "version": 1 + }, + "kissing": { + "id": "kissing", + "name": "Kissing Face", + "keywords": ["love", "like", "3", "valentines", "infatuation"], + "skins": [{ + "unified": "1f617", + "native": "😗", + "x": 32, + "y": 43 + }], + "version": 1 + }, + "relaxed": { + "id": "relaxed", + "name": "Smiling Face", + "keywords": ["relaxed", "blush", "massage", "happiness"], + "skins": [{ + "unified": "263a-fe0f", + "native": "☺️", + "x": 57, + "y": 4 + }], + "version": 1 + }, + "kissing_closed_eyes": { + "id": "kissing_closed_eyes", + "name": "Kissing Face with Closed Eyes", + "keywords": ["love", "like", "affection", "valentines", "infatuation"], + "skins": [{ + "unified": "1f61a", + "native": "😚", + "x": 32, + "y": 46 + }], + "version": 1 + }, + "kissing_smiling_eyes": { + "id": "kissing_smiling_eyes", + "name": "Kissing Face with Smiling Eyes", + "keywords": ["affection", "valentines", "infatuation"], + "skins": [{ + "unified": "1f619", + "native": "😙", + "x": 32, + "y": 45 + }], + "version": 1 + }, + "smiling_face_with_tear": { + "id": "smiling_face_with_tear", + "name": "Smiling Face with Tear", + "keywords": ["sad", "cry", "pretend"], + "skins": [{ + "unified": "1f972", + "native": "🥲", + "x": 43, + "y": 60 + }], + "version": 13 + }, + "yum": { + "id": "yum", + "name": "Face Savoring Food", + "keywords": ["yum", "happy", "joy", "tongue", "smile", "silly", "yummy", "nom", "delicious", "savouring"], + "skins": [{ + "unified": "1f60b", + "native": "😋", + "x": 32, + "y": 31 + }], + "version": 1 + }, + "stuck_out_tongue": { + "id": "stuck_out_tongue", + "name": "Face with Tongue", + "emoticons": [":p", ":-p", ":P", ":-P", ":b", ":-b"], + "keywords": ["stuck", "out", "prank", "childish", "playful", "mischievous", "smile"], + "skins": [{ + "unified": "1f61b", + "native": "😛", + "x": 32, + "y": 47 + }], + "version": 1 + }, + "stuck_out_tongue_winking_eye": { + "id": "stuck_out_tongue_winking_eye", + "name": "Winking Face with Tongue", + "emoticons": [";p", ";-p", ";b", ";-b", ";P", ";-P"], + "keywords": ["stuck", "out", "eye", "prank", "childish", "playful", "mischievous", "smile"], + "skins": [{ + "unified": "1f61c", + "native": "😜", + "x": 32, + "y": 48 + }], + "version": 1 + }, + "zany_face": { + "id": "zany_face", + "name": "Zany Face", + "keywords": ["grinning", "with", "one", "large", "and", "small", "eye", "goofy", "crazy"], + "skins": [{ + "unified": "1f92a", + "native": "🤪", + "x": 40, + "y": 39 + }], + "version": 5 + }, + "stuck_out_tongue_closed_eyes": { + "id": "stuck_out_tongue_closed_eyes", + "name": "Squinting Face with Tongue", + "keywords": ["stuck", "out", "closed", "eyes", "prank", "playful", "mischievous", "smile"], + "skins": [{ + "unified": "1f61d", + "native": "😝", + "x": 32, + "y": 49 + }], + "version": 1 + }, + "money_mouth_face": { + "id": "money_mouth_face", + "name": "Money-Mouth Face", + "keywords": ["rich", "dollar"], + "skins": [{ + "unified": "1f911", + "native": "🤑", + "x": 38, + "y": 59 + }], + "version": 1 + }, + "hugging_face": { + "id": "hugging_face", + "name": "Hugging Face", + "keywords": ["smile"], + "skins": [{ + "unified": "1f917", + "native": "🤗", + "x": 39, + "y": 4 + }], + "version": 1 + }, + "face_with_hand_over_mouth": { + "id": "face_with_hand_over_mouth", + "name": "Face with Hand over Mouth", + "keywords": ["smiling", "eyes", "covering", "whoops", "shock", "surprise"], + "skins": [{ + "unified": "1f92d", + "native": "🤭", + "x": 40, + "y": 42 + }], + "version": 5 + }, + "face_with_open_eyes_and_hand_over_mouth": { + "id": "face_with_open_eyes_and_hand_over_mouth", + "name": "Face with Open Eyes and Hand over Mouth", + "keywords": ["silence", "secret", "shock", "surprise"], + "skins": [{ + "unified": "1fae2", + "native": "🫢", + "x": 55, + "y": 14 + }], + "version": 14 + }, + "face_with_peeking_eye": { + "id": "face_with_peeking_eye", + "name": "Face with Peeking Eye", + "keywords": ["scared", "frightening", "embarrassing"], + "skins": [{ + "unified": "1fae3", + "native": "🫣", + "x": 55, + "y": 15 + }], + "version": 14 + }, + "shushing_face": { + "id": "shushing_face", + "name": "Shushing Face", + "keywords": ["with", "finger", "covering", "closed", "lips", "quiet", "shhh"], + "skins": [{ + "unified": "1f92b", + "native": "🤫", + "x": 40, + "y": 40 + }], + "version": 5 + }, + "thinking_face": { + "id": "thinking_face", + "name": "Thinking Face", + "keywords": ["hmmm", "consider"], + "skins": [{ + "unified": "1f914", + "native": "🤔", + "x": 39, + "y": 1 + }], + "version": 1 + }, + "saluting_face": { + "id": "saluting_face", + "name": "Saluting Face", + "keywords": ["respect", "salute"], + "skins": [{ + "unified": "1fae1", + "native": "🫡", + "x": 55, + "y": 13 + }], + "version": 14 + }, + "zipper_mouth_face": { + "id": "zipper_mouth_face", + "name": "Zipper-Mouth Face", + "keywords": ["sealed", "secret"], + "skins": [{ + "unified": "1f910", + "native": "🤐", + "x": 38, + "y": 58 + }], + "version": 1 + }, + "face_with_raised_eyebrow": { + "id": "face_with_raised_eyebrow", + "name": "Face with Raised Eyebrow", + "keywords": ["one", "distrust", "scepticism", "disapproval", "disbelief", "surprise"], + "skins": [{ + "unified": "1f928", + "native": "🤨", + "x": 40, + "y": 37 + }], + "version": 5 + }, + "neutral_face": { + "id": "neutral_face", + "name": "Neutral Face", + "emoticons": [":|", ":-|"], + "keywords": ["indifference", "meh", ":"], + "skins": [{ + "unified": "1f610", + "native": "😐", + "x": 32, + "y": 36 + }], + "version": 1 + }, + "expressionless": { + "id": "expressionless", + "name": "Expressionless Face", + "emoticons": ["-_-"], + "keywords": ["indifferent", "-", "meh", "deadpan"], + "skins": [{ + "unified": "1f611", + "native": "😑", + "x": 32, + "y": 37 + }], + "version": 1 + }, + "no_mouth": { + "id": "no_mouth", + "name": "Face Without Mouth", + "keywords": ["no", "hellokitty"], + "skins": [{ + "unified": "1f636", + "native": "😶", + "x": 33, + "y": 16 + }], + "version": 1 + }, + "dotted_line_face": { + "id": "dotted_line_face", + "name": "Dotted Line Face", + "keywords": ["invisible", "lonely", "isolation", "depression"], + "skins": [{ + "unified": "1fae5", + "native": "🫥", + "x": 55, + "y": 17 + }], + "version": 14 + }, + "face_in_clouds": { + "id": "face_in_clouds", + "name": "Face in Clouds", + "keywords": ["shower", "steam", "dream"], + "skins": [{ + "unified": "1f636-200d-1f32b-fe0f", + "native": "😶‍🌫️", + "x": 33, + "y": 15 + }], + "version": 13.1 + }, + "smirk": { + "id": "smirk", + "name": "Smirking Face", + "keywords": ["smile", "mean", "prank", "smug", "sarcasm"], + "skins": [{ + "unified": "1f60f", + "native": "😏", + "x": 32, + "y": 35 + }], + "version": 1 + }, + "unamused": { + "id": "unamused", + "name": "Unamused Face", + "emoticons": [":("], + "keywords": ["indifference", "bored", "straight", "serious", "sarcasm", "unimpressed", "skeptical", "dubious", "side", "eye"], + "skins": [{ + "unified": "1f612", + "native": "😒", + "x": 32, + "y": 38 + }], + "version": 1 + }, + "face_with_rolling_eyes": { + "id": "face_with_rolling_eyes", + "name": "Face with Rolling Eyes", + "keywords": ["eyeroll", "frustrated"], + "skins": [{ + "unified": "1f644", + "native": "🙄", + "x": 33, + "y": 30 + }], + "version": 1 + }, + "grimacing": { + "id": "grimacing", + "name": "Grimacing Face", + "keywords": ["grimace", "teeth"], + "skins": [{ + "unified": "1f62c", + "native": "😬", + "x": 33, + "y": 3 + }], + "version": 1 + }, + "face_exhaling": { + "id": "face_exhaling", + "name": "Face Exhaling", + "keywords": ["relieve", "relief", "tired", "sigh"], + "skins": [{ + "unified": "1f62e-200d-1f4a8", + "native": "😮‍💨", + "x": 33, + "y": 5 + }], + "version": 13.1 + }, + "lying_face": { + "id": "lying_face", + "name": "Lying Face", + "keywords": ["lie", "pinocchio"], + "skins": [{ + "unified": "1f925", + "native": "🤥", + "x": 40, + "y": 17 + }], + "version": 3 + }, + "relieved": { + "id": "relieved", + "name": "Relieved Face", + "keywords": ["relaxed", "phew", "massage", "happiness"], + "skins": [{ + "unified": "1f60c", + "native": "😌", + "x": 32, + "y": 32 + }], + "version": 1 + }, + "pensive": { + "id": "pensive", + "name": "Pensive Face", + "keywords": ["sad", "depressed", "upset"], + "skins": [{ + "unified": "1f614", + "native": "😔", + "x": 32, + "y": 40 + }], + "version": 1 + }, + "sleepy": { + "id": "sleepy", + "name": "Sleepy Face", + "keywords": ["tired", "rest", "nap"], + "skins": [{ + "unified": "1f62a", + "native": "😪", + "x": 33, + "y": 1 + }], + "version": 1 + }, + "drooling_face": { + "id": "drooling_face", + "name": "Drooling Face", + "keywords": [], + "skins": [{ + "unified": "1f924", + "native": "🤤", + "x": 40, + "y": 16 + }], + "version": 3 + }, + "sleeping": { + "id": "sleeping", + "name": "Sleeping Face", + "keywords": ["tired", "sleepy", "night", "zzz"], + "skins": [{ + "unified": "1f634", + "native": "😴", + "x": 33, + "y": 12 + }], + "version": 1 + }, + "mask": { + "id": "mask", + "name": "Face with Medical Mask", + "keywords": ["sick", "ill", "disease"], + "skins": [{ + "unified": "1f637", + "native": "😷", + "x": 33, + "y": 17 + }], + "version": 1 + }, + "face_with_thermometer": { + "id": "face_with_thermometer", + "name": "Face with Thermometer", + "keywords": ["sick", "temperature", "cold", "fever"], + "skins": [{ + "unified": "1f912", + "native": "🤒", + "x": 38, + "y": 60 + }], + "version": 1 + }, + "face_with_head_bandage": { + "id": "face_with_head_bandage", + "name": "Face with Head-Bandage", + "keywords": ["injured", "clumsy", "hurt"], + "skins": [{ + "unified": "1f915", + "native": "🤕", + "x": 39, + "y": 2 + }], + "version": 1 + }, + "nauseated_face": { + "id": "nauseated_face", + "name": "Nauseated Face", + "keywords": ["vomit", "gross", "green", "sick", "throw", "up", "ill"], + "skins": [{ + "unified": "1f922", + "native": "🤢", + "x": 40, + "y": 14 + }], + "version": 3 + }, + "face_vomiting": { + "id": "face_vomiting", + "name": "Face Vomiting", + "keywords": ["with", "open", "mouth", "sick"], + "skins": [{ + "unified": "1f92e", + "native": "🤮", + "x": 40, + "y": 43 + }], + "version": 5 + }, + "sneezing_face": { + "id": "sneezing_face", + "name": "Sneezing Face", + "keywords": ["gesundheit", "sneeze", "sick", "allergy"], + "skins": [{ + "unified": "1f927", + "native": "🤧", + "x": 40, + "y": 36 + }], + "version": 3 + }, + "hot_face": { + "id": "hot_face", + "name": "Hot Face", + "keywords": ["feverish", "heat", "red", "sweating"], + "skins": [{ + "unified": "1f975", + "native": "🥵", + "x": 44, + "y": 2 + }], + "version": 11 + }, + "cold_face": { + "id": "cold_face", + "name": "Cold Face", + "keywords": ["blue", "freezing", "frozen", "frostbite", "icicles"], + "skins": [{ + "unified": "1f976", + "native": "🥶", + "x": 44, + "y": 3 + }], + "version": 11 + }, + "woozy_face": { + "id": "woozy_face", + "name": "Woozy Face", + "keywords": ["dizzy", "intoxicated", "tipsy", "wavy"], + "skins": [{ + "unified": "1f974", + "native": "🥴", + "x": 44, + "y": 1 + }], + "version": 11 + }, + "dizzy_face": { + "id": "dizzy_face", + "name": "Dizzy Face", + "keywords": ["spent", "unconscious", "xox"], + "skins": [{ + "unified": "1f635", + "native": "😵", + "x": 33, + "y": 14 + }], + "version": 1 + }, + "face_with_spiral_eyes": { + "id": "face_with_spiral_eyes", + "name": "Face with Spiral Eyes", + "keywords": ["sick", "ill", "confused", "nauseous", "nausea"], + "skins": [{ + "unified": "1f635-200d-1f4ab", + "native": "😵‍💫", + "x": 33, + "y": 13 + }], + "version": 13.1 + }, + "exploding_head": { + "id": "exploding_head", + "name": "Exploding Head", + "keywords": ["shocked", "face", "with", "mind", "blown"], + "skins": [{ + "unified": "1f92f", + "native": "🤯", + "x": 40, + "y": 44 + }], + "version": 5 + }, + "face_with_cowboy_hat": { + "id": "face_with_cowboy_hat", + "name": "Cowboy Hat Face", + "keywords": ["with", "cowgirl"], + "skins": [{ + "unified": "1f920", + "native": "🤠", + "x": 40, + "y": 12 + }], + "version": 3 + }, + "partying_face": { + "id": "partying_face", + "name": "Partying Face", + "keywords": ["celebration", "woohoo"], + "skins": [{ + "unified": "1f973", + "native": "🥳", + "x": 44, + "y": 0 + }], + "version": 11 + }, + "disguised_face": { + "id": "disguised_face", + "name": "Disguised Face", + "keywords": ["pretent", "brows", "glasses", "moustache"], + "skins": [{ + "unified": "1f978", + "native": "🥸", + "x": 44, + "y": 10 + }], + "version": 13 + }, + "sunglasses": { + "id": "sunglasses", + "name": "Smiling Face with Sunglasses", + "emoticons": ["8)"], + "keywords": ["cool", "smile", "summer", "beach"], + "skins": [{ + "unified": "1f60e", + "native": "😎", + "x": 32, + "y": 34 + }], + "version": 1 + }, + "nerd_face": { + "id": "nerd_face", + "name": "Nerd Face", + "keywords": ["nerdy", "geek", "dork"], + "skins": [{ + "unified": "1f913", + "native": "🤓", + "x": 39, + "y": 0 + }], + "version": 1 + }, + "face_with_monocle": { + "id": "face_with_monocle", + "name": "Face with Monocle", + "keywords": ["stuffy", "wealthy"], + "skins": [{ + "unified": "1f9d0", + "native": "🧐", + "x": 47, + "y": 11 + }], + "version": 5 + }, + "confused": { + "id": "confused", + "name": "Confused Face", + "emoticons": [":\\", ":-\\", ":/", ":-/"], + "keywords": ["indifference", "huh", "weird", "hmmm", ":/"], + "skins": [{ + "unified": "1f615", + "native": "😕", + "x": 32, + "y": 41 + }], + "version": 1 + }, + "face_with_diagonal_mouth": { + "id": "face_with_diagonal_mouth", + "name": "Face with Diagonal Mouth", + "keywords": ["skeptic", "confuse", "frustrated", "indifferent"], + "skins": [{ + "unified": "1fae4", + "native": "🫤", + "x": 55, + "y": 16 + }], + "version": 14 + }, + "worried": { + "id": "worried", + "name": "Worried Face", + "keywords": ["concern", "nervous", ":("], + "skins": [{ + "unified": "1f61f", + "native": "😟", + "x": 32, + "y": 51 + }], + "version": 1 + }, + "slightly_frowning_face": { + "id": "slightly_frowning_face", + "name": "Slightly Frowning Face", + "keywords": ["disappointed", "sad", "upset"], + "skins": [{ + "unified": "1f641", + "native": "🙁", + "x": 33, + "y": 27 + }], + "version": 1 + }, + "white_frowning_face": { + "id": "white_frowning_face", + "name": "Frowning Face", + "keywords": ["white", "sad", "upset"], + "skins": [{ + "unified": "2639-fe0f", + "native": "☹️", + "x": 57, + "y": 3 + }], + "version": 1 + }, + "open_mouth": { + "id": "open_mouth", + "name": "Face with Open Mouth", + "emoticons": [":o", ":-o", ":O", ":-O"], + "keywords": ["surprise", "impressed", "wow", "whoa", ":O"], + "skins": [{ + "unified": "1f62e", + "native": "😮", + "x": 33, + "y": 6 + }], + "version": 1 + }, + "hushed": { + "id": "hushed", + "name": "Hushed Face", + "keywords": ["woo", "shh"], + "skins": [{ + "unified": "1f62f", + "native": "😯", + "x": 33, + "y": 7 + }], + "version": 1 + }, + "astonished": { + "id": "astonished", + "name": "Astonished Face", + "keywords": ["xox", "surprised", "poisoned"], + "skins": [{ + "unified": "1f632", + "native": "😲", + "x": 33, + "y": 10 + }], + "version": 1 + }, + "flushed": { + "id": "flushed", + "name": "Flushed Face", + "keywords": ["blush", "shy", "flattered"], + "skins": [{ + "unified": "1f633", + "native": "😳", + "x": 33, + "y": 11 + }], + "version": 1 + }, + "pleading_face": { + "id": "pleading_face", + "name": "Pleading Face", + "keywords": ["begging", "mercy"], + "skins": [{ + "unified": "1f97a", + "native": "🥺", + "x": 44, + "y": 12 + }], + "version": 11 + }, + "face_holding_back_tears": { + "id": "face_holding_back_tears", + "name": "Face Holding Back Tears", + "keywords": ["touched", "gratitude"], + "skins": [{ + "unified": "1f979", + "native": "🥹", + "x": 44, + "y": 11 + }], + "version": 14 + }, + "frowning": { + "id": "frowning", + "name": "Frowning Face with Open Mouth", + "keywords": ["aw", "what"], + "skins": [{ + "unified": "1f626", + "native": "😦", + "x": 32, + "y": 58 + }], + "version": 1 + }, + "anguished": { + "id": "anguished", + "name": "Anguished Face", + "emoticons": ["D:"], + "keywords": ["stunned", "nervous"], + "skins": [{ + "unified": "1f627", + "native": "😧", + "x": 32, + "y": 59 + }], + "version": 1 + }, + "fearful": { + "id": "fearful", + "name": "Fearful Face", + "keywords": ["scared", "terrified", "nervous", "oops", "huh"], + "skins": [{ + "unified": "1f628", + "native": "😨", + "x": 32, + "y": 60 + }], + "version": 1 + }, + "cold_sweat": { + "id": "cold_sweat", + "name": "Anxious Face with Sweat", + "keywords": ["cold", "nervous"], + "skins": [{ + "unified": "1f630", + "native": "😰", + "x": 33, + "y": 8 + }], + "version": 1 + }, + "disappointed_relieved": { + "id": "disappointed_relieved", + "name": "Sad but Relieved Face", + "keywords": ["disappointed", "phew", "sweat", "nervous"], + "skins": [{ + "unified": "1f625", + "native": "😥", + "x": 32, + "y": 57 + }], + "version": 1 + }, + "cry": { + "id": "cry", + "name": "Crying Face", + "emoticons": [":'("], + "keywords": ["tears", "sad", "depressed", "upset", ":'("], + "skins": [{ + "unified": "1f622", + "native": "😢", + "x": 32, + "y": 54 + }], + "version": 1 + }, + "sob": { + "id": "sob", + "name": "Loudly Crying Face", + "emoticons": [":'("], + "keywords": ["sob", "tears", "sad", "upset", "depressed"], + "skins": [{ + "unified": "1f62d", + "native": "😭", + "x": 33, + "y": 4 + }], + "version": 1 + }, + "scream": { + "id": "scream", + "name": "Face Screaming in Fear", + "keywords": ["munch", "scared", "omg"], + "skins": [{ + "unified": "1f631", + "native": "😱", + "x": 33, + "y": 9 + }], + "version": 1 + }, + "confounded": { + "id": "confounded", + "name": "Confounded Face", + "keywords": ["confused", "sick", "unwell", "oops", ":S"], + "skins": [{ + "unified": "1f616", + "native": "😖", + "x": 32, + "y": 42 + }], + "version": 1 + }, + "persevere": { + "id": "persevere", + "name": "Persevering Face", + "keywords": ["persevere", "sick", "no", "upset", "oops"], + "skins": [{ + "unified": "1f623", + "native": "😣", + "x": 32, + "y": 55 + }], + "version": 1 + }, + "disappointed": { + "id": "disappointed", + "name": "Disappointed Face", + "emoticons": ["):", ":(", ":-("], + "keywords": ["sad", "upset", "depressed", ":("], + "skins": [{ + "unified": "1f61e", + "native": "😞", + "x": 32, + "y": 50 + }], + "version": 1 + }, + "sweat": { + "id": "sweat", + "name": "Face with Cold Sweat", + "keywords": ["downcast", "hot", "sad", "tired", "exercise"], + "skins": [{ + "unified": "1f613", + "native": "😓", + "x": 32, + "y": 39 + }], + "version": 1 + }, + "weary": { + "id": "weary", + "name": "Weary Face", + "keywords": ["tired", "sleepy", "sad", "frustrated", "upset"], + "skins": [{ + "unified": "1f629", + "native": "😩", + "x": 33, + "y": 0 + }], + "version": 1 + }, + "tired_face": { + "id": "tired_face", + "name": "Tired Face", + "keywords": ["sick", "whine", "upset", "frustrated"], + "skins": [{ + "unified": "1f62b", + "native": "😫", + "x": 33, + "y": 2 + }], + "version": 1 + }, + "yawning_face": { + "id": "yawning_face", + "name": "Yawning Face", + "keywords": ["tired", "sleepy"], + "skins": [{ + "unified": "1f971", + "native": "🥱", + "x": 43, + "y": 59 + }], + "version": 12 + }, + "triumph": { + "id": "triumph", + "name": "Face with Look of Triumph", + "keywords": ["steam", "from", "nose", "gas", "phew", "proud", "pride"], + "skins": [{ + "unified": "1f624", + "native": "😤", + "x": 32, + "y": 56 + }], + "version": 1 + }, + "rage": { + "id": "rage", + "name": "Pouting Face", + "keywords": ["rage", "angry", "mad", "hate", "despise"], + "skins": [{ + "unified": "1f621", + "native": "😡", + "x": 32, + "y": 53 + }], + "version": 1 + }, + "angry": { + "id": "angry", + "name": "Angry Face", + "emoticons": [">:(", ">:-("], + "keywords": ["mad", "annoyed", "frustrated"], + "skins": [{ + "unified": "1f620", + "native": "😠", + "x": 32, + "y": 52 + }], + "version": 1 + }, + "face_with_symbols_on_mouth": { + "id": "face_with_symbols_on_mouth", + "name": "Face with Symbols on Mouth", + "keywords": ["serious", "covering", "swearing", "cursing", "cussing", "profanity", "expletive"], + "skins": [{ + "unified": "1f92c", + "native": "🤬", + "x": 40, + "y": 41 + }], + "version": 5 + }, + "smiling_imp": { + "id": "smiling_imp", + "name": "Smiling Face with Horns", + "keywords": ["imp", "devil"], + "skins": [{ + "unified": "1f608", + "native": "😈", + "x": 32, + "y": 28 + }], + "version": 1 + }, + "imp": { + "id": "imp", + "name": "Imp", + "keywords": ["angry", "face", "with", "horns", "devil"], + "skins": [{ + "unified": "1f47f", + "native": "👿", + "x": 25, + "y": 8 + }], + "version": 1 + }, + "skull": { + "id": "skull", + "name": "Skull", + "keywords": ["dead", "skeleton", "creepy", "death"], + "skins": [{ + "unified": "1f480", + "native": "💀", + "x": 25, + "y": 9 + }], + "version": 1 + }, + "skull_and_crossbones": { + "id": "skull_and_crossbones", + "name": "Skull and Crossbones", + "keywords": ["poison", "danger", "deadly", "scary", "death", "pirate", "evil"], + "skins": [{ + "unified": "2620-fe0f", + "native": "☠️", + "x": 56, + "y": 56 + }], + "version": 1 + }, + "hankey": { + "id": "hankey", + "name": "Pile of Poo", + "keywords": ["hankey", "poop", "shit", "shitface", "fail", "turd"], + "skins": [{ + "unified": "1f4a9", + "native": "💩", + "x": 27, + "y": 56 + }], + "version": 1 + }, + "clown_face": { + "id": "clown_face", + "name": "Clown Face", + "keywords": [], + "skins": [{ + "unified": "1f921", + "native": "🤡", + "x": 40, + "y": 13 + }], + "version": 3 + }, + "japanese_ogre": { + "id": "japanese_ogre", + "name": "Ogre", + "keywords": ["japanese", "monster", "red", "mask", "halloween", "scary", "creepy", "devil", "demon"], + "skins": [{ + "unified": "1f479", + "native": "👹", + "x": 24, + "y": 58 + }], + "version": 1 + }, + "japanese_goblin": { + "id": "japanese_goblin", + "name": "Goblin", + "keywords": ["japanese", "red", "evil", "mask", "monster", "scary", "creepy"], + "skins": [{ + "unified": "1f47a", + "native": "👺", + "x": 24, + "y": 59 + }], + "version": 1 + }, + "ghost": { + "id": "ghost", + "name": "Ghost", + "keywords": ["halloween", "spooky", "scary"], + "skins": [{ + "unified": "1f47b", + "native": "👻", + "x": 24, + "y": 60 + }], + "version": 1 + }, + "alien": { + "id": "alien", + "name": "Alien", + "keywords": ["UFO", "paul", "weird", "outer", "space"], + "skins": [{ + "unified": "1f47d", + "native": "👽", + "x": 25, + "y": 6 + }], + "version": 1 + }, + "space_invader": { + "id": "space_invader", + "name": "Alien Monster", + "keywords": ["space", "invader", "game", "arcade", "play"], + "skins": [{ + "unified": "1f47e", + "native": "👾", + "x": 25, + "y": 7 + }], + "version": 1 + }, + "robot_face": { + "id": "robot_face", + "name": "Robot", + "keywords": ["face", "computer", "machine"], + "skins": [{ + "unified": "1f916", + "native": "🤖", + "x": 39, + "y": 3 + }], + "version": 1 + }, + "smiley_cat": { + "id": "smiley_cat", + "name": "Grinning Cat", + "keywords": ["smiley", "animal", "cats", "happy", "smile"], + "skins": [{ + "unified": "1f63a", + "native": "😺", + "x": 33, + "y": 20 + }], + "version": 1 + }, + "smile_cat": { + "id": "smile_cat", + "name": "Grinning Cat with Smiling Eyes", + "keywords": ["smile", "animal", "cats"], + "skins": [{ + "unified": "1f638", + "native": "😸", + "x": 33, + "y": 18 + }], + "version": 1 + }, + "joy_cat": { + "id": "joy_cat", + "name": "Cat with Tears of Joy", + "keywords": ["animal", "cats", "haha", "happy"], + "skins": [{ + "unified": "1f639", + "native": "😹", + "x": 33, + "y": 19 + }], + "version": 1 + }, + "heart_eyes_cat": { + "id": "heart_eyes_cat", + "name": "Smiling Cat with Heart-Eyes", + "keywords": ["animal", "love", "like", "affection", "cats", "valentines"], + "skins": [{ + "unified": "1f63b", + "native": "😻", + "x": 33, + "y": 21 + }], + "version": 1 + }, + "smirk_cat": { + "id": "smirk_cat", + "name": "Cat with Wry Smile", + "keywords": ["smirk", "animal", "cats"], + "skins": [{ + "unified": "1f63c", + "native": "😼", + "x": 33, + "y": 22 + }], + "version": 1 + }, + "kissing_cat": { + "id": "kissing_cat", + "name": "Kissing Cat", + "keywords": ["animal", "cats"], + "skins": [{ + "unified": "1f63d", + "native": "😽", + "x": 33, + "y": 23 + }], + "version": 1 + }, + "scream_cat": { + "id": "scream_cat", + "name": "Weary Cat", + "keywords": ["scream", "animal", "cats", "munch", "scared"], + "skins": [{ + "unified": "1f640", + "native": "🙀", + "x": 33, + "y": 26 + }], + "version": 1 + }, + "crying_cat_face": { + "id": "crying_cat_face", + "name": "Crying Cat", + "keywords": ["face", "animal", "tears", "weep", "sad", "cats", "upset"], + "skins": [{ + "unified": "1f63f", + "native": "😿", + "x": 33, + "y": 25 + }], + "version": 1 + }, + "pouting_cat": { + "id": "pouting_cat", + "name": "Pouting Cat", + "keywords": ["animal", "cats"], + "skins": [{ + "unified": "1f63e", + "native": "😾", + "x": 33, + "y": 24 + }], + "version": 1 + }, + "see_no_evil": { + "id": "see_no_evil", + "name": "See-No-Evil Monkey", + "keywords": ["animal", "nature", "haha"], + "skins": [{ + "unified": "1f648", + "native": "🙈", + "x": 34, + "y": 24 + }], + "version": 1 + }, + "hear_no_evil": { + "id": "hear_no_evil", + "name": "Hear-No-Evil Monkey", + "keywords": ["animal", "nature"], + "skins": [{ + "unified": "1f649", + "native": "🙉", + "x": 34, + "y": 25 + }], + "version": 1 + }, + "speak_no_evil": { + "id": "speak_no_evil", + "name": "Speak-No-Evil Monkey", + "keywords": ["animal", "nature", "omg"], + "skins": [{ + "unified": "1f64a", + "native": "🙊", + "x": 34, + "y": 26 + }], + "version": 1 + }, + "kiss": { + "id": "kiss", + "name": "Kiss Mark", + "keywords": ["face", "lips", "love", "like", "affection", "valentines"], + "skins": [{ + "unified": "1f48b", + "native": "💋", + "x": 26, + "y": 37 + }], + "version": 1 + }, + "love_letter": { + "id": "love_letter", + "name": "Love Letter", + "keywords": ["email", "like", "affection", "envelope", "valentines"], + "skins": [{ + "unified": "1f48c", + "native": "💌", + "x": 26, + "y": 38 + }], + "version": 1 + }, + "cupid": { + "id": "cupid", + "name": "Heart with Arrow", + "keywords": ["cupid", "love", "like", "affection", "valentines"], + "skins": [{ + "unified": "1f498", + "native": "💘", + "x": 27, + "y": 39 + }], + "version": 1 + }, + "gift_heart": { + "id": "gift_heart", + "name": "Heart with Ribbon", + "keywords": ["gift", "love", "valentines"], + "skins": [{ + "unified": "1f49d", + "native": "💝", + "x": 27, + "y": 44 + }], + "version": 1 + }, + "sparkling_heart": { + "id": "sparkling_heart", + "name": "Sparkling Heart", + "keywords": ["love", "like", "affection", "valentines"], + "skins": [{ + "unified": "1f496", + "native": "💖", + "x": 27, + "y": 37 + }], + "version": 1 + }, + "heartpulse": { + "id": "heartpulse", + "name": "Growing Heart", + "keywords": ["heartpulse", "like", "love", "affection", "valentines", "pink"], + "skins": [{ + "unified": "1f497", + "native": "💗", + "x": 27, + "y": 38 + }], + "version": 1 + }, + "heartbeat": { + "id": "heartbeat", + "name": "Beating Heart", + "keywords": ["heartbeat", "love", "like", "affection", "valentines", "pink"], + "skins": [{ + "unified": "1f493", + "native": "💓", + "x": 27, + "y": 34 + }], + "version": 1 + }, + "revolving_hearts": { + "id": "revolving_hearts", + "name": "Revolving Hearts", + "keywords": ["love", "like", "affection", "valentines"], + "skins": [{ + "unified": "1f49e", + "native": "💞", + "x": 27, + "y": 45 + }], + "version": 1 + }, + "two_hearts": { + "id": "two_hearts", + "name": "Two Hearts", + "keywords": ["love", "like", "affection", "valentines"], + "skins": [{ + "unified": "1f495", + "native": "💕", + "x": 27, + "y": 36 + }], + "version": 1 + }, + "heart_decoration": { + "id": "heart_decoration", + "name": "Heart Decoration", + "keywords": ["purple", "square", "love", "like"], + "skins": [{ + "unified": "1f49f", + "native": "💟", + "x": 27, + "y": 46 + }], + "version": 1 + }, + "heavy_heart_exclamation_mark_ornament": { + "id": "heavy_heart_exclamation_mark_ornament", + "name": "Heart Exclamation", + "keywords": ["heavy", "mark", "ornament", "decoration", "love"], + "skins": [{ + "unified": "2763-fe0f", + "native": "❣️", + "x": 59, + "y": 7 + }], + "version": 1 + }, + "broken_heart": { + "id": "broken_heart", + "name": "Broken Heart", + "emoticons": ["