|
@@ -0,0 +1,949 @@
|
|
|
+"""change emoji shortcodes to characters
|
|
|
+
|
|
|
+Revision ID: 232e68a03aa2
|
|
|
+Revises: af3f5579c84d
|
|
|
+Create Date: 2018-02-28 21:31:35.260704
|
|
|
+
|
|
|
+"""
|
|
|
+from alembic import op
|
|
|
+import sqlalchemy as sa
|
|
|
+
|
|
|
+
|
|
|
+# revision identifiers, used by Alembic.
|
|
|
+revision = '232e68a03aa2'
|
|
|
+down_revision = 'af3f5579c84d'
|
|
|
+branch_labels = ()
|
|
|
+depends_on = None
|
|
|
+
|
|
|
+
|
|
|
+_emoji_replacement_mapping = {
|
|
|
+ # bowtie: not in Unicode
|
|
|
+ # neckbeard: not in Unicode
|
|
|
+ # shipit, squirrel: GitHub inside joke? either way, not in Unicode
|
|
|
+ # trollface: ancient meme, not in Unicode
|
|
|
+ # octocat: that's a brand logo, of course it's not in Unicode
|
|
|
+ # flaskbb: that's our logo! sadly not in Unicode though
|
|
|
+ # feelsgood: doom reference, not in Unicode
|
|
|
+ # finnadie: doom reference, not in Unicode
|
|
|
+ # goberserk: doom reference, not in Unicode
|
|
|
+ # godmode: doom reference, not in Unicode
|
|
|
+ # hurtrealbad: doom reference, not in Unicode
|
|
|
+ # rage1: doom reference, not in Unicode
|
|
|
+ # rage2: doom reference, not in Unicode
|
|
|
+ # rage3: doom reference, not in Unicode
|
|
|
+ # rage4: doom reference, not in Unicode
|
|
|
+ # suspect: doom reference, not in Unicode
|
|
|
+ '+1': '👍',
|
|
|
+ '-1': '👎',
|
|
|
+ '100': '💯',
|
|
|
+ '1234': '🔢',
|
|
|
+ '8ball': '🎱',
|
|
|
+ 'a': '🅰️',
|
|
|
+ 'ab': '🆎',
|
|
|
+ 'abc': '🔤',
|
|
|
+ 'abcd': '🔡',
|
|
|
+ 'accept': '🉑',
|
|
|
+ 'aerial_tramway': '🚡',
|
|
|
+ 'airplane': '✈️',
|
|
|
+ 'alarm_clock': '⏰',
|
|
|
+ 'alien': '👽',
|
|
|
+ 'ambulance': '🚑',
|
|
|
+ 'anchor': '⚓️',
|
|
|
+ 'angel': '👼',
|
|
|
+ 'anger': '💢',
|
|
|
+ 'angry': '😠',
|
|
|
+ 'anguished': '😧',
|
|
|
+ 'ant': '🐜',
|
|
|
+ 'apple': '🍎',
|
|
|
+ 'aquarius': '♒️',
|
|
|
+ 'aries': '♈️',
|
|
|
+ 'arrow_backward': '◀️',
|
|
|
+ 'arrow_double_down': '⏬',
|
|
|
+ 'arrow_double_up': '⏫',
|
|
|
+ 'arrow_down': '⬇️',
|
|
|
+ 'arrow_down_small': '🔽',
|
|
|
+ 'arrow_forward': '▶️',
|
|
|
+ 'arrow_heading_down': '⤵️',
|
|
|
+ 'arrow_heading_up': '⤴️',
|
|
|
+ 'arrow_left': '⬅️',
|
|
|
+ 'arrow_lower_left': '↙️',
|
|
|
+ 'arrow_lower_right': '↘️',
|
|
|
+ 'arrow_right': '➡️',
|
|
|
+ 'arrow_right_hook': '↪️',
|
|
|
+ 'arrow_up': '⬆️',
|
|
|
+ 'arrow_up_down': '↕️',
|
|
|
+ 'arrow_up_small': '🔼',
|
|
|
+ 'arrow_upper_left': '↖️',
|
|
|
+ 'arrow_upper_right': '↗️',
|
|
|
+ 'arrows_clockwise': '🔃',
|
|
|
+ 'arrows_counterclockwise': '🔄',
|
|
|
+ 'art': '🎨',
|
|
|
+ 'articulated_lorry': '🚛',
|
|
|
+ 'astonished': '😲',
|
|
|
+ 'atm': '🏧',
|
|
|
+ 'b': '🅱️',
|
|
|
+ 'baby': '👶',
|
|
|
+ 'baby_bottle': '🍼',
|
|
|
+ 'baby_chick': '🐤',
|
|
|
+ 'baby_symbol': '🚼',
|
|
|
+ 'back': '🔙',
|
|
|
+ 'baggage_claim': '🛄',
|
|
|
+ 'balloon': '🎈',
|
|
|
+ 'ballot_box_with_check': '☑️',
|
|
|
+ 'bamboo': '🎍',
|
|
|
+ 'banana': '🍌',
|
|
|
+ 'bangbang': '‼️',
|
|
|
+ 'bank': '🏦',
|
|
|
+ 'bar_chart': '📊',
|
|
|
+ 'barber': '💈',
|
|
|
+ 'baseball': '⚾️',
|
|
|
+ 'basketball': '🏀',
|
|
|
+ 'bath': '🛀',
|
|
|
+ 'bathtub': '🛁',
|
|
|
+ 'battery': '🔋',
|
|
|
+ 'bear': '🐻',
|
|
|
+ 'bee': '🐝',
|
|
|
+ 'beer': '🍺',
|
|
|
+ 'beers': '🍻',
|
|
|
+ 'beetle': '🐞',
|
|
|
+ 'beginner': '🔰',
|
|
|
+ 'bell': '🔔',
|
|
|
+ 'bento': '🍱',
|
|
|
+ 'bicyclist': '🚴',
|
|
|
+ 'bike': '🚲',
|
|
|
+ 'bikini': '👙',
|
|
|
+ 'bird': '🐦',
|
|
|
+ 'birthday': '🎂',
|
|
|
+ 'black_circle': '⚫️',
|
|
|
+ 'black_joker': '🃏',
|
|
|
+ 'black_medium_small_square': '◾️',
|
|
|
+ 'black_medium_square': '◼️',
|
|
|
+ 'black_nib': '✒️',
|
|
|
+ 'black_small_square': '▪️',
|
|
|
+ 'black_square': '⬛', # i assume that's black large square
|
|
|
+ 'black_square_button': '🔲',
|
|
|
+ 'blossom': '🌼',
|
|
|
+ 'blowfish': '🐡',
|
|
|
+ 'blue_book': '📘',
|
|
|
+ 'blue_car': '🚙',
|
|
|
+ 'blue_heart': '💙',
|
|
|
+ 'blush': '😊',
|
|
|
+ 'boar': '🐗',
|
|
|
+ 'boat': '⛵️',
|
|
|
+ 'bomb': '💣',
|
|
|
+ 'book': '📖',
|
|
|
+ 'bookmark': '🔖',
|
|
|
+ 'bookmark_tabs': '📑',
|
|
|
+ 'books': '📚',
|
|
|
+ 'boom': '💥',
|
|
|
+ 'boot': '👢',
|
|
|
+ 'bouquet': '💐',
|
|
|
+ 'bow': '🙇',
|
|
|
+ 'bowling': '🎳',
|
|
|
+ 'boy': '👦',
|
|
|
+ 'bread': '🍞',
|
|
|
+ 'bride_with_veil': '👰',
|
|
|
+ 'bridge_at_night': '🌉',
|
|
|
+ 'briefcase': '💼',
|
|
|
+ 'broken_heart': '💔',
|
|
|
+ 'bug': '🐛',
|
|
|
+ 'bulb': '💡',
|
|
|
+ 'bullettrain_front': '🚅',
|
|
|
+ 'bullettrain_side': '🚄',
|
|
|
+ 'bus': '🚌',
|
|
|
+ 'busstop': '🚏',
|
|
|
+ 'bust_in_silhouette': '👤',
|
|
|
+ 'busts_in_silhouette': '👥',
|
|
|
+ 'cactus': '🌵',
|
|
|
+ 'cake': '🍰',
|
|
|
+ 'calendar': '📆',
|
|
|
+ 'calling': '📲',
|
|
|
+ 'camel': '🐫',
|
|
|
+ 'camera': '📷',
|
|
|
+ 'cancer': '♋️',
|
|
|
+ 'candy': '🍬',
|
|
|
+ 'capital_abcd': '🔠',
|
|
|
+ 'capricorn': '♑️',
|
|
|
+ 'car': '🚗',
|
|
|
+ 'card_index': '📇',
|
|
|
+ 'carousel_horse': '🎠',
|
|
|
+ 'cat': '🐱',
|
|
|
+ 'cat2': '🐈',
|
|
|
+ 'cd': '💿',
|
|
|
+ 'chart': '💹',
|
|
|
+ 'chart_with_downwards_trend': '📉',
|
|
|
+ 'chart_with_upwards_trend': '📈',
|
|
|
+ 'checkered_flag': '🏁',
|
|
|
+ 'cherries': '🍒',
|
|
|
+ 'cherry_blossom': '🌸',
|
|
|
+ 'chestnut': '🌰',
|
|
|
+ 'chicken': '🐔',
|
|
|
+ 'children_crossing': '🚸',
|
|
|
+ 'chocolate_bar': '🍫',
|
|
|
+ 'christmas_tree': '🎄',
|
|
|
+ 'church': '⛪️',
|
|
|
+ 'cinema': '🎦',
|
|
|
+ 'circus_tent': '🎪',
|
|
|
+ 'city_sunrise': '🌇',
|
|
|
+ 'city_sunset': '🌆',
|
|
|
+ 'cl': '🆑',
|
|
|
+ 'clap': '👏',
|
|
|
+ 'clapper': '🎬',
|
|
|
+ 'clipboard': '📋',
|
|
|
+ 'clock1': '🕐',
|
|
|
+ 'clock10': '🕙',
|
|
|
+ 'clock1030': '🕥',
|
|
|
+ 'clock11': '🕚',
|
|
|
+ 'clock1130': '🕦',
|
|
|
+ 'clock12': '🕛',
|
|
|
+ 'clock1230': '🕧',
|
|
|
+ 'clock130': '🕜',
|
|
|
+ 'clock2': '🕑',
|
|
|
+ 'clock230': '🕝',
|
|
|
+ 'clock3': '🕒',
|
|
|
+ 'clock330': '🕞',
|
|
|
+ 'clock4': '🕓',
|
|
|
+ 'clock430': '🕟',
|
|
|
+ 'clock5': '🕔',
|
|
|
+ 'clock530': '🕠',
|
|
|
+ 'clock6': '🕕',
|
|
|
+ 'clock630': '🕡',
|
|
|
+ 'clock7': '🕖',
|
|
|
+ 'clock730': '🕢',
|
|
|
+ 'clock8': '🕗',
|
|
|
+ 'clock830': '🕣',
|
|
|
+ 'clock9': '🕘',
|
|
|
+ 'clock930': '🕤',
|
|
|
+ 'closed_book': '📕',
|
|
|
+ 'closed_lock_with_key': '🔐',
|
|
|
+ 'closed_umbrella': '🌂',
|
|
|
+ 'cloud': '☁️',
|
|
|
+ 'clubs': '♣️',
|
|
|
+ 'cn': '🇨🇳',
|
|
|
+ 'cocktail': '🍸',
|
|
|
+ 'coffee': '☕️',
|
|
|
+ 'cold_sweat': '😰',
|
|
|
+ 'collision': '💥',
|
|
|
+ 'computer': '💻',
|
|
|
+ 'confetti_ball': '🎊',
|
|
|
+ 'confounded': '😖',
|
|
|
+ 'confused': '😕',
|
|
|
+ 'congratulations': '㊗',
|
|
|
+ 'construction': '🚧',
|
|
|
+ 'construction_worker': '👷',
|
|
|
+ 'convenience_store': '🏪',
|
|
|
+ 'cookie': '🍪',
|
|
|
+ 'cool': '🆒',
|
|
|
+ 'cop': '👮',
|
|
|
+ 'copyright': '©️',
|
|
|
+ 'corn': '🌽',
|
|
|
+ 'couple': '👫',
|
|
|
+ 'couple_with_heart': '💑',
|
|
|
+ 'couplekiss': '💏', # kiss
|
|
|
+ 'cow': '🐮',
|
|
|
+ 'cow2': '🐄',
|
|
|
+ 'credit_card': '💳',
|
|
|
+ 'crescent_moon': '🌙',
|
|
|
+ 'crocodile': '🐊',
|
|
|
+ 'crossed_flags': '🎌',
|
|
|
+ 'crown': '👑',
|
|
|
+ 'cry': '😢',
|
|
|
+ 'crying_cat_face': '😿',
|
|
|
+ 'crystal_ball': '🔮',
|
|
|
+ 'cupid': '💘',
|
|
|
+ 'curly_loop': '➰',
|
|
|
+ 'currency_exchange': '💱',
|
|
|
+ 'curry': '🍛',
|
|
|
+ 'custard': '🍮',
|
|
|
+ 'customs': '🛃',
|
|
|
+ 'cyclone': '🌀',
|
|
|
+ 'dancer': '💃',
|
|
|
+ 'dancers': '👯',
|
|
|
+ 'dango': '🍡',
|
|
|
+ 'dart': '🎯',
|
|
|
+ 'dash': '💨',
|
|
|
+ 'date': '📅',
|
|
|
+ 'de': '🇩🇪',
|
|
|
+ 'deciduous_tree': '🌳',
|
|
|
+ 'department_store': '🏬',
|
|
|
+ 'diamond_shape_with_a_dot_inside': '💠',
|
|
|
+ 'diamonds': '♦️',
|
|
|
+ 'disappointed': '😞',
|
|
|
+ 'disappointed_relieved': '😥',
|
|
|
+ 'dizzy': '💫',
|
|
|
+ 'dizzy_face': '😵',
|
|
|
+ 'do_not_litter': '🚯',
|
|
|
+ 'dog': '🐶',
|
|
|
+ 'dog2': '🐕',
|
|
|
+ 'dollar': '💵',
|
|
|
+ 'dolls': '🎎',
|
|
|
+ 'dolphin': '🐬',
|
|
|
+ 'donut': '🍩', # it's doughnut, you 'muricans
|
|
|
+ 'door': '🚪',
|
|
|
+ 'doughnut': '🍩',
|
|
|
+ 'dragon': '🐉',
|
|
|
+ 'dragon_face': '🐲',
|
|
|
+ 'dress': '👗',
|
|
|
+ 'dromedary_camel': '🐪',
|
|
|
+ 'droplet': '💧',
|
|
|
+ 'dvd': '📀',
|
|
|
+ 'e-mail': '📧',
|
|
|
+ 'ear': '👂',
|
|
|
+ 'ear_of_rice': '🌾',
|
|
|
+ 'earth_africa': '🌍',
|
|
|
+ 'earth_americas': '🌎',
|
|
|
+ 'earth_asia': '🌏',
|
|
|
+ 'egg': '🥚',
|
|
|
+ 'eggplant': '🍆',
|
|
|
+ 'eight': '8️⃣',
|
|
|
+ 'eight_pointed_black_star': '✴️',
|
|
|
+ 'eight_spoked_asterisk': '✳️',
|
|
|
+ 'electric_plug': '🔌',
|
|
|
+ 'elephant': '🐘',
|
|
|
+ 'email': '✉️',
|
|
|
+ 'end': '🔚',
|
|
|
+ 'envelope': '✉️',
|
|
|
+ 'es': '🇪🇸',
|
|
|
+ 'euro': '💶',
|
|
|
+ 'european_castle': '🏰',
|
|
|
+ 'european_post_office': '🏤',
|
|
|
+ 'evergreen_tree': '🌲',
|
|
|
+ 'exclamation': '❗️',
|
|
|
+ 'expressionless': '😑',
|
|
|
+ 'eyeglasses': '👓',
|
|
|
+ 'eyes': '👀',
|
|
|
+ 'facepunch': '👊',
|
|
|
+ 'factory': '🏭',
|
|
|
+ 'fallen_leaf': '🍂',
|
|
|
+ 'family': '👪',
|
|
|
+ 'fast_forward': '⏩',
|
|
|
+ 'fax': '📠',
|
|
|
+ 'fearful': '😨',
|
|
|
+ 'feet': '🐾',
|
|
|
+ 'ferris_wheel': '🎡',
|
|
|
+ 'file_folder': '📁',
|
|
|
+ 'fire': '🔥',
|
|
|
+ 'fire_engine': '🚒',
|
|
|
+ 'fireworks': '🎆',
|
|
|
+ 'first_quarter_moon': '🌓',
|
|
|
+ 'first_quarter_moon_with_face': '🌛',
|
|
|
+ 'fish': '🐟',
|
|
|
+ 'fish_cake': '🍥',
|
|
|
+ 'fishing_pole_and_fish': '🎣',
|
|
|
+ 'fist': '✊',
|
|
|
+ 'five': '5️⃣',
|
|
|
+ 'flags': '🎏',
|
|
|
+ 'flashlight': '🔦',
|
|
|
+ 'floppy_disk': '💾',
|
|
|
+ 'flower_playing_cards': '🎴',
|
|
|
+ 'flushed': '😳',
|
|
|
+ 'foggy': '🌁',
|
|
|
+ 'football': '🏈',
|
|
|
+ 'fork_and_knife': '🍴',
|
|
|
+ 'fountain': '⛲️',
|
|
|
+ 'four': '4️⃣',
|
|
|
+ 'four_leaf_clover': '🍀',
|
|
|
+ 'fr': '🇫🇷',
|
|
|
+ 'free': '🆓',
|
|
|
+ 'fried_shrimp': '🍤',
|
|
|
+ 'fries': '🍟',
|
|
|
+ 'frog': '🐸',
|
|
|
+ 'frowning': '😦',
|
|
|
+ 'fu': '🖕',
|
|
|
+ 'fuelpump': '⛽️',
|
|
|
+ 'full_moon': '🌕',
|
|
|
+ 'full_moon_with_face': '🌝',
|
|
|
+ 'game_die': '🎲',
|
|
|
+ 'gb': '🇬🇧',
|
|
|
+ 'gem': '💎',
|
|
|
+ 'gemini': '♊️',
|
|
|
+ 'ghost': '👻',
|
|
|
+ 'gift': '🎁',
|
|
|
+ 'gift_heart': '💝',
|
|
|
+ 'girl': '👧',
|
|
|
+ 'globe_with_meridians': '🌐',
|
|
|
+ 'goat': '🐐',
|
|
|
+ 'golf': '⛳️',
|
|
|
+ 'grapes': '🍇',
|
|
|
+ 'green_apple': '🍏',
|
|
|
+ 'green_book': '📗',
|
|
|
+ 'green_heart': '💚',
|
|
|
+ 'grey_exclamation': '❕',
|
|
|
+ 'grey_question': '❔',
|
|
|
+ 'grimacing': '😬',
|
|
|
+ 'grin': '😁',
|
|
|
+ 'grinning': '😀',
|
|
|
+ 'guardsman': '💂',
|
|
|
+ 'guitar': '🎸',
|
|
|
+ 'gun': '🔫',
|
|
|
+ 'haircut': '💇',
|
|
|
+ 'hamburger': '🍔',
|
|
|
+ 'hammer': '🔨',
|
|
|
+ 'hamster': '🐹',
|
|
|
+ 'hand': '✋',
|
|
|
+ 'handbag': '👜',
|
|
|
+ 'hankey': '💩',
|
|
|
+ 'hash': '#️⃣',
|
|
|
+ 'hatched_chick': '🐥',
|
|
|
+ 'hatching_chick': '🐣',
|
|
|
+ 'headphones': '🎧',
|
|
|
+ 'hear_no_evil': '🙉',
|
|
|
+ 'heart': '❤️',
|
|
|
+ 'heart_decoration': '💟',
|
|
|
+ 'heart_eyes': '😍',
|
|
|
+ 'heart_eyes_cat': '😻',
|
|
|
+ 'heartbeat': '💓',
|
|
|
+ 'heartpulse': '💗',
|
|
|
+ 'hearts': '♥️',
|
|
|
+ 'heavy_check_mark': '✔️',
|
|
|
+ 'heavy_division_sign': '➗',
|
|
|
+ 'heavy_dollar_sign': '💲',
|
|
|
+ 'heavy_exclamation_mark': '❗️',
|
|
|
+ 'heavy_minus_sign': '➖',
|
|
|
+ 'heavy_multiplication_x': '✖️',
|
|
|
+ 'heavy_plus_sign': '➕',
|
|
|
+ 'helicopter': '🚁',
|
|
|
+ 'herb': '🌿',
|
|
|
+ 'hibiscus': '🌺',
|
|
|
+ 'high_brightness': '🔆',
|
|
|
+ 'high_heel': '👠',
|
|
|
+ 'hocho': '🔪',
|
|
|
+ 'honey_pot': '🍯',
|
|
|
+ 'honeybee': '🐝',
|
|
|
+ 'horse': '🐴',
|
|
|
+ 'horse_racing': '🏇',
|
|
|
+ 'hospital': '🏥',
|
|
|
+ 'hotel': '🏨',
|
|
|
+ 'hotsprings': '♨️',
|
|
|
+ 'hourglass': '⌛️',
|
|
|
+ 'hourglass_flowing_sand': '⏳',
|
|
|
+ 'house': '🏠',
|
|
|
+ 'house_with_garden': '🏡',
|
|
|
+ 'hushed': '😯',
|
|
|
+ 'ice_cream': '🍨',
|
|
|
+ 'icecream': '🍦',
|
|
|
+ 'id': '🆔',
|
|
|
+ 'ideograph_advantage': '🉐',
|
|
|
+ 'imp': '👿',
|
|
|
+ 'inbox_tray': '📥',
|
|
|
+ 'incoming_envelope': '📨',
|
|
|
+ 'information_desk_person': '💁',
|
|
|
+ 'information_source': 'ℹ️',
|
|
|
+ 'innocent': '😇',
|
|
|
+ 'interrobang': '⁉️',
|
|
|
+ 'iphone': '📱',
|
|
|
+ 'it': '🇮🇹',
|
|
|
+ 'izakaya_lantern': '🏮',
|
|
|
+ 'jack_o_lantern': '🎃',
|
|
|
+ 'japan': '🗾',
|
|
|
+ 'japanese_castle': '🏯',
|
|
|
+ 'japanese_goblin': '👺',
|
|
|
+ 'japanese_ogre': '👹',
|
|
|
+ 'jeans': '👖',
|
|
|
+ 'joy': '😂',
|
|
|
+ 'joy_cat': '😹',
|
|
|
+ 'jp': '🇯🇵',
|
|
|
+ 'key': '🔑',
|
|
|
+ 'keycap_ten': '🔟',
|
|
|
+ 'kimono': '👘',
|
|
|
+ 'kiss': '💋',
|
|
|
+ 'kissing': '😗',
|
|
|
+ 'kissing_cat': '😽',
|
|
|
+ 'kissing_closed_eyes': '😚',
|
|
|
+ 'kissing_face': '😗', # aparently, the shortcode is just 'kissing'
|
|
|
+ 'kissing_heart': '😘',
|
|
|
+ 'kissing_smiling_eyes': '😙',
|
|
|
+ 'koala': '🐨',
|
|
|
+ 'koko': '🈁',
|
|
|
+ 'kr': '🇰🇷',
|
|
|
+ 'large_blue_circle': '🔵',
|
|
|
+ 'large_blue_diamond': '🔷',
|
|
|
+ 'large_orange_diamond': '🔶',
|
|
|
+ 'last_quarter_moon': '🌗',
|
|
|
+ 'last_quarter_moon_with_face': '🌜',
|
|
|
+ 'laughing': '😆',
|
|
|
+ 'leaves': '🍃',
|
|
|
+ 'ledger': '📒',
|
|
|
+ 'left_luggage': '🛅',
|
|
|
+ 'left_right_arrow': '↔️',
|
|
|
+ 'leftwards_arrow_with_hook': '↩️',
|
|
|
+ 'lemon': '🍋',
|
|
|
+ 'leo': '♌️',
|
|
|
+ 'leopard': '🐆',
|
|
|
+ 'libra': '♎️',
|
|
|
+ 'light_rail': '🚈',
|
|
|
+ 'link': '🔗',
|
|
|
+ 'lips': '👄',
|
|
|
+ 'lipstick': '💄',
|
|
|
+ 'lock': '🔒',
|
|
|
+ 'lock_with_ink_pen': '🔏',
|
|
|
+ 'lollipop': '🍭',
|
|
|
+ 'loop': '➿',
|
|
|
+ 'loudspeaker': '📢',
|
|
|
+ 'love_hotel': '🏩',
|
|
|
+ 'love_letter': '💌',
|
|
|
+ 'low_brightness': '🔅',
|
|
|
+ 'm': 'Ⓜ️',
|
|
|
+ 'mag': '🔍',
|
|
|
+ 'mag_right': '🔎',
|
|
|
+ 'mahjong': '🀄️',
|
|
|
+ 'mailbox': '📫',
|
|
|
+ 'mailbox_closed': '📪',
|
|
|
+ 'mailbox_with_mail': '📬',
|
|
|
+ 'mailbox_with_no_mail': '📭',
|
|
|
+ 'man': '👨',
|
|
|
+ 'man_with_gua_pi_mao': '👲',
|
|
|
+ 'man_with_turban': '👳',
|
|
|
+ 'mans_shoe': '👞',
|
|
|
+ 'maple_leaf': '🍁',
|
|
|
+ 'mask': '😷',
|
|
|
+ 'massage': '💆',
|
|
|
+ 'meat_on_bone': '🍖',
|
|
|
+ 'mega': '📣',
|
|
|
+ 'melon': '🍈',
|
|
|
+ 'memo': '📝',
|
|
|
+ 'mens': '🚹',
|
|
|
+ 'metal': '🤘',
|
|
|
+ 'metro': '🚇',
|
|
|
+ 'microphone': '🎤',
|
|
|
+ 'microscope': '🔬',
|
|
|
+ 'milky_way': '🌌',
|
|
|
+ 'minibus': '🚐',
|
|
|
+ 'minidisc': '💽',
|
|
|
+ 'mobile_phone_off': '📴',
|
|
|
+ 'money_with_wings': '💸',
|
|
|
+ 'moneybag': '💰',
|
|
|
+ 'monkey': '🐒',
|
|
|
+ 'monkey_face': '🐵',
|
|
|
+ 'monorail': '🚝',
|
|
|
+ 'mortar_board': '🎓',
|
|
|
+ 'mount_fuji': '🗻',
|
|
|
+ 'mountain_bicyclist': '🚵',
|
|
|
+ 'mountain_cableway': '🚠',
|
|
|
+ 'mountain_railway': '🚞',
|
|
|
+ 'mouse': '🐭',
|
|
|
+ 'mouse2': '🐁',
|
|
|
+ 'movie_camera': '🎥',
|
|
|
+ 'moyai': '🗿',
|
|
|
+ 'muscle': '💪',
|
|
|
+ 'mushroom': '🍄',
|
|
|
+ 'musical_keyboard': '🎹',
|
|
|
+ 'musical_note': '🎵',
|
|
|
+ 'musical_score': '🎼',
|
|
|
+ 'mute': '🔇',
|
|
|
+ 'nail_care': '💅',
|
|
|
+ 'name_badge': '📛',
|
|
|
+ 'necktie': '👔',
|
|
|
+ 'negative_squared_cross_mark': '❎',
|
|
|
+ 'neutral_face': '😐',
|
|
|
+ 'new': '🆕',
|
|
|
+ 'new_moon': '🌑',
|
|
|
+ 'new_moon_with_face': '🌚',
|
|
|
+ 'newspaper': '📰',
|
|
|
+ 'ng': '🆖',
|
|
|
+ 'nine': '9️⃣',
|
|
|
+ 'no_bell': '🔕',
|
|
|
+ 'no_bicycles': '🚳',
|
|
|
+ 'no_entry': '⛔️',
|
|
|
+ 'no_entry_sign': '🚫',
|
|
|
+ 'no_good': '🙅',
|
|
|
+ 'no_mobile_phones': '📵',
|
|
|
+ 'no_mouth': '😶',
|
|
|
+ 'no_pedestrians': '🚷',
|
|
|
+ 'no_smoking': '🚭',
|
|
|
+ 'non-potable_water': '🚱',
|
|
|
+ 'nose': '👃',
|
|
|
+ 'notebook': '📓',
|
|
|
+ 'notebook_with_decorative_cover': '📔',
|
|
|
+ 'notes': '🎶',
|
|
|
+ 'nut_and_bolt': '🔩',
|
|
|
+ 'o': '⭕️',
|
|
|
+ 'o2': '🅾️',
|
|
|
+ 'ocean': '🌊',
|
|
|
+ 'octopus': '🐙',
|
|
|
+ 'oden': '🍢',
|
|
|
+ 'office': '🏢',
|
|
|
+ 'ok': '🆗',
|
|
|
+ 'ok_hand': '👌',
|
|
|
+ 'ok_woman': '🙆',
|
|
|
+ 'older_man': '👴',
|
|
|
+ 'older_woman': '👵',
|
|
|
+ 'on': '🔛',
|
|
|
+ 'oncoming_automobile': '🚘',
|
|
|
+ 'oncoming_bus': '🚍',
|
|
|
+ 'oncoming_police_car': '🚔',
|
|
|
+ 'oncoming_taxi': '🚖',
|
|
|
+ 'one': '1️⃣',
|
|
|
+ 'open_file_folder': '📂',
|
|
|
+ 'open_hands': '👐',
|
|
|
+ 'open_mouth': '😮',
|
|
|
+ 'ophiuchus': '⛎',
|
|
|
+ 'orange_book': '📙',
|
|
|
+ 'outbox_tray': '📤',
|
|
|
+ 'ox': '🐂',
|
|
|
+ 'package': '📦',
|
|
|
+ 'page_facing_up': '📄',
|
|
|
+ 'page_with_curl': '📃',
|
|
|
+ 'pager': '📟',
|
|
|
+ 'palm_tree': '🌴',
|
|
|
+ 'panda_face': '🐼',
|
|
|
+ 'paperclip': '📎',
|
|
|
+ 'parking': '🅿️',
|
|
|
+ 'part_alternation_mark': '〽',
|
|
|
+ 'partly_sunny': '⛅️',
|
|
|
+ 'passport_control': '🛂',
|
|
|
+ 'paw_prints': '🐾',
|
|
|
+ 'peach': '🍑',
|
|
|
+ 'pear': '🍐',
|
|
|
+ 'pencil': '📝',
|
|
|
+ 'pencil2': '✏️',
|
|
|
+ 'penguin': '🐧',
|
|
|
+ 'pensive': '😔',
|
|
|
+ 'performing_arts': '🎭',
|
|
|
+ 'persevere': '😣',
|
|
|
+ 'person_frowning': '🙍',
|
|
|
+ 'person_with_blond_hair': '👱',
|
|
|
+ 'person_with_pouting_face': '🙎',
|
|
|
+ 'phone': '☎️',
|
|
|
+ 'pig': '🐷',
|
|
|
+ 'pig2': '🐖',
|
|
|
+ 'pig_nose': '🐽',
|
|
|
+ 'pill': '💊',
|
|
|
+ 'pineapple': '🍍',
|
|
|
+ 'pisces': '♓️',
|
|
|
+ 'pizza': '🍕',
|
|
|
+ 'plus1': '👍', # an alias to +1
|
|
|
+ 'point_down': '👇',
|
|
|
+ 'point_left': '👈',
|
|
|
+ 'point_right': '👉',
|
|
|
+ 'point_up': '☝️',
|
|
|
+ 'point_up_2': '👆',
|
|
|
+ 'police_car': '🚓',
|
|
|
+ 'poodle': '🐩',
|
|
|
+ 'poop': '💩',
|
|
|
+ 'post_office': '🏣',
|
|
|
+ 'postal_horn': '📯',
|
|
|
+ 'postbox': '📮',
|
|
|
+ 'potable_water': '🚰',
|
|
|
+ 'pouch': '👝',
|
|
|
+ 'poultry_leg': '🍗',
|
|
|
+ 'pound': '💷',
|
|
|
+ 'pouting_cat': '😾',
|
|
|
+ 'pray': '🙏',
|
|
|
+ 'princess': '👸',
|
|
|
+ 'punch': '👊',
|
|
|
+ 'purple_heart': '💜',
|
|
|
+ 'purse': '👛',
|
|
|
+ 'pushpin': '📌',
|
|
|
+ 'put_litter_in_its_place': '🚮',
|
|
|
+ 'question': '❓',
|
|
|
+ 'rabbit': '🐰',
|
|
|
+ 'rabbit2': '🐇',
|
|
|
+ 'racehorse': '🐎',
|
|
|
+ 'radio': '📻',
|
|
|
+ 'radio_button': '🔘',
|
|
|
+ 'rage': '😡',
|
|
|
+ 'railway_car': '🚃',
|
|
|
+ 'rainbow': '🌈',
|
|
|
+ 'raised_hand': '✋',
|
|
|
+ 'raised_hands': '🙌',
|
|
|
+ 'raising_hand': '🙋',
|
|
|
+ 'ram': '🐏',
|
|
|
+ 'ramen': '🍜',
|
|
|
+ 'rat': '🐀',
|
|
|
+ 'recycle': '♻️',
|
|
|
+ 'red_car': '🚗',
|
|
|
+ 'red_circle': '🔴',
|
|
|
+ 'registered': '®️',
|
|
|
+ 'relaxed': '☺️',
|
|
|
+ 'relieved': '😌',
|
|
|
+ 'repeat': '🔁',
|
|
|
+ 'repeat_one': '🔂',
|
|
|
+ 'restroom': '🚻',
|
|
|
+ 'revolving_hearts': '💞',
|
|
|
+ 'rewind': '⏪',
|
|
|
+ 'ribbon': '🎀',
|
|
|
+ 'rice': '🍚',
|
|
|
+ 'rice_ball': '🍙',
|
|
|
+ 'rice_cracker': '🍘',
|
|
|
+ 'rice_scene': '🎑',
|
|
|
+ 'ring': '💍',
|
|
|
+ 'rocket': '🚀',
|
|
|
+ 'roller_coaster': '🎢',
|
|
|
+ 'rooster': '🐓',
|
|
|
+ 'rose': '🌹',
|
|
|
+ 'rotating_light': '🚨',
|
|
|
+ 'round_pushpin': '📍',
|
|
|
+ 'rowboat': '🚣',
|
|
|
+ 'ru': '🇷🇺',
|
|
|
+ 'rugby_football': '🏉',
|
|
|
+ 'runner': '🏃',
|
|
|
+ 'running': '🏃',
|
|
|
+ 'running_shirt_with_sash': '🎽',
|
|
|
+ 'sa': '🈂',
|
|
|
+ 'sagittarius': '♐️',
|
|
|
+ 'sailboat': '⛵️',
|
|
|
+ 'sake': '🍶',
|
|
|
+ 'sandal': '👡',
|
|
|
+ 'santa': '🎅',
|
|
|
+ 'satellite': '📡',
|
|
|
+ 'satisfied': '😆',
|
|
|
+ 'saxophone': '🎷',
|
|
|
+ 'school': '🏫',
|
|
|
+ 'school_satchel': '🎒',
|
|
|
+ 'scissors': '✂️',
|
|
|
+ 'scorpius': '♏️',
|
|
|
+ 'scream': '😱',
|
|
|
+ 'scream_cat': '🙀',
|
|
|
+ 'scroll': '📜',
|
|
|
+ 'seat': '💺',
|
|
|
+ 'secret': '㊙',
|
|
|
+ 'see_no_evil': '🙈',
|
|
|
+ 'seedling': '🌱',
|
|
|
+ 'seven': '7️⃣',
|
|
|
+ 'shaved_ice': '🍧',
|
|
|
+ 'sheep': '🐑',
|
|
|
+ 'shell': '🐚',
|
|
|
+ 'ship': '🚢',
|
|
|
+ 'shirt': '👕',
|
|
|
+ 'shit': '💩',
|
|
|
+ 'shoe': '👞',
|
|
|
+ 'shower': '🚿',
|
|
|
+ 'signal_strength': '📶',
|
|
|
+ 'simple_smile': '🙂', # slightly smiling face
|
|
|
+ 'six': '6️⃣',
|
|
|
+ 'six_pointed_star': '🔯',
|
|
|
+ 'ski': '🎿',
|
|
|
+ 'skull': '💀',
|
|
|
+ 'sleeping': '😴',
|
|
|
+ 'sleepy': '😪',
|
|
|
+ 'slot_machine': '🎰',
|
|
|
+ 'small_blue_diamond': '🔹',
|
|
|
+ 'small_orange_diamond': '🔸',
|
|
|
+ 'small_red_triangle': '🔺',
|
|
|
+ 'small_red_triangle_down': '🔻',
|
|
|
+ 'smile': '😄',
|
|
|
+ 'smile_cat': '😸',
|
|
|
+ 'smiley': '😃',
|
|
|
+ 'smiley_cat': '😺',
|
|
|
+ 'smiling_imp': '😈',
|
|
|
+ 'smirk': '😏',
|
|
|
+ 'smirk_cat': '😼',
|
|
|
+ 'smoking': '🚬',
|
|
|
+ 'snail': '🐌',
|
|
|
+ 'snake': '🐍',
|
|
|
+ 'snowboarder': '🏂',
|
|
|
+ 'snowflake': '❄️',
|
|
|
+ 'snowman': '⛄️',
|
|
|
+ 'sob': '😭',
|
|
|
+ 'soccer': '⚽️',
|
|
|
+ 'soon': '🔜',
|
|
|
+ 'sos': '🆘',
|
|
|
+ 'sound': '🔉',
|
|
|
+ 'space_invader': '👾',
|
|
|
+ 'spades': '♠️',
|
|
|
+ 'spaghetti': '🍝',
|
|
|
+ 'sparkle': '❇️',
|
|
|
+ 'sparkler': '🎇',
|
|
|
+ 'sparkles': '✨',
|
|
|
+ 'sparkling_heart': '💖',
|
|
|
+ 'speak_no_evil': '🙊',
|
|
|
+ 'speaker': '🔈',
|
|
|
+ 'speech_balloon': '💬',
|
|
|
+ 'speedboat': '🚤',
|
|
|
+ 'star': '⭐️',
|
|
|
+ 'star2': '🌟',
|
|
|
+ 'stars': '🌠',
|
|
|
+ 'station': '🚉',
|
|
|
+ 'statue_of_liberty': '🗽',
|
|
|
+ 'steam_locomotive': '🚂',
|
|
|
+ 'stew': '🍲',
|
|
|
+ 'straight_ruler': '📏',
|
|
|
+ 'strawberry': '🍓',
|
|
|
+ 'stuck_out_tongue': '😛',
|
|
|
+ 'stuck_out_tongue_closed_eyes': '😝',
|
|
|
+ 'stuck_out_tongue_winking_eye': '😜',
|
|
|
+ 'sun_with_face': '🌞',
|
|
|
+ 'sunflower': '🌻',
|
|
|
+ 'sunglasses': '😎',
|
|
|
+ 'sunny': '☀️',
|
|
|
+ 'sunrise': '🌅',
|
|
|
+ 'sunrise_over_mountains': '🌄',
|
|
|
+ 'surfer': '🏄',
|
|
|
+ 'sushi': '🍣',
|
|
|
+ 'suspension_railway': '🚟',
|
|
|
+ 'sweat': '😓',
|
|
|
+ 'sweat_drops': '💦',
|
|
|
+ 'sweat_smile': '😅',
|
|
|
+ 'sweet_potato': '🍠',
|
|
|
+ 'swimmer': '🏊',
|
|
|
+ 'symbols': '🔣',
|
|
|
+ 'syringe': '💉',
|
|
|
+ 'tada': '🎉',
|
|
|
+ 'tanabata_tree': '🎋',
|
|
|
+ 'tangerine': '🍊',
|
|
|
+ 'taurus': '♉️',
|
|
|
+ 'taxi': '🚕',
|
|
|
+ 'tea': '🍵',
|
|
|
+ 'telephone': '☎️',
|
|
|
+ 'telephone_receiver': '📞',
|
|
|
+ 'telescope': '🔭',
|
|
|
+ 'tennis': '🎾',
|
|
|
+ 'tent': '⛺️',
|
|
|
+ 'thought_balloon': '💭',
|
|
|
+ 'three': '3️⃣',
|
|
|
+ 'thumbsdown': '👎',
|
|
|
+ 'thumbsup': '👍',
|
|
|
+ 'ticket': '🎫',
|
|
|
+ 'tiger': '🐯',
|
|
|
+ 'tiger2': '🐅',
|
|
|
+ 'tired_face': '😫',
|
|
|
+ 'tm': '™️',
|
|
|
+ 'toilet': '🚽',
|
|
|
+ 'tokyo_tower': '🗼',
|
|
|
+ 'tomato': '🍅',
|
|
|
+ 'tongue': '👅',
|
|
|
+ 'top': '🔝',
|
|
|
+ 'tophat': '🎩',
|
|
|
+ 'tractor': '🚜',
|
|
|
+ 'traffic_light': '🚥',
|
|
|
+ 'train': '🚋',
|
|
|
+ 'train2': '🚆',
|
|
|
+ 'tram': '🚊',
|
|
|
+ 'triangular_flag_on_post': '🚩',
|
|
|
+ 'triangular_ruler': '📐',
|
|
|
+ 'trident': '🔱',
|
|
|
+ 'triumph': '😤',
|
|
|
+ 'trolleybus': '🚎',
|
|
|
+ 'trophy': '🏆',
|
|
|
+ 'tropical_drink': '🍹',
|
|
|
+ 'tropical_fish': '🐠',
|
|
|
+ 'truck': '🚚',
|
|
|
+ 'trumpet': '🎺',
|
|
|
+ 'tshirt': '👕',
|
|
|
+ 'tulip': '🌷',
|
|
|
+ 'turtle': '🐢',
|
|
|
+ 'tv': '📺',
|
|
|
+ 'twisted_rightwards_arrows': '🔀',
|
|
|
+ 'two': '2️⃣',
|
|
|
+ 'two_hearts': '💕',
|
|
|
+ 'two_men_holding_hands': '👬',
|
|
|
+ 'two_women_holding_hands': '👭',
|
|
|
+ 'u5272': '🈹',
|
|
|
+ 'u5408': '🈴',
|
|
|
+ 'u55b6': '🈺',
|
|
|
+ 'u6307': '🈯',
|
|
|
+ 'u6708': '🈷',
|
|
|
+ 'u6709': '🈶',
|
|
|
+ 'u6e80': '🈵',
|
|
|
+ 'u7121': '🈚',
|
|
|
+ 'u7533': '🈸',
|
|
|
+ 'u7981': '🈲',
|
|
|
+ 'u7a7a': '🈳',
|
|
|
+ 'uk': '🇬🇧',
|
|
|
+ 'umbrella': '☔️',
|
|
|
+ 'unamused': '😒',
|
|
|
+ 'underage': '🔞',
|
|
|
+ 'unlock': '🔓',
|
|
|
+ 'up': '🆙',
|
|
|
+ 'us': '🇺🇸',
|
|
|
+ 'v': '✌️',
|
|
|
+ 'vertical_traffic_light': '🚦',
|
|
|
+ 'vhs': '📼',
|
|
|
+ 'vibration_mode': '📳',
|
|
|
+ 'video_camera': '📹',
|
|
|
+ 'video_game': '🎮',
|
|
|
+ 'violin': '🎻',
|
|
|
+ 'virgo': '♍️',
|
|
|
+ 'volcano': '🌋',
|
|
|
+ 'vs': '🆚',
|
|
|
+ 'walking': '🚶',
|
|
|
+ 'waning_crescent_moon': '🌘',
|
|
|
+ 'waning_gibbous_moon': '🌖',
|
|
|
+ 'warning': '⚠️',
|
|
|
+ 'watch': '⌚️',
|
|
|
+ 'water_buffalo': '🐃',
|
|
|
+ 'watermelon': '🍉',
|
|
|
+ 'wave': '👋',
|
|
|
+ 'wavy_dash': '〰️',
|
|
|
+ 'waxing_crescent_moon': '🌒',
|
|
|
+ 'waxing_gibbous_moon': '🌔',
|
|
|
+ 'wc': '🚾',
|
|
|
+ 'weary': '😩',
|
|
|
+ 'wedding': '💒',
|
|
|
+ 'whale': '🐳',
|
|
|
+ 'whale2': '🐋',
|
|
|
+ 'wheelchair': '♿️',
|
|
|
+ 'white_check_mark': '✅',
|
|
|
+ 'white_circle': '⚪️',
|
|
|
+ 'white_flower': '💮',
|
|
|
+ 'white_large_square': '⬜️',
|
|
|
+ 'white_medium_small_square': '◽️',
|
|
|
+ 'white_medium_square': '◻️',
|
|
|
+ 'white_small_square': '▫️',
|
|
|
+ 'white_square_button': '🔳',
|
|
|
+ 'wind_chime': '🎐',
|
|
|
+ 'wine_glass': '🍷',
|
|
|
+ 'wink': '😉',
|
|
|
+ 'wolf': '🐺',
|
|
|
+ 'woman': '👩',
|
|
|
+ 'womans_clothes': '👚',
|
|
|
+ 'womans_hat': '👒',
|
|
|
+ 'womens': '🚺',
|
|
|
+ 'worried': '😟',
|
|
|
+ 'wrench': '🔧',
|
|
|
+ 'x': '❌',
|
|
|
+ 'yellow_heart': '💛',
|
|
|
+ 'yen': '💴',
|
|
|
+ 'yum': '😋',
|
|
|
+ 'zap': '⚡️',
|
|
|
+ 'zero': '0️⃣',
|
|
|
+ 'zzz': '💤',
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+def _replace_emoji(line):
|
|
|
+ for shortcode, characters in _emoji_replacement_mapping.items():
|
|
|
+ line = line.replace(':{}:'.format(shortcode), characters)
|
|
|
+ return line
|
|
|
+
|
|
|
+
|
|
|
+def _unreplace_emoji(line):
|
|
|
+ # replace sequences before single characters
|
|
|
+ for shortcode, character in sorted(
|
|
|
+ _emoji_replacement_mapping.items(),
|
|
|
+ key=lambda t: len(t[1]),
|
|
|
+ reverse=True
|
|
|
+ ):
|
|
|
+ line = line.replace(character, ':{}:'.format(shortcode))
|
|
|
+ return line
|
|
|
+
|
|
|
+
|
|
|
+def do_the_thing(func):
|
|
|
+ conn = op.get_bind()
|
|
|
+
|
|
|
+ for table_name, column_name in (('posts', 'content'),
|
|
|
+ ('messages', 'message')):
|
|
|
+ table = sa.Table(
|
|
|
+ table_name,
|
|
|
+ sa.MetaData(),
|
|
|
+ sa.Column('id', sa.Integer, primary_key=True),
|
|
|
+ sa.Column(column_name, sa.String)
|
|
|
+ )
|
|
|
+ for row in conn.execute(table.select()):
|
|
|
+ content = getattr(row, column_name)
|
|
|
+ new_content = func(content)
|
|
|
+ if not new_content == content:
|
|
|
+ conn.execute(
|
|
|
+ table.update().where(
|
|
|
+ table.c.id == row.id
|
|
|
+ ).values(**{column_name: new_content})
|
|
|
+ )
|
|
|
+
|
|
|
+
|
|
|
+def upgrade():
|
|
|
+ do_the_thing(_replace_emoji)
|
|
|
+
|
|
|
+
|
|
|
+def downgrade():
|
|
|
+ do_the_thing(_unreplace_emoji)
|