201802282131_232e68a03aa2_change_emoji_shortcodes_to_characters.py 24 KB

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