201802282131_232e68a03aa2_change_emoji_shortcodes_to_characters.py 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949
  1. """change emoji shortcodes to characters
  2. Revision ID: 232e68a03aa2
  3. Revises: af3f5579c84d
  4. Create Date: 2018-02-28 21:31:35.260704
  5. """
  6. from alembic import op
  7. import sqlalchemy as sa
  8. # revision identifiers, used by Alembic.
  9. revision = '232e68a03aa2'
  10. down_revision = 'af3f5579c84d'
  11. branch_labels = ()
  12. depends_on = None
  13. _emoji_replacement_mapping = {
  14. # bowtie: not in Unicode
  15. # neckbeard: not in Unicode
  16. # shipit, squirrel: GitHub inside joke? either way, not in Unicode
  17. # trollface: ancient meme, not in Unicode
  18. # octocat: that's a brand logo, of course it's not in Unicode
  19. # flaskbb: that's our logo! sadly not in Unicode though
  20. # feelsgood: doom reference, not in Unicode
  21. # finnadie: doom reference, not in Unicode
  22. # goberserk: doom reference, not in Unicode
  23. # godmode: doom reference, not in Unicode
  24. # hurtrealbad: doom reference, not in Unicode
  25. # rage1: doom reference, not in Unicode
  26. # rage2: doom reference, not in Unicode
  27. # rage3: doom reference, not in Unicode
  28. # rage4: doom reference, not in Unicode
  29. # suspect: doom reference, not in Unicode
  30. '+1': '👍',
  31. '-1': '👎',
  32. '100': '💯',
  33. '1234': '🔢',
  34. '8ball': '🎱',
  35. 'a': '🅰️',
  36. 'ab': '🆎',
  37. 'abc': '🔤',
  38. 'abcd': '🔡',
  39. 'accept': '🉑',
  40. 'aerial_tramway': '🚡',
  41. 'airplane': '✈️',
  42. 'alarm_clock': '⏰',
  43. 'alien': '👽',
  44. 'ambulance': '🚑',
  45. 'anchor': '⚓️',
  46. 'angel': '👼',
  47. 'anger': '💢',
  48. 'angry': '😠',
  49. 'anguished': '😧',
  50. 'ant': '🐜',
  51. 'apple': '🍎',
  52. 'aquarius': '♒️',
  53. 'aries': '♈️',
  54. 'arrow_backward': '◀️',
  55. 'arrow_double_down': '⏬',
  56. 'arrow_double_up': '⏫',
  57. 'arrow_down': '⬇️',
  58. 'arrow_down_small': '🔽',
  59. 'arrow_forward': '▶️',
  60. 'arrow_heading_down': '⤵️',
  61. 'arrow_heading_up': '⤴️',
  62. 'arrow_left': '⬅️',
  63. 'arrow_lower_left': '↙️',
  64. 'arrow_lower_right': '↘️',
  65. 'arrow_right': '➡️',
  66. 'arrow_right_hook': '↪️',
  67. 'arrow_up': '⬆️',
  68. 'arrow_up_down': '↕️',
  69. 'arrow_up_small': '🔼',
  70. 'arrow_upper_left': '↖️',
  71. 'arrow_upper_right': '↗️',
  72. 'arrows_clockwise': '🔃',
  73. 'arrows_counterclockwise': '🔄',
  74. 'art': '🎨',
  75. 'articulated_lorry': '🚛',
  76. 'astonished': '😲',
  77. 'atm': '🏧',
  78. 'b': '🅱️',
  79. 'baby': '👶',
  80. 'baby_bottle': '🍼',
  81. 'baby_chick': '🐤',
  82. 'baby_symbol': '🚼',
  83. 'back': '🔙',
  84. 'baggage_claim': '🛄',
  85. 'balloon': '🎈',
  86. 'ballot_box_with_check': '☑️',
  87. 'bamboo': '🎍',
  88. 'banana': '🍌',
  89. 'bangbang': '‼️',
  90. 'bank': '🏦',
  91. 'bar_chart': '📊',
  92. 'barber': '💈',
  93. 'baseball': '⚾️',
  94. 'basketball': '🏀',
  95. 'bath': '🛀',
  96. 'bathtub': '🛁',
  97. 'battery': '🔋',
  98. 'bear': '🐻',
  99. 'bee': '🐝',
  100. 'beer': '🍺',
  101. 'beers': '🍻',
  102. 'beetle': '🐞',
  103. 'beginner': '🔰',
  104. 'bell': '🔔',
  105. 'bento': '🍱',
  106. 'bicyclist': '🚴',
  107. 'bike': '🚲',
  108. 'bikini': '👙',
  109. 'bird': '🐦',
  110. 'birthday': '🎂',
  111. 'black_circle': '⚫️',
  112. 'black_joker': '🃏',
  113. 'black_medium_small_square': '◾️',
  114. 'black_medium_square': '◼️',
  115. 'black_nib': '✒️',
  116. 'black_small_square': '▪️',
  117. 'black_square': '⬛', # i assume that's black large square
  118. 'black_square_button': '🔲',
  119. 'blossom': '🌼',
  120. 'blowfish': '🐡',
  121. 'blue_book': '📘',
  122. 'blue_car': '🚙',
  123. 'blue_heart': '💙',
  124. 'blush': '😊',
  125. 'boar': '🐗',
  126. 'boat': '⛵️',
  127. 'bomb': '💣',
  128. 'book': '📖',
  129. 'bookmark': '🔖',
  130. 'bookmark_tabs': '📑',
  131. 'books': '📚',
  132. 'boom': '💥',
  133. 'boot': '👢',
  134. 'bouquet': '💐',
  135. 'bow': '🙇',
  136. 'bowling': '🎳',
  137. 'boy': '👦',
  138. 'bread': '🍞',
  139. 'bride_with_veil': '👰',
  140. 'bridge_at_night': '🌉',
  141. 'briefcase': '💼',
  142. 'broken_heart': '💔',
  143. 'bug': '🐛',
  144. 'bulb': '💡',
  145. 'bullettrain_front': '🚅',
  146. 'bullettrain_side': '🚄',
  147. 'bus': '🚌',
  148. 'busstop': '🚏',
  149. 'bust_in_silhouette': '👤',
  150. 'busts_in_silhouette': '👥',
  151. 'cactus': '🌵',
  152. 'cake': '🍰',
  153. 'calendar': '📆',
  154. 'calling': '📲',
  155. 'camel': '🐫',
  156. 'camera': '📷',
  157. 'cancer': '♋️',
  158. 'candy': '🍬',
  159. 'capital_abcd': '🔠',
  160. 'capricorn': '♑️',
  161. 'car': '🚗',
  162. 'card_index': '📇',
  163. 'carousel_horse': '🎠',
  164. 'cat': '🐱',
  165. 'cat2': '🐈',
  166. 'cd': '💿',
  167. 'chart': '💹',
  168. 'chart_with_downwards_trend': '📉',
  169. 'chart_with_upwards_trend': '📈',
  170. 'checkered_flag': '🏁',
  171. 'cherries': '🍒',
  172. 'cherry_blossom': '🌸',
  173. 'chestnut': '🌰',
  174. 'chicken': '🐔',
  175. 'children_crossing': '🚸',
  176. 'chocolate_bar': '🍫',
  177. 'christmas_tree': '🎄',
  178. 'church': '⛪️',
  179. 'cinema': '🎦',
  180. 'circus_tent': '🎪',
  181. 'city_sunrise': '🌇',
  182. 'city_sunset': '🌆',
  183. 'cl': '🆑',
  184. 'clap': '👏',
  185. 'clapper': '🎬',
  186. 'clipboard': '📋',
  187. 'clock1': '🕐',
  188. 'clock10': '🕙',
  189. 'clock1030': '🕥',
  190. 'clock11': '🕚',
  191. 'clock1130': '🕦',
  192. 'clock12': '🕛',
  193. 'clock1230': '🕧',
  194. 'clock130': '🕜',
  195. 'clock2': '🕑',
  196. 'clock230': '🕝',
  197. 'clock3': '🕒',
  198. 'clock330': '🕞',
  199. 'clock4': '🕓',
  200. 'clock430': '🕟',
  201. 'clock5': '🕔',
  202. 'clock530': '🕠',
  203. 'clock6': '🕕',
  204. 'clock630': '🕡',
  205. 'clock7': '🕖',
  206. 'clock730': '🕢',
  207. 'clock8': '🕗',
  208. 'clock830': '🕣',
  209. 'clock9': '🕘',
  210. 'clock930': '🕤',
  211. 'closed_book': '📕',
  212. 'closed_lock_with_key': '🔐',
  213. 'closed_umbrella': '🌂',
  214. 'cloud': '☁️',
  215. 'clubs': '♣️',
  216. 'cn': '🇨🇳',
  217. 'cocktail': '🍸',
  218. 'coffee': '☕️',
  219. 'cold_sweat': '😰',
  220. 'collision': '💥',
  221. 'computer': '💻',
  222. 'confetti_ball': '🎊',
  223. 'confounded': '😖',
  224. 'confused': '😕',
  225. 'congratulations': '㊗',
  226. 'construction': '🚧',
  227. 'construction_worker': '👷',
  228. 'convenience_store': '🏪',
  229. 'cookie': '🍪',
  230. 'cool': '🆒',
  231. 'cop': '👮',
  232. 'copyright': '©️',
  233. 'corn': '🌽',
  234. 'couple': '👫',
  235. 'couple_with_heart': '💑',
  236. 'couplekiss': '💏', # kiss
  237. 'cow': '🐮',
  238. 'cow2': '🐄',
  239. 'credit_card': '💳',
  240. 'crescent_moon': '🌙',
  241. 'crocodile': '🐊',
  242. 'crossed_flags': '🎌',
  243. 'crown': '👑',
  244. 'cry': '😢',
  245. 'crying_cat_face': '😿',
  246. 'crystal_ball': '🔮',
  247. 'cupid': '💘',
  248. 'curly_loop': '➰',
  249. 'currency_exchange': '💱',
  250. 'curry': '🍛',
  251. 'custard': '🍮',
  252. 'customs': '🛃',
  253. 'cyclone': '🌀',
  254. 'dancer': '💃',
  255. 'dancers': '👯',
  256. 'dango': '🍡',
  257. 'dart': '🎯',
  258. 'dash': '💨',
  259. 'date': '📅',
  260. 'de': '🇩🇪',
  261. 'deciduous_tree': '🌳',
  262. 'department_store': '🏬',
  263. 'diamond_shape_with_a_dot_inside': '💠',
  264. 'diamonds': '♦️',
  265. 'disappointed': '😞',
  266. 'disappointed_relieved': '😥',
  267. 'dizzy': '💫',
  268. 'dizzy_face': '😵',
  269. 'do_not_litter': '🚯',
  270. 'dog': '🐶',
  271. 'dog2': '🐕',
  272. 'dollar': '💵',
  273. 'dolls': '🎎',
  274. 'dolphin': '🐬',
  275. 'donut': '🍩', # it's doughnut, you 'muricans
  276. 'door': '🚪',
  277. 'doughnut': '🍩',
  278. 'dragon': '🐉',
  279. 'dragon_face': '🐲',
  280. 'dress': '👗',
  281. 'dromedary_camel': '🐪',
  282. 'droplet': '💧',
  283. 'dvd': '📀',
  284. 'e-mail': '📧',
  285. 'ear': '👂',
  286. 'ear_of_rice': '🌾',
  287. 'earth_africa': '🌍',
  288. 'earth_americas': '🌎',
  289. 'earth_asia': '🌏',
  290. 'egg': '🥚',
  291. 'eggplant': '🍆',
  292. 'eight': '8️⃣',
  293. 'eight_pointed_black_star': '✴️',
  294. 'eight_spoked_asterisk': '✳️',
  295. 'electric_plug': '🔌',
  296. 'elephant': '🐘',
  297. 'email': '✉️',
  298. 'end': '🔚',
  299. 'envelope': '✉️',
  300. 'es': '🇪🇸',
  301. 'euro': '💶',
  302. 'european_castle': '🏰',
  303. 'european_post_office': '🏤',
  304. 'evergreen_tree': '🌲',
  305. 'exclamation': '❗️',
  306. 'expressionless': '😑',
  307. 'eyeglasses': '👓',
  308. 'eyes': '👀',
  309. 'facepunch': '👊',
  310. 'factory': '🏭',
  311. 'fallen_leaf': '🍂',
  312. 'family': '👪',
  313. 'fast_forward': '⏩',
  314. 'fax': '📠',
  315. 'fearful': '😨',
  316. 'feet': '🐾',
  317. 'ferris_wheel': '🎡',
  318. 'file_folder': '📁',
  319. 'fire': '🔥',
  320. 'fire_engine': '🚒',
  321. 'fireworks': '🎆',
  322. 'first_quarter_moon': '🌓',
  323. 'first_quarter_moon_with_face': '🌛',
  324. 'fish': '🐟',
  325. 'fish_cake': '🍥',
  326. 'fishing_pole_and_fish': '🎣',
  327. 'fist': '✊',
  328. 'five': '5️⃣',
  329. 'flags': '🎏',
  330. 'flashlight': '🔦',
  331. 'floppy_disk': '💾',
  332. 'flower_playing_cards': '🎴',
  333. 'flushed': '😳',
  334. 'foggy': '🌁',
  335. 'football': '🏈',
  336. 'fork_and_knife': '🍴',
  337. 'fountain': '⛲️',
  338. 'four': '4️⃣',
  339. 'four_leaf_clover': '🍀',
  340. 'fr': '🇫🇷',
  341. 'free': '🆓',
  342. 'fried_shrimp': '🍤',
  343. 'fries': '🍟',
  344. 'frog': '🐸',
  345. 'frowning': '😦',
  346. 'fu': '🖕',
  347. 'fuelpump': '⛽️',
  348. 'full_moon': '🌕',
  349. 'full_moon_with_face': '🌝',
  350. 'game_die': '🎲',
  351. 'gb': '🇬🇧',
  352. 'gem': '💎',
  353. 'gemini': '♊️',
  354. 'ghost': '👻',
  355. 'gift': '🎁',
  356. 'gift_heart': '💝',
  357. 'girl': '👧',
  358. 'globe_with_meridians': '🌐',
  359. 'goat': '🐐',
  360. 'golf': '⛳️',
  361. 'grapes': '🍇',
  362. 'green_apple': '🍏',
  363. 'green_book': '📗',
  364. 'green_heart': '💚',
  365. 'grey_exclamation': '❕',
  366. 'grey_question': '❔',
  367. 'grimacing': '😬',
  368. 'grin': '😁',
  369. 'grinning': '😀',
  370. 'guardsman': '💂',
  371. 'guitar': '🎸',
  372. 'gun': '🔫',
  373. 'haircut': '💇',
  374. 'hamburger': '🍔',
  375. 'hammer': '🔨',
  376. 'hamster': '🐹',
  377. 'hand': '✋',
  378. 'handbag': '👜',
  379. 'hankey': '💩',
  380. 'hash': '#️⃣',
  381. 'hatched_chick': '🐥',
  382. 'hatching_chick': '🐣',
  383. 'headphones': '🎧',
  384. 'hear_no_evil': '🙉',
  385. 'heart': '❤️',
  386. 'heart_decoration': '💟',
  387. 'heart_eyes': '😍',
  388. 'heart_eyes_cat': '😻',
  389. 'heartbeat': '💓',
  390. 'heartpulse': '💗',
  391. 'hearts': '♥️',
  392. 'heavy_check_mark': '✔️',
  393. 'heavy_division_sign': '➗',
  394. 'heavy_dollar_sign': '💲',
  395. 'heavy_exclamation_mark': '❗️',
  396. 'heavy_minus_sign': '➖',
  397. 'heavy_multiplication_x': '✖️',
  398. 'heavy_plus_sign': '➕',
  399. 'helicopter': '🚁',
  400. 'herb': '🌿',
  401. 'hibiscus': '🌺',
  402. 'high_brightness': '🔆',
  403. 'high_heel': '👠',
  404. 'hocho': '🔪',
  405. 'honey_pot': '🍯',
  406. 'honeybee': '🐝',
  407. 'horse': '🐴',
  408. 'horse_racing': '🏇',
  409. 'hospital': '🏥',
  410. 'hotel': '🏨',
  411. 'hotsprings': '♨️',
  412. 'hourglass': '⌛️',
  413. 'hourglass_flowing_sand': '⏳',
  414. 'house': '🏠',
  415. 'house_with_garden': '🏡',
  416. 'hushed': '😯',
  417. 'ice_cream': '🍨',
  418. 'icecream': '🍦',
  419. 'id': '🆔',
  420. 'ideograph_advantage': '🉐',
  421. 'imp': '👿',
  422. 'inbox_tray': '📥',
  423. 'incoming_envelope': '📨',
  424. 'information_desk_person': '💁',
  425. 'information_source': 'ℹ️',
  426. 'innocent': '😇',
  427. 'interrobang': '⁉️',
  428. 'iphone': '📱',
  429. 'it': '🇮🇹',
  430. 'izakaya_lantern': '🏮',
  431. 'jack_o_lantern': '🎃',
  432. 'japan': '🗾',
  433. 'japanese_castle': '🏯',
  434. 'japanese_goblin': '👺',
  435. 'japanese_ogre': '👹',
  436. 'jeans': '👖',
  437. 'joy': '😂',
  438. 'joy_cat': '😹',
  439. 'jp': '🇯🇵',
  440. 'key': '🔑',
  441. 'keycap_ten': '🔟',
  442. 'kimono': '👘',
  443. 'kiss': '💋',
  444. 'kissing': '😗',
  445. 'kissing_cat': '😽',
  446. 'kissing_closed_eyes': '😚',
  447. 'kissing_face': '😗', # aparently, the shortcode is just 'kissing'
  448. 'kissing_heart': '😘',
  449. 'kissing_smiling_eyes': '😙',
  450. 'koala': '🐨',
  451. 'koko': '🈁',
  452. 'kr': '🇰🇷',
  453. 'large_blue_circle': '🔵',
  454. 'large_blue_diamond': '🔷',
  455. 'large_orange_diamond': '🔶',
  456. 'last_quarter_moon': '🌗',
  457. 'last_quarter_moon_with_face': '🌜',
  458. 'laughing': '😆',
  459. 'leaves': '🍃',
  460. 'ledger': '📒',
  461. 'left_luggage': '🛅',
  462. 'left_right_arrow': '↔️',
  463. 'leftwards_arrow_with_hook': '↩️',
  464. 'lemon': '🍋',
  465. 'leo': '♌️',
  466. 'leopard': '🐆',
  467. 'libra': '♎️',
  468. 'light_rail': '🚈',
  469. 'link': '🔗',
  470. 'lips': '👄',
  471. 'lipstick': '💄',
  472. 'lock': '🔒',
  473. 'lock_with_ink_pen': '🔏',
  474. 'lollipop': '🍭',
  475. 'loop': '➿',
  476. 'loudspeaker': '📢',
  477. 'love_hotel': '🏩',
  478. 'love_letter': '💌',
  479. 'low_brightness': '🔅',
  480. 'm': 'Ⓜ️',
  481. 'mag': '🔍',
  482. 'mag_right': '🔎',
  483. 'mahjong': '🀄️',
  484. 'mailbox': '📫',
  485. 'mailbox_closed': '📪',
  486. 'mailbox_with_mail': '📬',
  487. 'mailbox_with_no_mail': '📭',
  488. 'man': '👨',
  489. 'man_with_gua_pi_mao': '👲',
  490. 'man_with_turban': '👳',
  491. 'mans_shoe': '👞',
  492. 'maple_leaf': '🍁',
  493. 'mask': '😷',
  494. 'massage': '💆',
  495. 'meat_on_bone': '🍖',
  496. 'mega': '📣',
  497. 'melon': '🍈',
  498. 'memo': '📝',
  499. 'mens': '🚹',
  500. 'metal': '🤘',
  501. 'metro': '🚇',
  502. 'microphone': '🎤',
  503. 'microscope': '🔬',
  504. 'milky_way': '🌌',
  505. 'minibus': '🚐',
  506. 'minidisc': '💽',
  507. 'mobile_phone_off': '📴',
  508. 'money_with_wings': '💸',
  509. 'moneybag': '💰',
  510. 'monkey': '🐒',
  511. 'monkey_face': '🐵',
  512. 'monorail': '🚝',
  513. 'mortar_board': '🎓',
  514. 'mount_fuji': '🗻',
  515. 'mountain_bicyclist': '🚵',
  516. 'mountain_cableway': '🚠',
  517. 'mountain_railway': '🚞',
  518. 'mouse': '🐭',
  519. 'mouse2': '🐁',
  520. 'movie_camera': '🎥',
  521. 'moyai': '🗿',
  522. 'muscle': '💪',
  523. 'mushroom': '🍄',
  524. 'musical_keyboard': '🎹',
  525. 'musical_note': '🎵',
  526. 'musical_score': '🎼',
  527. 'mute': '🔇',
  528. 'nail_care': '💅',
  529. 'name_badge': '📛',
  530. 'necktie': '👔',
  531. 'negative_squared_cross_mark': '❎',
  532. 'neutral_face': '😐',
  533. 'new': '🆕',
  534. 'new_moon': '🌑',
  535. 'new_moon_with_face': '🌚',
  536. 'newspaper': '📰',
  537. 'ng': '🆖',
  538. 'nine': '9️⃣',
  539. 'no_bell': '🔕',
  540. 'no_bicycles': '🚳',
  541. 'no_entry': '⛔️',
  542. 'no_entry_sign': '🚫',
  543. 'no_good': '🙅',
  544. 'no_mobile_phones': '📵',
  545. 'no_mouth': '😶',
  546. 'no_pedestrians': '🚷',
  547. 'no_smoking': '🚭',
  548. 'non-potable_water': '🚱',
  549. 'nose': '👃',
  550. 'notebook': '📓',
  551. 'notebook_with_decorative_cover': '📔',
  552. 'notes': '🎶',
  553. 'nut_and_bolt': '🔩',
  554. 'o': '⭕️',
  555. 'o2': '🅾️',
  556. 'ocean': '🌊',
  557. 'octopus': '🐙',
  558. 'oden': '🍢',
  559. 'office': '🏢',
  560. 'ok': '🆗',
  561. 'ok_hand': '👌',
  562. 'ok_woman': '🙆',
  563. 'older_man': '👴',
  564. 'older_woman': '👵',
  565. 'on': '🔛',
  566. 'oncoming_automobile': '🚘',
  567. 'oncoming_bus': '🚍',
  568. 'oncoming_police_car': '🚔',
  569. 'oncoming_taxi': '🚖',
  570. 'one': '1️⃣',
  571. 'open_file_folder': '📂',
  572. 'open_hands': '👐',
  573. 'open_mouth': '😮',
  574. 'ophiuchus': '⛎',
  575. 'orange_book': '📙',
  576. 'outbox_tray': '📤',
  577. 'ox': '🐂',
  578. 'package': '📦',
  579. 'page_facing_up': '📄',
  580. 'page_with_curl': '📃',
  581. 'pager': '📟',
  582. 'palm_tree': '🌴',
  583. 'panda_face': '🐼',
  584. 'paperclip': '📎',
  585. 'parking': '🅿️',
  586. 'part_alternation_mark': '〽',
  587. 'partly_sunny': '⛅️',
  588. 'passport_control': '🛂',
  589. 'paw_prints': '🐾',
  590. 'peach': '🍑',
  591. 'pear': '🍐',
  592. 'pencil': '📝',
  593. 'pencil2': '✏️',
  594. 'penguin': '🐧',
  595. 'pensive': '😔',
  596. 'performing_arts': '🎭',
  597. 'persevere': '😣',
  598. 'person_frowning': '🙍',
  599. 'person_with_blond_hair': '👱',
  600. 'person_with_pouting_face': '🙎',
  601. 'phone': '☎️',
  602. 'pig': '🐷',
  603. 'pig2': '🐖',
  604. 'pig_nose': '🐽',
  605. 'pill': '💊',
  606. 'pineapple': '🍍',
  607. 'pisces': '♓️',
  608. 'pizza': '🍕',
  609. 'plus1': '👍', # an alias to +1
  610. 'point_down': '👇',
  611. 'point_left': '👈',
  612. 'point_right': '👉',
  613. 'point_up': '☝️',
  614. 'point_up_2': '👆',
  615. 'police_car': '🚓',
  616. 'poodle': '🐩',
  617. 'poop': '💩',
  618. 'post_office': '🏣',
  619. 'postal_horn': '📯',
  620. 'postbox': '📮',
  621. 'potable_water': '🚰',
  622. 'pouch': '👝',
  623. 'poultry_leg': '🍗',
  624. 'pound': '💷',
  625. 'pouting_cat': '😾',
  626. 'pray': '🙏',
  627. 'princess': '👸',
  628. 'punch': '👊',
  629. 'purple_heart': '💜',
  630. 'purse': '👛',
  631. 'pushpin': '📌',
  632. 'put_litter_in_its_place': '🚮',
  633. 'question': '❓',
  634. 'rabbit': '🐰',
  635. 'rabbit2': '🐇',
  636. 'racehorse': '🐎',
  637. 'radio': '📻',
  638. 'radio_button': '🔘',
  639. 'rage': '😡',
  640. 'railway_car': '🚃',
  641. 'rainbow': '🌈',
  642. 'raised_hand': '✋',
  643. 'raised_hands': '🙌',
  644. 'raising_hand': '🙋',
  645. 'ram': '🐏',
  646. 'ramen': '🍜',
  647. 'rat': '🐀',
  648. 'recycle': '♻️',
  649. 'red_car': '🚗',
  650. 'red_circle': '🔴',
  651. 'registered': '®️',
  652. 'relaxed': '☺️',
  653. 'relieved': '😌',
  654. 'repeat': '🔁',
  655. 'repeat_one': '🔂',
  656. 'restroom': '🚻',
  657. 'revolving_hearts': '💞',
  658. 'rewind': '⏪',
  659. 'ribbon': '🎀',
  660. 'rice': '🍚',
  661. 'rice_ball': '🍙',
  662. 'rice_cracker': '🍘',
  663. 'rice_scene': '🎑',
  664. 'ring': '💍',
  665. 'rocket': '🚀',
  666. 'roller_coaster': '🎢',
  667. 'rooster': '🐓',
  668. 'rose': '🌹',
  669. 'rotating_light': '🚨',
  670. 'round_pushpin': '📍',
  671. 'rowboat': '🚣',
  672. 'ru': '🇷🇺',
  673. 'rugby_football': '🏉',
  674. 'runner': '🏃',
  675. 'running': '🏃',
  676. 'running_shirt_with_sash': '🎽',
  677. 'sa': '🈂',
  678. 'sagittarius': '♐️',
  679. 'sailboat': '⛵️',
  680. 'sake': '🍶',
  681. 'sandal': '👡',
  682. 'santa': '🎅',
  683. 'satellite': '📡',
  684. 'satisfied': '😆',
  685. 'saxophone': '🎷',
  686. 'school': '🏫',
  687. 'school_satchel': '🎒',
  688. 'scissors': '✂️',
  689. 'scorpius': '♏️',
  690. 'scream': '😱',
  691. 'scream_cat': '🙀',
  692. 'scroll': '📜',
  693. 'seat': '💺',
  694. 'secret': '㊙',
  695. 'see_no_evil': '🙈',
  696. 'seedling': '🌱',
  697. 'seven': '7️⃣',
  698. 'shaved_ice': '🍧',
  699. 'sheep': '🐑',
  700. 'shell': '🐚',
  701. 'ship': '🚢',
  702. 'shirt': '👕',
  703. 'shit': '💩',
  704. 'shoe': '👞',
  705. 'shower': '🚿',
  706. 'signal_strength': '📶',
  707. 'simple_smile': '🙂', # slightly smiling face
  708. 'six': '6️⃣',
  709. 'six_pointed_star': '🔯',
  710. 'ski': '🎿',
  711. 'skull': '💀',
  712. 'sleeping': '😴',
  713. 'sleepy': '😪',
  714. 'slot_machine': '🎰',
  715. 'small_blue_diamond': '🔹',
  716. 'small_orange_diamond': '🔸',
  717. 'small_red_triangle': '🔺',
  718. 'small_red_triangle_down': '🔻',
  719. 'smile': '😄',
  720. 'smile_cat': '😸',
  721. 'smiley': '😃',
  722. 'smiley_cat': '😺',
  723. 'smiling_imp': '😈',
  724. 'smirk': '😏',
  725. 'smirk_cat': '😼',
  726. 'smoking': '🚬',
  727. 'snail': '🐌',
  728. 'snake': '🐍',
  729. 'snowboarder': '🏂',
  730. 'snowflake': '❄️',
  731. 'snowman': '⛄️',
  732. 'sob': '😭',
  733. 'soccer': '⚽️',
  734. 'soon': '🔜',
  735. 'sos': '🆘',
  736. 'sound': '🔉',
  737. 'space_invader': '👾',
  738. 'spades': '♠️',
  739. 'spaghetti': '🍝',
  740. 'sparkle': '❇️',
  741. 'sparkler': '🎇',
  742. 'sparkles': '✨',
  743. 'sparkling_heart': '💖',
  744. 'speak_no_evil': '🙊',
  745. 'speaker': '🔈',
  746. 'speech_balloon': '💬',
  747. 'speedboat': '🚤',
  748. 'star': '⭐️',
  749. 'star2': '🌟',
  750. 'stars': '🌠',
  751. 'station': '🚉',
  752. 'statue_of_liberty': '🗽',
  753. 'steam_locomotive': '🚂',
  754. 'stew': '🍲',
  755. 'straight_ruler': '📏',
  756. 'strawberry': '🍓',
  757. 'stuck_out_tongue': '😛',
  758. 'stuck_out_tongue_closed_eyes': '😝',
  759. 'stuck_out_tongue_winking_eye': '😜',
  760. 'sun_with_face': '🌞',
  761. 'sunflower': '🌻',
  762. 'sunglasses': '😎',
  763. 'sunny': '☀️',
  764. 'sunrise': '🌅',
  765. 'sunrise_over_mountains': '🌄',
  766. 'surfer': '🏄',
  767. 'sushi': '🍣',
  768. 'suspension_railway': '🚟',
  769. 'sweat': '😓',
  770. 'sweat_drops': '💦',
  771. 'sweat_smile': '😅',
  772. 'sweet_potato': '🍠',
  773. 'swimmer': '🏊',
  774. 'symbols': '🔣',
  775. 'syringe': '💉',
  776. 'tada': '🎉',
  777. 'tanabata_tree': '🎋',
  778. 'tangerine': '🍊',
  779. 'taurus': '♉️',
  780. 'taxi': '🚕',
  781. 'tea': '🍵',
  782. 'telephone': '☎️',
  783. 'telephone_receiver': '📞',
  784. 'telescope': '🔭',
  785. 'tennis': '🎾',
  786. 'tent': '⛺️',
  787. 'thought_balloon': '💭',
  788. 'three': '3️⃣',
  789. 'thumbsdown': '👎',
  790. 'thumbsup': '👍',
  791. 'ticket': '🎫',
  792. 'tiger': '🐯',
  793. 'tiger2': '🐅',
  794. 'tired_face': '😫',
  795. 'tm': '™️',
  796. 'toilet': '🚽',
  797. 'tokyo_tower': '🗼',
  798. 'tomato': '🍅',
  799. 'tongue': '👅',
  800. 'top': '🔝',
  801. 'tophat': '🎩',
  802. 'tractor': '🚜',
  803. 'traffic_light': '🚥',
  804. 'train': '🚋',
  805. 'train2': '🚆',
  806. 'tram': '🚊',
  807. 'triangular_flag_on_post': '🚩',
  808. 'triangular_ruler': '📐',
  809. 'trident': '🔱',
  810. 'triumph': '😤',
  811. 'trolleybus': '🚎',
  812. 'trophy': '🏆',
  813. 'tropical_drink': '🍹',
  814. 'tropical_fish': '🐠',
  815. 'truck': '🚚',
  816. 'trumpet': '🎺',
  817. 'tshirt': '👕',
  818. 'tulip': '🌷',
  819. 'turtle': '🐢',
  820. 'tv': '📺',
  821. 'twisted_rightwards_arrows': '🔀',
  822. 'two': '2️⃣',
  823. 'two_hearts': '💕',
  824. 'two_men_holding_hands': '👬',
  825. 'two_women_holding_hands': '👭',
  826. 'u5272': '🈹',
  827. 'u5408': '🈴',
  828. 'u55b6': '🈺',
  829. 'u6307': '🈯',
  830. 'u6708': '🈷',
  831. 'u6709': '🈶',
  832. 'u6e80': '🈵',
  833. 'u7121': '🈚',
  834. 'u7533': '🈸',
  835. 'u7981': '🈲',
  836. 'u7a7a': '🈳',
  837. 'uk': '🇬🇧',
  838. 'umbrella': '☔️',
  839. 'unamused': '😒',
  840. 'underage': '🔞',
  841. 'unlock': '🔓',
  842. 'up': '🆙',
  843. 'us': '🇺🇸',
  844. 'v': '✌️',
  845. 'vertical_traffic_light': '🚦',
  846. 'vhs': '📼',
  847. 'vibration_mode': '📳',
  848. 'video_camera': '📹',
  849. 'video_game': '🎮',
  850. 'violin': '🎻',
  851. 'virgo': '♍️',
  852. 'volcano': '🌋',
  853. 'vs': '🆚',
  854. 'walking': '🚶',
  855. 'waning_crescent_moon': '🌘',
  856. 'waning_gibbous_moon': '🌖',
  857. 'warning': '⚠️',
  858. 'watch': '⌚️',
  859. 'water_buffalo': '🐃',
  860. 'watermelon': '🍉',
  861. 'wave': '👋',
  862. 'wavy_dash': '〰️',
  863. 'waxing_crescent_moon': '🌒',
  864. 'waxing_gibbous_moon': '🌔',
  865. 'wc': '🚾',
  866. 'weary': '😩',
  867. 'wedding': '💒',
  868. 'whale': '🐳',
  869. 'whale2': '🐋',
  870. 'wheelchair': '♿️',
  871. 'white_check_mark': '✅',
  872. 'white_circle': '⚪️',
  873. 'white_flower': '💮',
  874. 'white_large_square': '⬜️',
  875. 'white_medium_small_square': '◽️',
  876. 'white_medium_square': '◻️',
  877. 'white_small_square': '▫️',
  878. 'white_square_button': '🔳',
  879. 'wind_chime': '🎐',
  880. 'wine_glass': '🍷',
  881. 'wink': '😉',
  882. 'wolf': '🐺',
  883. 'woman': '👩',
  884. 'womans_clothes': '👚',
  885. 'womans_hat': '👒',
  886. 'womens': '🚺',
  887. 'worried': '😟',
  888. 'wrench': '🔧',
  889. 'x': '❌',
  890. 'yellow_heart': '💛',
  891. 'yen': '💴',
  892. 'yum': '😋',
  893. 'zap': '⚡️',
  894. 'zero': '0️⃣',
  895. 'zzz': '💤',
  896. }
  897. def _replace_emoji(line):
  898. for shortcode, characters in _emoji_replacement_mapping.items():
  899. line = line.replace(':{}:'.format(shortcode), characters)
  900. return line
  901. def _unreplace_emoji(line):
  902. # replace sequences before single characters
  903. for shortcode, character in sorted(
  904. _emoji_replacement_mapping.items(),
  905. key=lambda t: len(t[1]),
  906. reverse=True
  907. ):
  908. line = line.replace(character, ':{}:'.format(shortcode))
  909. return line
  910. def do_the_thing(func):
  911. conn = op.get_bind()
  912. for table_name, column_name in (('posts', 'content'),
  913. ('messages', 'message')):
  914. table = sa.Table(
  915. table_name,
  916. sa.MetaData(),
  917. sa.Column('id', sa.Integer, primary_key=True),
  918. sa.Column(column_name, sa.String)
  919. )
  920. for row in conn.execute(table.select()):
  921. content = getattr(row, column_name)
  922. new_content = func(content)
  923. if not new_content == content:
  924. conn.execute(
  925. table.update().where(
  926. table.c.id == row.id
  927. ).values(**{column_name: new_content})
  928. )
  929. def upgrade():
  930. do_the_thing(_replace_emoji)
  931. def downgrade():
  932. do_the_thing(_unreplace_emoji)