CourseChatUtils.php 195 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803
  1. <?php
  2. /* For licensing terms, see /license.txt */
  3. use Michelf\MarkdownExtra;
  4. use Doctrine\Common\Collections\Criteria;
  5. /**
  6. * Class CourseChat
  7. * Manage the chat for a course
  8. */
  9. class CourseChatUtils
  10. {
  11. private $groupId;
  12. private $courseId;
  13. private $sessionId;
  14. private $userId;
  15. /**
  16. * CourseChat constructor.
  17. * @param int $courseId
  18. * @param int $userId
  19. * @param int $sessionId
  20. * @param int $groupId
  21. */
  22. public function __construct($courseId, $userId, $sessionId = 0, $groupId = 0)
  23. {
  24. $this->courseId = (int) $courseId;
  25. $this->userId = (int) $userId;
  26. $this->sessionId = (int) $sessionId;
  27. $this->groupId = (int) $groupId;
  28. }
  29. /**
  30. * Get the users subscriptions (SessionRelCourseRelUser array or CourseRelUser array) for chat
  31. * @return \Doctrine\Common\Collections\ArrayCollection
  32. * @throws \Doctrine\ORM\ORMException
  33. * @throws \Doctrine\ORM\OptimisticLockException
  34. * @throws \Doctrine\ORM\TransactionRequiredException
  35. */
  36. private function getUsersSubscriptions()
  37. {
  38. $em = Database::getManager();
  39. $course = $em->find('ChamiloCoreBundle:Course', $this->courseId);
  40. if ($this->sessionId) {
  41. $criteria = Criteria::create()->where(Criteria::expr()->eq('course', $course));
  42. return $em
  43. ->find('ChamiloCoreBundle:Session', $this->sessionId)
  44. ->getUserCourseSubscriptions()
  45. ->matching($criteria);
  46. }
  47. return $em
  48. ->find('ChamiloCoreBundle:Course', $course)
  49. ->getUsers();
  50. }
  51. /**
  52. * Prepare a message. Clean and insert emojis
  53. * @param string $message The message to prepare
  54. * @return string
  55. */
  56. public static function prepareMessage($message)
  57. {
  58. if (empty($message)) {
  59. return '';
  60. }
  61. Emojione\Emojione::$imagePathPNG = api_get_path(WEB_LIBRARY_PATH) . 'javascript/emojione/png/';
  62. Emojione\Emojione::$ascii = true;
  63. $message = trim($message);
  64. $message = nl2br($message);
  65. // Security XSS
  66. $message = Security::remove_XSS($message);
  67. //search urls
  68. $message = preg_replace(
  69. '@((https?://)?([-\w]+\.[-\w\.]+)+\w(:\d+)?(/([-\w/_\.]*(\?\S+)?)?)*)@',
  70. '<a href="$1" target="_blank">$1</a>',
  71. $message
  72. );
  73. // add "http://" if not set
  74. $message = preg_replace(
  75. '/<a\s[^>]*href\s*=\s*"((?!https?:\/\/)[^"]*)"[^>]*>/i',
  76. '<a href="http://$1" target="_blank">',
  77. $message
  78. );
  79. // Parsing emojis
  80. $message = Emojione\Emojione::toImage($message);
  81. // Parsing text to understand markdown (code highlight)
  82. $message = MarkdownExtra::defaultTransform($message);
  83. return $message;
  84. }
  85. /**
  86. * Save a chat message in a HTML file
  87. * @param string$message
  88. * @param int $friendId
  89. * @return bool
  90. * @throws \Doctrine\ORM\ORMException
  91. * @throws \Doctrine\ORM\OptimisticLockException
  92. * @throws \Doctrine\ORM\TransactionRequiredException
  93. */
  94. public function saveMessage($message, $friendId = 0)
  95. {
  96. if (empty($message)) {
  97. return false;
  98. }
  99. $em = Database::getManager();
  100. $user = $em->find('ChamiloUserBundle:User', $this->userId);
  101. $courseInfo = api_get_course_info_by_id($this->courseId);
  102. $isMaster = (bool) api_is_course_admin();
  103. $document_path = api_get_path(SYS_COURSE_PATH) . $courseInfo['path'] . '/document';
  104. $basepath_chat = '/chat_files';
  105. if (!$this->groupId) {
  106. $group_info = GroupManager::get_group_properties($this->groupId);
  107. $basepath_chat = $group_info['directory'] . '/chat_files';
  108. }
  109. $chat_path = $document_path . $basepath_chat . '/';
  110. if (!is_dir($chat_path)) {
  111. if (is_file($chat_path)) {
  112. @unlink($chat_path);
  113. }
  114. }
  115. $date_now = date('Y-m-d');
  116. $timeNow = date('d/m/y H:i:s');
  117. $basename_chat = 'messages-' . $date_now;
  118. if ($this->groupId && !$friendId) {
  119. $basename_chat = 'messages-' . $date_now . '_gid-' . $this->groupId;
  120. } elseif ($this->sessionId && !$friendId) {
  121. $basename_chat = 'messages-' . $date_now . '_sid-' . $this->sessionId;
  122. } elseif ($friendId) {
  123. if ($this->userId < $friendId) {
  124. $basename_chat = 'messages-' . $date_now . '_uid-' . $this->userId . '-' . $friendId;
  125. } else {
  126. $basename_chat = 'messages-' . $date_now . '_uid-' . $friendId . '-' . $this->userId;
  127. }
  128. }
  129. $message = self::prepareMessage($message);
  130. $fileTitle = $basename_chat . '.log.html';
  131. $filePath = $basepath_chat . '/' . $fileTitle;
  132. $absoluteFilePath = $chat_path . $fileTitle;
  133. if (!file_exists($absoluteFilePath)) {
  134. $doc_id = add_document($courseInfo, $filePath, 'file', 0, $fileTitle);
  135. $documentLogTypes = ['DocumentAdded', 'invisible'];
  136. foreach ($documentLogTypes as $logType) {
  137. api_item_property_update(
  138. $courseInfo,
  139. TOOL_DOCUMENT,
  140. $doc_id,
  141. $logType,
  142. $this->userId,
  143. $this->groupId,
  144. null,
  145. null,
  146. null,
  147. $this->sessionId
  148. );
  149. }
  150. item_property_update_on_folder($courseInfo, $basepath_chat, $this->userId);
  151. } else {
  152. $doc_id = DocumentManager::get_document_id($courseInfo, $filePath);
  153. }
  154. $fp = fopen($absoluteFilePath, 'a');
  155. $userPhoto = UserManager::getUserPicture($this->userId, USER_IMAGE_SIZE_MEDIUM);
  156. if ($isMaster) {
  157. $fileContent = '
  158. <div class="message-teacher">
  159. <div class="content-message">
  160. <div class="chat-message-block-name">' . $user->getCompleteName() . '</div>
  161. <div class="chat-message-block-content">' . $message . '</div>
  162. <div class="message-date">' . $timeNow . '</div>
  163. </div>
  164. <div class="icon-message"></div>
  165. <img class="chat-image" src="' . $userPhoto . '">
  166. </div>
  167. ';
  168. } else {
  169. $fileContent = '
  170. <div class="message-student">
  171. <img class="chat-image" src="' . $userPhoto . '">
  172. <div class="icon-message"></div>
  173. <div class="content-message">
  174. <div class="chat-message-block-name">' . $user->getCompleteName() . '</div>
  175. <div class="chat-message-block-content">' . $message . '</div>
  176. <div class="message-date">' . $timeNow . '</div>
  177. </div>
  178. </div>
  179. ';
  180. }
  181. fputs($fp, $fileContent);
  182. fclose($fp);
  183. $chat_size = filesize($absoluteFilePath);
  184. update_existing_document($courseInfo, $doc_id, $chat_size);
  185. item_property_update_on_folder($courseInfo, $basepath_chat, $this->userId);
  186. return true;
  187. }
  188. /**
  189. * Disconnect a user from course chats
  190. * @param $userId
  191. */
  192. public static function exitChat($userId)
  193. {
  194. $listCourse = CourseManager::get_courses_list_by_user_id($userId);
  195. foreach ($listCourse as $course) {
  196. Database::getManager()
  197. ->createQuery('
  198. DELETE FROM ChamiloCourseBundle:CChatConnected ccc
  199. WHERE ccc.cId = :course AND ccc.userId = :user
  200. ')
  201. ->execute([
  202. 'course' => intval($course['real_id']),
  203. 'user' => intval($userId)
  204. ]);
  205. }
  206. }
  207. /**
  208. * Disconnect users who are more than 5 seconds inactive
  209. */
  210. public function disconnectInactiveUsers()
  211. {
  212. $em = Database::getManager();
  213. $extraCondition = "AND ccc.toGroupId = {$this->groupId}";
  214. if (empty($this->groupId)) {
  215. $extraCondition = "AND ccc.sessionId = {$this->sessionId}";
  216. }
  217. $connectedUsers = $em
  218. ->createQuery("
  219. SELECT ccc FROM ChamiloCourseBundle:CChatConnected ccc
  220. WHERE ccc.cId = :course $extraCondition
  221. ")
  222. ->setParameter('course', $this->courseId)
  223. ->getResult();
  224. $now = new DateTime(api_get_utc_datetime(), new DateTimeZone('UTC'));
  225. $cd_count_time_seconds = $now->getTimestamp();
  226. foreach ($connectedUsers as $connection) {
  227. $date_count_time_seconds = $connection->getLastConnection()->getTimestamp();
  228. if (strcmp($now->format('Y-m-d'), $connection->getLastConnection()->format('Y-m-d')) !== 0) {
  229. continue;
  230. }
  231. if (($cd_count_time_seconds - $date_count_time_seconds) <= 5) {
  232. continue;
  233. }
  234. $em
  235. ->createQuery('
  236. DELETE FROM ChamiloCourseBundle:CChatConnected ccc
  237. WHERE ccc.cId = :course AND ccc.userId = :user AND ccc.toGroupId = :group
  238. ')
  239. ->execute([
  240. 'course' => $this->courseId,
  241. 'user' => $connection->getUserId(),
  242. 'group' => $this->groupId
  243. ]);
  244. }
  245. }
  246. /**
  247. * Keep registered to a user as connected
  248. * @throws \Doctrine\ORM\NonUniqueResultException
  249. */
  250. public function keepUserAsConnected()
  251. {
  252. $em = Database::getManager();
  253. $extraCondition = null;
  254. if ($this->groupId) {
  255. $extraCondition = 'AND ccc.toGroupId = ' . intval($this->groupId);
  256. } else {
  257. $extraCondition = 'AND ccc.sessionId = ' . intval($this->sessionId);
  258. }
  259. $currentTime = new DateTime(api_get_utc_datetime(), new DateTimeZone('UTC'));
  260. $connection = $em
  261. ->createQuery("
  262. SELECT ccc FROM ChamiloCourseBundle:CChatConnected ccc
  263. WHERE ccc.userId = :user AND ccc.cId = :course $extraCondition
  264. ")
  265. ->setParameters([
  266. 'user' => $this->userId,
  267. 'course' => $this->courseId
  268. ])
  269. ->getOneOrNullResult();
  270. if ($connection) {
  271. $connection->setLastConnection($currentTime);
  272. $em->merge($connection);
  273. $em->flush();
  274. return;
  275. }
  276. $connection = new \Chamilo\CourseBundle\Entity\CChatConnected();
  277. $connection
  278. ->setCId($this->courseId)
  279. ->setUserId($this->userId)
  280. ->setLastConnection($currentTime)
  281. ->setSessionId($this->sessionId)
  282. ->setToGroupId($this->groupId);
  283. $em->persist($connection);
  284. $em->flush();
  285. }
  286. /**
  287. * Get the emoji allowed on course chat
  288. * @return array
  289. */
  290. public static function getEmojiStrategry()
  291. {
  292. return [
  293. 'hearts' => ['unicode' => '2665', 'shortname' => ':hearts:', 'aliases' => '', 'keywords' => 'black heart suit cards poker'],
  294. 'joy' => ['unicode' => '1F602', 'shortname' => ':joy:', 'aliases' => '', 'keywords' => 'face with tears of joy cry face haha happy tears tears cry joy happy weep'],
  295. 'unamused' => ['unicode' => '1F612', 'shortname' => ':unamused:', 'aliases' => '', 'keywords' => 'unamused face bored face indifference serious straight face unamused not amused depressed unhappy disapprove lame'],
  296. 'heart_eyes' => ['unicode' => '1F60D', 'shortname' => ':heart_eyes:', 'aliases' => '', 'keywords' => 'smiling face with heart-shaped eyes affection crush face infatuation like love valentines smiling heart lovestruck love flirt smile heart-shaped'],
  297. 'heart' => ['unicode' => '2764', 'shortname' => ':heart:', 'aliases' => '', 'keywords' => 'heavy black heart like love red pink black heart love passion romance intense desire death evil cold valentines'],
  298. 'relaxed' => ['unicode' => '263A', 'shortname' => ':relaxed:', 'aliases' => '', 'keywords' => 'white smiling face blush face happiness massage smile'],
  299. 'ok_hand' => ['unicode' => '1F44C', 'shortname' => ':ok_hand:', 'aliases' => '', 'keywords' => 'ok hand sign fingers limbs perfect okay ok smoke smoking marijuana joint pot 420'],
  300. 'kissing_heart' => ['unicode' => '1F618', 'shortname' => ':kissing_heart:', 'aliases' => '', 'keywords' => 'face throwing a kiss affection face infatuation kiss blowing kiss heart love lips like love valentines'],
  301. 'blush' => ['unicode' => '1F60A', 'shortname' => ':blush:', 'aliases' => '', 'keywords' => 'smiling face with smiling eyes crush embarrassed face flushed happy shy smile smiling smile smiley'],
  302. 'weary' => ['unicode' => '1F629', 'shortname' => ':weary:', 'aliases' => '', 'keywords' => 'weary face face frustrated sad sleepy tired weary sleepy tired tiredness study finals school exhausted'],
  303. 'pensive' => ['unicode' => '1F614', 'shortname' => ':pensive:', 'aliases' => '', 'keywords' => 'pensive face face okay sad pensive thoughtful think reflective wistful meditate serious'],
  304. 'sob' => ['unicode' => '1F62D', 'shortname' => ':sob:', 'aliases' => '', 'keywords' => 'loudly crying face cry face sad tears upset cry sob tears sad melancholy morn somber hurt'],
  305. 'smirk' => ['unicode' => '1F60F', 'shortname' => ':smirk:', 'aliases' => '', 'keywords' => 'smirking face mean prank smile smug smirking smirk smug smile half-smile conceited'],
  306. 'two_hearts' => ['unicode' => '1F495', 'shortname' => ':two_hearts:', 'aliases' => '', 'keywords' => 'two hearts affection like love valentines heart hearts two love emotion'],
  307. 'grin' => ['unicode' => '1F601', 'shortname' => ':grin:', 'aliases' => '', 'keywords' => 'grinning face with smiling eyes face happy joy smile grin grinning smiling smile smiley'],
  308. 'flushed' => ['unicode' => '1F633', 'shortname' => ':flushed:', 'aliases' => '', 'keywords' => 'flushed face blush face flattered flush blush red pink cheeks shy'],
  309. 'thumbsup' => ['unicode' => '1F44D', 'shortname' => ':thumbsup:', 'aliases' => ':+1:', 'keywords' => 'thumbs up sign cool hand like yes'],
  310. 'raised_hands' => ['unicode' => '1F64C', 'shortname' => ':raised_hands:', 'aliases' => '', 'keywords' => 'person raising both hands in celebration gesture hooray winning woot yay banzai'],
  311. 'wink' => ['unicode' => '1F609', 'shortname' => ':wink:', 'aliases' => '', 'keywords' => 'winking face face happy mischievous secret wink winking friendly joke'],
  312. 'information_desk_person' => ['unicode' => '1F481', 'shortname' => ':information_desk_person:', 'aliases' => '', 'keywords' => 'information desk person female girl human woman information help question answer sassy unimpressed attitude snarky'],
  313. 'relieved' => ['unicode' => '1F60C', 'shortname' => ':relieved:', 'aliases' => '', 'keywords' => 'relieved face face happiness massage phew relaxed relieved satisfied phew relief'],
  314. 'see_no_evil' => ['unicode' => '1F648', 'shortname' => ':see_no_evil:', 'aliases' => '', 'keywords' => 'see-no-evil monkey animal monkey nature monkey see eyes vision sight mizaru'],
  315. 'v' => ['unicode' => '270C', 'shortname' => ':v:', 'aliases' => '', 'keywords' => 'victory hand fingers hand ohyeah peace two victory'],
  316. 'pray' => ['unicode' => '1F64F', 'shortname' => ':pray:', 'aliases' => '', 'keywords' => 'person with folded hands highfive hope namaste please wish pray high five hands sorrow regret sorry'],
  317. 'yum' => ['unicode' => '1F60B', 'shortname' => ':yum:', 'aliases' => '', 'keywords' => 'face savouring delicious food face happy joy smile tongue delicious savoring food eat yummy yum tasty savory'],
  318. 'stuck_out_tongue_winking_eye' => ['unicode' => '1F61C', 'shortname' => ':stuck_out_tongue_winking_eye:', 'aliases' => '', 'keywords' => 'face with stuck-out tongue and winking eye childish face mischievous playful prank tongue wink winking kidding silly playful crazy'],
  319. 'notes' => ['unicode' => '1F3B6', 'shortname' => ':notes:', 'aliases' => '', 'keywords' => 'multiple musical notes music score musical music notes music sound melody'],
  320. 'eyes' => ['unicode' => '1F440', 'shortname' => ':eyes:', 'aliases' => '', 'keywords' => 'eyes look peek stalk watch'],
  321. 'smile' => ['unicode' => '1F604', 'shortname' => ':smile:', 'aliases' => '', 'keywords' => 'smiling face with open mouth and smiling eyes face funny haha happy joy laugh smile smiley smiling'],
  322. 'disappointed' => ['unicode' => '1F61E', 'shortname' => ':disappointed:', 'aliases' => '', 'keywords' => 'disappointed face disappointed disappoint frown depressed discouraged face sad upset'],
  323. 'raised_hand' => ['unicode' => '270B', 'shortname' => ':raised_hand:', 'aliases' => '', 'keywords' => 'raised hand female girl woman'],
  324. 'clap' => ['unicode' => '1F44F', 'shortname' => ':clap:', 'aliases' => '', 'keywords' => 'clapping hands sign applause congrats hands praise clapping appreciation approval sound encouragement enthusiasm'],
  325. 'speak_no_evil' => ['unicode' => '1F64A', 'shortname' => ':speak_no_evil:', 'aliases' => '', 'keywords' => 'speak-no-evil monkey animal monkey monkey mouth talk say words verbal verbalize oral iwazaru'],
  326. 100 => ['unicode' => '1F4AF', 'shortname' => ':100:', 'aliases' => '', 'keywords' => 'hundred points symbol numbers perfect score 100 percent a plus perfect school quiz score test exam'],
  327. 'cry' => ['unicode' => '1F622', 'shortname' => ':cry:', 'aliases' => '', 'keywords' => 'crying face face sad sad cry tear weep tears'],
  328. 'rage' => ['unicode' => '1F621', 'shortname' => ':rage:', 'aliases' => '', 'keywords' => 'pouting face angry despise hate mad pout anger rage irate'],
  329. 'tired_face' => ['unicode' => '1F62B', 'shortname' => ':tired_face:', 'aliases' => '', 'keywords' => 'tired face face frustrated sick upset whine exhausted sleepy tired'],
  330. 'scream' => ['unicode' => '1F631', 'shortname' => ':scream:', 'aliases' => '', 'keywords' => 'face screaming in fear face munch scream painting artist alien'],
  331. 'purple_heart' => ['unicode' => '1F49C', 'shortname' => ':purple_heart:', 'aliases' => '', 'keywords' => 'purple heart affection like love valentines purple violet heart love sensitive understanding compassionate compassion duty honor royalty veteran sacrifice'],
  332. 'broken_heart' => ['unicode' => '1F494', 'shortname' => ':broken_heart:', 'aliases' => '', 'keywords' => 'broken heart sad sorry'],
  333. 'kiss' => ['unicode' => '1F48B', 'shortname' => ':kiss:', 'aliases' => '', 'keywords' => 'kiss mark affection face like lips love valentines'],
  334. 'blue_heart' => ['unicode' => '1F499', 'shortname' => ':blue_heart:', 'aliases' => '', 'keywords' => 'blue heart affection like love valentines blue heart love stability truth loyalty trust'],
  335. 'sleepy' => ['unicode' => '1F62A', 'shortname' => ':sleepy:', 'aliases' => '', 'keywords' => 'sleepy face face rest tired sleepy tired exhausted'],
  336. 'sweat_smile' => ['unicode' => '1F605', 'shortname' => ':sweat_smile:', 'aliases' => '', 'keywords' => 'smiling face with open mouth and cold sweat face happy hot smiling cold sweat perspiration'],
  337. 'stuck_out_tongue_closed_eyes' => ['unicode' => '1F61D', 'shortname' => ':stuck_out_tongue_closed_eyes:', 'aliases' => '', 'keywords' => 'face with stuck-out tongue and tightly-closed eyes face mischievous playful prank tongue kidding silly playful ecstatic'],
  338. 'punch' => ['unicode' => '1F44A', 'shortname' => ':punch:', 'aliases' => '', 'keywords' => 'fisted hand sign fist hand'],
  339. 'triumph' => ['unicode' => '1F624', 'shortname' => ':triumph:', 'aliases' => '', 'keywords' => 'face with look of triumph face gas phew triumph steam breath'],
  340. 'sparkling_heart' => ['unicode' => '1F496', 'shortname' => ':sparkling_heart:', 'aliases' => '', 'keywords' => 'sparkling heart affection like love valentines'],
  341. 'smiley' => ['unicode' => '1F603', 'shortname' => ':smiley:', 'aliases' => '', 'keywords' => 'smiling face with open mouth face haha happy joy smiling smile smiley'],
  342. 'sunny' => ['unicode' => '2600', 'shortname' => ':sunny:', 'aliases' => '', 'keywords' => 'black sun with rays brightness weather'],
  343. 'heartpulse' => ['unicode' => '1F497', 'shortname' => ':heartpulse:', 'aliases' => '', 'keywords' => 'growing heart affection like love valentines'],
  344. 'wave' => ['unicode' => '1F44B', 'shortname' => ':wave:', 'aliases' => '', 'keywords' => 'waving hand sign farewell gesture goodbye hands solong'],
  345. 'mask' => ['unicode' => '1F637', 'shortname' => ':mask:', 'aliases' => '', 'keywords' => 'face with medical mask face ill sick sick virus flu medical mask'],
  346. 'heavy_check_mark' => ['unicode' => '2714', 'shortname' => ':heavy_check_mark:', 'aliases' => '', 'keywords' => 'heavy check mark nike ok'],
  347. 'cherry_blossom' => ['unicode' => '1F338', 'shortname' => ':cherry_blossom:', 'aliases' => '', 'keywords' => 'cherry blossom flower nature plant cherry blossom tree flower'],
  348. 'rose' => ['unicode' => '1F339', 'shortname' => ':rose:', 'aliases' => '', 'keywords' => 'rose flowers love valentines rose fragrant flower thorns love petals romance'],
  349. 'persevere' => ['unicode' => '1F623', 'shortname' => ':persevere:', 'aliases' => '', 'keywords' => 'persevering face endure persevere face no sick upset'],
  350. 'revolving_hearts' => ['unicode' => '1F49E', 'shortname' => ':revolving_hearts:', 'aliases' => '', 'keywords' => 'revolving hearts affection like love valentines heart hearts revolving moving circle multiple lovers'],
  351. 'sparkles' => ['unicode' => '2728', 'shortname' => ':sparkles:', 'aliases' => '', 'keywords' => 'sparkles cool shine shiny stars'],
  352. 'confounded' => ['unicode' => '1F616', 'shortname' => ':confounded:', 'aliases' => '', 'keywords' => 'confounded face confused face sick unwell confound amaze perplex puzzle mystify'],
  353. 'tada' => ['unicode' => '1F389', 'shortname' => ':tada:', 'aliases' => '', 'keywords' => 'party popper contulations party party popper tada celebration victory announcement climax congratulations'],
  354. 'no_good' => ['unicode' => '1F645', 'shortname' => ':no_good:', 'aliases' => '', 'keywords' => 'face with no good gesture female girl woman no stop nope don\'t not'],
  355. 'muscle' => ['unicode' => '1F4AA', 'shortname' => ':muscle:', 'aliases' => '', 'keywords' => 'flexed biceps arm flex hand strong muscle bicep'],
  356. 'angry' => ['unicode' => '1F620', 'shortname' => ':angry:', 'aliases' => '', 'keywords' => 'angry face angry livid mad vexed irritated annoyed face frustrated mad'],
  357. 'gun' => ['unicode' => '1F52B', 'shortname' => ':gun:', 'aliases' => '', 'keywords' => 'pistol violence weapon'],
  358. 'cupid' => ['unicode' => '1F498', 'shortname' => ':cupid:', 'aliases' => '', 'keywords' => 'heart with arrow affection heart like love valentines'],
  359. 'sweat' => ['unicode' => '1F613', 'shortname' => ':sweat:', 'aliases' => '', 'keywords' => 'face with cold sweat cold sweat sick anxious worried clammy diaphoresis face hot'],
  360. 'laughing' => ['unicode' => '1F606', 'shortname' => ':laughing:', 'aliases' => ':satisfied:', 'keywords' => 'smiling face with open mouth and tightly-closed ey happy joy lol smiling laughing laugh'],
  361. 'yellow_heart' => ['unicode' => '1F49B', 'shortname' => ':yellow_heart:', 'aliases' => '', 'keywords' => 'yellow heart affection like love valentines yellow gold heart love friendship happy happiness trust compassionate respectful honest caring selfless'],
  362. 'kissing_closed_eyes' => ['unicode' => '1F61A', 'shortname' => ':kissing_closed_eyes:', 'aliases' => '', 'keywords' => 'kissing face with closed eyes affection face infatuation like love valentines kissing kiss passion puckered heart love smooch'],
  363. 'disappointed_relieved' => ['unicode' => '1F625', 'shortname' => ':disappointed_relieved:', 'aliases' => '', 'keywords' => 'disappointed but relieved face face nervous phew sweat disappoint relief'],
  364. 'raising_hand' => ['unicode' => '1F64B', 'shortname' => ':raising_hand:', 'aliases' => '', 'keywords' => 'happy person raising one hand female girl woman hand raise notice attention answer'],
  365. 'fist' => ['unicode' => '270A', 'shortname' => ':fist:', 'aliases' => '', 'keywords' => 'raised fist fingers grasp hand'],
  366. 'green_heart' => ['unicode' => '1F49A', 'shortname' => ':green_heart:', 'aliases' => '', 'keywords' => 'green heart affection like love valentines green heart love nature rebirth reborn jealous clingy envious possessive'],
  367. 'headphones' => ['unicode' => '1F3A7', 'shortname' => ':headphones:', 'aliases' => '', 'keywords' => 'headphone gadgets music score headphone sound music ears beats buds audio listen'],
  368. 'thumbsdown' => ['unicode' => '1F44E', 'shortname' => ':thumbsdown:', 'aliases' => ':-1:', 'keywords' => 'thumbs down sign hand no'],
  369. 'heart_eyes_cat' => ['unicode' => '1F63B', 'shortname' => ':heart_eyes_cat:', 'aliases' => '', 'keywords' => 'smiling cat face with heart-shaped eyes affection animal cats like love valentines lovestruck love heart'],
  370. 'dancer' => ['unicode' => '1F483', 'shortname' => ':dancer:', 'aliases' => '', 'keywords' => 'dancer female fun girl woman dance dancer dress fancy boogy party celebrate ballet tango cha cha music'],
  371. 'skull' => ['unicode' => '1F480', 'shortname' => ':skull:', 'aliases' => ':skeleton:', 'keywords' => 'skull dead skeleton dying'],
  372. 'poop' => ['unicode' => '1F4A9', 'shortname' => ':poop:', 'aliases' => ':shit: :hankey: :poo:', 'keywords' => 'pile of poo poop shit shitface turd poo'],
  373. 'fire' => ['unicode' => '1F525', 'shortname' => ':fire:', 'aliases' => ':flame:', 'keywords' => 'fire cook hot flame'],
  374. 'walking' => ['unicode' => '1F6B6', 'shortname' => ':walking:', 'aliases' => '', 'keywords' => 'pedestrian human man walk pedestrian stroll stride foot feet'],
  375. 'cold_sweat' => ['unicode' => '1F630', 'shortname' => ':cold_sweat:', 'aliases' => '', 'keywords' => 'face with open mouth and cold sweat face nervous sweat exasperated frustrated'],
  376. 'copyright' => ['unicode' => '00A9', 'shortname' => ':copyright:', 'aliases' => '', 'keywords' => 'copyright sign ip license'],
  377. 'penguin' => ['unicode' => '1F427', 'shortname' => ':penguin:', 'aliases' => '', 'keywords' => 'penguin animal nature'],
  378. 'crown' => ['unicode' => '1F451', 'shortname' => ':crown:', 'aliases' => '', 'keywords' => 'crown king kod leader royalty'],
  379. 'open_hands' => ['unicode' => '1F450', 'shortname' => ':open_hands:', 'aliases' => '', 'keywords' => 'open hands sign butterfly fingers'],
  380. 'point_right' => ['unicode' => '1F449', 'shortname' => ':point_right:', 'aliases' => '', 'keywords' => 'white right pointing backhand index direction fingers hand'],
  381. 'heartbeat' => ['unicode' => '1F493', 'shortname' => ':heartbeat:', 'aliases' => '', 'keywords' => 'beating heart affection like love valentines'],
  382. 'dancers' => ['unicode' => '1F46F', 'shortname' => ':dancers:', 'aliases' => '', 'keywords' => 'woman with bunny ears bunny female girls women dancing dancers showgirl playboy costume bunny cancan'],
  383. 'ok_woman' => ['unicode' => '1F646', 'shortname' => ':ok_woman:', 'aliases' => '', 'keywords' => 'face with ok gesture female girl human pink women yes ok okay accept'],
  384. 'pizza' => ['unicode' => '1F355', 'shortname' => ':pizza:', 'aliases' => '', 'keywords' => 'slice of pizza food party pizza pie new york italian italy slice peperoni'],
  385. 'ballot_box_with_check' => ['unicode' => '2611', 'shortname' => ':ballot_box_with_check:', 'aliases' => '', 'keywords' => 'ballot box with check agree ok'],
  386. 'zzz' => ['unicode' => '1F4A4', 'shortname' => ':zzz:', 'aliases' => '', 'keywords' => 'sleeping symbol sleepy tired'],
  387. 'point_left' => ['unicode' => '1F448', 'shortname' => ':point_left:', 'aliases' => '', 'keywords' => 'white left pointing backhand index direction fingers hand'],
  388. 'musical_note' => ['unicode' => '1F3B5', 'shortname' => ':musical_note:', 'aliases' => '', 'keywords' => 'musical note score musical music note music sound'],
  389. 'bow' => ['unicode' => '1F647', 'shortname' => ':bow:', 'aliases' => '', 'keywords' => 'person bowing deeply boy male man sorry bow respect curtsy bend'],
  390. 'fearful' => ['unicode' => '1F628', 'shortname' => ':fearful:', 'aliases' => '', 'keywords' => 'fearful face face nervous oops scared terrified fear fearful scared frightened'],
  391. 'ribbon' => ['unicode' => '1F380', 'shortname' => ':ribbon:', 'aliases' => '', 'keywords' => 'ribbon bowtie decoration girl pink ribbon lace wrap decorate'],
  392. 'joy_cat' => ['unicode' => '1F639', 'shortname' => ':joy_cat:', 'aliases' => '', 'keywords' => 'cat face with tears of joy animal cats haha happy tears happy tears cry joy'],
  393. 'arrow_forward' => ['unicode' => '25B6', 'shortname' => ':arrow_forward:', 'aliases' => '', 'keywords' => 'black right-pointing triangle arrow blue-square'],
  394. 'tongue' => ['unicode' => '1F445', 'shortname' => ':tongue:', 'aliases' => '', 'keywords' => 'tongue mouth playful tongue mouth taste buds food silly playful tease kiss french kiss lick tasty playfulness silliness intimacy'],
  395. 'runner' => ['unicode' => '1F3C3', 'shortname' => ':runner:', 'aliases' => '', 'keywords' => 'runner exercise man walking run runner jog exercise sprint race dash'],
  396. 'point_up' => ['unicode' => '261D', 'shortname' => ':point_up:', 'aliases' => '', 'keywords' => 'white up pointing index direction fingers hand'],
  397. 'airplane' => ['unicode' => '2708', 'shortname' => ':airplane:', 'aliases' => '', 'keywords' => 'airplane flight transportation vehicle airplane plane airport travel airlines fly jet jumbo boeing airbus'],
  398. 'gem' => ['unicode' => '1F48E', 'shortname' => ':gem:', 'aliases' => '', 'keywords' => 'gem stone blue ruby'],
  399. 'person_frowning' => ['unicode' => '1F64D', 'shortname' => ':person_frowning:', 'aliases' => '', 'keywords' => 'person frowning female girl woman dejected rejected sad frown'],
  400. 'hibiscus' => ['unicode' => '1F33A', 'shortname' => ':hibiscus:', 'aliases' => '', 'keywords' => 'hibiscus flowers plant vegetable hibiscus flower warm'],
  401. 'basketball' => ['unicode' => '1F3C0', 'shortname' => ':basketball:', 'aliases' => '', 'keywords' => 'basketball and hoop NBA balls sports basketball bball dribble hoop net swish rip city'],
  402. 'boom' => ['unicode' => '1F4A5', 'shortname' => ':boom:', 'aliases' => '', 'keywords' => 'collision symbol bomb explode explosion boom bang collision fire emphasis wow bam'],
  403. 'nail_care' => ['unicode' => '1F485', 'shortname' => ':nail_care:', 'aliases' => '', 'keywords' => 'nail polish beauty manicure'],
  404. 'dizzy_face' => ['unicode' => '1F635', 'shortname' => ':dizzy_face:', 'aliases' => '', 'keywords' => 'dizzy face dizzy drunk inebriated face spent unconscious xox'],
  405. 'balloon' => ['unicode' => '1F388', 'shortname' => ':balloon:', 'aliases' => '', 'keywords' => 'balloon celebration party balloon birthday celebration helium gas children float'],
  406. 'couple' => ['unicode' => '1F46B', 'shortname' => ':couple:', 'aliases' => '', 'keywords' => 'man and woman holding hands affection date dating human like love marriage people valentines'],
  407. 'dog' => ['unicode' => '1F436', 'shortname' => ':dog:', 'aliases' => '', 'keywords' => 'dog face animal friend nature woof'],
  408. 'sweat_drops' => ['unicode' => '1F4A6', 'shortname' => ':sweat_drops:', 'aliases' => '', 'keywords' => 'splashing sweat symbol water'],
  409. 'star2' => ['unicode' => '1F31F', 'shortname' => ':star2:', 'aliases' => '', 'keywords' => 'glowing star night sparkle glow glowing star five points classic'],
  410. 'hear_no_evil' => ['unicode' => '1F649', 'shortname' => ':hear_no_evil:', 'aliases' => '', 'keywords' => 'hear-no-evil monkey animal monkey monkey ears hear sound kikazaru'],
  411. 'moneybag' => ['unicode' => '1F4B0', 'shortname' => ':moneybag:', 'aliases' => '', 'keywords' => 'money bag coins dollar payment'],
  412. 'beers' => ['unicode' => '1F37B', 'shortname' => ':beers:', 'aliases' => '', 'keywords' => 'clinking beer mugs beverage drink drunk party pub relax beer beers cheers mug toast celebrate pub bar jolly hops clink'],
  413. 'couplekiss' => ['unicode' => '1F48F', 'shortname' => ':couplekiss:', 'aliases' => '', 'keywords' => 'kiss dating like love marriage valentines'],
  414. 'point_down' => ['unicode' => '1F447', 'shortname' => ':point_down:', 'aliases' => '', 'keywords' => 'white down pointing backhand index direction fingers hand'],
  415. 'cloud' => ['unicode' => '2601', 'shortname' => ':cloud:', 'aliases' => '', 'keywords' => 'cloud sky weather'],
  416. 'alien' => ['unicode' => '1F47D', 'shortname' => ':alien:', 'aliases' => '', 'keywords' => 'extraterrestrial alien UFO paul alien ufo'],
  417. 'dizzy' => ['unicode' => '1F4AB', 'shortname' => ':dizzy:', 'aliases' => '', 'keywords' => 'dizzy symbol shoot sparkle star dizzy drunk sick intoxicated squeans starburst star'],
  418. 'heavy_multiplication_x' => ['unicode' => '2716', 'shortname' => ':heavy_multiplication_x:', 'aliases' => '', 'keywords' => 'heavy multiplication x calculation math'],
  419. 'white_check_mark' => ['unicode' => '2705', 'shortname' => ':white_check_mark:', 'aliases' => '', 'keywords' => 'white heavy check mark agree green-square ok'],
  420. 'palm_tree' => ['unicode' => '1F334', 'shortname' => ':palm_tree:', 'aliases' => '', 'keywords' => 'palm tree nature plant vegetable palm tree coconuts fronds warm tropical'],
  421. 'dash' => ['unicode' => '1F4A8', 'shortname' => ':dash:', 'aliases' => '', 'keywords' => 'dash symbol air fast shoo wind'],
  422. 'exclamation' => ['unicode' => '2757', 'shortname' => ':exclamation:', 'aliases' => '', 'keywords' => 'heavy exclamation mark symbol surprise'],
  423. 'soccer' => ['unicode' => '26BD', 'shortname' => ':soccer:', 'aliases' => '', 'keywords' => 'soccer ball balls fifa football sports european football'],
  424. 'microphone' => ['unicode' => '1F3A4', 'shortname' => ':microphone:', 'aliases' => '', 'keywords' => 'microphone PA music sound microphone mic audio sound voice karaoke'],
  425. 'angel' => ['unicode' => '1F47C', 'shortname' => ':angel:', 'aliases' => '', 'keywords' => 'baby angel baby angel halo cupid wings halo heaven wings jesus'],
  426. 'point_up_2' => ['unicode' => '1F446', 'shortname' => ':point_up_2:', 'aliases' => '', 'keywords' => 'white up pointing backhand index direction fingers hand'],
  427. 'snowflake' => ['unicode' => '2744', 'shortname' => ':snowflake:', 'aliases' => '', 'keywords' => 'snowflake christmas cold season weather winter xmas snowflake snow frozen droplet ice crystal cold chilly winter unique special below zero elsa'],
  428. 'astonished' => ['unicode' => '1F632', 'shortname' => ':astonished:', 'aliases' => '', 'keywords' => 'astonished face face xox shocked surprise astonished'],
  429. 'four_leaf_clover' => ['unicode' => '1F340', 'shortname' => ':four_leaf_clover:', 'aliases' => '', 'keywords' => 'four leaf clover lucky nature plant vegetable clover four leaf luck irish saint patrick green'],
  430. 'ghost' => ['unicode' => '1F47B', 'shortname' => ':ghost:', 'aliases' => '', 'keywords' => 'ghost halloween'],
  431. 'princess' => ['unicode' => '1F478', 'shortname' => ':princess:', 'aliases' => '', 'keywords' => 'princess blond crown female girl woman princess royal royalty king queen daughter disney high-maintenance'],
  432. 'cat' => ['unicode' => '1F431', 'shortname' => ':cat:', 'aliases' => '', 'keywords' => 'cat face animal meow'],
  433. 'ring' => ['unicode' => '1F48D', 'shortname' => ':ring:', 'aliases' => '', 'keywords' => 'ring marriage propose valentines wedding'],
  434. 'sunflower' => ['unicode' => '1F33B', 'shortname' => ':sunflower:', 'aliases' => '', 'keywords' => 'sunflower nature plant sunflower sun flower seeds yellow'],
  435. 'o' => ['unicode' => '2B55', 'shortname' => ':o:', 'aliases' => '', 'keywords' => 'heavy large circle circle round'],
  436. 'crescent_moon' => ['unicode' => '1F319', 'shortname' => ':crescent_moon:', 'aliases' => '', 'keywords' => 'crescent moon night moon crescent waxing sky night cheese phase'],
  437. 'gift' => ['unicode' => '1F381', 'shortname' => ':gift:', 'aliases' => '', 'keywords' => 'wrapped present birthday christmas present xmas gift present wrap package birthday wedding'],
  438. 'crying_cat_face' => ['unicode' => '1F63F', 'shortname' => ':crying_cat_face:', 'aliases' => '', 'keywords' => 'crying cat face animal cats sad tears weep cry cat sob tears sad melancholy morn somber hurt'],
  439. 'bouquet' => ['unicode' => '1F490', 'shortname' => ':bouquet:', 'aliases' => '', 'keywords' => 'bouquet flowers nature'],
  440. 'star' => ['unicode' => '2B50', 'shortname' => ':star:', 'aliases' => '', 'keywords' => 'white medium star night yellow'],
  441. 'leaves' => ['unicode' => '1F343', 'shortname' => ':leaves:', 'aliases' => '', 'keywords' => 'leaf fluttering in wind grass lawn nature plant tree vegetable leaves leaf wind float fluttering'],
  442. 'cactus' => ['unicode' => '1F335', 'shortname' => ':cactus:', 'aliases' => '', 'keywords' => 'cactus nature plant vegetable cactus desert drought spike poke'],
  443. 'clubs' => ['unicode' => '2663', 'shortname' => ':clubs:', 'aliases' => '', 'keywords' => 'black club suit cards poker'],
  444. 'diamonds' => ['unicode' => '2666', 'shortname' => ':diamonds:', 'aliases' => '', 'keywords' => 'black diamond suit cards poker'],
  445. 'massage' => ['unicode' => '1F486', 'shortname' => ':massage:', 'aliases' => '', 'keywords' => 'face massage female girl woman'],
  446. 'imp' => ['unicode' => '1F47F', 'shortname' => ':imp:', 'aliases' => '', 'keywords' => 'imp angry devil evil horns cute devil'],
  447. 'red_circle' => ['unicode' => '1F534', 'shortname' => ':red_circle:', 'aliases' => '', 'keywords' => 'large red circle shape'],
  448. 'money_with_wings' => ['unicode' => '1F4B8', 'shortname' => ':money_with_wings:', 'aliases' => '', 'keywords' => 'money with wings bills dollar payment money wings easy spend work lost blown burned gift cash dollar'],
  449. 'football' => ['unicode' => '1F3C8', 'shortname' => ':football:', 'aliases' => '', 'keywords' => 'american football NFL balls sports football ball sport america american'],
  450. 'cyclone' => ['unicode' => '1F300', 'shortname' => ':cyclone:', 'aliases' => '', 'keywords' => 'cyclone blue cloud swirl weather cyclone hurricane typhoon storm ocean'],
  451. 'smirk_cat' => ['unicode' => '1F63C', 'shortname' => ':smirk_cat:', 'aliases' => '', 'keywords' => 'cat face with wry smile animal cats smirk smirking wry confident confidence'],
  452. 'snowman' => ['unicode' => '26C4', 'shortname' => ':snowman:', 'aliases' => '', 'keywords' => 'snowman without snow christmas cold season weather winter xmas'],
  453. 'birthday' => ['unicode' => '1F382', 'shortname' => ':birthday:', 'aliases' => '', 'keywords' => 'birthday cake cake party birthday birth cake dessert wish celebrate'],
  454. 'baby' => ['unicode' => '1F476', 'shortname' => ':baby:', 'aliases' => '', 'keywords' => 'baby boy child infant'],
  455. 'telephone' => ['unicode' => '260E', 'shortname' => ':telephone:', 'aliases' => '', 'keywords' => 'black telephone communication dial technology'],
  456. 'eggplant' => ['unicode' => '1F346', 'shortname' => ':eggplant:', 'aliases' => '', 'keywords' => 'aubergine aubergine food nature vegetable eggplant aubergine fruit purple penis'],
  457. 'gift_heart' => ['unicode' => '1F49D', 'shortname' => ':gift_heart:', 'aliases' => '', 'keywords' => 'heart with ribbon love valentines'],
  458. 'tulip' => ['unicode' => '1F337', 'shortname' => ':tulip:', 'aliases' => '', 'keywords' => 'tulip flowers nature plant tulip flower bulb spring easter'],
  459. 'confetti_ball' => ['unicode' => '1F38A', 'shortname' => ':confetti_ball:', 'aliases' => '', 'keywords' => 'confetti ball festival party party congratulations confetti ball celebrate win birthday new years wedding'],
  460. 'black_small_square' => ['unicode' => '25AA', 'shortname' => ':black_small_square:', 'aliases' => '', 'keywords' => 'black small square '],
  461. 'coffee' => ['unicode' => '2615', 'shortname' => ':coffee:', 'aliases' => '', 'keywords' => 'hot beverage beverage cafe drink espresso'],
  462. 'scream_cat' => ['unicode' => '1F640', 'shortname' => ':scream_cat:', 'aliases' => '', 'keywords' => 'weary cat face animal cats munch weary sleepy tired tiredness study finals school exhausted scream painting artist'],
  463. 'rocket' => ['unicode' => '1F680', 'shortname' => ':rocket:', 'aliases' => '', 'keywords' => 'rocket launch ship staffmode rocket space spacecraft astronaut cosmonaut'],
  464. 'christmas_tree' => ['unicode' => '1F384', 'shortname' => ':christmas_tree:', 'aliases' => '', 'keywords' => 'christmas tree celebration december festival vacation xmas christmas xmas santa holiday winter december santa evergreen ornaments jesus gifts presents'],
  465. 'x' => ['unicode' => '274C', 'shortname' => ':x:', 'aliases' => '', 'keywords' => 'cross mark delete no remove'],
  466. 'knife' => ['unicode' => '1F52A', 'shortname' => ':knife:', 'aliases' => '', 'keywords' => 'hocho '],
  467. 'bangbang' => ['unicode' => '203C', 'shortname' => ':bangbang:', 'aliases' => '', 'keywords' => 'double exclamation mark exclamation surprise'],
  468. 'smile_cat' => ['unicode' => '1F638', 'shortname' => ':smile_cat:', 'aliases' => '', 'keywords' => 'grinning cat face with smiling eyes animal cats cat smile grin grinning'],
  469. 'kissing_cat' => ['unicode' => '1F63D', 'shortname' => ':kissing_cat:', 'aliases' => '', 'keywords' => 'kissing cat face with closed eyes animal cats passion kiss puckered heart love'],
  470. 'doughnut' => ['unicode' => '1F369', 'shortname' => ':doughnut:', 'aliases' => '', 'keywords' => 'doughnut desert food snack sweet doughnut donut pastry fried dessert breakfast police homer sweet'],
  471. 'couple_with_heart' => ['unicode' => '1F491', 'shortname' => ':couple_with_heart:', 'aliases' => '', 'keywords' => 'couple with heart affection dating human like love marriage valentines'],
  472. 'spades' => ['unicode' => '2660', 'shortname' => ':spades:', 'aliases' => '', 'keywords' => 'black spade suit cards poker'],
  473. 'bomb' => ['unicode' => '1F4A3', 'shortname' => ':bomb:', 'aliases' => '', 'keywords' => 'bomb boom explode'],
  474. 'guitar' => ['unicode' => '1F3B8', 'shortname' => ':guitar:', 'aliases' => '', 'keywords' => 'guitar instrument music guitar string music instrument jam rock acoustic electric'],
  475. 'space_invader' => ['unicode' => '1F47E', 'shortname' => ':space_invader:', 'aliases' => '', 'keywords' => 'alien monster arcade game'],
  476. 'maple_leaf' => ['unicode' => '1F341', 'shortname' => ':maple_leaf:', 'aliases' => '', 'keywords' => 'maple leaf canada nature plant vegetable maple leaf syrup canada tree'],
  477. 'pig' => ['unicode' => '1F437', 'shortname' => ':pig:', 'aliases' => '', 'keywords' => 'pig face animal oink'],
  478. 'guardsman' => ['unicode' => '1F482', 'shortname' => ':guardsman:', 'aliases' => '', 'keywords' => 'guardsman british gb male man uk guardsman guard bearskin hat british queen ceremonial military'],
  479. 'fork_and_knife' => ['unicode' => '1F374', 'shortname' => ':fork_and_knife:', 'aliases' => '', 'keywords' => 'fork and knife cutlery kitchen fork knife restaurant meal food eat'],
  480. 'lips' => ['unicode' => '1F444', 'shortname' => ':lips:', 'aliases' => '', 'keywords' => 'mouth kiss mouth'],
  481. 'santa' => ['unicode' => '1F385', 'shortname' => ':santa:', 'aliases' => '', 'keywords' => 'father christmas christmas father christmas festival male man xmas santa saint nick jolly ho ho ho north pole presents gifts naughty nice sleigh father christmas holiday'],
  482. 'beer' => ['unicode' => '1F37A', 'shortname' => ':beer:', 'aliases' => '', 'keywords' => 'beer mug beverage drink drunk party pub relax beer hops mug barley malt yeast portland oregon brewery micro pint boot'],
  483. 'red_car' => ['unicode' => '1F697', 'shortname' => ':red_car:', 'aliases' => '', 'keywords' => 'automobile transportation vehicle'],
  484. 'zap' => ['unicode' => '26A1', 'shortname' => ':zap:', 'aliases' => '', 'keywords' => 'high voltage sign lightning bolt thunder weather'],
  485. 'ocean' => ['unicode' => '1F30A', 'shortname' => ':ocean:', 'aliases' => '', 'keywords' => 'water wave sea water wave ocean wave surf beach tide'],
  486. 'banana' => ['unicode' => '1F34C', 'shortname' => ':banana:', 'aliases' => '', 'keywords' => 'banana food fruit banana peel bunch'],
  487. 'tm' => ['unicode' => '1F1F9-1F1F2', 'shortname' => ':tm:', 'aliases' => '', 'keywords' => 'turkmenistan country nation'],
  488. 'turtle' => ['unicode' => '1F422', 'shortname' => ':turtle:', 'aliases' => '', 'keywords' => 'turtle animal slow turtle shell tortoise chelonian reptile slow snap steady'],
  489. 'movie_camera' => ['unicode' => '1F3A5', 'shortname' => ':movie_camera:', 'aliases' => '', 'keywords' => 'movie camera film record movie camera camcorder video motion picture'],
  490. 'video_game' => ['unicode' => '1F3AE', 'shortname' => ':video_game:', 'aliases' => '', 'keywords' => 'video game PS4 console controller play video game console controller nintendo xbox playstation'],
  491. 'trophy' => ['unicode' => '1F3C6', 'shortname' => ':trophy:', 'aliases' => '', 'keywords' => 'trophy award ceremony contest ftw place win trophy first show place win reward achievement medal'],
  492. 'man' => ['unicode' => '1F468', 'shortname' => ':man:', 'aliases' => '', 'keywords' => 'man classy dad father guy mustashe'],
  493. 'umbrella' => ['unicode' => '2614', 'shortname' => ':umbrella:', 'aliases' => '', 'keywords' => 'umbrella with rain drops rain weather'],
  494. 'tiger' => ['unicode' => '1F42F', 'shortname' => ':tiger:', 'aliases' => '', 'keywords' => 'tiger face animal'],
  495. 'smoking' => ['unicode' => '1F6AC', 'shortname' => ':smoking:', 'aliases' => '', 'keywords' => 'smoking symbol cigarette kills tobacco smoking cigarette smoke cancer lungs inhale tar nicotine'],
  496. 'watermelon' => ['unicode' => '1F349', 'shortname' => ':watermelon:', 'aliases' => '', 'keywords' => 'watermelon food fruit melon watermelon summer fruit large'],
  497. 'person_with_pouting_face' => ['unicode' => '1F64E', 'shortname' => ':person_with_pouting_face:', 'aliases' => '', 'keywords' => 'person with pouting face female girl woman pout sexy cute annoyed'],
  498. 'herb' => ['unicode' => '1F33F', 'shortname' => ':herb:', 'aliases' => '', 'keywords' => 'herb grass lawn medicine plant vegetable weed herb spice plant cook cooking'],
  499. 'footprints' => ['unicode' => '1F463', 'shortname' => ':footprints:', 'aliases' => '', 'keywords' => 'footprints feet'],
  500. 'camera' => ['unicode' => '1F4F7', 'shortname' => ':camera:', 'aliases' => '', 'keywords' => 'camera gadgets photo'],
  501. 'japanese_ogre' => ['unicode' => '1F479', 'shortname' => ':japanese_ogre:', 'aliases' => '', 'keywords' => 'japanese ogre monster japanese oni demon troll ogre folklore monster devil mask theater horns teeth'],
  502. 'cookie' => ['unicode' => '1F36A', 'shortname' => ':cookie:', 'aliases' => '', 'keywords' => 'cookie chocolate food oreo snack cookie dessert biscuit sweet chocolate'],
  503. 'recycle' => ['unicode' => '267B', 'shortname' => ':recycle:', 'aliases' => '', 'keywords' => 'black universal recycling symbol arrow environment garbage trash'],
  504. 'wine_glass' => ['unicode' => '1F377', 'shortname' => ':wine_glass:', 'aliases' => '', 'keywords' => 'wine glass alcohol beverage booze bottle drink drunk fermented glass grapes tasting wine winery'],
  505. 'arrow_right' => ['unicode' => '27A1', 'shortname' => ':arrow_right:', 'aliases' => '', 'keywords' => 'black rightwards arrow blue-square next'],
  506. 'panda_face' => ['unicode' => '1F43C', 'shortname' => ':panda_face:', 'aliases' => '', 'keywords' => 'panda face animal nature panda bear face cub cute endearment friendship love bamboo china black white'],
  507. 'dollar' => ['unicode' => '1F4B5', 'shortname' => ':dollar:', 'aliases' => '', 'keywords' => 'banknote with dollar sign bill currency money dollar united states canada australia banknote money currency paper cash bills'],
  508. 'hamburger' => ['unicode' => '1F354', 'shortname' => ':hamburger:', 'aliases' => '', 'keywords' => 'hamburger food meat hamburger burger meat cow beef'],
  509. 'icecream' => ['unicode' => '1F366', 'shortname' => ':icecream:', 'aliases' => '', 'keywords' => 'soft ice cream desert food hot icecream ice cream dairy dessert cold soft serve cone yogurt'],
  510. 'fries' => ['unicode' => '1F35F', 'shortname' => ':fries:', 'aliases' => '', 'keywords' => 'french fries chips food fries french potato fry russet idaho'],
  511. 'arrow_left' => ['unicode' => '2B05', 'shortname' => ':arrow_left:', 'aliases' => '', 'keywords' => 'leftwards black arrow arrow blue-square previous'],
  512. 'rainbow' => ['unicode' => '1F308', 'shortname' => ':rainbow:', 'aliases' => '', 'keywords' => 'rainbow happy nature photo sky unicorn rainbow color pride diversity spectrum refract leprechaun gold'],
  513. 'earth_asia' => ['unicode' => '1F30F', 'shortname' => ':earth_asia:', 'aliases' => '', 'keywords' => 'earth globe asia-australia east globe international world earth globe space planet asia australia home'],
  514. 'anger' => ['unicode' => '1F4A2', 'shortname' => ':anger:', 'aliases' => '', 'keywords' => 'anger symbol anger angry mad'],
  515. 'swimmer' => ['unicode' => '1F3CA', 'shortname' => ':swimmer:', 'aliases' => '', 'keywords' => 'swimmer sports swimmer swim water pool laps freestyle butterfly breaststroke backstroke'],
  516. 'blossom' => ['unicode' => '1F33C', 'shortname' => ':blossom:', 'aliases' => '', 'keywords' => 'blossom flowers nature yellow blossom daisy flower'],
  517. 'calling' => ['unicode' => '1F4F2', 'shortname' => ':calling:', 'aliases' => '', 'keywords' => 'mobile phone with rightwards arrow at left incoming iphone'],
  518. 'haircut' => ['unicode' => '1F487', 'shortname' => ':haircut:', 'aliases' => '', 'keywords' => 'haircut female girl woman'],
  519. 'heart_decoration' => ['unicode' => '1F49F', 'shortname' => ':heart_decoration:', 'aliases' => '', 'keywords' => 'heart decoration like love purple-square'],
  520. 'cake' => ['unicode' => '1F370', 'shortname' => ':cake:', 'aliases' => '', 'keywords' => 'shortcake desert food cake short dessert strawberry'],
  521. 'lollipop' => ['unicode' => '1F36D', 'shortname' => ':lollipop:', 'aliases' => '', 'keywords' => 'lollipop candy food snack sweet lollipop stick lick sweet sugar candy'],
  522. 'pouting_cat' => ['unicode' => '1F63E', 'shortname' => ':pouting_cat:', 'aliases' => '', 'keywords' => 'pouting cat face animal cats pout annoyed miffed glower frown'],
  523. 'syringe' => ['unicode' => '1F489', 'shortname' => ':syringe:', 'aliases' => '', 'keywords' => 'syringe blood drugs health hospital medicine needle'],
  524. 'registered' => ['unicode' => '00AE', 'shortname' => ':registered:', 'aliases' => '', 'keywords' => 'registered sign alphabet circle'],
  525. 'partly_sunny' => ['unicode' => '26C5', 'shortname' => ':partly_sunny:', 'aliases' => '', 'keywords' => 'sun behind cloud cloud morning nature weather'],
  526. 'iphone' => ['unicode' => '1F4F1', 'shortname' => ':iphone:', 'aliases' => '', 'keywords' => 'mobile phone apple dial gadgets technology'],
  527. 'arrow_backward' => ['unicode' => '25C0', 'shortname' => ':arrow_backward:', 'aliases' => '', 'keywords' => 'black left-pointing triangle arrow blue-square'],
  528. 'whale' => ['unicode' => '1F433', 'shortname' => ':whale:', 'aliases' => '', 'keywords' => 'spouting whale animal nature ocean sea'],
  529. 'envelope' => ['unicode' => '2709', 'shortname' => ':envelope:', 'aliases' => '', 'keywords' => 'envelope communication letter mail postal'],
  530. 'tropical_drink' => ['unicode' => '1F379', 'shortname' => ':tropical_drink:', 'aliases' => '', 'keywords' => 'tropical drink beverage tropical drink mixed pineapple coconut pina fruit umbrella'],
  531. 'cocktail' => ['unicode' => '1F378', 'shortname' => ':cocktail:', 'aliases' => '', 'keywords' => 'cocktail glass alcohol beverage drink drunk cocktail mixed drink alcohol glass martini bar'],
  532. 'hatching_chick' => ['unicode' => '1F423', 'shortname' => ':hatching_chick:', 'aliases' => '', 'keywords' => 'hatching chick born chicken egg chick egg baby bird chicken young woman cute'],
  533. 'smiley_cat' => ['unicode' => '1F63A', 'shortname' => ':smiley_cat:', 'aliases' => '', 'keywords' => 'smiling cat face with open mouth animal cats happy smile smiley cat happy'],
  534. 'fallen_leaf' => ['unicode' => '1F342', 'shortname' => ':fallen_leaf:', 'aliases' => '', 'keywords' => 'fallen leaf leaves nature plant vegetable leaf fall color deciduous autumn'],
  535. 'bear' => ['unicode' => '1F43B', 'shortname' => ':bear:', 'aliases' => '', 'keywords' => 'bear face animal nature'],
  536. 'man_with_turban' => ['unicode' => '1F473', 'shortname' => ':man_with_turban:', 'aliases' => '', 'keywords' => 'man with turban male turban headdress headwear pagri india indian mummy wisdom peace'],
  537. 'monkey' => ['unicode' => '1F412', 'shortname' => ':monkey:', 'aliases' => '', 'keywords' => 'monkey animal nature monkey primate banana silly'],
  538. 'full_moon' => ['unicode' => '1F315', 'shortname' => ':full_moon:', 'aliases' => '', 'keywords' => 'full moon symbol nature yellow moon full sky night cheese phase monster spooky werewolves twilight'],
  539. 'chocolate_bar' => ['unicode' => '1F36B', 'shortname' => ':chocolate_bar:', 'aliases' => '', 'keywords' => 'chocolate bar desert food snack chocolate bar candy coca hershey\'s'],
  540. 'rabbit' => ['unicode' => '1F430', 'shortname' => ':rabbit:', 'aliases' => '', 'keywords' => 'rabbit face animal nature'],
  541. 'musical_score' => ['unicode' => '1F3BC', 'shortname' => ':musical_score:', 'aliases' => '', 'keywords' => 'musical score clef treble music musical score clef g-clef stave staff'],
  542. 'snake' => ['unicode' => '1F40D', 'shortname' => ':snake:', 'aliases' => '', 'keywords' => 'snake animal evil'],
  543. 'bee' => ['unicode' => '1F41D', 'shortname' => ':bee:', 'aliases' => '', 'keywords' => 'honeybee animal insect bee queen buzz flower pollen sting honey hive bumble pollination'],
  544. 'mortar_board' => ['unicode' => '1F393', 'shortname' => ':mortar_board:', 'aliases' => '', 'keywords' => 'graduation cap cap college degree graduation hat school university graduation cap mortarboard academic education ceremony square tassel'],
  545. 'new_moon' => ['unicode' => '1F311', 'shortname' => ':new_moon:', 'aliases' => '', 'keywords' => 'new moon symbol nature moon new sky night cheese phase'],
  546. 'woman' => ['unicode' => '1F469', 'shortname' => ':woman:', 'aliases' => '', 'keywords' => 'woman female girls'],
  547. 'baseball' => ['unicode' => '26BE', 'shortname' => ':baseball:', 'aliases' => '', 'keywords' => 'baseball MLB balls sports'],
  548. 'older_woman' => ['unicode' => '1F475', 'shortname' => ':older_woman:', 'aliases' => ':grandma:', 'keywords' => 'older woman female girl women grandma grandmother'],
  549. 'no_entry_sign' => ['unicode' => '1F6AB', 'shortname' => ':no_entry_sign:', 'aliases' => '', 'keywords' => 'no entry sign denied disallow forbid limit stop no stop entry'],
  550. 'dolphin' => ['unicode' => '1F42C', 'shortname' => ':dolphin:', 'aliases' => '', 'keywords' => 'dolphin animal fins fish flipper nature ocean sea'],
  551. 'books' => ['unicode' => '1F4DA', 'shortname' => ':books:', 'aliases' => '', 'keywords' => 'books library literature'],
  552. 'bikini' => ['unicode' => '1F459', 'shortname' => ':bikini:', 'aliases' => '', 'keywords' => 'bikini beach fashion female girl swimming woman'],
  553. 'tv' => ['unicode' => '1F1F9-1F1FB', 'shortname' => ':tv:', 'aliases' => '', 'keywords' => 'tuvalu country nation'],
  554. 'strawberry' => ['unicode' => '1F353', 'shortname' => ':strawberry:', 'aliases' => '', 'keywords' => 'strawberry food fruit nature strawberry short cake berry'],
  555. 'feet' => ['unicode' => '1F43E', 'shortname' => ':feet:', 'aliases' => '', 'keywords' => 'paw prints animal cat dog footprints paw pet tracking paw prints mark imprints footsteps animal lion bear dog cat raccoon critter feet pawsteps'],
  556. 'family' => ['unicode' => '1F46A', 'shortname' => ':family:', 'aliases' => '', 'keywords' => 'family child dad father home mom mother parents family mother father child girl boy group unit'],
  557. 'hatched_chick' => ['unicode' => '1F425', 'shortname' => ':hatched_chick:', 'aliases' => '', 'keywords' => 'front-facing baby chick baby chicken chick baby bird chicken young woman cute'],
  558. 'nose' => ['unicode' => '1F443', 'shortname' => ':nose:', 'aliases' => '', 'keywords' => 'nose smell sniff'],
  559. 'cherries' => ['unicode' => '1F352', 'shortname' => ':cherries:', 'aliases' => '', 'keywords' => 'cherries food fruit cherry cherries tree fruit pit'],
  560. 'jack_o_lantern' => ['unicode' => '1F383', 'shortname' => ':jack_o_lantern:', 'aliases' => '', 'keywords' => 'jack-o-lantern halloween jack-o-lantern pumpkin halloween holiday carve autumn fall october saints costume spooky horror scary scared dead'],
  561. 'ear_of_rice' => ['unicode' => '1F33E', 'shortname' => ':ear_of_rice:', 'aliases' => '', 'keywords' => 'ear of rice nature plant ear rice food plant seed'],
  562. 'scissors' => ['unicode' => '2702', 'shortname' => ':scissors:', 'aliases' => '', 'keywords' => 'black scissors cut stationery'],
  563. 'frog' => ['unicode' => '1F438', 'shortname' => ':frog:', 'aliases' => '', 'keywords' => 'frog face animal nature'],
  564. 'octopus' => ['unicode' => '1F419', 'shortname' => ':octopus:', 'aliases' => '', 'keywords' => 'octopus animal creature ocean sea'],
  565. 'high_heel' => ['unicode' => '1F460', 'shortname' => ':high_heel:', 'aliases' => '', 'keywords' => 'high-heeled shoe fashion female shoes'],
  566. 'loud_sound' => ['unicode' => '1F50A', 'shortname' => ':loud_sound:', 'aliases' => '', 'keywords' => 'speaker with three sound waves '],
  567. 'top' => ['unicode' => '1F51D', 'shortname' => ':top:', 'aliases' => '', 'keywords' => 'top with upwards arrow above blue-square words'],
  568. 'house_with_garden' => ['unicode' => '1F3E1', 'shortname' => ':house_with_garden:', 'aliases' => '', 'keywords' => 'house with garden home nature plant'],
  569. 'rotating_light' => ['unicode' => '1F6A8', 'shortname' => ':rotating_light:', 'aliases' => '', 'keywords' => 'police cars revolving light 911 ambulance emergency police light police emergency'],
  570. 'lipstick' => ['unicode' => '1F484', 'shortname' => ':lipstick:', 'aliases' => '', 'keywords' => 'lipstick fashion female girl'],
  571. 'ear' => ['unicode' => '1F442', 'shortname' => ':ear:', 'aliases' => '', 'keywords' => 'ear face hear listen sound'],
  572. 'first_quarter_moon' => ['unicode' => '1F313', 'shortname' => ':first_quarter_moon:', 'aliases' => '', 'keywords' => 'first quarter moon symbol nature moon quarter first sky night cheese phase'],
  573. 'pineapple' => ['unicode' => '1F34D', 'shortname' => ':pineapple:', 'aliases' => '', 'keywords' => 'pineapple food fruit nature pineapple pina tropical flower'],
  574. 'elephant' => ['unicode' => '1F418', 'shortname' => ':elephant:', 'aliases' => '', 'keywords' => 'elephant animal nature nose thailand'],
  575. 'athletic_shoe' => ['unicode' => '1F45F', 'shortname' => ':athletic_shoe:', 'aliases' => '', 'keywords' => 'athletic shoe shoes sports'],
  576. 'crystal_ball' => ['unicode' => '1F52E', 'shortname' => ':crystal_ball:', 'aliases' => '', 'keywords' => 'crystal ball disco party'],
  577. 'love_letter' => ['unicode' => '1F48C', 'shortname' => ':love_letter:', 'aliases' => '', 'keywords' => 'love letter affection email envelope like valentines love letter kiss heart'],
  578. 'waxing_gibbous_moon' => ['unicode' => '1F314', 'shortname' => ':waxing_gibbous_moon:', 'aliases' => '', 'keywords' => 'waxing gibbous moon symbol nature'],
  579. 'girl' => ['unicode' => '1F467', 'shortname' => ':girl:', 'aliases' => '', 'keywords' => 'girl female woman'],
  580. 'cool' => ['unicode' => '1F192', 'shortname' => ':cool:', 'aliases' => '', 'keywords' => 'squared cool blue-square words'],
  581. 'white_circle' => ['unicode' => '26AA', 'shortname' => ':white_circle:', 'aliases' => '', 'keywords' => 'medium white circle shape'],
  582. 'poultry_leg' => ['unicode' => '1F357', 'shortname' => ':poultry_leg:', 'aliases' => '', 'keywords' => 'poultry leg food meat poultry leg chicken fried'],
  583. 'speech_balloon' => ['unicode' => '1F4AC', 'shortname' => ':speech_balloon:', 'aliases' => '', 'keywords' => 'speech balloon bubble words speech balloon talk conversation communication comic dialogue'],
  584. 'question' => ['unicode' => '2753', 'shortname' => ':question:', 'aliases' => '', 'keywords' => 'black question mark ornament confused doubt'],
  585. 'tropical_fish' => ['unicode' => '1F420', 'shortname' => ':tropical_fish:', 'aliases' => '', 'keywords' => 'tropical fish animal swim'],
  586. 'older_man' => ['unicode' => '1F474', 'shortname' => ':older_man:', 'aliases' => '', 'keywords' => 'older man human male men'],
  587. 'bride_with_veil' => ['unicode' => '1F470', 'shortname' => ':bride_with_veil:', 'aliases' => '', 'keywords' => 'bride with veil couple marriage wedding bride wedding planning veil gown dress engagement white'],
  588. 'peach' => ['unicode' => '1F351', 'shortname' => ':peach:', 'aliases' => '', 'keywords' => 'peach food fruit nature peach fruit juicy pit'],
  589. 'eyeglasses' => ['unicode' => '1F453', 'shortname' => ':eyeglasses:', 'aliases' => '', 'keywords' => 'eyeglasses accessories eyesight fashion eyeglasses spectacles eye sight nearsightedness myopia farsightedness hyperopia frames vision see blurry contacts'],
  590. 'pencil' => ['unicode' => '1F4DD', 'shortname' => ':pencil:', 'aliases' => '', 'keywords' => 'memo documents paper station write'],
  591. 'spaghetti' => ['unicode' => '1F35D', 'shortname' => ':spaghetti:', 'aliases' => '', 'keywords' => 'spaghetti food italian noodle spaghetti noodles tomato sauce italian'],
  592. 'boy' => ['unicode' => '1F466', 'shortname' => ':boy:', 'aliases' => '', 'keywords' => 'boy guy male man'],
  593. 'black_circle' => ['unicode' => '26AB', 'shortname' => ':black_circle:', 'aliases' => '', 'keywords' => 'medium black circle shape'],
  594. 'book' => ['unicode' => '1F4D6', 'shortname' => ':book:', 'aliases' => '', 'keywords' => 'open book library literature'],
  595. 'pill' => ['unicode' => '1F48A', 'shortname' => ':pill:', 'aliases' => '', 'keywords' => 'pill health medicine'],
  596. 'loudspeaker' => ['unicode' => '1F4E2', 'shortname' => ':loudspeaker:', 'aliases' => '', 'keywords' => 'public address loudspeaker sound volume'],
  597. 'horse' => ['unicode' => '1F434', 'shortname' => ':horse:', 'aliases' => '', 'keywords' => 'horse face animal brown'],
  598. 'milky_way' => ['unicode' => '1F30C', 'shortname' => ':milky_way:', 'aliases' => '', 'keywords' => 'milky way photo space milky galaxy star stars planets space sky'],
  599. 'fish' => ['unicode' => '1F41F', 'shortname' => ':fish:', 'aliases' => '', 'keywords' => 'fish animal food nature'],
  600. 'surfer' => ['unicode' => '1F3C4', 'shortname' => ':surfer:', 'aliases' => '', 'keywords' => 'surfer ocean sea sports surfer surf wave ocean ride swell'],
  601. 'closed_lock_with_key' => ['unicode' => '1F510', 'shortname' => ':closed_lock_with_key:', 'aliases' => '', 'keywords' => 'closed lock with key privacy security'],
  602. 'warning' => ['unicode' => '26A0', 'shortname' => ':warning:', 'aliases' => '', 'keywords' => 'warning sign exclamation wip'],
  603. 'apple' => ['unicode' => '1F34E', 'shortname' => ':apple:', 'aliases' => '', 'keywords' => 'red apple fruit mac apple fruit electronics red doctor teacher school core'],
  604. 'fishing_pole_and_fish' => ['unicode' => '1F3A3', 'shortname' => ':fishing_pole_and_fish:', 'aliases' => '', 'keywords' => 'fishing pole and fish food hobby fish fishing pole'],
  605. 'dress' => ['unicode' => '1F457', 'shortname' => ':dress:', 'aliases' => '', 'keywords' => 'dress clothes fashion'],
  606. 'clapper' => ['unicode' => '1F3AC', 'shortname' => ':clapper:', 'aliases' => '', 'keywords' => 'clapper board film movie record clapper board clapboard movie film take'],
  607. 'man_with_gua_pi_mao' => ['unicode' => '1F472', 'shortname' => ':man_with_gua_pi_mao:', 'aliases' => '', 'keywords' => 'man with gua pi mao boy male skullcap chinese asian qing'],
  608. 'sunrise' => ['unicode' => '1F305', 'shortname' => ':sunrise:', 'aliases' => '', 'keywords' => 'sunrise morning photo vacation view sunrise sun morning color sky'],
  609. 'grapes' => ['unicode' => '1F347', 'shortname' => ':grapes:', 'aliases' => '', 'keywords' => 'grapes food fruit grapes wine vinegar fruit cluster vine'],
  610. 'first_quarter_moon_with_face' => ['unicode' => '1F31B', 'shortname' => ':first_quarter_moon_with_face:', 'aliases' => '', 'keywords' => 'first quarter moon with face nature moon first quarter anthropomorphic face sky night cheese phase'],
  611. 'telephone_receiver' => ['unicode' => '1F4DE', 'shortname' => ':telephone_receiver:', 'aliases' => '', 'keywords' => 'telephone receiver communication dial technology'],
  612. 'eight_spoked_asterisk' => ['unicode' => '2733', 'shortname' => ':eight_spoked_asterisk:', 'aliases' => '', 'keywords' => 'eight spoked asterisk green-square sparkle star'],
  613. 'sos' => ['unicode' => '1F198', 'shortname' => ':sos:', 'aliases' => '', 'keywords' => 'squared sos emergency help red-square words'],
  614. 'koala' => ['unicode' => '1F428', 'shortname' => ':koala:', 'aliases' => '', 'keywords' => 'koala animal nature'],
  615. 'blue_car' => ['unicode' => '1F699', 'shortname' => ':blue_car:', 'aliases' => '', 'keywords' => 'recreational vehicle car suv car wagon automobile'],
  616. 'arrow_down' => ['unicode' => '2B07', 'shortname' => ':arrow_down:', 'aliases' => '', 'keywords' => 'downwards black arrow arrow blue-square'],
  617. 'ramen' => ['unicode' => '1F35C', 'shortname' => ':ramen:', 'aliases' => '', 'keywords' => 'steaming bowl chipsticks food japanese noodle ramen noodles bowl steaming soup'],
  618. 'house' => ['unicode' => '1F3E0', 'shortname' => ':house:', 'aliases' => '', 'keywords' => 'house building building home house home residence dwelling mansion bungalow ranch craftsman'],
  619. 'pig_nose' => ['unicode' => '1F43D', 'shortname' => ':pig_nose:', 'aliases' => '', 'keywords' => 'pig nose animal oink pig nose snout food eat cute oink pink smell truffle'],
  620. 'anchor' => ['unicode' => '2693', 'shortname' => ':anchor:', 'aliases' => '', 'keywords' => 'anchor ferry ship anchor ship boat ocean harbor marina shipyard sailor tattoo'],
  621. 'art' => ['unicode' => '1F3A8', 'shortname' => ':art:', 'aliases' => '', 'keywords' => 'artist palette design draw paint artist palette art colors paint draw brush pastels oils'],
  622. 'chicken' => ['unicode' => '1F414', 'shortname' => ':chicken:', 'aliases' => '', 'keywords' => 'chicken animal cluck chicken hen poultry livestock'],
  623. 'wavy_dash' => ['unicode' => '3030', 'shortname' => ':wavy_dash:', 'aliases' => '', 'keywords' => 'wavy dash draw line'],
  624. 'monkey_face' => ['unicode' => '1F435', 'shortname' => ':monkey_face:', 'aliases' => '', 'keywords' => 'monkey face animal nature'],
  625. 'ok' => ['unicode' => '1F197', 'shortname' => ':ok:', 'aliases' => '', 'keywords' => 'squared ok agree blue-square good yes'],
  626. 'candy' => ['unicode' => '1F36C', 'shortname' => ':candy:', 'aliases' => '', 'keywords' => 'candy desert snack candy sugar sweet hard'],
  627. 'tangerine' => ['unicode' => '1F34A', 'shortname' => ':tangerine:', 'aliases' => '', 'keywords' => 'tangerine food fruit nature tangerine citrus orange'],
  628. 'm' => ['unicode' => '24C2', 'shortname' => ':m:', 'aliases' => '', 'keywords' => 'circled latin capital letter m alphabet blue-circle letter'],
  629. 'bath' => ['unicode' => '1F6C0', 'shortname' => ':bath:', 'aliases' => '', 'keywords' => 'bath clean shower bath tub basin wash bubble soak bathroom soap water clean shampoo lather water'],
  630. 'cow' => ['unicode' => '1F42E', 'shortname' => ':cow:', 'aliases' => '', 'keywords' => 'cow face animal beef ox'],
  631. 'mushroom' => ['unicode' => '1F344', 'shortname' => ':mushroom:', 'aliases' => '', 'keywords' => 'mushroom plant vegetable mushroom fungi food fungus'],
  632. 'mouse' => ['unicode' => '1F42D', 'shortname' => ':mouse:', 'aliases' => '', 'keywords' => 'mouse face animal nature'],
  633. 'large_blue_circle' => ['unicode' => '1F535', 'shortname' => ':large_blue_circle:', 'aliases' => '', 'keywords' => 'large blue circle '],
  634. 'japanese_goblin' => ['unicode' => '1F47A', 'shortname' => ':japanese_goblin:', 'aliases' => '', 'keywords' => 'japanese goblin evil mask red japanese tengu supernatural avian demon goblin mask theater nose frown mustache anger frustration'],
  635. 'moyai' => ['unicode' => '1F5FF', 'shortname' => ':moyai:', 'aliases' => '', 'keywords' => 'moyai island stone'],
  636. 'egg' => ['unicode' => '1F373', 'shortname' => ':egg:', 'aliases' => '', 'keywords' => 'cooking breakfast food egg fry pan flat cook frying cooking utensil'],
  637. 'tennis' => ['unicode' => '1F3BE', 'shortname' => ':tennis:', 'aliases' => '', 'keywords' => 'tennis racquet and ball balls green sports tennis racket racquet ball game net court love'],
  638. 'fireworks' => ['unicode' => '1F386', 'shortname' => ':fireworks:', 'aliases' => '', 'keywords' => 'fireworks carnival congratulations festival photo fireworks independence celebration explosion july 4th rocket sky idea excitement'],
  639. 'racehorse' => ['unicode' => '1F40E', 'shortname' => ':racehorse:', 'aliases' => '', 'keywords' => 'horse animal gamble horse powerful draft calvary cowboy cowgirl mounted race ride gallop trot colt filly mare stallion gelding yearling thoroughbred pony'],
  640. 'bread' => ['unicode' => '1F35E', 'shortname' => ':bread:', 'aliases' => '', 'keywords' => 'bread breakfast food toast wheat bread loaf yeast'],
  641. 'bird' => ['unicode' => '1F426', 'shortname' => ':bird:', 'aliases' => '', 'keywords' => 'bird animal fly nature tweet'],
  642. 'droplet' => ['unicode' => '1F4A7', 'shortname' => ':droplet:', 'aliases' => '', 'keywords' => 'droplet drip faucet water drop droplet h20 water aqua tear sweat rain moisture wet moist spit'],
  643. 'fried_shrimp' => ['unicode' => '1F364', 'shortname' => ':fried_shrimp:', 'aliases' => '', 'keywords' => 'fried shrimp animal food shrimp fried seafood small fish'],
  644. 'key' => ['unicode' => '1F511', 'shortname' => ':key:', 'aliases' => '', 'keywords' => 'key door lock password'],
  645. 'back' => ['unicode' => '1F519', 'shortname' => ':back:', 'aliases' => '', 'keywords' => 'back with leftwards arrow above arrow'],
  646. 'bike' => ['unicode' => '1F6B2', 'shortname' => ':bike:', 'aliases' => '', 'keywords' => 'bicycle bicycle exercise hipster sports bike pedal bicycle transportation'],
  647. 'pencil2' => ['unicode' => '270F', 'shortname' => ':pencil2:', 'aliases' => '', 'keywords' => 'pencil paper stationery write'],
  648. 'shaved_ice' => ['unicode' => '1F367', 'shortname' => ':shaved_ice:', 'aliases' => '', 'keywords' => 'shaved ice desert hot shaved ice dessert treat syrup flavoring'],
  649. 'arrow_right_hook' => ['unicode' => '21AA', 'shortname' => ':arrow_right_hook:', 'aliases' => '', 'keywords' => 'rightwards arrow with hook blue-square'],
  650. 'bulb' => ['unicode' => '1F4A1', 'shortname' => ':bulb:', 'aliases' => '', 'keywords' => 'electric light bulb electricity light idea bulb light'],
  651. 'tophat' => ['unicode' => '1F3A9', 'shortname' => ':tophat:', 'aliases' => '', 'keywords' => 'top hat classy gentleman magic top hat cap beaver high tall stove pipe chimney topper london period piece magic magician'],
  652. 'wolf' => ['unicode' => '1F43A', 'shortname' => ':wolf:', 'aliases' => '', 'keywords' => 'wolf face animal nature'],
  653. 'night_with_stars' => ['unicode' => '1F303', 'shortname' => ':night_with_stars:', 'aliases' => '', 'keywords' => 'night with stars night star cloudless evening planets space sky'],
  654. 'grey_exclamation' => ['unicode' => '2755', 'shortname' => ':grey_exclamation:', 'aliases' => '', 'keywords' => 'white exclamation mark ornament surprise'],
  655. 'alarm_clock' => ['unicode' => '23F0', 'shortname' => ':alarm_clock:', 'aliases' => '', 'keywords' => 'alarm clock time wake'],
  656. 'cop' => ['unicode' => '1F46E', 'shortname' => ':cop:', 'aliases' => '', 'keywords' => 'police officer arrest enforcement law man police'],
  657. 'arrow_lower_left' => ['unicode' => '2199', 'shortname' => ':arrow_lower_left:', 'aliases' => '', 'keywords' => 'south west arrow arrow blue-square'],
  658. 'person_with_blond_hair' => ['unicode' => '1F471', 'shortname' => ':person_with_blond_hair:', 'aliases' => '', 'keywords' => 'person with blond hair male man blonde young western westerner occidental'],
  659. 'jeans' => ['unicode' => '1F456', 'shortname' => ':jeans:', 'aliases' => '', 'keywords' => 'jeans fashion shopping jeans pants blue denim levi\'s levi designer work skinny'],
  660. 'sheep' => ['unicode' => '1F411', 'shortname' => ':sheep:', 'aliases' => '', 'keywords' => 'sheep animal nature sheep wool flock follower ewe female lamb'],
  661. 'golf' => ['unicode' => '26F3', 'shortname' => ':golf:', 'aliases' => '', 'keywords' => 'flag in hole business sports'],
  662. 'arrow_upper_right' => ['unicode' => '2197', 'shortname' => ':arrow_upper_right:', 'aliases' => '', 'keywords' => 'north east arrow blue-square'],
  663. 'cd' => ['unicode' => '1F1E8-1F1E9', 'shortname' => ':cd:', 'aliases' => '', 'keywords' => 'the democratic republic of the congo country nation république démocratique du congo republique democratique du congo'],
  664. 'watch' => ['unicode' => '231A', 'shortname' => ':watch:', 'aliases' => '', 'keywords' => 'watch accessories time'],
  665. 'performing_arts' => ['unicode' => '1F3AD', 'shortname' => ':performing_arts:', 'aliases' => '', 'keywords' => 'performing arts acting drama theater performing arts performance entertainment acting story mask masks'],
  666. 'bug' => ['unicode' => '1F41B', 'shortname' => ':bug:', 'aliases' => '', 'keywords' => 'bug insect nature bug insect virus error'],
  667. 'sushi' => ['unicode' => '1F363', 'shortname' => ':sushi:', 'aliases' => '', 'keywords' => 'sushi food japanese sushi fish raw nigiri japanese'],
  668. 'baby_chick' => ['unicode' => '1F424', 'shortname' => ':baby_chick:', 'aliases' => '', 'keywords' => 'baby chick animal chicken chick baby bird chicken young woman cute'],
  669. 'small_blue_diamond' => ['unicode' => '1F539', 'shortname' => ':small_blue_diamond:', 'aliases' => '', 'keywords' => 'small blue diamond shape'],
  670. 'electric_plug' => ['unicode' => '1F50C', 'shortname' => ':electric_plug:', 'aliases' => '', 'keywords' => 'electric plug charger power'],
  671. 'lock' => ['unicode' => '1F512', 'shortname' => ':lock:', 'aliases' => '', 'keywords' => 'lock password security'],
  672. 'black_square_button' => ['unicode' => '1F532', 'shortname' => ':black_square_button:', 'aliases' => '', 'keywords' => 'black square button frame'],
  673. 'fish_cake' => ['unicode' => '1F365', 'shortname' => ':fish_cake:', 'aliases' => '', 'keywords' => 'fish cake with swirl design food fish cake kamboko swirl ramen noodles naruto'],
  674. 'seedling' => ['unicode' => '1F331', 'shortname' => ':seedling:', 'aliases' => '', 'keywords' => 'seedling grass lawn nature plant seedling plant new start grow'],
  675. 'corn' => ['unicode' => '1F33D', 'shortname' => ':corn:', 'aliases' => '', 'keywords' => 'ear of maize food plant vegetable corn maize food iowa kernel popcorn husk yellow stalk cob ear'],
  676. 'leftwards_arrow_with_hook' => ['unicode' => '21A9', 'shortname' => ':leftwards_arrow_with_hook:', 'aliases' => '', 'keywords' => 'leftwards arrow with hook '],
  677. 'arrow_heading_down' => ['unicode' => '2935', 'shortname' => ':arrow_heading_down:', 'aliases' => '', 'keywords' => 'arrow pointing rightwards then curving downwards arrow blue-square'],
  678. 'ant' => ['unicode' => '1F41C', 'shortname' => ':ant:', 'aliases' => '', 'keywords' => 'ant animal insect ant queen insect team'],
  679. 'checkered_flag' => ['unicode' => '1F3C1', 'shortname' => ':checkered_flag:', 'aliases' => '', 'keywords' => 'chequered flag contest finishline gokart rase checkered chequred race flag finish complete end'],
  680. 'tea' => ['unicode' => '1F375', 'shortname' => ':tea:', 'aliases' => '', 'keywords' => 'teacup without handle bowl breakfast british drink green tea leaf drink teacup hot beverage'],
  681. 'stew' => ['unicode' => '1F372', 'shortname' => ':stew:', 'aliases' => '', 'keywords' => 'pot of food food meat stew hearty soup thick hot pot'],
  682. 'arrow_up' => ['unicode' => '2B06', 'shortname' => ':arrow_up:', 'aliases' => '', 'keywords' => 'upwards black arrow blue-square'],
  683. 'underage' => ['unicode' => '1F51E', 'shortname' => ':underage:', 'aliases' => '', 'keywords' => 'no one under eighteen symbol 18 drink night pub'],
  684. 'snail' => ['unicode' => '1F40C', 'shortname' => ':snail:', 'aliases' => '', 'keywords' => 'snail animal shell slow snail slow escargot french appetizer'],
  685. 'meat_on_bone' => ['unicode' => '1F356', 'shortname' => ':meat_on_bone:', 'aliases' => '', 'keywords' => 'meat on bone food good meat bone animal cooked'],
  686. 'camel' => ['unicode' => '1F42B', 'shortname' => ':camel:', 'aliases' => '', 'keywords' => 'bactrian camel animal hot nature bactrian camel hump desert central asia heat hot water hump day wednesday sex'],
  687. 'necktie' => ['unicode' => '1F454', 'shortname' => ':necktie:', 'aliases' => '', 'keywords' => 'necktie cloth fashion formal shirt suitup'],
  688. 'toilet' => ['unicode' => '1F6BD', 'shortname' => ':toilet:', 'aliases' => '', 'keywords' => 'toilet restroom wc toilet bathroom throne porcelain waste flush plumbing'],
  689. 'a' => ['unicode' => '1F170', 'shortname' => ':a:', 'aliases' => '', 'keywords' => 'negative squared latin capital letter a alphabet letter red-square'],
  690. 'arrow_lower_right' => ['unicode' => '2198', 'shortname' => ':arrow_lower_right:', 'aliases' => '', 'keywords' => 'south east arrow arrow blue-square'],
  691. 'hamster' => ['unicode' => '1F439', 'shortname' => ':hamster:', 'aliases' => '', 'keywords' => 'hamster face animal nature'],
  692. 'fuelpump' => ['unicode' => '26FD', 'shortname' => ':fuelpump:', 'aliases' => '', 'keywords' => 'fuel pump gas station petroleum'],
  693. 'hammer' => ['unicode' => '1F528', 'shortname' => ':hammer:', 'aliases' => '', 'keywords' => 'hammer done judge law ruling tools verdict'],
  694. 'bust_in_silhouette' => ['unicode' => '1F464', 'shortname' => ':bust_in_silhouette:', 'aliases' => '', 'keywords' => 'bust in silhouette human man person user silhouette person user member account guest icon avatar profile me myself i'],
  695. 'up' => ['unicode' => '1F199', 'shortname' => ':up:', 'aliases' => '', 'keywords' => 'squared up with exclamation mark blue-square'],
  696. 'snowboarder' => ['unicode' => '1F3C2', 'shortname' => ':snowboarder:', 'aliases' => '', 'keywords' => 'snowboarder sports winter snow boarding sports freestyle halfpipe board mountain alpine winter'],
  697. 'curly_loop' => ['unicode' => '27B0', 'shortname' => ':curly_loop:', 'aliases' => '', 'keywords' => 'curly loop scribble'],
  698. 'handbag' => ['unicode' => '1F45C', 'shortname' => ':handbag:', 'aliases' => '', 'keywords' => 'handbag accessories accessory bag fashion'],
  699. 'dart' => ['unicode' => '1F3AF', 'shortname' => ':dart:', 'aliases' => '', 'keywords' => 'direct hit bar game direct hit bullseye dart archery game fletching arrow sport'],
  700. 'computer' => ['unicode' => '1F4BB', 'shortname' => ':computer:', 'aliases' => '', 'keywords' => 'personal computer laptop tech'],
  701. 'poodle' => ['unicode' => '1F429', 'shortname' => ':poodle:', 'aliases' => '', 'keywords' => 'poodle 101 animal dog nature poodle dog clip showy sophisticated vain'],
  702. 'cancer' => ['unicode' => '264B', 'shortname' => ':cancer:', 'aliases' => '', 'keywords' => 'cancer cancer crab astrology greek constellation stars zodiac sign sign zodiac horoscope'],
  703. 'rice' => ['unicode' => '1F35A', 'shortname' => ':rice:', 'aliases' => '', 'keywords' => 'cooked rice food rice white grain food bowl'],
  704. 'black_medium_small_square' => ['unicode' => '25FE', 'shortname' => ':black_medium_small_square:', 'aliases' => '', 'keywords' => 'black medium small square '],
  705. 'seat' => ['unicode' => '1F4BA', 'shortname' => ':seat:', 'aliases' => '', 'keywords' => 'seat sit'],
  706. 'shell' => ['unicode' => '1F41A', 'shortname' => ':shell:', 'aliases' => '', 'keywords' => 'spiral shell beach nature sea shell spiral beach sand crab nautilus'],
  707. 'trident' => ['unicode' => '1F531', 'shortname' => ':trident:', 'aliases' => '', 'keywords' => 'trident emblem spear weapon'],
  708. 'hotsprings' => ['unicode' => '2668', 'shortname' => ':hotsprings:', 'aliases' => '', 'keywords' => 'hot springs bath relax warm'],
  709. 'curry' => ['unicode' => '1F35B', 'shortname' => ':curry:', 'aliases' => '', 'keywords' => 'curry and rice food hot indian spicy curry spice flavor food meal'],
  710. 'ice_cream' => ['unicode' => '1F368', 'shortname' => ':ice_cream:', 'aliases' => '', 'keywords' => 'ice cream desert food hot icecream ice cream dairy dessert cold soft serve cone waffle'],
  711. 'diamond_shape_with_a_dot_inside' => ['unicode' => '1F4A0', 'shortname' => ':diamond_shape_with_a_dot_inside:', 'aliases' => '', 'keywords' => 'diamond shape with a dot inside diamond cute cuteness kawaii japanese glyph adorable'],
  712. 'green_apple' => ['unicode' => '1F34F', 'shortname' => ':green_apple:', 'aliases' => '', 'keywords' => 'green apple fruit nature apple fruit green pie granny smith core'],
  713. 'statue_of_liberty' => ['unicode' => '1F5FD', 'shortname' => ':statue_of_liberty:', 'aliases' => '', 'keywords' => 'statue of liberty american newyork'],
  714. 'bus' => ['unicode' => '1F68C', 'shortname' => ':bus:', 'aliases' => '', 'keywords' => 'bus car transportation vehicle bus school city transportation public'],
  715. 'bowling' => ['unicode' => '1F3B3', 'shortname' => ':bowling:', 'aliases' => '', 'keywords' => 'bowling fun play sports bowl bowling ball pin strike spare game'],
  716. 'dolls' => ['unicode' => '1F38E', 'shortname' => ':dolls:', 'aliases' => '', 'keywords' => 'japanese dolls japanese kimono toy dolls japan japanese day girls emperor empress pray blessing imperial family royal'],
  717. 'baby_symbol' => ['unicode' => '1F6BC', 'shortname' => ':baby_symbol:', 'aliases' => '', 'keywords' => 'baby symbol child orange-square baby crawl newborn human diaper small babe'],
  718. 'construction_worker' => ['unicode' => '1F477', 'shortname' => ':construction_worker:', 'aliases' => '', 'keywords' => 'construction worker human male man wip'],
  719. 'custard' => ['unicode' => '1F36E', 'shortname' => ':custard:', 'aliases' => '', 'keywords' => 'custard desert food custard cream rich butter dessert crème brûlée french'],
  720. 'unlock' => ['unicode' => '1F513', 'shortname' => ':unlock:', 'aliases' => '', 'keywords' => 'open lock privacy security'],
  721. 'shirt' => ['unicode' => '1F455', 'shortname' => ':shirt:', 'aliases' => '', 'keywords' => 't-shirt cloth fashion'],
  722. 'credit_card' => ['unicode' => '1F4B3', 'shortname' => ':credit_card:', 'aliases' => '', 'keywords' => 'credit card bill dollar money pay payment credit card loan purchase shopping mastercard visa american express wallet signature'],
  723. 'bento' => ['unicode' => '1F371', 'shortname' => ':bento:', 'aliases' => '', 'keywords' => 'bento box box food japanese bento japanese rice meal box obento convenient lunchbox'],
  724. 'beetle' => ['unicode' => '1F41E', 'shortname' => ':beetle:', 'aliases' => '', 'keywords' => 'lady beetle insect nature lady bug ladybug ladybird beetle cow lady cow insect endearment'],
  725. 'mans_shoe' => ['unicode' => '1F45E', 'shortname' => ':mans_shoe:', 'aliases' => '', 'keywords' => 'mans shoe fashion male'],
  726. 'chestnut' => ['unicode' => '1F330', 'shortname' => ':chestnut:', 'aliases' => '', 'keywords' => 'chestnut food squirrel chestnut roasted food tree'],
  727. 'interrobang' => ['unicode' => '2049', 'shortname' => ':interrobang:', 'aliases' => '', 'keywords' => 'exclamation question mark punctuation surprise wat'],
  728. 'small_red_triangle' => ['unicode' => '1F53A', 'shortname' => ':small_red_triangle:', 'aliases' => '', 'keywords' => 'up-pointing red triangle shape'],
  729. 'heavy_dollar_sign' => ['unicode' => '1F4B2', 'shortname' => ':heavy_dollar_sign:', 'aliases' => '', 'keywords' => 'heavy dollar sign currency money payment dollar currency money cash sale purchase value'],
  730. 'battery' => ['unicode' => '1F50B', 'shortname' => ':battery:', 'aliases' => '', 'keywords' => 'battery energy power sustain'],
  731. 'black_nib' => ['unicode' => '2712', 'shortname' => ':black_nib:', 'aliases' => '', 'keywords' => 'black nib pen stationery'],
  732. 'police_car' => ['unicode' => '1F693', 'shortname' => ':police_car:', 'aliases' => '', 'keywords' => 'police car cars enforcement law transportation vehicle police car emergency ticket citation crime help officer'],
  733. 'honey_pot' => ['unicode' => '1F36F', 'shortname' => ':honey_pot:', 'aliases' => '', 'keywords' => 'honey pot bees sweet honey pot bees pooh bear'],
  734. 'small_orange_diamond' => ['unicode' => '1F538', 'shortname' => ':small_orange_diamond:', 'aliases' => '', 'keywords' => 'small orange diamond shape'],
  735. 'b' => ['unicode' => '1F171', 'shortname' => ':b:', 'aliases' => '', 'keywords' => 'negative squared latin capital letter b alphabet letter red-square'],
  736. 'arrows_clockwise' => ['unicode' => '1F503', 'shortname' => ':arrows_clockwise:', 'aliases' => '', 'keywords' => 'clockwise downwards and upwards open circle arrows sync'],
  737. 'roller_coaster' => ['unicode' => '1F3A2', 'shortname' => ':roller_coaster:', 'aliases' => '', 'keywords' => 'roller coaster carnival fun photo play playground roller coaster amusement park fair ride entertainment'],
  738. 'door' => ['unicode' => '1F6AA', 'shortname' => ':door:', 'aliases' => '', 'keywords' => 'door entry exit house door doorway entrance enter exit entry'],
  739. 'sunrise_over_mountains' => ['unicode' => '1F304', 'shortname' => ':sunrise_over_mountains:', 'aliases' => '', 'keywords' => 'sunrise over mountains photo vacation view sunrise sun morning mountain rural color sky'],
  740. '8ball' => ['unicode' => '1F3B1', 'shortname' => ':8ball:', 'aliases' => '', 'keywords' => 'billiards pool billiards eight ball pool pocket ball cue'],
  741. 'eight_pointed_black_star' => ['unicode' => '2734', 'shortname' => ':eight_pointed_black_star:', 'aliases' => '', 'keywords' => 'eight pointed black star '],
  742. 'musical_keyboard' => ['unicode' => '1F3B9', 'shortname' => ':musical_keyboard:', 'aliases' => '', 'keywords' => 'musical keyboard instrument piano music keyboard piano organ instrument electric'],
  743. 'sparkler' => ['unicode' => '1F387', 'shortname' => ':sparkler:', 'aliases' => '', 'keywords' => 'firework sparkler night shine stars'],
  744. 'small_red_triangle_down' => ['unicode' => '1F53B', 'shortname' => ':small_red_triangle_down:', 'aliases' => '', 'keywords' => 'down-pointing red triangle shape'],
  745. 'arrow_upper_left' => ['unicode' => '2196', 'shortname' => ':arrow_upper_left:', 'aliases' => '', 'keywords' => 'north west arrow blue-square'],
  746. 'left_right_arrow' => ['unicode' => '2194', 'shortname' => ':left_right_arrow:', 'aliases' => '', 'keywords' => 'left right arrow shape'],
  747. 'barber' => ['unicode' => '1F488', 'shortname' => ':barber:', 'aliases' => '', 'keywords' => 'barber pole hair salon style'],
  748. 'large_orange_diamond' => ['unicode' => '1F536', 'shortname' => ':large_orange_diamond:', 'aliases' => '', 'keywords' => 'large orange diamond shape'],
  749. 'hospital' => ['unicode' => '1F3E5', 'shortname' => ':hospital:', 'aliases' => '', 'keywords' => 'hospital building doctor health surgery'],
  750. 'city_dusk' => ['unicode' => '1F306', 'shortname' => ':city_dusk:', 'aliases' => '', 'keywords' => 'cityscape at dusk photo city scape sunset dusk lights evening metropolitan night dark'],
  751. 'scorpius' => ['unicode' => '264F', 'shortname' => ':scorpius:', 'aliases' => '', 'keywords' => 'scorpius scorpius scorpion scorpio astrology greek constellation stars zodiac sign sign zodiac horoscope'],
  752. 'sailboat' => ['unicode' => '26F5', 'shortname' => ':sailboat:', 'aliases' => '', 'keywords' => 'sailboat ship transportation'],
  753. 'tomato' => ['unicode' => '1F345', 'shortname' => ':tomato:', 'aliases' => '', 'keywords' => 'tomato food fruit nature vegetable tomato fruit sauce italian'],
  754. 'sparkle' => ['unicode' => '2747', 'shortname' => ':sparkle:', 'aliases' => '', 'keywords' => 'sparkle green-square stars'],
  755. 'closed_umbrella' => ['unicode' => '1F302', 'shortname' => ':closed_umbrella:', 'aliases' => '', 'keywords' => 'closed umbrella drizzle rain weather umbrella closed rain moisture protection sun ultraviolet uv'],
  756. 'heavy_plus_sign' => ['unicode' => '2795', 'shortname' => ':heavy_plus_sign:', 'aliases' => '', 'keywords' => 'heavy plus sign calculation math'],
  757. 'mega' => ['unicode' => '1F4E3', 'shortname' => ':mega:', 'aliases' => '', 'keywords' => 'cheering megaphone sound speaker volume'],
  758. 'large_blue_diamond' => ['unicode' => '1F537', 'shortname' => ':large_blue_diamond:', 'aliases' => '', 'keywords' => 'large blue diamond shape'],
  759. 'package' => ['unicode' => '1F4E6', 'shortname' => ':package:', 'aliases' => '', 'keywords' => 'package gift mail'],
  760. 'heavy_minus_sign' => ['unicode' => '2796', 'shortname' => ':heavy_minus_sign:', 'aliases' => '', 'keywords' => 'heavy minus sign calculation math'],
  761. 'city_sunset' => ['unicode' => '1F307', 'shortname' => ':city_sunset:', 'aliases' => ':city_sunrise:', 'keywords' => 'sunset over buildings photo city scape sunrise dawn light morning metropolitan rise sun'],
  762. 'soon' => ['unicode' => '1F51C', 'shortname' => ':soon:', 'aliases' => '', 'keywords' => 'soon with rightwards arrow above arrow words'],
  763. 'congratulations' => ['unicode' => '3297', 'shortname' => ':congratulations:', 'aliases' => '', 'keywords' => 'circled ideograph congratulation chinese japanese kanji'],
  764. 'secret' => ['unicode' => '3299', 'shortname' => ':secret:', 'aliases' => '', 'keywords' => 'circled ideograph secret privacy'],
  765. 'no_entry' => ['unicode' => '26D4', 'shortname' => ':no_entry:', 'aliases' => '', 'keywords' => 'no entry bad denied limit privacy security stop'],
  766. 'aries' => ['unicode' => '2648', 'shortname' => ':aries:', 'aliases' => '', 'keywords' => 'aries aries ram astrology greek constellation stars zodiac sign purple-square sign zodiac horoscope'],
  767. 'purse' => ['unicode' => '1F45B', 'shortname' => ':purse:', 'aliases' => '', 'keywords' => 'purse accessories fashion money purse clutch bag handbag coin bag accessory money ladies shopping'],
  768. 'dragon_face' => ['unicode' => '1F432', 'shortname' => ':dragon_face:', 'aliases' => '', 'keywords' => 'dragon face animal chinese green myth nature dragon head fire legendary myth'],
  769. 'leo' => ['unicode' => '264C', 'shortname' => ':leo:', 'aliases' => '', 'keywords' => 'leo leo lion astrology greek constellation stars zodiac sign purple-square sign zodiac horoscope'],
  770. 'ship' => ['unicode' => '1F6A2', 'shortname' => ':ship:', 'aliases' => '', 'keywords' => 'ship titanic transportation ferry ship boat'],
  771. 'white_flower' => ['unicode' => '1F4AE', 'shortname' => ':white_flower:', 'aliases' => '', 'keywords' => 'white flower japanese white flower teacher school grade score brilliance intelligence homework student assignment praise'],
  772. 'id' => ['unicode' => '1F1EE-1F1E9', 'shortname' => ':id:', 'aliases' => '', 'keywords' => 'indonesia country nation'],
  773. 'wedding' => ['unicode' => '1F492', 'shortname' => ':wedding:', 'aliases' => '', 'keywords' => 'wedding affection bride couple groom like love marriage'],
  774. 'boot' => ['unicode' => '1F462', 'shortname' => ':boot:', 'aliases' => '', 'keywords' => 'womans boots fashion shoes'],
  775. 'radio_button' => ['unicode' => '1F518', 'shortname' => ':radio_button:', 'aliases' => '', 'keywords' => 'radio button input'],
  776. 'notebook' => ['unicode' => '1F4D3', 'shortname' => ':notebook:', 'aliases' => '', 'keywords' => 'notebook notes paper record stationery'],
  777. 'gemini' => ['unicode' => '264A', 'shortname' => ':gemini:', 'aliases' => '', 'keywords' => 'gemini gemini twins astrology greek constellation stars zodiac sign sign zodiac horoscope'],
  778. 'bell' => ['unicode' => '1F514', 'shortname' => ':bell:', 'aliases' => '', 'keywords' => 'bell chime christmas notification sound xmas'],
  779. 'boar' => ['unicode' => '1F417', 'shortname' => ':boar:', 'aliases' => '', 'keywords' => 'boar animal nature'],
  780. 'ambulance' => ['unicode' => '1F691', 'shortname' => ':ambulance:', 'aliases' => '', 'keywords' => 'ambulance 911 health ambulance emergency medical help assistance'],
  781. 'mount_fuji' => ['unicode' => '1F5FB', 'shortname' => ':mount_fuji:', 'aliases' => '', 'keywords' => 'mount fuji japan mountain nature photo'],
  782. 'sandal' => ['unicode' => '1F461', 'shortname' => ':sandal:', 'aliases' => '', 'keywords' => 'womans sandal fashion shoes'],
  783. 'round_pushpin' => ['unicode' => '1F4CD', 'shortname' => ':round_pushpin:', 'aliases' => '', 'keywords' => 'round pushpin stationery'],
  784. 'keycap_ten' => ['unicode' => '1F51F', 'shortname' => ':keycap_ten:', 'aliases' => '', 'keywords' => 'keycap ten 10 blue-square numbers'],
  785. 'ledger' => ['unicode' => '1F4D2', 'shortname' => ':ledger:', 'aliases' => '', 'keywords' => 'ledger notes paper'],
  786. 'womans_hat' => ['unicode' => '1F452', 'shortname' => ':womans_hat:', 'aliases' => '', 'keywords' => 'womans hat accessories fashion female'],
  787. 'envelope_with_arrow' => ['unicode' => '1F4E9', 'shortname' => ':envelope_with_arrow:', 'aliases' => '', 'keywords' => 'envelope with downwards arrow above email'],
  788. 'black_joker' => ['unicode' => '1F0CF', 'shortname' => ':black_joker:', 'aliases' => '', 'keywords' => 'playing card black joker cards game poker'],
  789. 'part_alternation_mark' => ['unicode' => '303D', 'shortname' => ':part_alternation_mark:', 'aliases' => '', 'keywords' => 'part alternation mark graph sing song vocal music karaoke cue letter m japanese'],
  790. 'o2' => ['unicode' => '1F17E', 'shortname' => ':o2:', 'aliases' => '', 'keywords' => 'negative squared latin capital letter o alphabet letter red-square'],
  791. 'office' => ['unicode' => '1F3E2', 'shortname' => ':office:', 'aliases' => '', 'keywords' => 'office building building bureau work'],
  792. 'volcano' => ['unicode' => '1F30B', 'shortname' => ':volcano:', 'aliases' => '', 'keywords' => 'volcano nature photo volcano lava magma hot explode'],
  793. 'aquarius' => ['unicode' => '2652', 'shortname' => ':aquarius:', 'aliases' => '', 'keywords' => 'aquarius aquarius water bearer astrology greek constellation stars zodiac sign purple-square sign zodiac horoscope'],
  794. 'taurus' => ['unicode' => '2649', 'shortname' => ':taurus:', 'aliases' => '', 'keywords' => 'taurus purple-square sign taurus bull astrology greek constellation stars zodiac sign zodiac horoscope'],
  795. 'pushpin' => ['unicode' => '1F4CC', 'shortname' => ':pushpin:', 'aliases' => '', 'keywords' => 'pushpin stationery'],
  796. 'violin' => ['unicode' => '1F3BB', 'shortname' => ':violin:', 'aliases' => '', 'keywords' => 'violin instrument music violin fiddle music instrument'],
  797. 'virgo' => ['unicode' => '264D', 'shortname' => ':virgo:', 'aliases' => '', 'keywords' => 'virgo sign virgo maiden astrology greek constellation stars zodiac sign zodiac horoscope'],
  798. 'ski' => ['unicode' => '1F3BF', 'shortname' => ':ski:', 'aliases' => '', 'keywords' => 'ski and ski boot cold sports winter ski downhill cross-country poles snow winter mountain alpine powder slalom freestyle'],
  799. 'taxi' => ['unicode' => '1F695', 'shortname' => ':taxi:', 'aliases' => '', 'keywords' => 'taxi cars transportation uber vehicle taxi car automobile city transport service'],
  800. 'stars' => ['unicode' => '1F320', 'shortname' => ':stars:', 'aliases' => '', 'keywords' => 'shooting star night photo shooting shoot star sky night comet meteoroid'],
  801. 'speedboat' => ['unicode' => '1F6A4', 'shortname' => ':speedboat:', 'aliases' => '', 'keywords' => 'speedboat ship transportation vehicle motor speed ski power boat'],
  802. 'hourglass_flowing_sand' => ['unicode' => '23F3', 'shortname' => ':hourglass_flowing_sand:', 'aliases' => '', 'keywords' => 'hourglass with flowing sand countdown oldschool time'],
  803. 'ferris_wheel' => ['unicode' => '1F3A1', 'shortname' => ':ferris_wheel:', 'aliases' => '', 'keywords' => 'ferris wheel carnival londoneye photo farris wheel amusement park fair ride entertainment'],
  804. 'tent' => ['unicode' => '26FA', 'shortname' => ':tent:', 'aliases' => '', 'keywords' => 'tent camp outdoors photo'],
  805. 'love_hotel' => ['unicode' => '1F3E9', 'shortname' => ':love_hotel:', 'aliases' => '', 'keywords' => 'love hotel affection dating like love hotel love sex romance leisure adultery prostitution hospital birth happy'],
  806. 'church' => ['unicode' => '26EA', 'shortname' => ':church:', 'aliases' => '', 'keywords' => 'church building christ religion'],
  807. 'briefcase' => ['unicode' => '1F4BC', 'shortname' => ':briefcase:', 'aliases' => '', 'keywords' => 'briefcase business documents work'],
  808. 'womans_clothes' => ['unicode' => '1F45A', 'shortname' => ':womans_clothes:', 'aliases' => '', 'keywords' => 'womans clothes fashion woman clothing clothes blouse shirt wardrobe breasts cleavage shopping shop dressing dressed'],
  809. 'dvd' => ['unicode' => '1F4C0', 'shortname' => ':dvd:', 'aliases' => '', 'keywords' => 'dvd cd disc disk'],
  810. 'libra' => ['unicode' => '264E', 'shortname' => ':libra:', 'aliases' => '', 'keywords' => 'libra libra scales astrology greek constellation stars zodiac sign purple-square sign zodiac horoscope'],
  811. 'sagittarius' => ['unicode' => '2650', 'shortname' => ':sagittarius:', 'aliases' => '', 'keywords' => 'sagittarius sagittarius centaur archer astrology greek constellation stars zodiac sign sign zodiac horoscope'],
  812. 'oden' => ['unicode' => '1F362', 'shortname' => ':oden:', 'aliases' => '', 'keywords' => 'oden food japanese oden seafood casserole stew'],
  813. 'game_die' => ['unicode' => '1F3B2', 'shortname' => ':game_die:', 'aliases' => '', 'keywords' => 'game die dice game die dice craps gamble play'],
  814. 'grey_question' => ['unicode' => '2754', 'shortname' => ':grey_question:', 'aliases' => '', 'keywords' => 'white question mark ornament doubts'],
  815. 'fast_forward' => ['unicode' => '23E9', 'shortname' => ':fast_forward:', 'aliases' => '', 'keywords' => 'black right-pointing double triangle blue-square'],
  816. 'flashlight' => ['unicode' => '1F526', 'shortname' => ':flashlight:', 'aliases' => '', 'keywords' => 'electric torch dark'],
  817. 'triangular_flag_on_post' => ['unicode' => '1F6A9', 'shortname' => ':triangular_flag_on_post:', 'aliases' => '', 'keywords' => 'triangular flag on post triangle triangular flag golf post flagpole'],
  818. 'tanabata_tree' => ['unicode' => '1F38B', 'shortname' => ':tanabata_tree:', 'aliases' => '', 'keywords' => 'tanabata tree nature plant tanabata tree festival star wish holiday'],
  819. 'dango' => ['unicode' => '1F361', 'shortname' => ':dango:', 'aliases' => '', 'keywords' => 'dango food dango japanese dumpling mochi balls skewer'],
  820. 'signal_strength' => ['unicode' => '1F4F6', 'shortname' => ':signal_strength:', 'aliases' => '', 'keywords' => 'antenna with bars blue-square'],
  821. 'video_camera' => ['unicode' => '1F4F9', 'shortname' => ':video_camera:', 'aliases' => '', 'keywords' => 'video camera film record'],
  822. 'negative_squared_cross_mark' => ['unicode' => '274E', 'shortname' => ':negative_squared_cross_mark:', 'aliases' => '', 'keywords' => 'negative squared cross mark deny green-square no x'],
  823. 'black_medium_square' => ['unicode' => '25FC', 'shortname' => ':black_medium_square:', 'aliases' => '', 'keywords' => 'black medium square shape'],
  824. 'yen' => ['unicode' => '1F4B4', 'shortname' => ':yen:', 'aliases' => '', 'keywords' => 'banknote with yen sign currency dollar japanese money yen japan japanese banknote money currency paper cash bill'],
  825. 'blowfish' => ['unicode' => '1F421', 'shortname' => ':blowfish:', 'aliases' => '', 'keywords' => 'blowfish food nature ocean sea blowfish pufferfish puffer ballonfish toadfish fugu fish sushi'],
  826. 'white_large_square' => ['unicode' => '2B1C', 'shortname' => ':white_large_square:', 'aliases' => '', 'keywords' => 'white large square shape'],
  827. 'beginner' => ['unicode' => '1F530', 'shortname' => ':beginner:', 'aliases' => '', 'keywords' => 'japanese symbol for beginner badge shield'],
  828. 'school' => ['unicode' => '1F3EB', 'shortname' => ':school:', 'aliases' => '', 'keywords' => 'school building school university elementary middle high college teach education'],
  829. 'new' => ['unicode' => '1F195', 'shortname' => ':new:', 'aliases' => '', 'keywords' => 'squared new blue-square'],
  830. 'clock1' => ['unicode' => '1F550', 'shortname' => ':clock1:', 'aliases' => '', 'keywords' => 'clock face one oclock clock time'],
  831. 'womens' => ['unicode' => '1F6BA', 'shortname' => ':womens:', 'aliases' => '', 'keywords' => 'womens symbol purple-square woman bathroom restroom sign girl female avatar'],
  832. 'running_shirt_with_sash' => ['unicode' => '1F3BD', 'shortname' => ':running_shirt_with_sash:', 'aliases' => '', 'keywords' => 'running shirt with sash pageant play running run shirt cloths compete sports'],
  833. 'radio' => ['unicode' => '1F4FB', 'shortname' => ':radio:', 'aliases' => '', 'keywords' => 'radio communication music podcast program'],
  834. 'on' => ['unicode' => '1F51B', 'shortname' => ':on:', 'aliases' => '', 'keywords' => 'on with exclamation mark with left right arrow abo arrow words'],
  835. 'hourglass' => ['unicode' => '231B', 'shortname' => ':hourglass:', 'aliases' => '', 'keywords' => 'hourglass clock oldschool time'],
  836. 'pisces' => ['unicode' => '2653', 'shortname' => ':pisces:', 'aliases' => '', 'keywords' => 'pisces pisces fish astrology greek constellation stars zodiac sign purple-square sign zodiac horoscope'],
  837. 'nut_and_bolt' => ['unicode' => '1F529', 'shortname' => ':nut_and_bolt:', 'aliases' => '', 'keywords' => 'nut and bolt handy tools'],
  838. 'free' => ['unicode' => '1F193', 'shortname' => ':free:', 'aliases' => '', 'keywords' => 'squared free blue-square words'],
  839. 'bridge_at_night' => ['unicode' => '1F309', 'shortname' => ':bridge_at_night:', 'aliases' => '', 'keywords' => 'bridge at night photo sanfrancisco bridge night water road evening suspension golden gate'],
  840. 'saxophone' => ['unicode' => '1F3B7', 'shortname' => ':saxophone:', 'aliases' => '', 'keywords' => 'saxophone instrument music saxophone sax music instrument woodwind'],
  841. 'white_square_button' => ['unicode' => '1F533', 'shortname' => ':white_square_button:', 'aliases' => '', 'keywords' => 'white square button shape'],
  842. 'mobile_phone_off' => ['unicode' => '1F4F4', 'shortname' => ':mobile_phone_off:', 'aliases' => '', 'keywords' => 'mobile phone off mute'],
  843. 'closed_book' => ['unicode' => '1F4D5', 'shortname' => ':closed_book:', 'aliases' => '', 'keywords' => 'closed book knowledge library read'],
  844. 'european_castle' => ['unicode' => '1F3F0', 'shortname' => ':european_castle:', 'aliases' => '', 'keywords' => 'european castle building history royalty castle european residence royalty disneyland disney fort fortified moat tower princess prince lord king queen fortress nobel stronghold'],
  845. 'clock12' => ['unicode' => '1F55B', 'shortname' => ':clock12:', 'aliases' => '', 'keywords' => 'clock face twelve oclock clock time'],
  846. 'white_medium_square' => ['unicode' => '25FB', 'shortname' => ':white_medium_square:', 'aliases' => '', 'keywords' => 'white medium square shape'],
  847. 'foggy' => ['unicode' => '1F301', 'shortname' => ':foggy:', 'aliases' => '', 'keywords' => 'foggy mountain photo bridge weather fog foggy'],
  848. 'minidisc' => ['unicode' => '1F4BD', 'shortname' => ':minidisc:', 'aliases' => '', 'keywords' => 'minidisc data disc disk record technology'],
  849. 'fire_engine' => ['unicode' => '1F692', 'shortname' => ':fire_engine:', 'aliases' => '', 'keywords' => 'fire engine cars transportation vehicle fire fighter engine truck emergency medical'],
  850. 'clock2' => ['unicode' => '1F551', 'shortname' => ':clock2:', 'aliases' => '', 'keywords' => 'clock face two oclock clock time'],
  851. 'rice_ball' => ['unicode' => '1F359', 'shortname' => ':rice_ball:', 'aliases' => '', 'keywords' => 'rice ball food japanese rice ball white nori seaweed japanese'],
  852. 'wind_chime' => ['unicode' => '1F390', 'shortname' => ':wind_chime:', 'aliases' => '', 'keywords' => 'wind chime ding nature wind chime bell fūrin instrument music spirits soothing protective spiritual sound'],
  853. 'capricorn' => ['unicode' => '2651', 'shortname' => ':capricorn:', 'aliases' => '', 'keywords' => 'capricorn capricorn sea-goat goat-horned astrology greek constellation stars zodiac sign sign zodiac horoscope'],
  854. 'vs' => ['unicode' => '1F19A', 'shortname' => ':vs:', 'aliases' => '', 'keywords' => 'squared vs orange-square words'],
  855. 'melon' => ['unicode' => '1F348', 'shortname' => ':melon:', 'aliases' => '', 'keywords' => 'melon food fruit nature melon cantaloupe honeydew'],
  856. 'trumpet' => ['unicode' => '1F3BA', 'shortname' => ':trumpet:', 'aliases' => '', 'keywords' => 'trumpet brass music trumpet brass music instrument'],
  857. 'school_satchel' => ['unicode' => '1F392', 'shortname' => ':school_satchel:', 'aliases' => '', 'keywords' => 'school satchel bag education student school satchel backpack bag packing pack hike education adventure travel sightsee'],
  858. 'tokyo_tower' => ['unicode' => '1F5FC', 'shortname' => ':tokyo_tower:', 'aliases' => '', 'keywords' => 'tokyo tower japan photo'],
  859. 'station' => ['unicode' => '1F689', 'shortname' => ':station:', 'aliases' => '', 'keywords' => 'station public transportation vehicle station train subway'],
  860. 'end' => ['unicode' => '1F51A', 'shortname' => ':end:', 'aliases' => '', 'keywords' => 'end with leftwards arrow above arrow words'],
  861. 'bamboo' => ['unicode' => '1F38D', 'shortname' => ':bamboo:', 'aliases' => '', 'keywords' => 'pine decoration nature plant vegetable pine bamboo decoration new years spirits harvest prosperity longevity fortune luck welcome farming agriculture'],
  862. 'truck' => ['unicode' => '1F69A', 'shortname' => ':truck:', 'aliases' => '', 'keywords' => 'delivery truck cars transportation truck delivery package'],
  863. 'clock3' => ['unicode' => '1F552', 'shortname' => ':clock3:', 'aliases' => '', 'keywords' => 'clock face three oclock clock time'],
  864. 'six_pointed_star' => ['unicode' => '1F52F', 'shortname' => ':six_pointed_star:', 'aliases' => '', 'keywords' => 'six pointed star with middle dot purple-square'],
  865. 'mag_right' => ['unicode' => '1F50E', 'shortname' => ':mag_right:', 'aliases' => '', 'keywords' => 'right-pointing magnifying glass search zoom detective investigator detail details'],
  866. 'kimono' => ['unicode' => '1F458', 'shortname' => ':kimono:', 'aliases' => '', 'keywords' => 'kimono dress fashion female japanese women'],
  867. 'railway_car' => ['unicode' => '1F683', 'shortname' => ':railway_car:', 'aliases' => '', 'keywords' => 'railway car transportation vehicle railway rail car coach train'],
  868. 'crossed_flags' => ['unicode' => '1F38C', 'shortname' => ':crossed_flags:', 'aliases' => '', 'keywords' => 'crossed flags japan'],
  869. 'sweet_potato' => ['unicode' => '1F360', 'shortname' => ':sweet_potato:', 'aliases' => '', 'keywords' => 'roasted sweet potato food nature sweet potato potassium roasted roast'],
  870. 'white_small_square' => ['unicode' => '25AB', 'shortname' => ':white_small_square:', 'aliases' => '', 'keywords' => 'white small square shape'],
  871. 'date' => ['unicode' => '1F4C5', 'shortname' => ':date:', 'aliases' => '', 'keywords' => 'calendar calendar schedule'],
  872. 'newspaper' => ['unicode' => '1F4F0', 'shortname' => ':newspaper:', 'aliases' => '', 'keywords' => 'newspaper headline press'],
  873. 'no_smoking' => ['unicode' => '1F6AD', 'shortname' => ':no_smoking:', 'aliases' => '', 'keywords' => 'no smoking symbol cigarette no smoking cigarette smoke cancer lungs inhale tar nicotine'],
  874. 'scroll' => ['unicode' => '1F4DC', 'shortname' => ':scroll:', 'aliases' => '', 'keywords' => 'scroll documents'],
  875. 'flags' => ['unicode' => '1F38F', 'shortname' => ':flags:', 'aliases' => '', 'keywords' => 'carp streamer banner carp fish japanese koinobori children kids boys celebration happiness carp streamers japanese holiday flags'],
  876. 'mag' => ['unicode' => '1F50D', 'shortname' => ':mag:', 'aliases' => '', 'keywords' => 'left-pointing magnifying glass search zoom detective investigator detail details'],
  877. 'wheelchair' => ['unicode' => '267F', 'shortname' => ':wheelchair:', 'aliases' => '', 'keywords' => 'wheelchair symbol blue-square disabled'],
  878. 'sake' => ['unicode' => '1F376', 'shortname' => ':sake:', 'aliases' => '', 'keywords' => 'sake bottle and cup beverage drink drunk wine sake wine rice ferment alcohol japanese drink'],
  879. 'arrow_up_down' => ['unicode' => '2195', 'shortname' => ':arrow_up_down:', 'aliases' => '', 'keywords' => 'up down arrow blue-square'],
  880. 'black_large_square' => ['unicode' => '2B1B', 'shortname' => ':black_large_square:', 'aliases' => '', 'keywords' => 'black large square shape'],
  881. 'wrench' => ['unicode' => '1F527', 'shortname' => ':wrench:', 'aliases' => '', 'keywords' => 'wrench diy ikea tools'],
  882. 'construction' => ['unicode' => '1F6A7', 'shortname' => ':construction:', 'aliases' => '', 'keywords' => 'construction sign caution progress wip'],
  883. 'calendar' => ['unicode' => '1F4C6', 'shortname' => ':calendar:', 'aliases' => '', 'keywords' => 'tear-off calendar schedule'],
  884. 'hotel' => ['unicode' => '1F3E8', 'shortname' => ':hotel:', 'aliases' => '', 'keywords' => 'hotel accomodation building checkin whotel hotel motel holiday inn hospital'],
  885. 'satellite' => ['unicode' => '1F4E1', 'shortname' => ':satellite:', 'aliases' => '', 'keywords' => 'satellite antenna communication'],
  886. 'rewind' => ['unicode' => '23EA', 'shortname' => ':rewind:', 'aliases' => '', 'keywords' => 'black left-pointing double triangle blue-square play'],
  887. 'clock4' => ['unicode' => '1F553', 'shortname' => ':clock4:', 'aliases' => '', 'keywords' => 'clock face four oclock clock time'],
  888. 'circus_tent' => ['unicode' => '1F3AA', 'shortname' => ':circus_tent:', 'aliases' => '', 'keywords' => 'circus tent carnival festival party circus tent event carnival big top canvas'],
  889. 'link' => ['unicode' => '1F517', 'shortname' => ':link:', 'aliases' => '', 'keywords' => 'link symbol rings url'],
  890. 'bullettrain_side' => ['unicode' => '1F684', 'shortname' => ':bullettrain_side:', 'aliases' => '', 'keywords' => 'high-speed train transportation vehicle train bullet rail'],
  891. 'mens' => ['unicode' => '1F6B9', 'shortname' => ':mens:', 'aliases' => '', 'keywords' => 'mens symbol restroom toilet wc men bathroom restroom sign boy male avatar'],
  892. 'carousel_horse' => ['unicode' => '1F3A0', 'shortname' => ':carousel_horse:', 'aliases' => '', 'keywords' => 'carousel horse carnival horse photo carousel horse amusement park ride entertainment park fair'],
  893. 'ideograph_advantage' => ['unicode' => '1F250', 'shortname' => ':ideograph_advantage:', 'aliases' => '', 'keywords' => 'circled ideograph advantage chinese get kanji obtain'],
  894. 'atm' => ['unicode' => '1F3E7', 'shortname' => ':atm:', 'aliases' => '', 'keywords' => 'automated teller machine atm cash withdrawal money deposit financial bank adam payday bank blue-square cash money payment'],
  895. 'vhs' => ['unicode' => '1F4FC', 'shortname' => ':vhs:', 'aliases' => '', 'keywords' => 'videocassette oldschool record video'],
  896. 'arrow_double_down' => ['unicode' => '23EC', 'shortname' => ':arrow_double_down:', 'aliases' => '', 'keywords' => 'black down-pointing double triangle arrow blue-square'],
  897. 'clock9' => ['unicode' => '1F558', 'shortname' => ':clock9:', 'aliases' => '', 'keywords' => 'clock face nine oclock clock time'],
  898. 'blue_book' => ['unicode' => '1F4D8', 'shortname' => ':blue_book:', 'aliases' => '', 'keywords' => 'blue book knowledge library read'],
  899. 'arrow_heading_up' => ['unicode' => '2934', 'shortname' => ':arrow_heading_up:', 'aliases' => '', 'keywords' => 'arrow pointing rightwards then curving upwards arrow blue-square'],
  900. 'metro' => ['unicode' => '1F687', 'shortname' => ':metro:', 'aliases' => '', 'keywords' => 'metro blue-square mrt transportation tube underground metro subway underground train'],
  901. 'clock5' => ['unicode' => '1F554', 'shortname' => ':clock5:', 'aliases' => '', 'keywords' => 'clock face five oclock clock time'],
  902. 'wc' => ['unicode' => '1F6BE', 'shortname' => ':wc:', 'aliases' => '', 'keywords' => 'water closet blue-square restroom toilet water closet toilet bathroom throne porcelain waste flush plumbing'],
  903. 'chart_with_upwards_trend' => ['unicode' => '1F4C8', 'shortname' => ':chart_with_upwards_trend:', 'aliases' => '', 'keywords' => 'chart with upwards trend graph'],
  904. 'slot_machine' => ['unicode' => '1F3B0', 'shortname' => ':slot_machine:', 'aliases' => '', 'keywords' => 'slot machine bet gamble vegas slot machine gamble one-armed bandit slots luck'],
  905. 'rice_cracker' => ['unicode' => '1F358', 'shortname' => ':rice_cracker:', 'aliases' => '', 'keywords' => 'rice cracker food japanese rice cracker seaweed food japanese'],
  906. 'page_facing_up' => ['unicode' => '1F4C4', 'shortname' => ':page_facing_up:', 'aliases' => '', 'keywords' => 'page facing up documents'],
  907. 'arrow_up_small' => ['unicode' => '1F53C', 'shortname' => ':arrow_up_small:', 'aliases' => '', 'keywords' => 'up-pointing small red triangle blue-square'],
  908. 'green_book' => ['unicode' => '1F4D7', 'shortname' => ':green_book:', 'aliases' => '', 'keywords' => 'green book knowledge library read'],
  909. 'white_medium_small_square' => ['unicode' => '25FD', 'shortname' => ':white_medium_small_square:', 'aliases' => '', 'keywords' => 'white medium small square shape'],
  910. 'traffic_light' => ['unicode' => '1F6A5', 'shortname' => ':traffic_light:', 'aliases' => '', 'keywords' => 'horizontal traffic light traffic transportation traffic light stop go yield horizontal'],
  911. 'ng' => ['unicode' => '1F1F3-1F1EC', 'shortname' => ':ng:', 'aliases' => '', 'keywords' => 'nigeria country nation'],
  912. 'clock10' => ['unicode' => '1F559', 'shortname' => ':clock10:', 'aliases' => '', 'keywords' => 'clock face ten oclock clock time'], 1234 => ['unicode' => '1F522', 'shortname' => ':1234:', 'aliases' => '', 'keywords' => 'input symbol for numbers blue-square numbers'],
  913. 'convenience_store' => ['unicode' => '1F3EA', 'shortname' => ':convenience_store:', 'aliases' => '', 'keywords' => 'convenience store building'],
  914. 'paperclip' => ['unicode' => '1F4CE', 'shortname' => ':paperclip:', 'aliases' => '', 'keywords' => 'paperclip documents stationery'],
  915. 'name_badge' => ['unicode' => '1F4DB', 'shortname' => ':name_badge:', 'aliases' => '', 'keywords' => 'name badge fire forbid'],
  916. 'clock8' => ['unicode' => '1F557', 'shortname' => ':clock8:', 'aliases' => '', 'keywords' => 'clock face eight oclock clock time'],
  917. 'arrow_down_small' => ['unicode' => '1F53D', 'shortname' => ':arrow_down_small:', 'aliases' => '', 'keywords' => 'down-pointing small red triangle arrow blue-square'],
  918. 'clipboard' => ['unicode' => '1F4CB', 'shortname' => ':clipboard:', 'aliases' => '', 'keywords' => 'clipboard documents stationery'],
  919. 'page_with_curl' => ['unicode' => '1F4C3', 'shortname' => ':page_with_curl:', 'aliases' => '', 'keywords' => 'page with curl documents'],
  920. 'bookmark_tabs' => ['unicode' => '1F4D1', 'shortname' => ':bookmark_tabs:', 'aliases' => '', 'keywords' => 'bookmark tabs favorite'],
  921. 'bank' => ['unicode' => '1F3E6', 'shortname' => ':bank:', 'aliases' => '', 'keywords' => 'bank building'],
  922. 'clock11' => ['unicode' => '1F55A', 'shortname' => ':clock11:', 'aliases' => '', 'keywords' => 'clock face eleven oclock clock time'],
  923. 'e-mail' => ['unicode' => '1F4E7', 'shortname' => ':e-mail:', 'aliases' => ':email:', 'keywords' => 'e-mail symbol communication inbox'],
  924. 'chart_with_downwards_trend' => ['unicode' => '1F4C9', 'shortname' => ':chart_with_downwards_trend:', 'aliases' => '', 'keywords' => 'chart with downwards trend graph'],
  925. 'bullettrain_front' => ['unicode' => '1F685', 'shortname' => ':bullettrain_front:', 'aliases' => '', 'keywords' => 'high-speed train with bullet nose transportation train bullet rail'],
  926. 'bar_chart' => ['unicode' => '1F4CA', 'shortname' => ':bar_chart:', 'aliases' => '', 'keywords' => 'bar chart graph presentation stats'],
  927. 'notebook_with_decorative_cover' => ['unicode' => '1F4D4', 'shortname' => ':notebook_with_decorative_cover:', 'aliases' => '', 'keywords' => 'notebook with decorative cover classroom notes paper record'],
  928. 'ticket' => ['unicode' => '1F3AB', 'shortname' => ':ticket:', 'aliases' => '', 'keywords' => 'ticket concert event pass ticket show entertainment stub admission proof purchase'],
  929. 'information_source' => ['unicode' => '2139', 'shortname' => ':information_source:', 'aliases' => '', 'keywords' => 'information source alphabet blue-square letter'],
  930. 'pouch' => ['unicode' => '1F45D', 'shortname' => ':pouch:', 'aliases' => '', 'keywords' => 'pouch accessories bag pouch bag cosmetic packing grandma makeup'],
  931. 'chart' => ['unicode' => '1F4B9', 'shortname' => ':chart:', 'aliases' => '', 'keywords' => 'chart with upwards trend and yen sign graph green-square'],
  932. 'japanese_castle' => ['unicode' => '1F3EF', 'shortname' => ':japanese_castle:', 'aliases' => '', 'keywords' => 'japanese castle building photo castle japanese residence royalty fort fortified fortress'],
  933. 'cinema' => ['unicode' => '1F3A6', 'shortname' => ':cinema:', 'aliases' => '', 'keywords' => 'cinema blue-square film movie record cinema movie theater motion picture'],
  934. 'clock7' => ['unicode' => '1F556', 'shortname' => ':clock7:', 'aliases' => '', 'keywords' => 'clock face seven oclock clock time'],
  935. 'orange_book' => ['unicode' => '1F4D9', 'shortname' => ':orange_book:', 'aliases' => '', 'keywords' => 'orange book knowledge library read'],
  936. 'restroom' => ['unicode' => '1F6BB', 'shortname' => ':restroom:', 'aliases' => '', 'keywords' => 'restroom blue-square woman man unisex bathroom restroom sign shared toilet'],
  937. 'fountain' => ['unicode' => '26F2', 'shortname' => ':fountain:', 'aliases' => '', 'keywords' => 'fountain photo'],
  938. 'clock6' => ['unicode' => '1F555', 'shortname' => ':clock6:', 'aliases' => '', 'keywords' => 'clock face six oclock clock time'],
  939. 'vibration_mode' => ['unicode' => '1F4F3', 'shortname' => ':vibration_mode:', 'aliases' => '', 'keywords' => 'vibration mode orange-square phone'],
  940. 'ab' => ['unicode' => '1F18E', 'shortname' => ':ab:', 'aliases' => '', 'keywords' => 'negative squared ab alphabet red-square'],
  941. 'postbox' => ['unicode' => '1F4EE', 'shortname' => ':postbox:', 'aliases' => '', 'keywords' => 'postbox email envelope letter'],
  942. 'rice_scene' => ['unicode' => '1F391', 'shortname' => ':rice_scene:', 'aliases' => '', 'keywords' => 'moon viewing ceremony photo moon viewing observing otsukimi tsukimi rice scene festival autumn'],
  943. 'floppy_disk' => ['unicode' => '1F4BE', 'shortname' => ':floppy_disk:', 'aliases' => '', 'keywords' => 'floppy disk oldschool save technology floppy disk storage information computer drive megabyte'],
  944. 'parking' => ['unicode' => '1F17F', 'shortname' => ':parking:', 'aliases' => '', 'keywords' => 'negative squared latin capital letter p alphabet blue-square cars letter'],
  945. 'department_store' => ['unicode' => '1F3EC', 'shortname' => ':department_store:', 'aliases' => '', 'keywords' => 'department store building mall shopping department store retail sale merchandise'],
  946. 'pager' => ['unicode' => '1F4DF', 'shortname' => ':pager:', 'aliases' => '', 'keywords' => 'pager bbcall oldschool'],
  947. 'currency_exchange' => ['unicode' => '1F4B1', 'shortname' => ':currency_exchange:', 'aliases' => '', 'keywords' => 'currency exchange dollar money travel'],
  948. 'bookmark' => ['unicode' => '1F516', 'shortname' => ':bookmark:', 'aliases' => '', 'keywords' => 'bookmark favorite'],
  949. 'triangular_ruler' => ['unicode' => '1F4D0', 'shortname' => ':triangular_ruler:', 'aliases' => '', 'keywords' => 'triangular ruler architect math sketch stationery'],
  950. 'straight_ruler' => ['unicode' => '1F4CF', 'shortname' => ':straight_ruler:', 'aliases' => '', 'keywords' => 'straight ruler stationery'],
  951. 'japan' => ['unicode' => '1F5FE', 'shortname' => ':japan:', 'aliases' => '', 'keywords' => 'silhouette of japan nation'],
  952. 'flower_playing_cards' => ['unicode' => '1F3B4', 'shortname' => ':flower_playing_cards:', 'aliases' => '', 'keywords' => 'flower playing cards playing card flower game august moon special'],
  953. 'u5272' => ['unicode' => '1F239', 'shortname' => ':u5272:', 'aliases' => '', 'keywords' => 'squared cjk unified ideograph-5272 chinese cut divide kanji pink'],
  954. 'fax' => ['unicode' => '1F4E0', 'shortname' => ':fax:', 'aliases' => '', 'keywords' => 'fax machine communication technology'],
  955. 'izakaya_lantern' => ['unicode' => '1F3EE', 'shortname' => ':izakaya_lantern:', 'aliases' => '', 'keywords' => 'izakaya lantern light izakaya lantern stay drink alcohol bar sake restaurant'],
  956. 'incoming_envelope' => ['unicode' => '1F4E8', 'shortname' => ':incoming_envelope:', 'aliases' => '', 'keywords' => 'incoming envelope email inbox'],
  957. 'mailbox' => ['unicode' => '1F4EB', 'shortname' => ':mailbox:', 'aliases' => '', 'keywords' => 'closed mailbox with raised flag communication email inbox'],
  958. 'lock_with_ink_pen' => ['unicode' => '1F50F', 'shortname' => ':lock_with_ink_pen:', 'aliases' => '', 'keywords' => 'lock with ink pen secret security'],
  959. 'inbox_tray' => ['unicode' => '1F4E5', 'shortname' => ':inbox_tray:', 'aliases' => '', 'keywords' => 'inbox tray documents email'],
  960. 'post_office' => ['unicode' => '1F3E3', 'shortname' => ':post_office:', 'aliases' => '', 'keywords' => 'japanese post office building communication email'],
  961. 'card_index' => ['unicode' => '1F4C7', 'shortname' => ':card_index:', 'aliases' => '', 'keywords' => 'card index business stationery'],
  962. 'cl' => ['unicode' => '1F1E8-1F1F1', 'shortname' => ':cl:', 'aliases' => '', 'keywords' => 'chile country nation'],
  963. 'open_file_folder' => ['unicode' => '1F4C2', 'shortname' => ':open_file_folder:', 'aliases' => '', 'keywords' => 'open file folder documents load'],
  964. 'mahjong' => ['unicode' => '1F004', 'shortname' => ':mahjong:', 'aliases' => '', 'keywords' => 'mahjong tile red dragon chinese game kanji'],
  965. 'ophiuchus' => ['unicode' => '26CE', 'shortname' => ':ophiuchus:', 'aliases' => '', 'keywords' => 'ophiuchus ophiuchus serpent snake astrology greek constellation stars zodiac purple-square sign horoscope'],
  966. 'busstop' => ['unicode' => '1F68F', 'shortname' => ':busstop:', 'aliases' => '', 'keywords' => 'bus stop transportation bus stop city transport transportation'],
  967. 'abc' => ['unicode' => '1F524', 'shortname' => ':abc:', 'aliases' => '', 'keywords' => 'input symbol for latin letters alphabet blue-square'],
  968. 'u7a7a' => ['unicode' => '1F233', 'shortname' => ':u7a7a:', 'aliases' => '', 'keywords' => 'squared cjk unified ideograph-7a7a chinese empty japanese kanji'],
  969. 'capital_abcd' => ['unicode' => '1F520', 'shortname' => ':capital_abcd:', 'aliases' => '', 'keywords' => 'input symbol for latin capital letters alphabet blue-square words'],
  970. 'factory' => ['unicode' => '1F3ED', 'shortname' => ':factory:', 'aliases' => '', 'keywords' => 'factory building'],
  971. 'u7981' => ['unicode' => '1F232', 'shortname' => ':u7981:', 'aliases' => '', 'keywords' => 'squared cjk unified ideograph-7981 chinese forbidden japanese kanji limit restricted'],
  972. 'u6e80' => ['unicode' => '1F235', 'shortname' => ':u6e80:', 'aliases' => '', 'keywords' => 'squared cjk unified ideograph-6e80 chinese full japanese kanji red-square'],
  973. 'heavy_division_sign' => ['unicode' => '2797', 'shortname' => ':heavy_division_sign:', 'aliases' => '', 'keywords' => 'heavy division sign calculation divide math'],
  974. 'file_folder' => ['unicode' => '1F4C1', 'shortname' => ':file_folder:', 'aliases' => '', 'keywords' => 'file folder documents'],
  975. 'symbols' => ['unicode' => '1F523', 'shortname' => ':symbols:', 'aliases' => '', 'keywords' => 'input symbol for symbols blue-square'],
  976. 'arrow_double_up' => ['unicode' => '23EB', 'shortname' => ':arrow_double_up:', 'aliases' => '', 'keywords' => 'black up-pointing double triangle arrow blue-square'],
  977. 'u5408' => ['unicode' => '1F234', 'shortname' => ':u5408:', 'aliases' => '', 'keywords' => 'squared cjk unified ideograph-5408 chinese japanese join kanji'],
  978. 'u6307' => ['unicode' => '1F22F', 'shortname' => ':u6307:', 'aliases' => '', 'keywords' => 'squared cjk unified ideograph-6307 chinese green-square kanji point'],
  979. 'abcd' => ['unicode' => '1F521', 'shortname' => ':abcd:', 'aliases' => '', 'keywords' => 'input symbol for latin small letters alphabet blue-square'],
  980. 'mailbox_closed' => ['unicode' => '1F4EA', 'shortname' => ':mailbox_closed:', 'aliases' => '', 'keywords' => 'closed mailbox with lowered flag communication email inbox'],
  981. 'outbox_tray' => ['unicode' => '1F4E4', 'shortname' => ':outbox_tray:', 'aliases' => '', 'keywords' => 'outbox tray email inbox'],
  982. 'sa' => ['unicode' => '1F1F8-1F1E6', 'shortname' => ':sa:', 'aliases' => '', 'keywords' => 'saudi arabia country nation al arabiyah as suudiyah'],
  983. 'u55b6' => ['unicode' => '1F23A', 'shortname' => ':u55b6:', 'aliases' => '', 'keywords' => 'squared cjk unified ideograph-55b6 japanese opening hours'],
  984. 'u6709' => ['unicode' => '1F236', 'shortname' => ':u6709:', 'aliases' => '', 'keywords' => 'squared cjk unified ideograph-6709 chinese have kanji orange-square'],
  985. 'accept' => ['unicode' => '1F251', 'shortname' => ':accept:', 'aliases' => '', 'keywords' => 'circled ideograph accept agree chinese good kanji ok yes'],
  986. 'u7121' => ['unicode' => '1F21A', 'shortname' => ':u7121:', 'aliases' => '', 'keywords' => 'squared cjk unified ideograph-7121 chinese japanese kanji no nothing orange-square'],
  987. 'koko' => ['unicode' => '1F201', 'shortname' => ':koko:', 'aliases' => '', 'keywords' => 'squared katakana koko blue-square destination here japanese katakana'],
  988. 'u7533' => ['unicode' => '1F238', 'shortname' => ':u7533:', 'aliases' => '', 'keywords' => 'squared cjk unified ideograph-7533 chinese japanese kanji'],
  989. 'u6708' => ['unicode' => '1F237', 'shortname' => ':u6708:', 'aliases' => '', 'keywords' => 'squared cjk unified ideograph-6708 chinese japanese kanji moon orange-square'],
  990. 'hash' => ['unicode' => '0023-20E3', 'shortname' => ':hash:', 'aliases' => '', 'keywords' => 'number sign symbol'],
  991. 'zero' => ['unicode' => '0030-20E3', 'shortname' => ':zero:', 'aliases' => '', 'keywords' => 'digit zero blue-square null numbers'],
  992. 'one' => ['unicode' => '0031-20E3', 'shortname' => ':one:', 'aliases' => '', 'keywords' => 'digit one 1 blue-square numbers'],
  993. 'two' => ['unicode' => '0032-20E3', 'shortname' => ':two:', 'aliases' => '', 'keywords' => 'digit two 2 blue-square numbers prime'],
  994. 'three' => ['unicode' => '0033-20E3', 'shortname' => ':three:', 'aliases' => '', 'keywords' => 'digit three 3 blue-square numbers prime'],
  995. 'four' => ['unicode' => '0034-20E3', 'shortname' => ':four:', 'aliases' => '', 'keywords' => 'digit four 4 blue-square numbers'],
  996. 'five' => ['unicode' => '0035-20E3', 'shortname' => ':five:', 'aliases' => '', 'keywords' => 'digit five blue-square numbers prime'],
  997. 'speaker' => ['unicode' => '1F508', 'shortname' => ':speaker:', 'aliases' => '', 'keywords' => 'speaker sound listen hear noise'],
  998. 'six' => ['unicode' => '0036-20E3', 'shortname' => ':six:', 'aliases' => '', 'keywords' => 'digit six 6 blue-square numbers'],
  999. 'train' => ['unicode' => '1F68B', 'shortname' => ':train:', 'aliases' => '', 'keywords' => 'Tram Car tram rail'],
  1000. 'loop' => ['unicode' => '27BF', 'shortname' => ':loop:', 'aliases' => '', 'keywords' => 'double curly loop curly'],
  1001. 'seven' => ['unicode' => '0037-20E3', 'shortname' => ':seven:', 'aliases' => '', 'keywords' => 'digit seven 7 blue-square numbers prime'],
  1002. 'af' => ['unicode' => '1F1E6-1F1EB', 'shortname' => ':af:', 'aliases' => '', 'keywords' => 'afghanistan country nation afghanestan'],
  1003. 'al' => ['unicode' => '1F1E6-1F1F1', 'shortname' => ':al:', 'aliases' => '', 'keywords' => 'albania country nation shqiperia'],
  1004. 'eight' => ['unicode' => '0038-20E3', 'shortname' => ':eight:', 'aliases' => '', 'keywords' => 'digit eight 8 blue-square numbers'],
  1005. 'dz' => ['unicode' => '1F1E9-1F1FF', 'shortname' => ':dz:', 'aliases' => '', 'keywords' => 'algeria country nation al jaza\'ir al jazair'],
  1006. 'ad' => ['unicode' => '1F1E6-1F1E9', 'shortname' => ':ad:', 'aliases' => '', 'keywords' => 'andorra country nation'],
  1007. 'nine' => ['unicode' => '0039-20E3', 'shortname' => ':nine:', 'aliases' => '', 'keywords' => 'digit nine 9 blue-square numbers'],
  1008. 'ao' => ['unicode' => '1F1E6-1F1F4', 'shortname' => ':ao:', 'aliases' => '', 'keywords' => 'angola country nation'],
  1009. 'ag' => ['unicode' => '1F1E6-1F1EC', 'shortname' => ':ag:', 'aliases' => '', 'keywords' => 'antigua and barbuda country nation'],
  1010. 'ar' => ['unicode' => '1F1E6-1F1F7', 'shortname' => ':ar:', 'aliases' => '', 'keywords' => 'argentina country nation'],
  1011. 'am' => ['unicode' => '1F1E6-1F1F2', 'shortname' => ':am:', 'aliases' => '', 'keywords' => 'armenia country nation hayastan'],
  1012. 'au' => ['unicode' => '1F1E6-1F1FA', 'shortname' => ':au:', 'aliases' => '', 'keywords' => 'australia country nation'],
  1013. 'at' => ['unicode' => '1F1E6-1F1F9', 'shortname' => ':at:', 'aliases' => '', 'keywords' => 'austria country nation österreich osterreich'],
  1014. 'az' => ['unicode' => '1F1E6-1F1FF', 'shortname' => ':az:', 'aliases' => '', 'keywords' => 'azerbaijan country nation azarbaycan'],
  1015. 'bs' => ['unicode' => '1F1E7-1F1F8', 'shortname' => ':bs:', 'aliases' => '', 'keywords' => 'the bahamas country nation'],
  1016. 'bh' => ['unicode' => '1F1E7-1F1ED', 'shortname' => ':bh:', 'aliases' => '', 'keywords' => 'bahrain country nation al bahrayn'],
  1017. 'bd' => ['unicode' => '1F1E7-1F1E9', 'shortname' => ':bd:', 'aliases' => '', 'keywords' => 'bangladesh country nation'],
  1018. 'bb' => ['unicode' => '1F1E7-1F1E7', 'shortname' => ':bb:', 'aliases' => '', 'keywords' => 'barbados country nation'],
  1019. 'by' => ['unicode' => '1F1E7-1F1FE', 'shortname' => ':by:', 'aliases' => '', 'keywords' => 'belarus country nation byelarus'],
  1020. 'be' => ['unicode' => '1F1E7-1F1EA', 'shortname' => ':be:', 'aliases' => '', 'keywords' => 'belgium country nation belgique belgie'],
  1021. 'bz' => ['unicode' => '1F1E7-1F1FF', 'shortname' => ':bz:', 'aliases' => '', 'keywords' => 'belize country nation'],
  1022. 'bj' => ['unicode' => '1F1E7-1F1EF', 'shortname' => ':bj:', 'aliases' => '', 'keywords' => 'benin country nation'],
  1023. 'bt' => ['unicode' => '1F1E7-1F1F9', 'shortname' => ':bt:', 'aliases' => '', 'keywords' => 'bhutan country nation'],
  1024. 'bo' => ['unicode' => '1F1E7-1F1F4', 'shortname' => ':bo:', 'aliases' => '', 'keywords' => 'bolivia country nation'],
  1025. 'ba' => ['unicode' => '1F1E7-1F1E6', 'shortname' => ':ba:', 'aliases' => '', 'keywords' => 'bosnia and herzegovina country nation bosna i hercegovina'],
  1026. 'bw' => ['unicode' => '1F1E7-1F1FC', 'shortname' => ':bw:', 'aliases' => '', 'keywords' => 'botswana country nation'],
  1027. 'br' => ['unicode' => '1F1E7-1F1F7', 'shortname' => ':br:', 'aliases' => '', 'keywords' => 'brazil country nation brasil'],
  1028. 'bn' => ['unicode' => '1F1E7-1F1F3', 'shortname' => ':bn:', 'aliases' => '', 'keywords' => 'brunei country nation'],
  1029. 'bg' => ['unicode' => '1F1E7-1F1EC', 'shortname' => ':bg:', 'aliases' => '', 'keywords' => 'bulgaria country nation'],
  1030. 'bf' => ['unicode' => '1F1E7-1F1EB', 'shortname' => ':bf:', 'aliases' => '', 'keywords' => 'burkina faso country nation'],
  1031. 'bi' => ['unicode' => '1F1E7-1F1EE', 'shortname' => ':bi:', 'aliases' => '', 'keywords' => 'burundi country nation'],
  1032. 'kh' => ['unicode' => '1F1F0-1F1ED', 'shortname' => ':kh:', 'aliases' => '', 'keywords' => 'cambodia country nation kampuchea'],
  1033. 'cm' => ['unicode' => '1F1E8-1F1F2', 'shortname' => ':cm:', 'aliases' => '', 'keywords' => 'cameroon country nation'],
  1034. 'ca' => ['unicode' => '1F1E8-1F1E6', 'shortname' => ':ca:', 'aliases' => '', 'keywords' => 'canada country nation'],
  1035. 'cv' => ['unicode' => '1F1E8-1F1FB', 'shortname' => ':cv:', 'aliases' => '', 'keywords' => 'cape verde country nation cabo verde'],
  1036. 'cf' => ['unicode' => '1F1E8-1F1EB', 'shortname' => ':cf:', 'aliases' => '', 'keywords' => 'central african republic country nation'],
  1037. 'td' => ['unicode' => '1F1F9-1F1E9', 'shortname' => ':td:', 'aliases' => '', 'keywords' => 'chad country nation tchad'],
  1038. 'co' => ['unicode' => '1F1E8-1F1F4', 'shortname' => ':co:', 'aliases' => '', 'keywords' => 'colombia country nation'],
  1039. 'km' => ['unicode' => '1F1F0-1F1F2', 'shortname' => ':km:', 'aliases' => '', 'keywords' => 'the comoros country nation'],
  1040. 'cr' => ['unicode' => '1F1E8-1F1F7', 'shortname' => ':cr:', 'aliases' => '', 'keywords' => 'costa rica country nation'],
  1041. 'ci' => ['unicode' => '1F1E8-1F1EE', 'shortname' => ':ci:', 'aliases' => '', 'keywords' => 'cote d\'ivoire country nation'],
  1042. 'hr' => ['unicode' => '1F1ED-1F1F7', 'shortname' => ':hr:', 'aliases' => '', 'keywords' => 'croatia country nation hrvatska'],
  1043. 'cu' => ['unicode' => '1F1E8-1F1FA', 'shortname' => ':cu:', 'aliases' => '', 'keywords' => 'cuba country nation'],
  1044. 'cy' => ['unicode' => '1F1E8-1F1FE', 'shortname' => ':cy:', 'aliases' => '', 'keywords' => 'cyprus country nation kibris kypros'],
  1045. 'cz' => ['unicode' => '1F1E8-1F1FF', 'shortname' => ':cz:', 'aliases' => '', 'keywords' => 'the czech republic country nation ceska republika'],
  1046. 'dk' => ['unicode' => '1F1E9-1F1F0', 'shortname' => ':dk:', 'aliases' => '', 'keywords' => 'denmark country nation danmark'],
  1047. 'dj' => ['unicode' => '1F1E9-1F1EF', 'shortname' => ':dj:', 'aliases' => '', 'keywords' => 'djibouti country nation'],
  1048. 'dm' => ['unicode' => '1F1E9-1F1F2', 'shortname' => ':dm:', 'aliases' => '', 'keywords' => 'dominica country nation'],
  1049. 'do' => ['unicode' => '1F1E9-1F1F4', 'shortname' => ':do:', 'aliases' => '', 'keywords' => 'the dominican republic country nation'],
  1050. 'tl' => ['unicode' => '1F1F9-1F1F1', 'shortname' => ':tl:', 'aliases' => '', 'keywords' => 'east timor country nation'],
  1051. 'ec' => ['unicode' => '1F1EA-1F1E8', 'shortname' => ':ec:', 'aliases' => '', 'keywords' => 'ecuador country nation'],
  1052. 'eg' => ['unicode' => '1F1EA-1F1EC', 'shortname' => ':eg:', 'aliases' => '', 'keywords' => 'egypt country nation misr'],
  1053. 'sv' => ['unicode' => '1F1F8-1F1FB', 'shortname' => ':sv:', 'aliases' => '', 'keywords' => 'el salvador country nation'],
  1054. 'gq' => ['unicode' => '1F1EC-1F1F6', 'shortname' => ':gq:', 'aliases' => '', 'keywords' => 'equatorial guinea country nation guinea ecuatorial'],
  1055. 'er' => ['unicode' => '1F1EA-1F1F7', 'shortname' => ':er:', 'aliases' => '', 'keywords' => 'eritrea country nation hagere ertra'],
  1056. 'ee' => ['unicode' => '1F1EA-1F1EA', 'shortname' => ':ee:', 'aliases' => '', 'keywords' => 'estonia country nation eesti vabariik'],
  1057. 'et' => ['unicode' => '1F1EA-1F1F9', 'shortname' => ':et:', 'aliases' => '', 'keywords' => 'ethiopia country nation ityop\'iya ityopiya'],
  1058. 'fj' => ['unicode' => '1F1EB-1F1EF', 'shortname' => ':fj:', 'aliases' => '', 'keywords' => 'fiji country nation'],
  1059. 'fi' => ['unicode' => '1F1EB-1F1EE', 'shortname' => ':fi:', 'aliases' => '', 'keywords' => 'finland country nation suomen tasavalta'],
  1060. 'ga' => ['unicode' => '1F1EC-1F1E6', 'shortname' => ':ga:', 'aliases' => '', 'keywords' => 'gabon country nation'],
  1061. 'gm' => ['unicode' => '1F1EC-1F1F2', 'shortname' => ':gm:', 'aliases' => '', 'keywords' => 'the gambia country nation'],
  1062. 'ge' => ['unicode' => '1F1EC-1F1EA', 'shortname' => ':ge:', 'aliases' => '', 'keywords' => 'georgia country nation sak\'art\'velo sakartvelo'],
  1063. 'gh' => ['unicode' => '1F1EC-1F1ED', 'shortname' => ':gh:', 'aliases' => '', 'keywords' => 'ghana country nation'],
  1064. 'gr' => ['unicode' => '1F1EC-1F1F7', 'shortname' => ':gr:', 'aliases' => '', 'keywords' => 'greece country nation ellas ellada'],
  1065. 'gd' => ['unicode' => '1F1EC-1F1E9', 'shortname' => ':gd:', 'aliases' => '', 'keywords' => 'grenada country nation'],
  1066. 'gt' => ['unicode' => '1F1EC-1F1F9', 'shortname' => ':gt:', 'aliases' => '', 'keywords' => 'guatemala country nation'],
  1067. 'gn' => ['unicode' => '1F1EC-1F1F3', 'shortname' => ':gn:', 'aliases' => '', 'keywords' => 'guinea country nation guinee'],
  1068. 'gw' => ['unicode' => '1F1EC-1F1FC', 'shortname' => ':gw:', 'aliases' => '', 'keywords' => 'guinea-bissau country nation guine-bissau guine bissau'],
  1069. 'gy' => ['unicode' => '1F1EC-1F1FE', 'shortname' => ':gy:', 'aliases' => '', 'keywords' => 'guyana country nation'],
  1070. 'ht' => ['unicode' => '1F1ED-1F1F9', 'shortname' => ':ht:', 'aliases' => '', 'keywords' => 'haiti country nation'],
  1071. 'hn' => ['unicode' => '1F1ED-1F1F3', 'shortname' => ':hn:', 'aliases' => '', 'keywords' => 'honduras country nation'],
  1072. 'hu' => ['unicode' => '1F1ED-1F1FA', 'shortname' => ':hu:', 'aliases' => '', 'keywords' => 'hungary country nation magyarorszag'],
  1073. 'is' => ['unicode' => '1F1EE-1F1F8', 'shortname' => ':is:', 'aliases' => '', 'keywords' => 'iceland country nation lyoveldio island'],
  1074. 'in' => ['unicode' => '1F1EE-1F1F3', 'shortname' => ':in:', 'aliases' => '', 'keywords' => 'india country nation bharat'],
  1075. 'ir' => ['unicode' => '1F1EE-1F1F7', 'shortname' => ':ir:', 'aliases' => '', 'keywords' => 'iran country nation'],
  1076. 'iq' => ['unicode' => '1F1EE-1F1F6', 'shortname' => ':iq:', 'aliases' => '', 'keywords' => 'iraq country nation'],
  1077. 'ie' => ['unicode' => '1F1EE-1F1EA', 'shortname' => ':ie:', 'aliases' => '', 'keywords' => 'ireland country nation éire eire'],
  1078. 'il' => ['unicode' => '1F1EE-1F1F1', 'shortname' => ':il:', 'aliases' => '', 'keywords' => 'israel country nation yisra\'el yisrael'],
  1079. 'jm' => ['unicode' => '1F1EF-1F1F2', 'shortname' => ':jm:', 'aliases' => '', 'keywords' => 'jamaica country nation'],
  1080. 'jo' => ['unicode' => '1F1EF-1F1F4', 'shortname' => ':jo:', 'aliases' => '', 'keywords' => 'jordan country nation al urdun'],
  1081. 'kz' => ['unicode' => '1F1F0-1F1FF', 'shortname' => ':kz:', 'aliases' => '', 'keywords' => 'kazakhstan country nation qazaqstan'],
  1082. 'ke' => ['unicode' => '1F1F0-1F1EA', 'shortname' => ':ke:', 'aliases' => '', 'keywords' => 'kenya country nation'],
  1083. 'ki' => ['unicode' => '1F1F0-1F1EE', 'shortname' => ':ki:', 'aliases' => '', 'keywords' => 'kiribati country nation kiribati kiribas'],
  1084. 'xk' => ['unicode' => '1F1FD-1F1F0', 'shortname' => ':xk:', 'aliases' => '', 'keywords' => 'kosovo country nation'],
  1085. 'kw' => ['unicode' => '1F1F0-1F1FC', 'shortname' => ':kw:', 'aliases' => '', 'keywords' => 'kuwait country nation al kuwayt'],
  1086. 'cn' => ['unicode' => '1F1E8-1F1F3', 'shortname' => ':cn:', 'aliases' => '', 'keywords' => 'china china chinese prc zhong guo'],
  1087. 'kg' => ['unicode' => '1F1F0-1F1EC', 'shortname' => ':kg:', 'aliases' => '', 'keywords' => 'kyrgyzstan country nation kyrgyz respublikasy'],
  1088. 'la' => ['unicode' => '1F1F1-1F1E6', 'shortname' => ':la:', 'aliases' => '', 'keywords' => 'laos country nation'],
  1089. 'lv' => ['unicode' => '1F1F1-1F1FB', 'shortname' => ':lv:', 'aliases' => '', 'keywords' => 'latvia country nation latvija'],
  1090. 'de' => ['unicode' => '1F1E9-1F1EA', 'shortname' => ':de:', 'aliases' => '', 'keywords' => 'germany flag german nation deutschland'],
  1091. 'lb' => ['unicode' => '1F1F1-1F1E7', 'shortname' => ':lb:', 'aliases' => '', 'keywords' => 'lebanon country nation lubnan'],
  1092. 'ls' => ['unicode' => '1F1F1-1F1F8', 'shortname' => ':ls:', 'aliases' => '', 'keywords' => 'lesotho country nation'],
  1093. 'lr' => ['unicode' => '1F1F1-1F1F7', 'shortname' => ':lr:', 'aliases' => '', 'keywords' => 'liberia country nation'],
  1094. 'es' => ['unicode' => '1F1EA-1F1F8', 'shortname' => ':es:', 'aliases' => '', 'keywords' => 'spain flag nation spain españa'],
  1095. 'ly' => ['unicode' => '1F1F1-1F1FE', 'shortname' => ':ly:', 'aliases' => '', 'keywords' => 'libya country nation libiyah'],
  1096. 'li' => ['unicode' => '1F1F1-1F1EE', 'shortname' => ':li:', 'aliases' => '', 'keywords' => 'liechtenstein country nation'],
  1097. 'lt' => ['unicode' => '1F1F1-1F1F9', 'shortname' => ':lt:', 'aliases' => '', 'keywords' => 'lithuania country nation lietuva'],
  1098. 'fr' => ['unicode' => '1F1EB-1F1F7', 'shortname' => ':fr:', 'aliases' => '', 'keywords' => 'france banner flag france french nation'],
  1099. 'lu' => ['unicode' => '1F1F1-1F1FA', 'shortname' => ':lu:', 'aliases' => '', 'keywords' => 'luxembourg country nation luxembourg letzebuerg'],
  1100. 'mk' => ['unicode' => '1F1F2-1F1F0', 'shortname' => ':mk:', 'aliases' => '', 'keywords' => 'macedonia country nation'],
  1101. 'mg' => ['unicode' => '1F1F2-1F1EC', 'shortname' => ':mg:', 'aliases' => '', 'keywords' => 'madagascar country nation'],
  1102. 'gb' => ['unicode' => '1F1EC-1F1E7', 'shortname' => ':gb:', 'aliases' => '', 'keywords' => 'great britain UK banner britsh flag nation united kingdom england'],
  1103. 'mw' => ['unicode' => '1F1F2-1F1FC', 'shortname' => ':mw:', 'aliases' => '', 'keywords' => 'malawi country nation'],
  1104. 'my' => ['unicode' => '1F1F2-1F1FE', 'shortname' => ':my:', 'aliases' => '', 'keywords' => 'malaysia country nation'],
  1105. 'mv' => ['unicode' => '1F1F2-1F1FB', 'shortname' => ':mv:', 'aliases' => '', 'keywords' => 'maldives country nation dhivehi raajje'],
  1106. 'it' => ['unicode' => '1F1EE-1F1F9', 'shortname' => ':it:', 'aliases' => '', 'keywords' => 'italy flag italy italia'],
  1107. 'ml' => ['unicode' => '1F1F2-1F1F1', 'shortname' => ':ml:', 'aliases' => '', 'keywords' => 'mali country nation'],
  1108. 'mt' => ['unicode' => '1F1F2-1F1F9', 'shortname' => ':mt:', 'aliases' => '', 'keywords' => 'malta country nation'],
  1109. 'mh' => ['unicode' => '1F1F2-1F1ED', 'shortname' => ':mh:', 'aliases' => '', 'keywords' => 'the marshall islands country nation'],
  1110. 'jp' => ['unicode' => '1F1EF-1F1F5', 'shortname' => ':jp:', 'aliases' => '', 'keywords' => 'japan flag japan nation nippon'],
  1111. 'mr' => ['unicode' => '1F1F2-1F1F7', 'shortname' => ':mr:', 'aliases' => '', 'keywords' => 'mauritania country nation muritaniyah'],
  1112. 'mu' => ['unicode' => '1F1F2-1F1FA', 'shortname' => ':mu:', 'aliases' => '', 'keywords' => 'mauritius country nation'],
  1113. 'mx' => ['unicode' => '1F1F2-1F1FD', 'shortname' => ':mx:', 'aliases' => '', 'keywords' => 'mexico country nation'],
  1114. 'kr' => ['unicode' => '1F1F0-1F1F7', 'shortname' => ':kr:', 'aliases' => '', 'keywords' => 'korea flag korea nation'],
  1115. 'fm' => ['unicode' => '1F1EB-1F1F2', 'shortname' => ':fm:', 'aliases' => '', 'keywords' => 'micronesia country nation'],
  1116. 'md' => ['unicode' => '1F1F2-1F1E9', 'shortname' => ':md:', 'aliases' => '', 'keywords' => 'moldova country nation'],
  1117. 'mc' => ['unicode' => '1F1F2-1F1E8', 'shortname' => ':mc:', 'aliases' => '', 'keywords' => 'monaco country nation'],
  1118. 'us' => ['unicode' => '1F1FA-1F1F8', 'shortname' => ':us:', 'aliases' => '', 'keywords' => 'united states american banner country flag nation usa united states of america america old glory'],
  1119. 'grinning' => ['unicode' => '1F600', 'shortname' => ':grinning:', 'aliases' => '', 'keywords' => 'grinning face face happy joy smile grin grinning smiling smile smiley'],
  1120. 'mn' => ['unicode' => '1F1F2-1F1F3', 'shortname' => ':mn:', 'aliases' => '', 'keywords' => 'mongolia country nation mongol uls'],
  1121. 'innocent' => ['unicode' => '1F607', 'shortname' => ':innocent:', 'aliases' => '', 'keywords' => 'smiling face with halo angel face halo halo angel innocent ring circle heaven'],
  1122. 'me' => ['unicode' => '1F1F2-1F1EA', 'shortname' => ':me:', 'aliases' => '', 'keywords' => 'montenegro country nation crna gora'],
  1123. 'smiling_imp' => ['unicode' => '1F608', 'shortname' => ':smiling_imp:', 'aliases' => '', 'keywords' => 'smiling face with horns devil horns horns devil impish trouble'],
  1124. 'ma' => ['unicode' => '1F1F2-1F1E6', 'shortname' => ':ma:', 'aliases' => '', 'keywords' => 'morocco country nation al maghrib'],
  1125. 'ru' => ['unicode' => '1F1F7-1F1FA', 'shortname' => ':ru:', 'aliases' => '', 'keywords' => 'russia banner flag nation russian'],
  1126. 'sunglasses' => ['unicode' => '1F60E', 'shortname' => ':sunglasses:', 'aliases' => '', 'keywords' => 'smiling face with sunglasses cool face smiling sunglasses sun glasses sunny cool smooth'],
  1127. 'mz' => ['unicode' => '1F1F2-1F1FF', 'shortname' => ':mz:', 'aliases' => '', 'keywords' => 'mozambique country nation mocambique'],
  1128. 'neutral_face' => ['unicode' => '1F610', 'shortname' => ':neutral_face:', 'aliases' => '', 'keywords' => 'neutral face face indifference neutral objective impartial blank'],
  1129. 'mm' => ['unicode' => '1F1F2-1F1F2', 'shortname' => ':mm:', 'aliases' => '', 'keywords' => 'myanmar country nation myanma naingngandaw'],
  1130. 'expressionless' => ['unicode' => '1F611', 'shortname' => ':expressionless:', 'aliases' => '', 'keywords' => 'expressionless face expressionless blank void vapid without expression face indifferent'],
  1131. 'na' => ['unicode' => '1F1F3-1F1E6', 'shortname' => ':na:', 'aliases' => '', 'keywords' => 'namibia country nation'],
  1132. 'confused' => ['unicode' => '1F615', 'shortname' => ':confused:', 'aliases' => '', 'keywords' => 'confused face confused confuse daze perplex puzzle indifference skeptical undecided uneasy hesitant'],
  1133. 'nr' => ['unicode' => '1F1F3-1F1F7', 'shortname' => ':nr:', 'aliases' => '', 'keywords' => 'nauru country nation'],
  1134. 'kissing' => ['unicode' => '1F617', 'shortname' => ':kissing:', 'aliases' => '', 'keywords' => 'kissing face 3 face infatuation like love valentines kissing kiss pucker lips smooch'],
  1135. 'np' => ['unicode' => '1F1F3-1F1F5', 'shortname' => ':np:', 'aliases' => '', 'keywords' => 'nepal country nation'],
  1136. 'kissing_smiling_eyes' => ['unicode' => '1F619', 'shortname' => ':kissing_smiling_eyes:', 'aliases' => '', 'keywords' => 'kissing face with smiling eyes affection face infatuation valentines kissing kiss smile pucker lips smooch'],
  1137. 'nl' => ['unicode' => '1F1F3-1F1F1', 'shortname' => ':nl:', 'aliases' => '', 'keywords' => 'the netherlands country nation nederland holland'],
  1138. 'stuck_out_tongue' => ['unicode' => '1F61B', 'shortname' => ':stuck_out_tongue:', 'aliases' => '', 'keywords' => 'face with stuck-out tongue childish face mischievous playful prank tongue silly playful cheeky'],
  1139. 'nz' => ['unicode' => '1F1F3-1F1FF', 'shortname' => ':nz:', 'aliases' => '', 'keywords' => 'new zealand country nation aotearoa'],
  1140. 'worried' => ['unicode' => '1F61F', 'shortname' => ':worried:', 'aliases' => '', 'keywords' => 'worried face concern face nervous worried anxious distressed nervous tense'],
  1141. 'ni' => ['unicode' => '1F1F3-1F1EE', 'shortname' => ':ni:', 'aliases' => '', 'keywords' => 'nicaragua country nation'],
  1142. 'frowning' => ['unicode' => '1F626', 'shortname' => ':frowning:', 'aliases' => ':anguished:', 'keywords' => 'frowning face with open mouth aw face frown sad pout sulk glower'],
  1143. 'ne' => ['unicode' => '1F1F3-1F1EA', 'shortname' => ':ne:', 'aliases' => '', 'keywords' => 'niger country nation'],
  1144. 'anguished' => ['unicode' => '1F627', 'shortname' => ':anguished:', 'aliases' => '', 'keywords' => 'anguished face face nervous stunned pain anguish ouch misery distress grief'],
  1145. 'grimacing' => ['unicode' => '1F62C', 'shortname' => ':grimacing:', 'aliases' => '', 'keywords' => 'grimacing face face grimace teeth grimace disapprove pain'],
  1146. 'kp' => ['unicode' => '1F1F0-1F1F5', 'shortname' => ':kp:', 'aliases' => '', 'keywords' => 'north korea country nation'],
  1147. 'open_mouth' => ['unicode' => '1F62E', 'shortname' => ':open_mouth:', 'aliases' => '', 'keywords' => 'face with open mouth face impressed mouth open jaw gapping surprise wow'],
  1148. 'no' => ['unicode' => '1F1F3-1F1F4', 'shortname' => ':no:', 'aliases' => '', 'keywords' => 'norway country nation norge'],
  1149. 'hushed' => ['unicode' => '1F62F', 'shortname' => ':hushed:', 'aliases' => '', 'keywords' => 'hushed face face woo quiet hush whisper silent'],
  1150. 'om' => ['unicode' => '1F1F4-1F1F2', 'shortname' => ':om:', 'aliases' => '', 'keywords' => 'oman country nation saltanat uman'],
  1151. 'sleeping' => ['unicode' => '1F634', 'shortname' => ':sleeping:', 'aliases' => '', 'keywords' => 'sleeping face face sleepy tired sleep sleepy sleeping snore'],
  1152. 'pk' => ['unicode' => '1F1F5-1F1F0', 'shortname' => ':pk:', 'aliases' => '', 'keywords' => 'pakistan country nation'],
  1153. 'no_mouth' => ['unicode' => '1F636', 'shortname' => ':no_mouth:', 'aliases' => '', 'keywords' => 'face without mouth face hellokitty mouth silent vapid'],
  1154. 'pw' => ['unicode' => '1F1F5-1F1FC', 'shortname' => ':pw:', 'aliases' => '', 'keywords' => 'palau country nation belau'],
  1155. 'helicopter' => ['unicode' => '1F681', 'shortname' => ':helicopter:', 'aliases' => '', 'keywords' => 'helicopter transportation vehicle helicopter helo gyro gyrocopter'],
  1156. 'pa' => ['unicode' => '1F1F5-1F1E6', 'shortname' => ':pa:', 'aliases' => '', 'keywords' => 'panama country nation'],
  1157. 'steam_locomotive' => ['unicode' => '1F682', 'shortname' => ':steam_locomotive:', 'aliases' => '', 'keywords' => 'steam locomotive train transportation vehicle locomotive steam train engine'],
  1158. 'pg' => ['unicode' => '1F1F5-1F1EC', 'shortname' => ':pg:', 'aliases' => '', 'keywords' => 'papua new guinea country nation papua niu gini'],
  1159. 'train2' => ['unicode' => '1F686', 'shortname' => ':train2:', 'aliases' => '', 'keywords' => 'train transportation vehicle train locomotive rail'],
  1160. 'py' => ['unicode' => '1F1F5-1F1FE', 'shortname' => ':py:', 'aliases' => '', 'keywords' => 'paraguay country nation'],
  1161. 'light_rail' => ['unicode' => '1F688', 'shortname' => ':light_rail:', 'aliases' => '', 'keywords' => 'light rail transportation vehicle train rail light'],
  1162. 'tram' => ['unicode' => '1F68A', 'shortname' => ':tram:', 'aliases' => '', 'keywords' => 'tram transportation vehicle tram transportation transport'],
  1163. 'pe' => ['unicode' => '1F1F5-1F1EA', 'shortname' => ':pe:', 'aliases' => '', 'keywords' => 'peru country nation'],
  1164. 'oncoming_bus' => ['unicode' => '1F68D', 'shortname' => ':oncoming_bus:', 'aliases' => '', 'keywords' => 'oncoming bus transportation vehicle bus school city transportation public'],
  1165. 'ph' => ['unicode' => '1F1F5-1F1ED', 'shortname' => ':ph:', 'aliases' => '', 'keywords' => 'the philippines country nation pilipinas'],
  1166. 'trolleybus' => ['unicode' => '1F68E', 'shortname' => ':trolleybus:', 'aliases' => '', 'keywords' => 'trolleybus bart transportation vehicle trolley bus city transport transportation'],
  1167. 'pl' => ['unicode' => '1F1F5-1F1F1', 'shortname' => ':pl:', 'aliases' => '', 'keywords' => 'poland country nation polska'],
  1168. 'minibus' => ['unicode' => '1F690', 'shortname' => ':minibus:', 'aliases' => '', 'keywords' => 'minibus car transportation vehicle bus city transport transportation'],
  1169. 'pt' => ['unicode' => '1F1F5-1F1F9', 'shortname' => ':pt:', 'aliases' => '', 'keywords' => 'portugal country nation'],
  1170. 'oncoming_police_car' => ['unicode' => '1F694', 'shortname' => ':oncoming_police_car:', 'aliases' => '', 'keywords' => 'oncoming police car enforcement law vehicle police car emergency ticket citation crime help officer'],
  1171. 'qa' => ['unicode' => '1F1F6-1F1E6', 'shortname' => ':qa:', 'aliases' => '', 'keywords' => 'qatar country nation dawlat qatar'],
  1172. 'oncoming_taxi' => ['unicode' => '1F696', 'shortname' => ':oncoming_taxi:', 'aliases' => '', 'keywords' => 'oncoming taxi cars uber vehicle taxi car automobile city transport service'],
  1173. 'tw' => ['unicode' => '1F1F9-1F1FC', 'shortname' => ':tw:', 'aliases' => '', 'keywords' => 'the republic of china country nation'],
  1174. 'oncoming_automobile' => ['unicode' => '1F698', 'shortname' => ':oncoming_automobile:', 'aliases' => '', 'keywords' => 'oncoming automobile car transportation vehicle sedan car automobile'],
  1175. 'cg' => ['unicode' => '1F1E8-1F1EC', 'shortname' => ':cg:', 'aliases' => '', 'keywords' => 'the republic of the congo country nation'],
  1176. 'articulated_lorry' => ['unicode' => '1F69B', 'shortname' => ':articulated_lorry:', 'aliases' => '', 'keywords' => 'articulated lorry cars transportation vehicle truck delivery semi lorry articulated'],
  1177. 'ro' => ['unicode' => '1F1F7-1F1F4', 'shortname' => ':ro:', 'aliases' => '', 'keywords' => 'romania country nation'],
  1178. 'tractor' => ['unicode' => '1F69C', 'shortname' => ':tractor:', 'aliases' => '', 'keywords' => 'tractor agriculture car farming vehicle tractor farm construction machine digger'],
  1179. 'monorail' => ['unicode' => '1F69D', 'shortname' => ':monorail:', 'aliases' => '', 'keywords' => 'monorail transportation vehicle train mono rail transport'],
  1180. 'rw' => ['unicode' => '1F1F7-1F1FC', 'shortname' => ':rw:', 'aliases' => '', 'keywords' => 'rwanda country nation'],
  1181. 'mountain_railway' => ['unicode' => '1F69E', 'shortname' => ':mountain_railway:', 'aliases' => '', 'keywords' => 'mountain railway transportation mountain railway rail train transport'],
  1182. 'kn' => ['unicode' => '1F1F0-1F1F3', 'shortname' => ':kn:', 'aliases' => '', 'keywords' => 'saint kitts and nevis country nation '],
  1183. 'suspension_railway' => ['unicode' => '1F69F', 'shortname' => ':suspension_railway:', 'aliases' => '', 'keywords' => 'suspension railway transportation vehicle suspension railway rail train transportation'],
  1184. 'lc' => ['unicode' => '1F1F1-1F1E8', 'shortname' => ':lc:', 'aliases' => '', 'keywords' => 'saint lucia country nation'],
  1185. 'mountain_cableway' => ['unicode' => '1F6A0', 'shortname' => ':mountain_cableway:', 'aliases' => '', 'keywords' => 'mountain cableway transportation vehicle mountain cable rail train railway'],
  1186. 'vc' => ['unicode' => '1F1FB-1F1E8', 'shortname' => ':vc:', 'aliases' => '', 'keywords' => 'saint vincent and the grenadines country nation '],
  1187. 'aerial_tramway' => ['unicode' => '1F6A1', 'shortname' => ':aerial_tramway:', 'aliases' => '', 'keywords' => 'aerial tramway transportation vehicle aerial tram tramway cable transport'],
  1188. 'ws' => ['unicode' => '1F1FC-1F1F8', 'shortname' => ':ws:', 'aliases' => '', 'keywords' => 'samoa country nation american samoa'],
  1189. 'rowboat' => ['unicode' => '1F6A3', 'shortname' => ':rowboat:', 'aliases' => '', 'keywords' => 'rowboat hobby ship sports water boat row oar paddle'],
  1190. 'sm' => ['unicode' => '1F1F8-1F1F2', 'shortname' => ':sm:', 'aliases' => '', 'keywords' => 'san marino country nation'],
  1191. 'vertical_traffic_light' => ['unicode' => '1F6A6', 'shortname' => ':vertical_traffic_light:', 'aliases' => '', 'keywords' => 'vertical traffic light transportation traffic light stop go yield vertical'],
  1192. 'st' => ['unicode' => '1F1F8-1F1F9', 'shortname' => ':st:', 'aliases' => '', 'keywords' => 'sao tome and principe country nation sao tome e principe'],
  1193. 'put_litter_in_its_place' => ['unicode' => '1F6AE', 'shortname' => ':put_litter_in_its_place:', 'aliases' => '', 'keywords' => 'put litter in its place symbol blue-square litter waste trash garbage receptacle can'],
  1194. 'do_not_litter' => ['unicode' => '1F6AF', 'shortname' => ':do_not_litter:', 'aliases' => '', 'keywords' => 'do not litter symbol bin garbage trash litter garbage waste no can trash'],
  1195. 'sn' => ['unicode' => '1F1F8-1F1F3', 'shortname' => ':sn:', 'aliases' => '', 'keywords' => 'senegal country nation'],
  1196. 'potable_water' => ['unicode' => '1F6B0', 'shortname' => ':potable_water:', 'aliases' => '', 'keywords' => 'potable water symbol blue-square cleaning faucet liquid restroom potable water drinkable pure clear clean aqua h20'],
  1197. 'rs' => ['unicode' => '1F1F7-1F1F8', 'shortname' => ':rs:', 'aliases' => '', 'keywords' => 'serbia country nation srbija'],
  1198. 'non-potable_water' => ['unicode' => '1F6B1', 'shortname' => ':non-potable_water:', 'aliases' => '', 'keywords' => 'non-potable water symbol drink faucet tap non-potable water not drinkable dirty gross aqua h20'],
  1199. 'sc' => ['unicode' => '1F1F8-1F1E8', 'shortname' => ':sc:', 'aliases' => '', 'keywords' => 'the seychelles country nation seychelles'],
  1200. 'no_bicycles' => ['unicode' => '1F6B3', 'shortname' => ':no_bicycles:', 'aliases' => '', 'keywords' => 'no bicycles cyclist prohibited bicycle bike pedal no'],
  1201. 'sl' => ['unicode' => '1F1F8-1F1F1', 'shortname' => ':sl:', 'aliases' => '', 'keywords' => 'sierra leone country nation'],
  1202. 'bicyclist' => ['unicode' => '1F6B4', 'shortname' => ':bicyclist:', 'aliases' => '', 'keywords' => 'bicyclist bike exercise hipster sports bicyclist road bike pedal bicycle transportation'],
  1203. 'sg' => ['unicode' => '1F1F8-1F1EC', 'shortname' => ':sg:', 'aliases' => '', 'keywords' => 'singapore country nation'],
  1204. 'mountain_bicyclist' => ['unicode' => '1F6B5', 'shortname' => ':mountain_bicyclist:', 'aliases' => '', 'keywords' => 'mountain bicyclist human sports transportation bicyclist mountain bike pedal bicycle transportation'],
  1205. 'sk' => ['unicode' => '1F1F8-1F1F0', 'shortname' => ':sk:', 'aliases' => '', 'keywords' => 'slovakia country nation'],
  1206. 'no_pedestrians' => ['unicode' => '1F6B7', 'shortname' => ':no_pedestrians:', 'aliases' => '', 'keywords' => 'no pedestrians crossing rules walking no walk pedestrian stroll stride foot feet'],
  1207. 'si' => ['unicode' => '1F1F8-1F1EE', 'shortname' => ':si:', 'aliases' => '', 'keywords' => 'slovenia country nation slovenija'],
  1208. 'children_crossing' => ['unicode' => '1F6B8', 'shortname' => ':children_crossing:', 'aliases' => '', 'keywords' => 'children crossing school children kids caution crossing street crosswalk slow'],
  1209. 'sb' => ['unicode' => '1F1F8-1F1E7', 'shortname' => ':sb:', 'aliases' => '', 'keywords' => 'the solomon islands country nation'],
  1210. 'shower' => ['unicode' => '1F6BF', 'shortname' => ':shower:', 'aliases' => '', 'keywords' => 'shower bath clean wash bathroom shower soap water clean shampoo lather'],
  1211. 'so' => ['unicode' => '1F1F8-1F1F4', 'shortname' => ':so:', 'aliases' => '', 'keywords' => 'somalia country nation'],
  1212. 'bathtub' => ['unicode' => '1F6C1', 'shortname' => ':bathtub:', 'aliases' => '', 'keywords' => 'bathtub clean shower bath tub basin wash bubble soak bathroom soap water clean shampoo lather water'],
  1213. 'za' => ['unicode' => '1F1FF-1F1E6', 'shortname' => ':za:', 'aliases' => '', 'keywords' => 'south africa country nation'],
  1214. 'passport_control' => ['unicode' => '1F6C2', 'shortname' => ':passport_control:', 'aliases' => '', 'keywords' => 'passport control blue-square custom passport official travel control foreign identification'],
  1215. 'customs' => ['unicode' => '1F6C3', 'shortname' => ':customs:', 'aliases' => '', 'keywords' => 'customs border passport customs travel foreign goods check authority government'],
  1216. 'baggage_claim' => ['unicode' => '1F6C4', 'shortname' => ':baggage_claim:', 'aliases' => '', 'keywords' => 'baggage claim airport blue-square transport bag baggage luggage travel'],
  1217. 'lk' => ['unicode' => '1F1F1-1F1F0', 'shortname' => ':lk:', 'aliases' => '', 'keywords' => 'sri lanka country nation'],
  1218. 'left_luggage' => ['unicode' => '1F6C5', 'shortname' => ':left_luggage:', 'aliases' => '', 'keywords' => 'left luggage blue-square travel bag baggage luggage travel'],
  1219. 'sd' => ['unicode' => '1F1F8-1F1E9', 'shortname' => ':sd:', 'aliases' => '', 'keywords' => 'sudan country nation as-sudan'],
  1220. 'earth_africa' => ['unicode' => '1F30D', 'shortname' => ':earth_africa:', 'aliases' => '', 'keywords' => 'earth globe europe-africa globe international world earth globe space planet africa europe home'],
  1221. 'sr' => ['unicode' => '1F1F8-1F1F7', 'shortname' => ':sr:', 'aliases' => '', 'keywords' => 'suriname country nation'],
  1222. 'earth_americas' => ['unicode' => '1F30E', 'shortname' => ':earth_americas:', 'aliases' => '', 'keywords' => 'earth globe americas USA globe international world earth globe space planet north south america americas home'],
  1223. 'sz' => ['unicode' => '1F1F8-1F1FF', 'shortname' => ':sz:', 'aliases' => '', 'keywords' => 'swaziland country nation'],
  1224. 'globe_with_meridians' => ['unicode' => '1F310', 'shortname' => ':globe_with_meridians:', 'aliases' => '', 'keywords' => 'globe with meridians earth international world earth meridian globe space planet home'],
  1225. 'se' => ['unicode' => '1F1F8-1F1EA', 'shortname' => ':se:', 'aliases' => '', 'keywords' => 'sweden country nation sverige'],
  1226. 'waxing_crescent_moon' => ['unicode' => '1F312', 'shortname' => ':waxing_crescent_moon:', 'aliases' => '', 'keywords' => 'waxing crescent moon symbol nature moon waxing sky night cheese phase'],
  1227. 'ch' => ['unicode' => '1F1E8-1F1ED', 'shortname' => ':ch:', 'aliases' => '', 'keywords' => 'switzerland country nation'],
  1228. 'waning_gibbous_moon' => ['unicode' => '1F316', 'shortname' => ':waning_gibbous_moon:', 'aliases' => '', 'keywords' => 'waning gibbous moon symbol nature moon waning gibbous sky night cheese phase'],
  1229. 'sy' => ['unicode' => '1F1F8-1F1FE', 'shortname' => ':sy:', 'aliases' => '', 'keywords' => 'syria country nation'],
  1230. 'last_quarter_moon' => ['unicode' => '1F317', 'shortname' => ':last_quarter_moon:', 'aliases' => '', 'keywords' => 'last quarter moon symbol nature moon last quarter sky night cheese phase'],
  1231. 'tj' => ['unicode' => '1F1F9-1F1EF', 'shortname' => ':tj:', 'aliases' => '', 'keywords' => 'tajikistan country nation jumhurii tojikiston'],
  1232. 'waning_crescent_moon' => ['unicode' => '1F318', 'shortname' => ':waning_crescent_moon:', 'aliases' => '', 'keywords' => 'waning crescent moon symbol nature moon crescent waning sky night cheese phase'],
  1233. 'tz' => ['unicode' => '1F1F9-1F1FF', 'shortname' => ':tz:', 'aliases' => '', 'keywords' => 'tanzania country nation'],
  1234. 'new_moon_with_face' => ['unicode' => '1F31A', 'shortname' => ':new_moon_with_face:', 'aliases' => '', 'keywords' => 'new moon with face nature moon new anthropomorphic face sky night cheese phase'],
  1235. 'th' => ['unicode' => '1F1F9-1F1ED', 'shortname' => ':th:', 'aliases' => '', 'keywords' => 'thailand country nation prathet thai'],
  1236. 'last_quarter_moon_with_face' => ['unicode' => '1F31C', 'shortname' => ':last_quarter_moon_with_face:', 'aliases' => '', 'keywords' => 'last quarter moon with face nature moon last quarter anthropomorphic face sky night cheese phase'],
  1237. 'tg' => ['unicode' => '1F1F9-1F1EC', 'shortname' => ':tg:', 'aliases' => '', 'keywords' => 'togo country nation republique togolaise'],
  1238. 'full_moon_with_face' => ['unicode' => '1F31D', 'shortname' => ':full_moon_with_face:', 'aliases' => '', 'keywords' => 'full moon with face night moon full anthropomorphic face sky night cheese phase spooky werewolves monsters'],
  1239. 'to' => ['unicode' => '1F1F9-1F1F4', 'shortname' => ':to:', 'aliases' => '', 'keywords' => 'tonga country nation'],
  1240. 'sun_with_face' => ['unicode' => '1F31E', 'shortname' => ':sun_with_face:', 'aliases' => '', 'keywords' => 'sun with face morning sun anthropomorphic face sky'],
  1241. 'tt' => ['unicode' => '1F1F9-1F1F9', 'shortname' => ':tt:', 'aliases' => '', 'keywords' => 'trinidad and tobago country nation'],
  1242. 'evergreen_tree' => ['unicode' => '1F332', 'shortname' => ':evergreen_tree:', 'aliases' => '', 'keywords' => 'evergreen tree nature plant evergreen tree needles christmas'],
  1243. 'tn' => ['unicode' => '1F1F9-1F1F3', 'shortname' => ':tn:', 'aliases' => '', 'keywords' => 'tunisia country nation tunis'],
  1244. 'deciduous_tree' => ['unicode' => '1F333', 'shortname' => ':deciduous_tree:', 'aliases' => '', 'keywords' => 'deciduous tree nature plant deciduous tree leaves fall color'],
  1245. 'tr' => ['unicode' => '1F1F9-1F1F7', 'shortname' => ':tr:', 'aliases' => '', 'keywords' => 'turkey country nation turkiye'],
  1246. 'lemon' => ['unicode' => '1F34B', 'shortname' => ':lemon:', 'aliases' => '', 'keywords' => 'lemon fruit nature lemon yellow citrus'],
  1247. 'pear' => ['unicode' => '1F350', 'shortname' => ':pear:', 'aliases' => '', 'keywords' => 'pear fruit nature pear fruit shape'],
  1248. 'baby_bottle' => ['unicode' => '1F37C', 'shortname' => ':baby_bottle:', 'aliases' => '', 'keywords' => 'baby bottle container food baby bottle milk mother nipple newborn formula'],
  1249. 'ug' => ['unicode' => '1F1FA-1F1EC', 'shortname' => ':ug:', 'aliases' => '', 'keywords' => 'uganda country nation'],
  1250. 'horse_racing' => ['unicode' => '1F3C7', 'shortname' => ':horse_racing:', 'aliases' => '', 'keywords' => 'horse racing animal betting competition horse race racing jockey triple crown'],
  1251. 'ua' => ['unicode' => '1F1FA-1F1E6', 'shortname' => ':ua:', 'aliases' => '', 'keywords' => 'ukraine country nation ukrayina'],
  1252. 'rugby_football' => ['unicode' => '1F3C9', 'shortname' => ':rugby_football:', 'aliases' => '', 'keywords' => 'rugby football sports rugby football ball sport team england'],
  1253. 'ae' => ['unicode' => '1F1E6-1F1EA', 'shortname' => ':ae:', 'aliases' => '', 'keywords' => 'the united arab emirates country nation'],
  1254. 'european_post_office' => ['unicode' => '1F3E4', 'shortname' => ':european_post_office:', 'aliases' => '', 'keywords' => 'european post office building'],
  1255. 'rat' => ['unicode' => '1F400', 'shortname' => ':rat:', 'aliases' => '', 'keywords' => 'rat animal mouse rat rodent crooked snitch'],
  1256. 'mouse2' => ['unicode' => '1F401', 'shortname' => ':mouse2:', 'aliases' => '', 'keywords' => 'mouse animal nature mouse mice rodent'],
  1257. 'uy' => ['unicode' => '1F1FA-1F1FE', 'shortname' => ':uy:', 'aliases' => '', 'keywords' => 'uruguay country nation'],
  1258. 'ox' => ['unicode' => '1F402', 'shortname' => ':ox:', 'aliases' => '', 'keywords' => 'ox animal beef cow'],
  1259. 'uz' => ['unicode' => '1F1FA-1F1FF', 'shortname' => ':uz:', 'aliases' => '', 'keywords' => 'uzbekistan country nation uzbekiston respublikasi'],
  1260. 'water_buffalo' => ['unicode' => '1F403', 'shortname' => ':water_buffalo:', 'aliases' => '', 'keywords' => 'water buffalo animal cow nature ox water buffalo asia bovine milk dairy'],
  1261. 'vu' => ['unicode' => '1F1FB-1F1FA', 'shortname' => ':vu:', 'aliases' => '', 'keywords' => 'vanuatu country nation'],
  1262. 'cow2' => ['unicode' => '1F404', 'shortname' => ':cow2:', 'aliases' => '', 'keywords' => 'cow animal beef nature ox cow milk dairy beef bessie moo'],
  1263. 'va' => ['unicode' => '1F1FB-1F1E6', 'shortname' => ':va:', 'aliases' => '', 'keywords' => 'the vatican city country nation'],
  1264. 'tiger2' => ['unicode' => '1F405', 'shortname' => ':tiger2:', 'aliases' => '', 'keywords' => 'tiger animal nature tiger cat striped tony tigger hobs'],
  1265. 've' => ['unicode' => '1F1FB-1F1EA', 'shortname' => ':ve:', 'aliases' => '', 'keywords' => 'venezuela country nation'],
  1266. 'leopard' => ['unicode' => '1F406', 'shortname' => ':leopard:', 'aliases' => '', 'keywords' => 'leopard animal nature leopard cat spot spotted sexy'],
  1267. 'vn' => ['unicode' => '1F1FB-1F1F3', 'shortname' => ':vn:', 'aliases' => '', 'keywords' => 'vietnam country nation viet nam'],
  1268. 'rabbit2' => ['unicode' => '1F407', 'shortname' => ':rabbit2:', 'aliases' => '', 'keywords' => 'rabbit animal nature rabbit bunny easter reproduction prolific'],
  1269. 'eh' => ['unicode' => '1F1EA-1F1ED', 'shortname' => ':eh:', 'aliases' => '', 'keywords' => 'western sahara country nation aṣ-Ṣaḥrā’ al-gharbīyah sahra gharbiyah'],
  1270. 'cat2' => ['unicode' => '1F408', 'shortname' => ':cat2:', 'aliases' => '', 'keywords' => 'cat animal meow pet cat kitten meow'],
  1271. 'ye' => ['unicode' => '1F1FE-1F1EA', 'shortname' => ':ye:', 'aliases' => '', 'keywords' => 'yemen country nation al yaman'],
  1272. 'dragon' => ['unicode' => '1F409', 'shortname' => ':dragon:', 'aliases' => '', 'keywords' => 'dragon animal chinese green myth nature dragon fire legendary myth'],
  1273. 'zm' => ['unicode' => '1F1FF-1F1F2', 'shortname' => ':zm:', 'aliases' => '', 'keywords' => 'zambia country nation'],
  1274. 'crocodile' => ['unicode' => '1F40A', 'shortname' => ':crocodile:', 'aliases' => '', 'keywords' => 'crocodile animal nature crocodile croc alligator gator cranky'],
  1275. 'zw' => ['unicode' => '1F1FF-1F1FC', 'shortname' => ':zw:', 'aliases' => '', 'keywords' => 'zimbabwe country nation'],
  1276. 'whale2' => ['unicode' => '1F40B', 'shortname' => ':whale2:', 'aliases' => '', 'keywords' => 'whale animal nature ocean sea whale blubber bloated fat large massive'],
  1277. 'pr' => ['unicode' => '1F1F5-1F1F7', 'shortname' => ':pr:', 'aliases' => '', 'keywords' => 'puerto rico country nation'],
  1278. 'ram' => ['unicode' => '1F40F', 'shortname' => ':ram:', 'aliases' => '', 'keywords' => 'ram animal nature sheep ram sheep male horn horns'],
  1279. 'ky' => ['unicode' => '1F1F0-1F1FE', 'shortname' => ':ky:', 'aliases' => '', 'keywords' => 'cayman islands country nation'],
  1280. 'goat' => ['unicode' => '1F410', 'shortname' => ':goat:', 'aliases' => '', 'keywords' => 'goat animal nature goat sheep kid billy livestock'],
  1281. 'bm' => ['unicode' => '1F1E7-1F1F2', 'shortname' => ':bm:', 'aliases' => '', 'keywords' => 'bermuda country nation'],
  1282. 'rooster' => ['unicode' => '1F413', 'shortname' => ':rooster:', 'aliases' => '', 'keywords' => 'rooster animal chicken nature rooster cockerel cock male cock-a-doodle-doo crowing'],
  1283. 'pf' => ['unicode' => '1F1F5-1F1EB', 'shortname' => ':pf:', 'aliases' => '', 'keywords' => 'french polynesia country nation polynésie française polynesie francaise'],
  1284. 'dog2' => ['unicode' => '1F415', 'shortname' => ':dog2:', 'aliases' => '', 'keywords' => 'dog animal doge friend nature pet dog puppy pet friend woof bark fido'],
  1285. 'ps' => ['unicode' => '1F1F5-1F1F8', 'shortname' => ':ps:', 'aliases' => '', 'keywords' => 'palestinian authority country nation'],
  1286. 'pig2' => ['unicode' => '1F416', 'shortname' => ':pig2:', 'aliases' => '', 'keywords' => 'pig animal nature pig piggy pork ham hog bacon oink slop livestock greed greedy'],
  1287. 'nc' => ['unicode' => '1F1F3-1F1E8', 'shortname' => ':nc:', 'aliases' => '', 'keywords' => 'new caledonia country nation nouvelle calédonie caledonie'],
  1288. 'dromedary_camel' => ['unicode' => '1F42A', 'shortname' => ':dromedary_camel:', 'aliases' => '', 'keywords' => 'dromedary camel animal desert hot dromedary camel hump desert middle east heat hot water hump day wednesday sex'],
  1289. 'sh' => ['unicode' => '1F1F8-1F1ED', 'shortname' => ':sh:', 'aliases' => '', 'keywords' => 'saint helena country nation'],
  1290. 'busts_in_silhouette' => ['unicode' => '1F465', 'shortname' => ':busts_in_silhouette:', 'aliases' => '', 'keywords' => 'busts in silhouette group human man person team user silhouette silhouettes people user members accounts relationship shadow'],
  1291. 'aw' => ['unicode' => '1F1E6-1F1FC', 'shortname' => ':aw:', 'aliases' => '', 'keywords' => 'aruba country nation'],
  1292. 'two_men_holding_hands' => ['unicode' => '1F46C', 'shortname' => ':two_men_holding_hands:', 'aliases' => '', 'keywords' => 'two men holding hands bromance couple friends like love men gay homosexual friends hands holding team unity'],
  1293. 'vi' => ['unicode' => '1F1FB-1F1EE', 'shortname' => ':vi:', 'aliases' => '', 'keywords' => 'u.s. virgin islands country nation'],
  1294. 'two_women_holding_hands' => ['unicode' => '1F46D', 'shortname' => ':two_women_holding_hands:', 'aliases' => '', 'keywords' => 'two women holding hands couple female friends like love women hands girlfriends friends sisters mother daughter gay homosexual couple unity'],
  1295. 'hk' => ['unicode' => '1F1ED-1F1F0', 'shortname' => ':hk:', 'aliases' => '', 'keywords' => 'hong kong country nation xianggang'],
  1296. 'thought_balloon' => ['unicode' => '1F4AD', 'shortname' => ':thought_balloon:', 'aliases' => '', 'keywords' => 'thought balloon bubble cloud speech thought balloon comic think day dream wonder'],
  1297. 'ac' => ['unicode' => '1F1E6-1F1E8', 'shortname' => ':ac:', 'aliases' => '', 'keywords' => 'ascension country nation'],
  1298. 'euro' => ['unicode' => '1F4B6', 'shortname' => ':euro:', 'aliases' => '', 'keywords' => 'banknote with euro sign currency dollar money euro europe banknote money currency paper cash bills'],
  1299. 'ms' => ['unicode' => '1F1F2-1F1F8', 'shortname' => ':ms:', 'aliases' => '', 'keywords' => 'montserrat country nation'],
  1300. 'pound' => ['unicode' => '1F4B7', 'shortname' => ':pound:', 'aliases' => '', 'keywords' => 'banknote with pound sign bills british currency england money sterling uk pound britain british banknote money currency paper cash bills'],
  1301. 'gu' => ['unicode' => '1F1EC-1F1FA', 'shortname' => ':gu:', 'aliases' => '', 'keywords' => 'guam country nation'],
  1302. 'mailbox_with_mail' => ['unicode' => '1F4EC', 'shortname' => ':mailbox_with_mail:', 'aliases' => '', 'keywords' => 'open mailbox with raised flag communication email inbox'],
  1303. 'gl' => ['unicode' => '1F1EC-1F1F1', 'shortname' => ':gl:', 'aliases' => '', 'keywords' => 'greenland country nation kalaallit nunaat'],
  1304. 'mailbox_with_no_mail' => ['unicode' => '1F4ED', 'shortname' => ':mailbox_with_no_mail:', 'aliases' => '', 'keywords' => 'open mailbox with lowered flag email inbox'],
  1305. 'nu' => ['unicode' => '1F1F3-1F1FA', 'shortname' => ':nu:', 'aliases' => '', 'keywords' => 'niue country nation'],
  1306. 'postal_horn' => ['unicode' => '1F4EF', 'shortname' => ':postal_horn:', 'aliases' => '', 'keywords' => 'postal horn instrument music'],
  1307. 'wf' => ['unicode' => '1F1FC-1F1EB', 'shortname' => ':wf:', 'aliases' => '', 'keywords' => 'wallis and futuna country nation'],
  1308. 'no_mobile_phones' => ['unicode' => '1F4F5', 'shortname' => ':no_mobile_phones:', 'aliases' => '', 'keywords' => 'no mobile phones iphone mute'],
  1309. 'mo' => ['unicode' => '1F1F2-1F1F4', 'shortname' => ':mo:', 'aliases' => '', 'keywords' => 'macau country nation aomen'],
  1310. 'twisted_rightwards_arrows' => ['unicode' => '1F500', 'shortname' => ':twisted_rightwards_arrows:', 'aliases' => '', 'keywords' => 'twisted rightwards arrows blue-square'],
  1311. 'fo' => ['unicode' => '1F1EB-1F1F4', 'shortname' => ':fo:', 'aliases' => '', 'keywords' => 'faroe islands country nation foroyar'],
  1312. 'repeat' => ['unicode' => '1F501', 'shortname' => ':repeat:', 'aliases' => '', 'keywords' => 'clockwise rightwards and leftwards open circle arr loop record'],
  1313. 'fk' => ['unicode' => '1F1EB-1F1F0', 'shortname' => ':fk:', 'aliases' => '', 'keywords' => 'falkland islands country nation islas malvinas'],
  1314. 'repeat_one' => ['unicode' => '1F502', 'shortname' => ':repeat_one:', 'aliases' => '', 'keywords' => 'clockwise rightwards and leftwards open circle arr blue-square loop'],
  1315. 'je' => ['unicode' => '1F1EF-1F1EA', 'shortname' => ':je:', 'aliases' => '', 'keywords' => 'jersey country nation'],
  1316. 'arrows_counterclockwise' => ['unicode' => '1F504', 'shortname' => ':arrows_counterclockwise:', 'aliases' => '', 'keywords' => 'anticlockwise downwards and upwards open circle ar blue-square sync'],
  1317. 'ai' => ['unicode' => '1F1E6-1F1EE', 'shortname' => ':ai:', 'aliases' => '', 'keywords' => 'anguilla country nation'],
  1318. 'low_brightness' => ['unicode' => '1F505', 'shortname' => ':low_brightness:', 'aliases' => '', 'keywords' => 'low brightness symbol summer sun'],
  1319. 'gi' => ['unicode' => '1F1EC-1F1EE', 'shortname' => ':gi:', 'aliases' => '', 'keywords' => 'gibraltar country nation'],
  1320. 'high_brightness' => ['unicode' => '1F506', 'shortname' => ':high_brightness:', 'aliases' => '', 'keywords' => 'high brightness symbol light summer sun'],
  1321. 'mute' => ['unicode' => '1F507', 'shortname' => ':mute:', 'aliases' => '', 'keywords' => 'speaker with cancellation stroke sound volume'],
  1322. 'sound' => ['unicode' => '1F509', 'shortname' => ':sound:', 'aliases' => '', 'keywords' => 'speaker with one sound wave speaker volume'],
  1323. 'no_bell' => ['unicode' => '1F515', 'shortname' => ':no_bell:', 'aliases' => '', 'keywords' => 'bell with cancellation stroke mute sound volume'],
  1324. 'microscope' => ['unicode' => '1F52C', 'shortname' => ':microscope:', 'aliases' => '', 'keywords' => 'microscope experiment laboratory zoomin'],
  1325. 'telescope' => ['unicode' => '1F52D', 'shortname' => ':telescope:', 'aliases' => '', 'keywords' => 'telescope space stars'],
  1326. 'clock130' => ['unicode' => '1F55C', 'shortname' => ':clock130:', 'aliases' => '', 'keywords' => 'clock face one-thirty clock time'],
  1327. 'clock230' => ['unicode' => '1F55D', 'shortname' => ':clock230:', 'aliases' => '', 'keywords' => 'clock face two-thirty clock time'],
  1328. 'clock330' => ['unicode' => '1F55E', 'shortname' => ':clock330:', 'aliases' => '', 'keywords' => 'clock face three-thirty clock time'],
  1329. 'clock430' => ['unicode' => '1F55F', 'shortname' => ':clock430:', 'aliases' => '', 'keywords' => 'clock face four-thirty clock time'],
  1330. 'clock530' => ['unicode' => '1F560', 'shortname' => ':clock530:', 'aliases' => '', 'keywords' => 'clock face five-thirty clock time'],
  1331. 'clock630' => ['unicode' => '1F561', 'shortname' => ':clock630:', 'aliases' => '', 'keywords' => 'clock face six-thirty clock time'],
  1332. 'clock730' => ['unicode' => '1F562', 'shortname' => ':clock730:', 'aliases' => '', 'keywords' => 'clock face seven-thirty clock time'],
  1333. 'clock830' => ['unicode' => '1F563', 'shortname' => ':clock830:', 'aliases' => '', 'keywords' => 'clock face eight-thirty clock time'],
  1334. 'clock930' => ['unicode' => '1F564', 'shortname' => ':clock930:', 'aliases' => '', 'keywords' => 'clock face nine-thirty clock time'],
  1335. 'clock1030' => ['unicode' => '1F565', 'shortname' => ':clock1030:', 'aliases' => '', 'keywords' => 'clock face ten-thirty clock time'],
  1336. 'clock1130' => ['unicode' => '1F566', 'shortname' => ':clock1130:', 'aliases' => '', 'keywords' => 'clock face eleven-thirty clock time'],
  1337. 'clock1230' => ['unicode' => '1F567', 'shortname' => ':clock1230:', 'aliases' => '', 'keywords' => 'clock face twelve-thirty clock time']
  1338. ];
  1339. }
  1340. /**
  1341. * Get the emoji list to include in chat
  1342. * @return array
  1343. */
  1344. public static function getEmojisToInclude()
  1345. {
  1346. return [
  1347. ':bowtie:',
  1348. ':smile:'|
  1349. ':laughing:',
  1350. ':blush:',
  1351. ':smiley:',
  1352. ':relaxed:',
  1353. ':smirk:',
  1354. ':heart_eyes:',
  1355. ':kissing_heart:',
  1356. ':kissing_closed_eyes:',
  1357. ':flushed:',
  1358. ':relieved:',
  1359. ':satisfied:',
  1360. ':grin:',
  1361. ':wink:',
  1362. ':stuck_out_tongue_winking_eye:',
  1363. ':stuck_out_tongue_closed_eyes:',
  1364. ':grinning:',
  1365. ':kissing:',
  1366. ':kissing_smiling_eyes:',
  1367. ':stuck_out_tongue:',
  1368. ':sleeping:',
  1369. ':worried:',
  1370. ':frowning:',
  1371. ':anguished:',
  1372. ':open_mouth:',
  1373. ':grimacing:',
  1374. ':confused:',
  1375. ':hushed:',
  1376. ':expressionless:',
  1377. ':unamused:',
  1378. ':sweat_smile:',
  1379. ':sweat:',
  1380. ':disappointed_relieved:',
  1381. ':weary:',
  1382. ':pensive:',
  1383. ':disappointed:',
  1384. ':confounded:',
  1385. ':fearful:',
  1386. ':cold_sweat:',
  1387. ':persevere:',
  1388. ':cry:',
  1389. ':sob:',
  1390. ':joy:',
  1391. ':astonished:',
  1392. ':scream:',
  1393. ':neckbeard:',
  1394. ':tired_face:',
  1395. ':angry:',
  1396. ':rage:',
  1397. ':triumph:',
  1398. ':sleepy:',
  1399. ':yum:',
  1400. ':mask:',
  1401. ':sunglasses:',
  1402. ':dizzy_face:',
  1403. ':imp:',
  1404. ':smiling_imp:',
  1405. ':neutral_face:',
  1406. ':no_mouth:',
  1407. ':innocent:',
  1408. ':alien:'
  1409. ];
  1410. }
  1411. /**
  1412. * Get the chat history file name
  1413. * @param bool $absolute Optional. Whether get the base or the absolute file path
  1414. * @param int $friendId Optional.
  1415. * @return string
  1416. */
  1417. public function getFileName($absolute = false, $friendId = 0)
  1418. {
  1419. $date = date('Y-m-d');
  1420. $base = 'messages-' . $date . '.log.html';
  1421. if ($this->groupId && !$friendId) {
  1422. $base = 'messages-' . $date . '_gid-' . $this->groupId . '.log.html';
  1423. } elseif ($this->sessionId && !$friendId) {
  1424. $base = 'messages-' . $date . '_sid-' . $this->sessionId . '.log.html';
  1425. } elseif ($friendId) {
  1426. if ($this->userId < $friendId) {
  1427. $base = 'messages-' . $date . '_uid-' . $this->userId . '-' . $friendId . '.log.html';
  1428. } else {
  1429. $base = 'messages-' . $date . '_uid-' . $friendId . '-' . $this->userId . '.log.html';
  1430. }
  1431. }
  1432. if (!$absolute) {
  1433. return $base;
  1434. }
  1435. $courseInfo = api_get_course_info_by_id($this->courseId);
  1436. $document_path = api_get_path(SYS_COURSE_PATH) . $courseInfo['path'] . '/document';
  1437. $chatPath = $document_path . '/chat_files/';
  1438. if ($this->groupId) {
  1439. $group_info = GroupManager::get_group_properties($this->groupId);
  1440. $chatPath = $document_path . $group_info['directory'] . '/chat_files/';
  1441. }
  1442. return $chatPath . $base;
  1443. }
  1444. /**
  1445. * Get the chat history
  1446. * @param bool $reset
  1447. * @param int $friendId Optional.
  1448. * @return string
  1449. */
  1450. public function readMessages($reset = false, $friendId = 0)
  1451. {
  1452. $courseInfo = api_get_course_info_by_id($this->courseId);
  1453. $date_now = date('Y-m-d');
  1454. $isMaster = (bool)api_is_course_admin();
  1455. $basepath_chat = '/chat_files';
  1456. $document_path = api_get_path(SYS_COURSE_PATH) . $courseInfo['path'] . '/document';
  1457. if ($this->groupId) {
  1458. $group_info = GroupManager:: get_group_properties($this->groupId);
  1459. $basepath_chat = $group_info['directory'] . '/chat_files';
  1460. }
  1461. $chat_path = $document_path . $basepath_chat . '/';
  1462. if (!is_dir($chat_path)) {
  1463. if (is_file($chat_path)) {
  1464. @unlink($chat_path);
  1465. }
  1466. if (!api_is_anonymous()) {
  1467. @mkdir($chat_path, api_get_permissions_for_new_directories());
  1468. // Save chat files document for group into item property
  1469. if ($this->groupId) {
  1470. $doc_id = add_document($courseInfo, $basepath_chat, 'folder', 0, 'chat_files');
  1471. api_item_property_update(
  1472. $courseInfo,
  1473. TOOL_DOCUMENT,
  1474. $doc_id,
  1475. 'FolderCreated',
  1476. null,
  1477. $this->groupId,
  1478. null,
  1479. null,
  1480. null
  1481. );
  1482. }
  1483. }
  1484. }
  1485. $filename_chat = 'messages-' . $date_now . '.log.html';
  1486. if ($this->groupId && !$friendId) {
  1487. $filename_chat = 'messages-' . $date_now . '_gid-' . $this->groupId . '.log.html';
  1488. } else if ($this->sessionId && !$friendId) {
  1489. $filename_chat = 'messages-' . $date_now . '_sid-' . $this->sessionId . '.log.html';
  1490. } elseif ($friendId) {
  1491. if ($this->userId < $friendId) {
  1492. $filename_chat = 'messages-' . $date_now . '_uid-' . $this->userId . '-' . $friendId . '.log.html';
  1493. } else {
  1494. $filename_chat = 'messages-' . $date_now . '_uid-' . $friendId . '-' . $this->userId . '.log.html';
  1495. }
  1496. }
  1497. if (!file_exists($chat_path . $filename_chat)) {
  1498. @fclose(fopen($chat_path . $filename_chat, 'w'));
  1499. if (!api_is_anonymous()) {
  1500. $doc_id = add_document($courseInfo, $basepath_chat . '/' . $filename_chat, 'file', 0, $filename_chat);
  1501. api_item_property_update(
  1502. $courseInfo,
  1503. TOOL_DOCUMENT,
  1504. $doc_id,
  1505. 'DocumentAdded',
  1506. $this->userId,
  1507. $this->groupId,
  1508. null,
  1509. null,
  1510. null,
  1511. $this->sessionId
  1512. );
  1513. api_item_property_update(
  1514. $courseInfo,
  1515. TOOL_DOCUMENT,
  1516. $doc_id,
  1517. 'invisible',
  1518. $this->userId,
  1519. $this->groupId,
  1520. null,
  1521. null,
  1522. null,
  1523. $this->sessionId
  1524. );
  1525. item_property_update_on_folder($courseInfo, $basepath_chat, $this->userId);
  1526. }
  1527. }
  1528. $basename_chat = 'messages-' . $date_now;
  1529. if ($this->groupId && !$friendId) {
  1530. $basename_chat = 'messages-' . $date_now . '_gid-' . $this->groupId;
  1531. } else if ($this->sessionId && !$friendId) {
  1532. $basename_chat = 'messages-' . $date_now . '_sid-' . $this->sessionId;
  1533. } elseif ($friendId) {
  1534. if ($this->userId < $friendId) {
  1535. $basename_chat = 'messages-' . $date_now . '_uid-' . $this->userId . '-' . $friendId;
  1536. } else {
  1537. $basename_chat = 'messages-' . $date_now . '_uid-' . $friendId . '-' . $this->userId;
  1538. }
  1539. }
  1540. if ($reset && $isMaster) {
  1541. $i = 1;
  1542. while (file_exists($chat_path . $basename_chat . '-' . $i . '.log.html')) {
  1543. $i++;
  1544. }
  1545. @rename($chat_path . $basename_chat . '.log.html', $chat_path . $basename_chat . '-' . $i . '.log.html');
  1546. @fclose(fopen($chat_path . $basename_chat . '.log.html', 'w'));
  1547. $doc_id = add_document(
  1548. $courseInfo,
  1549. $basepath_chat . '/' . $basename_chat . '-' . $i . '.log.html',
  1550. 'file',
  1551. filesize($chat_path . $basename_chat . '-' . $i . '.log.html'),
  1552. $basename_chat . '-' . $i . '.log.html'
  1553. );
  1554. api_item_property_update(
  1555. $courseInfo,
  1556. TOOL_DOCUMENT,
  1557. $doc_id,
  1558. 'DocumentAdded',
  1559. $this->userId,
  1560. $this->groupId,
  1561. null,
  1562. null,
  1563. null,
  1564. $this->sessionId
  1565. );
  1566. api_item_property_update(
  1567. $courseInfo,
  1568. TOOL_DOCUMENT,
  1569. $doc_id,
  1570. 'invisible',
  1571. $this->userId,
  1572. $this->groupId,
  1573. null,
  1574. null,
  1575. null,
  1576. $this->sessionId
  1577. );
  1578. item_property_update_on_folder($courseInfo, $basepath_chat, $this->userId);
  1579. $doc_id = DocumentManager::get_document_id(
  1580. $courseInfo,
  1581. $basepath_chat . '/' . $basename_chat . '.log.html'
  1582. );
  1583. update_existing_document($courseInfo, $doc_id, 0);
  1584. }
  1585. $remove = 0;
  1586. $content = array();
  1587. if (file_exists($chat_path . $basename_chat . '.log.html')) {
  1588. $content = file($chat_path . $basename_chat . '.log.html');
  1589. $nbr_lines = sizeof($content);
  1590. $remove = $nbr_lines - 100;
  1591. }
  1592. if ($remove < 0) {
  1593. $remove = 0;
  1594. }
  1595. array_splice($content, 0, $remove);
  1596. if (isset($_GET['origin']) && $_GET['origin'] == 'whoisonline') {
  1597. //the caller
  1598. $content[0] = get_lang('CallSent') . '<br />' . $content[0];
  1599. }
  1600. if (isset($_GET['origin']) && $_GET['origin'] == 'whoisonlinejoin') {
  1601. //the joiner (we have to delete the chat request to him when he joins the chat)
  1602. Database::getManager()
  1603. ->createQuery('
  1604. UPDATE ChamiloUserBundle:User u
  1605. SET u.chatcallUserId = NULL, u.chatcallDate = NULL, u.chatcallText = NULL
  1606. WHERE u.id = :user
  1607. ')
  1608. ->execute(['user' => $this->userId]);
  1609. }
  1610. $history = '<div id="content-chat">';
  1611. foreach ($content as $this_line) {
  1612. $history .= $this_line;
  1613. }
  1614. $history .= '</div>';
  1615. if ($isMaster || $GLOBALS['is_courseCoach']) {
  1616. $history .= '
  1617. <div id="clear-chat">
  1618. <button type="button" id="chat-reset" class="btn btn-danger btn-sm">
  1619. ' . get_lang('ClearList') . '
  1620. </button>
  1621. </div>
  1622. ';
  1623. }
  1624. return $history;
  1625. }
  1626. /**
  1627. * Get the number of users connected in chat
  1628. * @return mixed
  1629. */
  1630. public function countUsersOnline()
  1631. {
  1632. $date = new DateTime(api_get_utc_datetime(), new DateTimeZone('UTC'));
  1633. $date->modify('-5 seconds');
  1634. $extraCondition = null;
  1635. if ($this->groupId) {
  1636. $extraCondition = 'AND ccc.toGroupId = ' . intval($this->groupId);
  1637. } else {
  1638. $extraCondition = 'AND ccc.sessionId = ' . intval($this->sessionId);
  1639. }
  1640. $number = Database::getManager()
  1641. ->createQuery("
  1642. SELECT COUNT(ccc.userId) FROM ChamiloCourseBundle:CChatConnected ccc
  1643. WHERE ccc.lastConnection > :date AND ccc.cId = :course $extraCondition
  1644. ")
  1645. ->setParameters([
  1646. 'date' => $date,
  1647. 'course' => $this->courseId
  1648. ])
  1649. ->getSingleScalarResult();
  1650. return intval($number);
  1651. }
  1652. /**
  1653. * Check if a user is connected in course chat
  1654. * @param int $userId
  1655. * @return int
  1656. */
  1657. private function userIsConnected($userId)
  1658. {
  1659. $date = new DateTime(api_get_utc_datetime(), new DateTimeZone('UTC'));
  1660. $date->modify('-5 seconds');
  1661. $extraCondition = null;
  1662. if ($this->groupId) {
  1663. $extraCondition = 'AND ccc.toGroupId = ' . intval($this->groupId);
  1664. } else {
  1665. $extraCondition = 'AND ccc.sessionId = ' . intval($this->sessionId);
  1666. }
  1667. $number = Database::getManager()
  1668. ->createQuery("
  1669. SELECT COUNT(ccc.userId) FROM ChamiloCourseBundle:CChatConnected ccc
  1670. WHERE ccc.lastConnection > :date AND ccc.cId = :course AND ccc.userId = :user $extraCondition
  1671. ")
  1672. ->setParameters([
  1673. 'date' => $date,
  1674. 'course' => $this->courseId,
  1675. 'user' => $userId
  1676. ])
  1677. ->getSingleScalarResult();
  1678. return intval($number);
  1679. }
  1680. /**
  1681. * Get the users online data
  1682. * @return string
  1683. */
  1684. public function listUsersOnline()
  1685. {
  1686. $subscriptions = $this->getUsersSubscriptions();
  1687. $usersInfo = [];
  1688. foreach ($subscriptions as $subscription) {
  1689. $user = $subscription->getUser();
  1690. $usersInfo[] = [
  1691. 'id' => $user->getId(),
  1692. 'firstname' => $user->getFirstname(),
  1693. 'lastname' => $user->getLastname(),
  1694. 'status' => !$this->sessionId ? $subscription->getStatus() : $user->getStatus(),
  1695. 'image_url' => UserManager::getUserPicture($user->getId(), USER_IMAGE_SIZE_MEDIUM),
  1696. 'profile_url' => api_get_path(WEB_CODE_PATH) . 'social/profile.php?u=' . $user->getId(),
  1697. 'complete_name' => $user->getCompleteName(),
  1698. 'username' => $user->getUsername(),
  1699. 'email' => $user->getEmail(),
  1700. 'isConnected' => $this->userIsConnected($user->getId())
  1701. ];
  1702. }
  1703. return $usersInfo;
  1704. }
  1705. }