diff --git a/qtribu/gui/dck_qchat.py b/qtribu/gui/dck_qchat.py index 229690cc..13b8a511 100644 --- a/qtribu/gui/dck_qchat.py +++ b/qtribu/gui/dck_qchat.py @@ -5,7 +5,6 @@ from typing import Any, Optional # PyQGIS -# from PyQt5 import QtWebSockets # noqa QGS103 from qgis.core import Qgis, QgsApplication from qgis.gui import QgisInterface, QgsDockWidget @@ -14,6 +13,7 @@ from qgis.PyQt.QtGui import QBrush, QColor, QCursor, QIcon from qgis.PyQt.QtWidgets import QAction, QMenu, QMessageBox, QTreeWidgetItem, QWidget +# plugin from qtribu.__about__ import __title__ from qtribu.constants import ( ADMIN_MESSAGES_AVATAR, @@ -27,10 +27,9 @@ INTERNAL_MESSAGE_AUTHOR, QCHAT_NICKNAME_MINLENGTH, ) +from qtribu.gui.dlg_emoji_picker import EmojiPicker from qtribu.logic.qchat_client import QChatApiClient from qtribu.tasks.dizzy import DizzyTask - -# plugin from qtribu.toolbelt import PlgLogger, PlgOptionsManager from qtribu.toolbelt.commons import open_url_in_webviewer, play_resource_sound from qtribu.toolbelt.preferences import PlgSettingsStructure @@ -58,6 +57,8 @@ def __init__(self, iface: QgisInterface, parent: QWidget = None): self.task_manager = QgsApplication.taskManager() self.log = PlgLogger().log self.plg_settings = PlgOptionsManager() + self.emoji_picker_new = EmojiPicker(self) + uic.loadUi(Path(__file__).parent / f"{Path(__file__).stem}.ui", self) # rules and status signal listener @@ -114,6 +115,8 @@ def __init__(self, iface: QgisInterface, parent: QWidget = None): self.btn_send.setIcon( QIcon(QgsApplication.iconPath("mActionDoubleArrowRight.svg")) ) + # connect emojis picker + self.btn_emojis_picker.pressed.connect(self.on_emoji_picker_pressed) @property def settings(self) -> PlgSettingsStructure: @@ -622,6 +625,18 @@ def check_cheatcode(self, message: dict[str, str]) -> bool: return True return False + def on_emoji_picker_pressed(self) -> Optional[str]: + """Display the emoji picker and insert the selected one at the end of message line edit. + + :return: selected emoji + :rtype: str + """ + self.emoji_picker_new.show() + # selected_emoji = self.emoji_picker.select() + # self.lne_message.insert(selected_emoji) + + # return selected_emoji + def on_renew_clicked(self) -> None: msg_box = QMessageBox() msg_box.setWindowTitle(self.tr("QGIS")) diff --git a/qtribu/gui/dck_qchat.ui b/qtribu/gui/dck_qchat.ui index 64362264..55e5bbb5 100644 --- a/qtribu/gui/dck_qchat.ui +++ b/qtribu/gui/dck_qchat.ui @@ -6,8 +6,8 @@ 0 0 - 441 - 887 + 482 + 672 @@ -182,7 +182,7 @@ true - 3 + 4 true @@ -205,6 +205,11 @@ 3 + + + 4 + + @@ -247,13 +252,26 @@ User - + Nickname: + + + + ForbiddenCursor + + + Nickname set in QTribu's plugin settings + + + Nickname + + + @@ -271,25 +289,38 @@ - - - - ForbiddenCursor - - - Nickname set in QTribu's plugin settings - - - Nickname - - - - - - - - + + + + + 255 + + + + + + + PointingHandCursor + + + Qt::NoFocus + + + Qt::NoContextMenu + + + Pick an emoji. Not sure it'll be properly rendered for every users, still it's a bit of un. + + + + + + ๐Ÿ˜€ + + + + @@ -314,11 +345,6 @@
qgscollapsiblegroupbox.h
1 - - QgsFilterLineEdit - QLineEdit -
qgsfilterlineedit.h
-
grb_instance diff --git a/qtribu/gui/dlg_emoji_picker.py b/qtribu/gui/dlg_emoji_picker.py new file mode 100644 index 00000000..5869f302 --- /dev/null +++ b/qtribu/gui/dlg_emoji_picker.py @@ -0,0 +1,488 @@ +#! python3 # noqa: E265 + +"""A minimalist emoji picker using PyQt. + + +Inspirations: + +- https://github.com/Svxy/mint-emojis/ (Apache 2.0) +""" + +# standard +import json +from pathlib import Path +from typing import Optional, Union + +# PyQGIS +from qgis.core import QgsApplication +from qgis.PyQt import QtCore, QtGui, uic +from qgis.PyQt.QtCore import QUrl +from qgis.PyQt.QtGui import QFontDatabase +from qgis.PyQt.QtWidgets import ( + QDialog, + QGridLayout, + QGroupBox, + QHBoxLayout, + QLabel, + QLineEdit, + QPushButton, + QScrollArea, + QSizePolicy, + QSpacerItem, + QVBoxLayout, + QWidget, +) + +# plugin +from qtribu.__about__ import DIR_PLUGIN_ROOT +from qtribu.toolbelt import PlgLogger, PlgOptionsManager + +# ############################################################################ +# ########## Classes ############### +# ################################## + + +class QHoverPushButton(QPushButton): + """A custom QPushButton which detects when a mouse hovers it""" + + def __init__(self, text: str, parent_emoji_picker): + """ + Args: + text: The button text + parent_emoji_picker (QEmojiPicker): The parent emoji picker + """ + super().__init__(text) + self.clicked.connect(self.on_click) + + self.parent_emoji_picker = parent_emoji_picker + + def enterEvent(self, a0: QtCore.QEvent) -> None: + """On mouse hover / when the mouse is over the button""" + self.parent_emoji_picker.emoji_image_label.setText(self.text()) + group_title = self.parentWidget().title() + # when the group title is 'Search results' the user has used the search input + if group_title == "Search results": + self.parent_emoji_picker.emoji_name_label.setText( + self.parent_emoji_picker.total_emojis[self.text()] + ) + else: + self.parent_emoji_picker.emoji_name_label.setText( + self.parent_emoji_picker.emojis[group_title][self.text()].get("name") + ) + + def leaveEvent(self, a0: QtCore.QEvent) -> None: + """When the mouse leaves the button""" + self.parent_emoji_picker.emoji_image_label.setText("") + self.parent_emoji_picker.emoji_name_label.setText("") + + def on_click(self): + """Gets called if the button is pressed. Closes the emoji picker and if it + was called via `QEmojiPicker.select()` the current button emoji will be + returned. + """ + self.parent_emoji_picker.selected_emoji = self.text() + self.parent_emoji_picker.close() + + +class EmojiPicker(QDialog): + """Emoji Picker. + + :param QDialog: parent widget + :type QDialog: + """ + + def __init__(self, parent: Optional[QWidget] = None): + """Mini dialog to pick up an emoji.""" + # init module and ui + super().__init__(parent, QtCore.Qt.WindowCloseButtonHint) + + uic.loadUi(Path(__file__).parent / f"{Path(__file__).stem}.ui", self) + + self.log = PlgLogger().log + self.plg_settings = PlgOptionsManager().get_plg_settings() + + self.items_per_row: int = 8 + + self.check_emoji_font() + self.emoji_font = QtGui.QFont("Noto Color Emoji") + + self.emojis = self.load_emojis() + self.total_emojis = {} + + self.setupUi() + + def setupUi(self): + for group, items in self.emojis.items(): + box = QGroupBox(group) + layout = QGridLayout() + for i, (emoji, name) in enumerate(items.items()): + # for every emoji, build a button + button = QHoverPushButton(text=emoji, parent_emoji_picker=self) + button.setFont(self.emoji_font) + button.setFlat(True) + button.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed) + button.setFixedSize(30, 30) + # the button style + button.setStyleSheet( + "QPushButton {" + " font-size: 20px;" + " border-radius: 50%%;" + "}" + "QPushButton:hover {" + " background-color: %s" + "}" % button.palette().button().color().darker().name() + ) + layout.addWidget( + button, int(i / self.items_per_row), i % self.items_per_row + ) + + # adds the current emoji with its name to a dict where are all emojis without groups are listed + self.total_emojis[emoji] = name + + box.setLayout(layout) + self.scr_emojis.addWidget(box) + + def check_emoji_font(self): + """Check if the font used for displaying emojis is installed. If not, try to + download it. + + :return: _description_ + :rtype: _type_ + """ + if self.is_font_available(font_family=self.plg_settings.font_emoji_family): + self.log( + message=self.tr( + "Required font to display emojis is already installed: {}".format( + self.plg_settings.font_emoji_family + ) + ), + push=False, + log_level=4, + ) + return True + else: + self.log( + message="Required font for emojis needs to be installed: {}".format( + self.plg_settings.font_emoji_family + ), + push=False, + ) + font_manager = QgsApplication.fontManager() + font_manager.fontDownloadErrorOccurred.connect(self.on_font_download_failed) + auto_downloaded = font_manager.tryToDownloadFontFamily( + self.plg_settings.font_emoji_family + ) + if not auto_downloaded: + self.log(message="not downloaded", log_level=1) + + font_manager.downloadAndInstallFont( + url=QUrl(self.plg_settings.font_emoji_download_url), + identifier="qtribu-emoji-font", + ) + + def on_font_download_failed(self, error_message: Optional[str] = None): + """Handle pyqtsignal emitted by QgsFontManager when font downloading failed. + + :param error_message: error message, defaults to None + :type error_message: Optional[str], optional + """ + self.log( + message=self.tr( + "Downloading the font {} from {} failed. Since it's required to " + "correctly display emojis, consider to add it manually to your system. " + "Trace: {}".format( + self.EMOJI_FONT_FAMILY, self.EMOJI_FONT_DOWNLOAD_URL, error_message + ) + ) + ) + + def is_font_available(self, font_family: str) -> bool: + """Check if the given font family if among the Qt font database. + + :param font_family: font family name + :type font_family: str + + :return: True if the font family is available. + :rtype: bool + """ + available_fonts = QFontDatabase().families() + return font_family in available_fonts + + def load_emojis(self) -> dict: + """Load emojis from JSON file. + + :return: _description_ + :rtype: dict + """ + with DIR_PLUGIN_ROOT.joinpath("resources/emojis/selection.json").open( + mode="r", encoding="UTF-8" + ) as in_json: + emojis = json.load(in_json) + return emojis + + +class QEmojiPicker(QDialog): + """A simple emoji picker""" + + def __init__( + self, + parent: Optional[QWidget] = None, + flags: Union[None, QtCore.Qt.WindowFlags, QtCore.Qt.WindowType] = None, + items_per_row: int = 8, + performance_search: bool = True, + ): + """ + Args: + parent: The parent window + flags: Qt flags + items_per_row: How many items per row should be displayed + performance_search: If True, the search input will display the emojis faster. See `self.on_input(...)` for more details + """ + if flags is not None: + super().__init__(parent, flags) + else: + super().__init__(parent) + + self.check_emoji_font() + + # initializes the ui + self.setupUi(self) + + self.font_manager = QgsApplication.fontManager() + + self.items_per_row = items_per_row + self.performance_search = performance_search + + self.selected_emoji = None + + # connects `self.on_input(...)` whenever the search input text is changed + self.search_line_edit.textChanged.connect(self.on_input) + + # the emojis. a pretty long dict... + + self.emojis = self.load_emojis() + self.total_emojis = {} + + for group, items in self.emojis.items(): + box = QGroupBox(group) + layout = QGridLayout() + for i, (emoji, name) in enumerate(items.items()): + # uses a little modified push button which recognizes when the mouse is over the button + button = self.__QHoverPushButton(text=emoji, parent_emoji_picker=self) + button.setFont(emoji_font) + button.setFlat(True) + button.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed) + button.setFixedSize(30, 30) + # the button style + button.setStyleSheet( + "QPushButton {" + " font-size: 20px;" + " border-radius: 50%%;" + "}" + "QPushButton:hover {" + " background-color: %s" + "}" % button.palette().button().color().darker().name() + ) + layout.addWidget( + button, int(i / self.items_per_row), i % self.items_per_row + ) + + # adds the current emoji with its name to a dict where are all emojis without groups are listed + self.total_emojis[emoji] = name + + box.setLayout(layout) + self.emoji_scroll_area_vlayout.addWidget(box) + + def setupUi(self, Form): + Form.setObjectName("Form") + Form.resize(400, 300) + size_policy = QSizePolicy(QSizePolicy.Preferred, QSizePolicy.Preferred) + size_policy.setHorizontalStretch(0) + size_policy.setVerticalStretch(0) + size_policy.setHeightForWidth(Form.sizePolicy().hasHeightForWidth()) + Form.setSizePolicy(size_policy) + self.verticalLayout = QVBoxLayout(Form) + self.verticalLayout.setObjectName("verticalLayout") + self.search_line_edit = QLineEdit(Form) + self.search_line_edit.setObjectName("search_line_edit") + self.verticalLayout.addWidget(self.search_line_edit) + self.emoji_scroll_area = QScrollArea(Form) + self.emoji_scroll_area.setWidgetResizable(True) + self.emoji_scroll_area.setObjectName("emoji_scroll_area") + self.emoji_scroll_area_widgets = QWidget() + self.emoji_scroll_area_widgets.setGeometry(QtCore.QRect(0, 0, 384, 198)) + self.emoji_scroll_area_widgets.setObjectName("emoji_scroll_area_widgets") + self.emoji_scroll_area_vlayout = QVBoxLayout(self.emoji_scroll_area_widgets) + self.emoji_scroll_area_vlayout.setObjectName("emoji_scroll_area_vlayout") + self.emoji_scroll_area.setWidget(self.emoji_scroll_area_widgets) + self.verticalLayout.addWidget(self.emoji_scroll_area) + self.emoji_information_hlayout = QHBoxLayout() + self.emoji_information_hlayout.setObjectName("emoji_information_hlayout") + self.emoji_image_label = QLabel(Form) + size_policy = QSizePolicy(QSizePolicy.Preferred, QSizePolicy.Fixed) + size_policy.setHorizontalStretch(0) + size_policy.setVerticalStretch(0) + size_policy.setHeightForWidth( + self.emoji_image_label.sizePolicy().hasHeightForWidth() + ) + self.emoji_image_label.setSizePolicy(size_policy) + self.emoji_image_label.setFont(emoji_font) + self.emoji_image_label.setText("") + self.emoji_image_label.setObjectName("emoji_image_label") + self.emoji_information_hlayout.addWidget(self.emoji_image_label) + self.emoji_name_label = QLabel(Form) + size_policy = QSizePolicy(QSizePolicy.Preferred, QSizePolicy.Preferred) + size_policy.setHorizontalStretch(0) + size_policy.setVerticalStretch(0) + size_policy.setHeightForWidth( + self.emoji_name_label.sizePolicy().hasHeightForWidth() + ) + self.emoji_name_label.setSizePolicy(size_policy) + self.emoji_name_label.setFont(emoji_font) + self.emoji_name_label.setText("") + self.emoji_name_label.setObjectName("emoji_name_label") + self.emoji_information_hlayout.addWidget(self.emoji_name_label) + self.verticalLayout.addLayout(self.emoji_information_hlayout) + + QtCore.QMetaObject.connectSlotsByName(Form) + + def check_emoji_font(self): + print(self.is_font_available(font_family="Noto Color Emoji")) + + def is_font_available(self, font_family: str) -> bool: + available_fonts = QFontDatabase().families() + return font_family in available_fonts + + def load_emojis(self) -> dict: + """Load emojis from JSON file. + + :return: _description_ + :rtype: dict + """ + with DIR_PLUGIN_ROOT.joinpath("resources/emojis/selection.json").open( + mode="r", encoding="UTF-8" + ) as in_json: + emojis = json.load(in_json) + return emojis + + def select(self) -> Union[str, None]: + """Shows this window and returns the selected emoji if a button was pressed or none, if the window was closed without choosing an emoji""" + self.exec() + return self.selected_emoji + + def on_input(self, text: str): + """This method gets called if the text in the search input changes and selects all emojis which correspond with the search input text""" + for i in range(self.emoji_scroll_area_vlayout.count()): + group = self.emoji_scroll_area_vlayout.itemAt(i).widget() + # hides and deletes the previous 'Search results' group box + if group.title() == "Search results": + group.hide() + group.deleteLater() + # if no text is given / the search input is empty, every group which is hidden will be shown + elif not text and group.isHidden(): + group.show() + # if a text is given / the search input has text, every group which is not hidden will be shown + elif text and not group.isHidden(): + group.hide() + + if text: + search_results = QGroupBox("Search results") + layout = QGridLayout() + + items = -1 + + def add_item(): + # `items` is readonly in inner functions, so it can't increased here and has to be increases in the two loop below + + # uses a little modified push button which recognizes when the mouse is over the button + button = self.__QHoverPushButton(text=emoji, parent_emoji_picker=self) + + button.setFlat(True) + button.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed) + button.setFixedSize(30, 30) + # the button style + button.setStyleSheet( + "QPushButton {" + " font-size: 20px;" + " border-radius: 50%%;" + "}" + "QPushButton:hover {" + " background-color: %s" + "}" % button.palette().button().color().darker().name() + ) + layout.addWidget( + button, int(items / self.items_per_row), items % self.items_per_row + ) + + lower_text = text.lower() + # if `self.performance_search` is True, only emoji names starting with the specified text are displayed + if self.performance_search: + for emoji, name in self.total_emojis.items(): + if name.lower().startswith(lower_text): + items += 1 + add_item() + # but if `self.performance_search` is False, emoji texts which containing the specified text are displayed + else: + for emoji, name in self.total_emojis.items(): + if lower_text in name.lower(): + items += 1 + add_item() + + # adds a spacer below the found emojis to "order" them properly + layout.addItem( + QSpacerItem( + 40, + 20, + QSizePolicy.Expanding, + QSizePolicy.Expanding, + ), + int(items / self.items_per_row) + 1, + 0, + columnSpan=self.items_per_row, + ) + + search_results.setLayout(layout) + self.emoji_scroll_area_vlayout.insertWidget(0, search_results) + + class __QHoverPushButton(QPushButton): + """A custom QPushButton which detects when a mouse hovers it""" + + def __init__(self, text: str, parent_emoji_picker): + """ + Args: + text: The button text + parent_emoji_picker (QEmojiPicker): The parent emoji picker + """ + super().__init__(text) + self.clicked.connect(self.on_click) + + self.parent_emoji_picker = parent_emoji_picker + + def enterEvent(self, a0: QtCore.QEvent) -> None: + """On mouse hover / when the mouse is over the button""" + self.parent_emoji_picker.emoji_image_label.setText(self.text()) + group_title = self.parentWidget().title() + # when the group title is 'Search results' the user has used the search input + if group_title == "Search results": + self.parent_emoji_picker.emoji_name_label.setText( + self.parent_emoji_picker.total_emojis[self.text()] + ) + else: + self.parent_emoji_picker.emoji_name_label.setText( + self.parent_emoji_picker.emojis[group_title][self.text()].get( + "name" + ) + ) + + def leaveEvent(self, a0: QtCore.QEvent) -> None: + """When the mouse leaves the button""" + self.parent_emoji_picker.emoji_image_label.setText("") + self.parent_emoji_picker.emoji_name_label.setText("") + + def on_click(self): + """Gets called if the button is pressed. Closes the emoji picker and if it + was called via `QEmojiPicker.select()` the current button emoji will be + returned. + """ + self.parent_emoji_picker.selected_emoji = self.text() + self.parent_emoji_picker.close() diff --git a/qtribu/gui/dlg_emoji_picker.ui b/qtribu/gui/dlg_emoji_picker.ui new file mode 100644 index 00000000..5750eac8 --- /dev/null +++ b/qtribu/gui/dlg_emoji_picker.ui @@ -0,0 +1,138 @@ + + + dlg_emoji_picker + + + + 0 + 0 + 379 + 162 + + + + + 100 + 150 + + + + Emojis Picker + + + 0.800000000000000 + + + true + + + + + + true + + + + + + + + + + + Qt::ImhPreferLatin + + + search for filtering... + + + true + + + + + + + Qt::NoContextMenu + + + QFrame::NoFrame + + + QFrame::Plain + + + true + + + + + 0 + 0 + 359 + 86 + + + + + + + + + + + QLayout::SetDefaultConstraint + + + 10 + + + + + + Noto Color Emoji + + + + Qt::NoContextMenu + + + true + + + ๐Ÿ™‚ + + + true + + + Qt::NoTextInteraction + + + + + + + + Ubuntu + + + + Slightly Smiling Face + + + + + + + :slightly_smiling_face: + + + + + + + + + + diff --git a/qtribu/gui/wdg_qchat.py b/qtribu/gui/wdg_qchat.py new file mode 100644 index 00000000..117bb151 --- /dev/null +++ b/qtribu/gui/wdg_qchat.py @@ -0,0 +1,152 @@ +# standard +from datetime import datetime +from pathlib import Path +from typing import Any + +from qgis.gui import QgsDockWidget + +# PyQGIS +from qgis.PyQt import uic +from qgis.PyQt.QtWidgets import QTreeWidgetItem, QWidget + +from qtribu.logic.qchat_client import QChatApiClient + +# plugin +from qtribu.toolbelt import PlgLogger, PlgOptionsManager + +# -- GLOBALS -- +MARKER_VALUE = "---" + + +class QChatWidget(QgsDockWidget): + def __init__(self, parent: QWidget = None): + """QWidget to see and post messages on chat + + :param parent: parent widget or application + :type parent: QWidget + """ + super().__init__(parent) + self.log = PlgLogger().log + self.plg_settings = PlgOptionsManager() + uic.loadUi(Path(__file__).parent / f"{Path(__file__).stem}.ui", self) + + # fill fields from saved settings + self.settings = self.plg_settings.get_plg_settings() + self.load_settings() + + # initialize QChat API client + self.qchat_client = QChatApiClient(self.settings.qchat_instance_uri) + + # load rooms + rooms = self.qchat_client.get_rooms() + self.cb_room.addItem(MARKER_VALUE) + for room in rooms: + self.cb_room.addItem(room["name"]) + self.current_room = MARKER_VALUE + + self.cb_room.currentIndexChanged.connect(self.on_room_changed) + + # connect signal listener + self.connected = False + self.btn_connect.pressed.connect(self.on_connect_button_clicked) + self.btn_connect.setIcon(QIcon(QgsApplication.iconPath("mIconConnect.svg"))) + + # tree widget initialization + self.tw_chat.setHeaderLabels( + [ + self.tr("Room"), + self.tr("Date"), + self.tr("Nick"), + self.tr("Message"), + ] + ) + + def load_settings(self) -> dict: + """Load options from QgsSettings into UI form.""" + self.lb_instance.setText(self.settings.qchat_instance_uri) + self.le_nickname.setText(self.settings.qchat_nickname) + + def save_settings(self) -> None: + """Save form text into QgsSettings.""" + self.settings.qchat_nickname = self.le_nickname.text() + self.plg_settings.save_from_object(self.settings) + + def on_room_changed(self) -> None: + """ + Action called when room index is changed in the room combobox + """ + old_room = self.current_room + new_room = self.cb_room.currentText() + if new_room == MARKER_VALUE: + self.disconnect_from_room() + self.current_room = MARKER_VALUE + return + self.disconnect_from_room(log=old_room != MARKER_VALUE) + self.connect_to_room(new_room) + self.current_room = new_room + + def on_connect_button_clicked(self) -> None: + """ + Action called when clicking on "Connect" / "Disconnect" button + """ + if self.connected: + self.disconnect_from_room() + else: + room = self.cb_room.currentText() + if room == MARKER_VALUE: + return + self.connect_to_room(room) + + def connect_to_room(self, room: str, log: bool = True) -> None: + messages = self.qchat_client.get_last_messages(room) + messages.reverse() + if log: + self.tw_chat.insertTopLevelItem( + 0, + QTreeWidgetItem( + [ + room, + datetime.now().strftime("%H:%M"), + self.tr("Admin"), + self.tr("Connected to room '{room}'").format(room=room), + ] + ), + ) + for message in messages: + qtw_item = self.add_message_to_treeview(room, message) + self.tw_chat.insertTopLevelItem(0, qtw_item) + + self.btn_connect.setText(self.tr("Disconnect")) + self.lb_status.setText("Connected") + self.connected = True + + def disconnect_from_room(self, log: bool = True) -> None: + if log: + self.tw_chat.insertTopLevelItem( + 0, + QTreeWidgetItem( + [ + self.current_room, + datetime.now().strftime("%H:%M"), + self.tr("Admin"), + self.tr("Disconnected from room '{room}'").format( + room=self.current_room + ), + ] + ), + ) + self.btn_connect.setText(self.tr("Connect")) + self.lb_status.setText("Disconnected") + self.connected = False + + def add_message_to_treeview(self, room: str, message: dict[str, Any]) -> None: + item = QTreeWidgetItem( + [ + room, + # TODO: convert date to nice format like %H:%M + message["date_posted"], + message["author"], + message["message"], + ] + ) + return item diff --git a/qtribu/gui/wdg_qchat.ui b/qtribu/gui/wdg_qchat.ui new file mode 100644 index 00000000..98a5db53 --- /dev/null +++ b/qtribu/gui/wdg_qchat.ui @@ -0,0 +1,255 @@ + + + QChatWidget + + + + 0 + 0 + 441 + 887 + + + + + 0 + 0 + + + + QChat + + + + + 0 + 0 + + + + + 5 + + + 5 + + + 10 + + + 5 + + + 10 + + + + + + 0 + 0 + + + + Rooms + + + + + + Room: + + + + + + + Status: + + + + + + + + 0 + 0 + + + + Instance: + + + + + + + + + + Not connected + + + + + + + Connect + + + + + + + INSTANCE + + + + + + + + + + + 0 + 0 + + + + + 0 + 1 + + + + + 0 + 1 + + + + Chat + + + false + + + + + + true + + + false + + + true + + + 4 + + + true + + + 64 + + + + 1 + + + + + 2 + + + + + 3 + + + + + 4 + + + + + + + + + + + + 0 + 0 + + + + + 0 + 3 + + + + + 0 + 5 + + + + User + + + + + + Nickname: + + + + + + + + + + Message: + + + + + + + + + + Send message + + + + + + + + + + + + QgsCollapsibleGroupBox + QGroupBox +
qgscollapsiblegroupbox.h
+ 1 +
+
+ + grb_rooms + grb_chat + grb_user + + + +
diff --git a/qtribu/plugin_main.py b/qtribu/plugin_main.py index 22633242..697f48b2 100644 --- a/qtribu/plugin_main.py +++ b/qtribu/plugin_main.py @@ -23,6 +23,7 @@ from qtribu.gui.dlg_settings import PlgOptionsFactory from qtribu.gui.form_article import ArticleForm from qtribu.gui.form_rdp_news import RdpNewsForm +from qtribu.gui.wdg_qchat import QChatWidget from qtribu.logic.news_feed.rss_reader import RssMiniReader from qtribu.logic.splash_changer import SplashChanger from qtribu.toolbelt import PlgLogger, PlgOptionsManager diff --git a/qtribu/resources/emojis/emojis.json b/qtribu/resources/emojis/emojis.json new file mode 100644 index 00000000..90b26911 --- /dev/null +++ b/qtribu/resources/emojis/emojis.json @@ -0,0 +1,894 @@ +{ + "Gestures": [ + "๐Ÿคฒ", + "๐Ÿ‘", + "๐Ÿ™Œ", + "๐Ÿ‘", + "๐Ÿค", + "๐Ÿ‘", + "๐Ÿ‘Ž", + "๐Ÿ‘Š", + "โœŠ", + "๐Ÿค›", + "๐Ÿคœ", + "๐Ÿคž", + "โœŒ๏ธ", + "๐ŸคŸ", + "๐Ÿค˜", + "๐Ÿ‘Œ", + "๐Ÿค", + "๐ŸคŒ", + "๐Ÿ‘ˆ", + "๐Ÿ‘‰", + "๐Ÿ‘†", + "๐Ÿ‘‡", + "โ˜๏ธ", + "โœ‹", + "๐Ÿคš", + "๐Ÿ–", + "๐Ÿ––", + "๐Ÿ‘‹", + "๐Ÿค™", + "๐Ÿ’ช", + "๐Ÿฆพ", + "๐Ÿ–•", + "โœ๏ธ", + "๐Ÿ™", + "๐Ÿฆถ", + "๐Ÿฆต", + "๐Ÿฆฟ" + ], + "Emojis": [ + "๐Ÿ˜€", + "๐Ÿ˜ƒ", + "๐Ÿ˜„", + "๐Ÿ˜", + "๐Ÿ˜†", + "๐Ÿ˜…", + "๐Ÿ˜‚", + "๐Ÿคฃ", + "๐Ÿฅฒ", + "๐Ÿฅน", + "โ˜บ๏ธ", + "๐Ÿ˜Š", + "๐Ÿ˜‡", + "๐Ÿ™‚", + "๐Ÿ™ƒ", + "๐Ÿ˜‰", + "๐Ÿ˜Œ", + "๐Ÿ˜", + "๐Ÿฅฐ", + "๐Ÿ˜˜", + "๐Ÿ˜—", + "๐Ÿ˜™", + "๐Ÿ˜š", + "๐Ÿ˜‹", + "๐Ÿ˜›", + "๐Ÿ˜", + "๐Ÿ˜œ", + "๐Ÿคช", + "๐Ÿคจ", + "๐Ÿง", + "๐Ÿค“", + "๐Ÿ˜Ž", + "๐Ÿฅธ", + "๐Ÿคฉ", + "๐Ÿฅณ", + "๐Ÿ˜", + "๐Ÿ˜’", + "๐Ÿ˜ž", + "๐Ÿ˜”", + "๐Ÿ˜Ÿ", + "๐Ÿ˜•", + "๐Ÿ™", + "โ˜น๏ธ", + "๐Ÿ˜ฃ", + "๐Ÿ˜–", + "๐Ÿ˜ซ", + "๐Ÿ˜ฉ", + "๐Ÿฅบ", + "๐Ÿ˜ข", + "๐Ÿ˜ญ", + "๐Ÿ˜ฎโ€๐Ÿ’จ", + "๐Ÿ˜ค", + "๐Ÿ˜ ", + "๐Ÿ˜ก", + "๐Ÿคฌ", + "๐Ÿคฏ", + "๐Ÿ˜ณ", + "๐Ÿฅต", + "๐Ÿฅถ", + "๐Ÿ˜ฑ", + "๐Ÿ˜จ", + "๐Ÿ˜ฐ", + "๐Ÿ˜ฅ", + "๐Ÿ˜“", + "๐Ÿซฃ", + "๐Ÿค—", + "๐Ÿซก", + "๐Ÿค”", + "๐Ÿซข", + "๐Ÿคญ", + "๐Ÿคซ", + "๐Ÿคฅ", + "๐Ÿ˜ถ", + "๐Ÿ˜ถโ€๐ŸŒซ๏ธ", + "๐Ÿ˜", + "๐Ÿ˜‘", + "๐Ÿ˜ฌ", + "๐Ÿซจ", + "๐Ÿซ ", + "๐Ÿ™„", + "๐Ÿ˜ฏ", + "๐Ÿ˜ฆ", + "๐Ÿ˜ง", + "๐Ÿ˜ฎ", + "๐Ÿ˜ฒ", + "๐Ÿฅฑ", + "๐Ÿ˜ด", + "๐Ÿคค", + "๐Ÿ˜ช", + "๐Ÿ˜ต", + "๐Ÿ˜ตโ€๐Ÿ’ซ", + "๐Ÿซฅ", + "๐Ÿค", + "๐Ÿฅด", + "๐Ÿคข", + "๐Ÿคฎ", + "๐Ÿคง", + "๐Ÿ˜ท", + "๐Ÿค’", + "๐Ÿค•", + "๐Ÿค‘", + "๐Ÿค ", + "๐Ÿ˜ˆ", + "๐Ÿ‘ฟ", + "๐Ÿ‘น", + "๐Ÿ‘บ", + "๐Ÿคก", + "๐Ÿ’ฉ", + "๐Ÿ‘ป", + "๐Ÿ’€", + "โ˜ ๏ธ", + "๐Ÿ‘ฝ", + "๐Ÿ‘พ", + "๐Ÿค–", + "๐ŸŽƒ", + "๐Ÿ˜บ", + "๐Ÿ˜ธ", + "๐Ÿ˜น", + "๐Ÿ˜ป", + "๐Ÿ˜ผ", + "๐Ÿ˜ฝ", + "๐Ÿ™€", + "๐Ÿ˜ฟ", + "๐Ÿ˜พ", + "๐Ÿ‘ถ", + "๐Ÿ‘ง", + "๐Ÿง’", + "๐Ÿ‘ฆ", + "๐Ÿ‘ฉ", + "๐Ÿง‘", + "๐Ÿ‘จ" + ], + "Objects": [ + "โŒš๏ธ", + "๐Ÿ“ฑ", + "๐Ÿ“ฒ", + "๐Ÿ’ป", + "โŒจ๏ธ", + "๐Ÿ–ฅ", + "๐Ÿ–จ", + "๐Ÿ–ฑ", + "๐Ÿ–ฒ", + "๐Ÿ•น", + "๐Ÿ—œ", + "๐Ÿ’ฝ", + "๐Ÿ’พ", + "๐Ÿ’ฟ", + "๐Ÿ“€", + "๐Ÿ“ผ", + "๐Ÿ“ท", + "๐Ÿ“ธ", + "๐Ÿ“น", + "๐ŸŽฅ", + "๐Ÿ“ฝ", + "๐ŸŽž", + "๐Ÿ“ž", + "โ˜Ž๏ธ", + "๐Ÿ“Ÿ", + "๐Ÿ“ ", + "๐Ÿ“บ", + "๐Ÿ“ป", + "๐ŸŽ™", + "๐ŸŽš", + "๐ŸŽ›", + "๐Ÿงญ", + "โฑ", + "โฒ", + "โฐ", + "๐Ÿ•ฐ", + "โŒ›๏ธ", + "โณ", + "๐Ÿ“ก", + "๐Ÿ”‹", + "๐Ÿชซ", + "๐Ÿ”Œ", + "๐Ÿ’ก", + "๐Ÿ”ฆ", + "๐Ÿ•ฏ", + "๐Ÿช”", + "๐Ÿงฏ", + "๐Ÿ›ข", + "๐Ÿ›๏ธ", + "๐Ÿ’ธ", + "๐Ÿ’ต", + "๐Ÿ’ด", + "๐Ÿ’ถ", + "๐Ÿ’ท", + "๐Ÿช™", + "๐Ÿ’ฐ", + "๐Ÿ’ณ", + "๐Ÿ’Ž", + "โš–๏ธ", + "๐Ÿชฎ", + "๐Ÿชœ", + "๐Ÿงฐ", + "๐Ÿช›", + "๐Ÿ”ง", + "๐Ÿ”จ", + "โš’", + "๐Ÿ› ", + "โ›", + "๐Ÿชš", + "๐Ÿ”ฉ", + "โš™๏ธ", + "๐Ÿชค", + "๐Ÿงฑ", + "โ›“", + "๐Ÿงฒ", + "๐Ÿ”ซ", + "๐Ÿ’ฃ", + "๐Ÿงจ", + "๐Ÿช“", + "๐Ÿ”ช", + "๐Ÿ—ก", + "โš”๏ธ", + "๐Ÿ›ก", + "๐Ÿšฌ", + "โšฐ๏ธ", + "๐Ÿชฆ", + "โšฑ๏ธ", + "๐Ÿบ", + "๐Ÿ”ฎ", + "๐Ÿ“ฟ", + "๐Ÿงฟ", + "๐Ÿชฌ", + "๐Ÿ’ˆ", + "โš—๏ธ", + "๐Ÿ”ญ", + "๐Ÿ”ฌ", + "๐Ÿ•ณ", + "๐Ÿฉน", + "๐Ÿฉบ", + "๐Ÿฉป", + "๐Ÿฉผ", + "๐Ÿ’Š", + "๐Ÿ’‰", + "๐Ÿฉธ", + "๐Ÿงฌ", + "๐Ÿฆ ", + "๐Ÿงซ", + "๐Ÿงช", + "๐ŸŒก", + "๐Ÿงน", + "๐Ÿช ", + "๐Ÿงบ", + "๐Ÿงป", + "๐Ÿšฝ", + "๐Ÿšฐ", + "๐Ÿšฟ", + "๐Ÿ›", + "๐Ÿ›€", + "๐Ÿงผ", + "๐Ÿชฅ", + "๐Ÿช’", + "๐Ÿงฝ", + "๐Ÿชฃ", + "๐Ÿงด", + "๐Ÿ›Ž", + "๐Ÿ”‘", + "๐Ÿ—", + "๐Ÿšช", + "๐Ÿช‘", + "๐Ÿ›‹", + "๐Ÿ›", + "๐Ÿ›Œ", + "๐Ÿงธ", + "๐Ÿช†", + "๐Ÿ–ผ", + "๐Ÿชž", + "๐ŸชŸ", + "๐Ÿ›", + "๐Ÿ›’", + "๐ŸŽ", + "๐ŸŽˆ", + "๐ŸŽ", + "๐ŸŽ€", + "๐Ÿช„", + "๐Ÿช…", + "๐ŸŽŠ", + "๐ŸŽ‰", + "๐Ÿชฉ", + "๐ŸŽŽ", + "๐Ÿฎ", + "๐ŸŽ" + ], + "Food": [ + "๐Ÿ", + "๐ŸŽ", + "๐Ÿ", + "๐ŸŠ", + "๐Ÿ‹", + "๐ŸŒ", + "๐Ÿ‰", + "๐Ÿ‡", + "๐Ÿ“", + "๐Ÿซ", + "๐Ÿˆ", + "๐Ÿ’", + "๐Ÿ‘", + "๐Ÿฅญ", + "๐Ÿ", + "๐Ÿฅฅ", + "๐Ÿฅ", + "๐Ÿ…", + "๐Ÿ†", + "๐Ÿฅ‘", + "๐Ÿฅฆ", + "๐Ÿซ›", + "๐Ÿฅฌ", + "๐Ÿฅ’", + "๐ŸŒถ", + "๐Ÿซ‘", + "๐ŸŒฝ", + "๐Ÿฅ•", + "๐Ÿซ’", + "๐Ÿง„", + "๐Ÿง…", + "๐Ÿซš", + "๐Ÿฅ”", + "๐Ÿ ", + "๐Ÿซ˜", + "๐Ÿฅ", + "๐Ÿฅฏ", + "๐Ÿž", + "๐Ÿฅ–", + "๐Ÿฅจ", + "๐Ÿง€", + "๐Ÿฅš", + "๐Ÿณ", + "๐Ÿงˆ", + "๐Ÿฅž", + "๐Ÿง‡", + "๐Ÿฅ“", + "๐Ÿฅฉ", + "๐Ÿ—", + "๐Ÿ–", + "๐Ÿฆด", + "๐ŸŒญ", + "๐Ÿ”", + "๐ŸŸ", + "๐Ÿ•", + "๐Ÿซ“", + "๐Ÿฅช", + "๐Ÿฅ™", + "๐Ÿง†", + "๐ŸŒฎ", + "๐ŸŒฏ", + "๐Ÿซ”", + "๐Ÿฅ—", + "๐Ÿฅ˜", + "๐Ÿซ•", + "๐Ÿฅซ", + "๐Ÿ", + "๐Ÿœ", + "๐Ÿฒ", + "๐Ÿ›", + "๐Ÿฃ", + "๐Ÿฑ", + "๐ŸฅŸ", + "๐Ÿฆช", + "๐Ÿค", + "๐Ÿ™", + "๐Ÿš", + "๐Ÿ˜", + "๐Ÿฅ", + "๐Ÿฅ ", + "๐Ÿฅฎ", + "๐Ÿข", + "๐Ÿก", + "๐Ÿง", + "๐Ÿจ", + "๐Ÿฆ", + "๐Ÿฅง", + "๐Ÿง", + "๐Ÿฐ", + "๐ŸŽ‚", + "๐Ÿฎ", + "๐Ÿญ", + "๐Ÿฌ", + "๐Ÿซ", + "๐Ÿฟ", + "๐Ÿฉ", + "๐Ÿช", + "๐ŸŒฐ", + "๐Ÿฅœ", + "๐Ÿฏ", + "๐Ÿฅ›", + "๐Ÿผ", + "๐Ÿซ–", + "โ˜•๏ธ", + "๐Ÿต", + "๐Ÿงƒ", + "๐Ÿฅค", + "๐Ÿง‹", + "๐Ÿซ™", + "๐Ÿถ", + "๐Ÿบ", + "๐Ÿป", + "๐Ÿฅ‚", + "๐Ÿท", + "๐Ÿซ—", + "๐Ÿฅƒ", + "๐Ÿธ", + "๐Ÿน", + "๐Ÿง‰", + "๐Ÿพ", + "๐ŸงŠ", + "๐Ÿฅ„", + "๐Ÿด", + "๐Ÿฝ", + "๐Ÿฅฃ", + "๐Ÿฅก", + "๐Ÿฅข", + "๐Ÿง‚" + ], + "Places": [ + "โš“๏ธ", + "๐Ÿ›Ÿ", + "๐Ÿช", + "โ›ฝ๏ธ", + "๐Ÿšง", + "๐Ÿšฆ", + "๐Ÿšฅ", + "๐Ÿš", + "๐Ÿ—บ", + "๐Ÿ—ฟ", + "๐Ÿ—ฝ", + "๐Ÿ—ผ", + "๐Ÿฐ", + "๐Ÿฏ", + "๐ŸŸ", + "๐ŸŽก", + "๐ŸŽข", + "๐Ÿ›", + "๐ŸŽ ", + "โ›ฒ๏ธ", + "โ›ฑ", + "๐Ÿ–", + "๐Ÿ", + "๐Ÿœ", + "๐ŸŒ‹", + "โ›ฐ", + "๐Ÿ”", + "๐Ÿ—ป", + "๐Ÿ•", + "โ›บ๏ธ", + "๐Ÿ›–", + "๐Ÿ ", + "๐Ÿก", + "๐Ÿ˜", + "๐Ÿš", + "๐Ÿ—", + "๐Ÿญ", + "๐Ÿข", + "๐Ÿฌ", + "๐Ÿฃ", + "๐Ÿค", + "๐Ÿฅ", + "๐Ÿฆ", + "๐Ÿจ", + "๐Ÿช", + "๐Ÿซ", + "๐Ÿฉ", + "๐Ÿ’’", + "๐Ÿ›", + "โ›ช๏ธ", + "๐Ÿ•Œ", + "๐Ÿ•", + "๐Ÿ›•", + "๐Ÿ•‹", + "โ›ฉ", + "๐Ÿ›ค", + "๐Ÿ›ฃ", + "๐Ÿ—พ", + "๐ŸŽ‘", + "๐Ÿž", + "๐ŸŒ…", + "๐ŸŒ„", + "๐ŸŒ ", + "๐ŸŽ‡", + "๐ŸŽ†", + "๐ŸŒ‡", + "๐ŸŒ†", + "๐Ÿ™", + "๐ŸŒƒ", + "๐ŸŒŒ", + "๐ŸŒ‰", + "๐ŸŒ" + ], + "Love": [ + "โค๏ธโ€๐Ÿ”ฅ", + "โค๏ธโ€๐Ÿฉน", + "โค๏ธ", + "๐Ÿฉท", + "๐Ÿ’›", + "๐Ÿ’š", + "๐Ÿ’™", + "๐Ÿฉต", + "๐Ÿ’œ", + "๐Ÿ–ค", + "๐Ÿฉถ", + "๐Ÿค", + "๐ŸคŽ", + "โค๏ธโ€๐Ÿ”ฅ", + "โค๏ธโ€๐Ÿฉน", + "๐Ÿ’”", + "โฃ๏ธ", + "๐Ÿ’•", + "๐Ÿ’ž", + "๐Ÿ’“", + "๐Ÿ’—", + "๐Ÿ’–", + "๐Ÿ’˜", + "๐Ÿ’", + "๐Ÿ’Ÿ", + "๐Ÿ‘ญ", + "๐Ÿ‘ซ", + "๐Ÿ‘ฉโ€โค๏ธโ€๐Ÿ‘ฉ", + "๐Ÿ‘ฉโ€โค๏ธโ€๐Ÿ‘จ", + "๐Ÿ‘ฉโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘ฉ", + "๐Ÿ‘ฉโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ", + "๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘ฆ", + "๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘ง", + "๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ฆ", + "๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘ฆโ€๐Ÿ‘ฆ", + "๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ง", + "๐Ÿ‘ฉโ€๐Ÿ‘ฉโ€๐Ÿ‘ฆ", + "๐Ÿ‘ฉโ€๐Ÿ‘ฉโ€๐Ÿ‘ง", + "๐Ÿ‘ฉโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ฆ", + "๐Ÿ‘ฉโ€๐Ÿ‘ฉโ€๐Ÿ‘ฆโ€๐Ÿ‘ฆ", + "๐Ÿ‘ฉโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ง" + ], + "Flags": [ + "๐Ÿณ๏ธ", + "๐Ÿด", + "๐Ÿ", + "๐Ÿšฉ", + "๐Ÿดโ€โ˜ ๏ธ", + "๐Ÿ‡ฆ๐Ÿ‡ซ", + "๐Ÿ‡ฆ๐Ÿ‡ฝ", + "๐Ÿ‡ฆ๐Ÿ‡ฑ", + "๐Ÿ‡ฉ๐Ÿ‡ฟ", + "๐Ÿ‡ฆ๐Ÿ‡ธ", + "๐Ÿ‡ฆ๐Ÿ‡ฉ", + "๐Ÿ‡ฆ๐Ÿ‡ด", + "๐Ÿ‡ฆ๐Ÿ‡ฎ", + "๐Ÿ‡ฆ๐Ÿ‡ถ", + "๐Ÿ‡ฆ๐Ÿ‡ฌ", + "๐Ÿ‡ฆ๐Ÿ‡ท", + "๐Ÿ‡ฆ๐Ÿ‡ฒ", + "๐Ÿ‡ฆ๐Ÿ‡ผ", + "๐Ÿ‡ฆ๐Ÿ‡บ", + "๐Ÿ‡ฆ๐Ÿ‡น", + "๐Ÿ‡ฆ๐Ÿ‡ฟ", + "๐Ÿ‡ง๐Ÿ‡ธ", + "๐Ÿ‡ง๐Ÿ‡ญ", + "๐Ÿ‡ง๐Ÿ‡ฉ", + "๐Ÿ‡ง๐Ÿ‡ง", + "๐Ÿ‡ง๐Ÿ‡พ", + "๐Ÿ‡ง๐Ÿ‡ช", + "๐Ÿ‡ง๐Ÿ‡ฟ", + "๐Ÿ‡ง๐Ÿ‡ฏ", + "๐Ÿ‡ง๐Ÿ‡ฒ", + "๐Ÿ‡ง๐Ÿ‡น", + "๐Ÿ‡ง๐Ÿ‡ด", + "๐Ÿ‡ง๐Ÿ‡ฆ", + "๐Ÿ‡ง๐Ÿ‡ผ", + "๐Ÿ‡ง๐Ÿ‡ท", + "๐Ÿ‡ฎ๐Ÿ‡ด", + "๐Ÿ‡ป๐Ÿ‡ฌ", + "๐Ÿ‡ง๐Ÿ‡ณ", + "๐Ÿ‡ง๐Ÿ‡ฌ", + "๐Ÿ‡ง๐Ÿ‡ซ", + "๐Ÿ‡ฏ๐Ÿ‡ฒ", + "๐Ÿ‡ฎ๐Ÿ‡ธ", + "๐Ÿ‡ซ๐Ÿ‡ฏ", + "๐Ÿ‡ซ๐Ÿ‡ด", + "๐Ÿ‡ณ๐Ÿ‡ฌ", + "๐Ÿ‡ท๐Ÿ‡บ", + "๐Ÿ‡บ๐Ÿ‡ธ", + "๐Ÿ‡บ๐Ÿ‡ฒ", + "๐Ÿ‡บ๐Ÿ‡ณ", + "๐Ÿ‡ฐ๐Ÿ‡ท", + "๐Ÿ‡ฌ๐Ÿ‡ง", + "๐Ÿ‡ง๐Ÿ‡ป", + "๐Ÿ‡ธ๐Ÿ‡ณ", + "๐Ÿ‡ณ๐Ÿ‡ท", + "๐Ÿ‡ณ๐Ÿ‡ต", + "๐Ÿ‡ณ๐Ÿ‡ต", + "๐Ÿ‡ฏ๐Ÿ‡ต" + ], + "Other": [ + "โ˜ฎ๏ธ", + "โœ๏ธ", + "โ˜ช๏ธ", + "๐Ÿชฏ", + "๐Ÿ•‰", + "โ˜ธ๏ธ", + "โœก๏ธ", + "๐Ÿ”ฏ", + "๐Ÿ•Ž", + "โ˜ฏ๏ธ", + "โ˜ฆ๏ธ", + "๐Ÿ›", + "โš›๏ธ", + "๐Ÿ‰‘", + "โ˜ข๏ธ", + "โ˜ฃ๏ธ", + "๐Ÿ“ด", + "๐Ÿ“ณ", + "๐Ÿˆถ", + "๐Ÿˆš๏ธ", + "๐Ÿˆธ", + "๐Ÿˆบ", + "๐Ÿˆท๏ธ", + "โœด๏ธ", + "๐Ÿ†š", + "๐Ÿ’ฎ", + "๐Ÿ‰", + "ใŠ™๏ธ", + "ใŠ—๏ธ", + "๐Ÿˆด", + "๐Ÿˆต", + "๐Ÿˆน", + "๐Ÿˆฒ", + "๐Ÿ…ฐ๏ธ", + "๐Ÿ…ฑ๏ธ", + "๐Ÿ†Ž", + "๐Ÿ†‘", + "๐Ÿ…พ๏ธ", + "๐Ÿ†˜", + "โŒ", + "โญ•๏ธ", + "๐Ÿ›‘", + "โ›”๏ธ", + "๐Ÿ“›", + "๐Ÿšซ", + "๐Ÿ’ฏ", + "๐Ÿ’ข", + "โ™จ๏ธ", + "๐Ÿšท", + "๐Ÿšฏ", + "๐Ÿšณ", + "๐Ÿšฑ", + "๐Ÿ”ž", + "๐Ÿ“ต", + "๐Ÿšญ", + "โ—๏ธ", + "โ•", + "โ“", + "โ”", + "โ€ผ๏ธ", + "โ‰๏ธ", + "๐Ÿ”…", + "๐Ÿ”†", + "ใ€ฝ๏ธ", + "โš ๏ธ", + "๐Ÿšธ", + "๐Ÿ”ฑ", + "โšœ๏ธ", + "๐Ÿ”ฐ", + "โ™ป๏ธ", + "โœ…", + "๐Ÿˆฏ๏ธ", + "๐Ÿ’น", + "โ‡๏ธ", + "โœณ๏ธ", + "โŽ", + "๐ŸŒ", + "๐Ÿ’ ", + "โ“‚๏ธ", + "๐ŸŒ€", + "๐Ÿ’ค", + "๐Ÿง", + "๐Ÿšพ", + "โ™ฟ๏ธ", + "๐Ÿ…ฟ๏ธ", + "๐Ÿ›—", + "๐Ÿˆณ", + "๐Ÿˆ‚๏ธ", + "๐Ÿ›‚", + "๐Ÿ›ƒ", + "๐Ÿ›„", + "๐Ÿ›…", + "๐Ÿšน", + "๐Ÿšบ", + "๐Ÿšผ", + "โšง", + "๐Ÿšป", + "๐Ÿšฎ", + "๐ŸŽฆ", + "๐Ÿ›œ", + "๐Ÿ“ถ", + "๐Ÿˆ", + "๐Ÿ”ฃ", + "โ„น๏ธ", + "๐Ÿ”ค", + "๐Ÿ”ก", + "๐Ÿ” ", + "๐Ÿ†–", + "๐Ÿ†—", + "๐Ÿ†™", + "๐Ÿ†’", + "๐Ÿ†•", + "๐Ÿ†“", + "0๏ธโƒฃ", + "1๏ธโƒฃ", + "2๏ธโƒฃ", + "3๏ธโƒฃ", + "4๏ธโƒฃ", + "5๏ธโƒฃ", + "6๏ธโƒฃ", + "7๏ธโƒฃ", + "8๏ธโƒฃ", + "9๏ธโƒฃ", + "๐Ÿ”Ÿ", + "๐Ÿ”ข", + "#๏ธโƒฃ", + "*๏ธโƒฃ", + "โ๏ธ", + "โ–ถ๏ธ", + "โธ", + "โฏ", + "โน", + "โบ", + "โญ", + "โฎ", + "โฉ", + "โช", + "โซ", + "โฌ", + "โ—€๏ธ", + "๐Ÿ”ผ", + "๐Ÿ”ฝ", + "โžก๏ธ", + "โฌ…๏ธ", + "โฌ†๏ธ", + "โฌ‡๏ธ", + "โ†—๏ธ", + "โ†˜๏ธ", + "โ†™๏ธ", + "โ†–๏ธ", + "โ†•๏ธ", + "โ†”๏ธ", + "โ†ช๏ธ", + "โ†ฉ๏ธ", + "โคด๏ธ", + "โคต๏ธ", + "๐Ÿ”€", + "๐Ÿ”", + "๐Ÿ”‚", + "๐Ÿ”„", + "๐Ÿ”ƒ", + "๐ŸŽต", + "๐ŸŽถ" + ], + "New": [ + "๐Ÿซจ", + "๐Ÿฉท", + "๐Ÿฉต", + "๐Ÿฉถ", + "๐Ÿซธ๐Ÿฝ", + "๐Ÿซธ๐Ÿพ", + "๐Ÿซธ๐Ÿฟ", + "๐Ÿซท๐Ÿฝ", + "๐Ÿซท๐Ÿพ", + "๐Ÿซท๐Ÿฟ", + "๐Ÿซ", + "๐ŸซŽ", + "๐Ÿชฟ", + "๐Ÿฆโ€โฌ›", + "๐Ÿชฝ", + "๐Ÿชผ", + "๐Ÿชป", + "๐Ÿซ›", + "๐Ÿซš", + "๐Ÿชญ", + "๐Ÿชฎ", + "๐Ÿชˆ", + "๐Ÿช‡", + "๐Ÿชฏ", + "๐Ÿ›œ", + "๐Ÿซ ", + "๐Ÿซข", + "๐Ÿซฃ", + "๐Ÿซก", + "๐Ÿซฅ", + "๐Ÿซค", + "๐Ÿฅน", + "๐Ÿซฑ๐Ÿฝ", + "๐Ÿซฑ๐Ÿพ", + "๐Ÿซฑ๐Ÿฟ", + "๐Ÿซฒ๐Ÿฝ", + "๐Ÿซฒ๐Ÿพ", + "๐Ÿซฒ๐Ÿฟ", + "๐Ÿซณ๐Ÿฝ", + "๐Ÿซณ๐Ÿพ", + "๐Ÿซณ๐Ÿฟ", + "๐Ÿซด๐Ÿฝ", + "๐Ÿซด๐Ÿพ", + "๐Ÿซด๐Ÿฟ", + "๐Ÿซฐ๐Ÿฝ", + "๐Ÿซฐ๐Ÿพ", + "๐Ÿซฐ๐Ÿฟ", + "๐Ÿซต๐Ÿฝ", + "๐Ÿซต๐Ÿพ", + "๐Ÿซต๐Ÿฟ", + "๐Ÿซถ๐Ÿฝ", + "๐Ÿซถ๐Ÿพ", + "๐Ÿซถ๐Ÿฟ", + "๐Ÿซฑ๐Ÿฟโ€๐Ÿซฒ๐Ÿผ", + "๐Ÿซฑ๐Ÿฟโ€๐Ÿซฒ๐Ÿฝ", + "๐Ÿซฑ๐Ÿฟโ€๐Ÿซฒ๐Ÿพ", + "๐Ÿซฆ", + "๐Ÿซ…๐Ÿฝ", + "๐Ÿซ…๐Ÿพ", + "๐Ÿซ…๐Ÿฟ", + "๐Ÿซƒ๐Ÿฝ", + "๐Ÿซƒ๐Ÿพ", + "๐Ÿซƒ๐Ÿฟ", + "๐Ÿซ„๐Ÿฝ", + "๐Ÿซ„๐Ÿพ", + "๐Ÿซ„๐Ÿฟ", + "๐ŸงŒ", + "๐Ÿชธ", + "๐Ÿชท", + "๐Ÿชน", + "๐Ÿชบ", + "๐Ÿซ˜", + "๐Ÿซ—", + "๐Ÿซ™", + "๐Ÿ›", + "๐Ÿ›ž", + "๐Ÿ›Ÿ", + "๐Ÿชฌ", + "๐Ÿชฉ", + "๐Ÿชซ", + "๐Ÿฉผ", + "๐Ÿฉป", + "๐Ÿซง", + "๐Ÿชช", + "๐ŸŸฐ", + "๐Ÿ˜ฎโ€๐Ÿ’จ", + "๐Ÿ˜ตโ€๐Ÿ’ซ", + "๐Ÿ˜ถโ€๐ŸŒซ๏ธ", + "โค๏ธโ€๐Ÿ”ฅ", + "โค๏ธโ€๐Ÿฉน", + "๐Ÿง”๐Ÿปโ€โ™€๏ธ", + "๐Ÿง”๐Ÿฝโ€โ™‚๏ธ", + "๐Ÿง”๐Ÿพโ€โ™‚๏ธ", + "๐Ÿง”๐Ÿฟโ€โ™‚๏ธ" + ] +} diff --git a/qtribu/resources/emojis/emojis2.json b/qtribu/resources/emojis/emojis2.json new file mode 100644 index 00000000..32a320da --- /dev/null +++ b/qtribu/resources/emojis/emojis2.json @@ -0,0 +1,1850 @@ +{ + "Smileys & People": { + "๐Ÿ˜€": "Grinning Face", + "๐Ÿ˜ƒ": "Grinning Face with Big Eyes", + "๐Ÿ˜„": "Grinning Face with Smiling Eyes", + "๐Ÿ˜": "Beaming Face with Smiling Eyes", + "๐Ÿ˜†": "Grinning Squinting Face", + "๐Ÿ˜…": "Grinning Face with Sweat", + "๐Ÿคฃ": "Rolling on the Floor Laughing", + "๐Ÿ˜‚": "Face with Tears of Joy", + "๐Ÿ™‚": "Slightly Smiling Face", + "๐Ÿ™ƒ": "Upside-Down Face", + "๐Ÿ˜‰": "Winking Face", + "๐Ÿ˜Š": "Smiling Face with Smiling Eyes", + "๐Ÿ˜‡": "Smiling Face with Halo", + "๐Ÿฅฐ": "Smiling Face with Hearts", + "๐Ÿ˜": "Smiling Face with Heart-Eyes", + "๐Ÿคฉ": "Star-Struck", + "๐Ÿ˜˜": "Face Blowing a Kiss", + "๐Ÿ˜—": "Kissing Face", + "โ˜บ๏ธ": "Smiling Face", + "๐Ÿ˜š": "Kissing Face with Closed Eyes", + "๐Ÿ˜™": "Kissing Face with Smiling Eyes", + "๐Ÿฅฒ": "Smiling Face with Tear", + "๐Ÿ˜‹": "Face Savoring Food", + "๐Ÿ˜›": "Face with Tongue", + "๐Ÿ˜œ": "Winking Face with Tongue", + "๐Ÿคช": "Zany Face", + "๐Ÿ˜": "Squinting Face with Tongue", + "๐Ÿค‘": "Money-Mouth Face", + "๐Ÿค—": "Hugging Face", + "๐Ÿคญ": "Face with Hand Over Mouth", + "๐Ÿคซ": "Shushing Face", + "๐Ÿค”": "Thinking Face", + "๐Ÿค": "Zipper-Mouth Face", + "๐Ÿคจ": "Face with Raised Eyebrow", + "๐Ÿ˜": "Neutral Face", + "๐Ÿ˜‘": "Expressionless Face", + "๐Ÿ˜ถ": "Face Without Mouth", + "๐Ÿ˜": "Smirking Face", + "๐Ÿ˜’": "Unamused Face", + "๐Ÿ™„": "Face with Rolling Eyes", + "๐Ÿ˜ฌ": "Grimacing Face", + "๐Ÿคฅ": "Lying Face", + "๐Ÿ˜Œ": "Relieved Face", + "๐Ÿ˜”": "Pensive Face", + "๐Ÿ˜ช": "Sleepy Face", + "๐Ÿคค": "Drooling Face", + "๐Ÿ˜ด": "Sleeping Face", + "๐Ÿ˜ท": "Face with Medical Mask", + "๐Ÿค’": "Face with Thermometer", + "๐Ÿค•": "Face with Head-Bandage", + "๐Ÿคข": "Nauseated Face", + "๐Ÿคฎ": "Face Vomiting", + "๐Ÿคง": "Sneezing Face", + "๐Ÿฅต": "Hot Face", + "๐Ÿฅถ": "Cold Face", + "๐Ÿฅด": "Woozy Face", + "๐Ÿ˜ต": "Dizzy Face", + "๐Ÿคฏ": "Exploding Head", + "๐Ÿค ": "Cowboy Hat Face", + "๐Ÿฅณ": "Partying Face", + "๐Ÿฅธ": "Disguised Face", + "๐Ÿ˜Ž": "Smiling Face with Sunglasses", + "๐Ÿค“": "Nerd Face", + "๐Ÿง": "Face with Monocle", + "๐Ÿ˜•": "Confused Face", + "๐Ÿ˜Ÿ": "Worried Face", + "๐Ÿ™": "Slightly Frowning Face", + "โ˜น๏ธ": "Frowning Face", + "๐Ÿ˜ฎ": "Face with Open Mouth", + "๐Ÿ˜ฏ": "Hushed Face", + "๐Ÿ˜ฒ": "Astonished Face", + "๐Ÿ˜ณ": "Flushed Face", + "๐Ÿฅบ": "Pleading Face", + "๐Ÿ˜ฆ": "Frowning Face with Open Mouth", + "๐Ÿ˜ง": "Anguished Face", + "๐Ÿ˜จ": "Fearful Face", + "๐Ÿ˜ฐ": "Anxious Face with Sweat", + "๐Ÿ˜ฅ": "Sad but Relieved Face", + "๐Ÿ˜ข": "Crying Face", + "๐Ÿ˜ญ": "Loudly Crying Face", + "๐Ÿ˜ฑ": "Face Screaming in Fear", + "๐Ÿ˜–": "Confounded Face", + "๐Ÿ˜ฃ": "Persevering Face", + "๐Ÿ˜ž": "Disappointed Face", + "๐Ÿ˜“": "Downcast Face with Sweat", + "๐Ÿ˜ฉ": "Weary Face", + "๐Ÿ˜ซ": "Tired Face", + "๐Ÿฅฑ": "Yawning Face", + "๐Ÿ˜ค": "Face with Steam From Nose", + "๐Ÿ˜ก": "Pouting Face", + "๐Ÿ˜ ": "Angry Face", + "๐Ÿคฌ": "Face with Symbols on Mouth", + "๐Ÿ˜ˆ": "Smiling Face with Horns", + "๐Ÿ‘ฟ": "Angry Face with Horns", + "๐Ÿ’€": "Skull", + "โ˜ ๏ธ": "Skull and Crossbones", + "๐Ÿ’ฉ": "Pile of Poo", + "๐Ÿคก": "Clown Face", + "๐Ÿ‘น": "Ogre", + "๐Ÿ‘บ": "Goblin", + "๐Ÿ‘ป": "Ghost", + "๐Ÿ‘ฝ": "Alien", + "๐Ÿ‘พ": "Alien Monster", + "๐Ÿค–": "Robot", + "๐Ÿ˜บ": "Grinning Cat", + "๐Ÿ˜ธ": "Grinning Cat with Smiling Eyes", + "๐Ÿ˜น": "Cat with Tears of Joy", + "๐Ÿ˜ป": "Smiling Cat with Heart-Eyes", + "๐Ÿ˜ผ": "Cat with Wry Smile", + "๐Ÿ˜ฝ": "Kissing Cat", + "๐Ÿ™€": "Weary Cat", + "๐Ÿ˜ฟ": "Crying Cat", + "๐Ÿ˜พ": "Pouting Cat", + "๐Ÿ’‹": "Kiss Mark", + "๐Ÿ‘‹": "Waving Hand", + "๐Ÿคš": "Raised Back of Hand", + "๐Ÿ–๏ธ": "Hand with Fingers Splayed", + "โœ‹": "Raised Hand", + "๐Ÿ––": "Vulcan Salute", + "๐Ÿ‘Œ": "OK Hand", + "๐ŸคŒ": "Pinched Fingers", + "๐Ÿค": "Pinching Hand", + "โœŒ๏ธ": "Victory Hand", + "๐Ÿคž": "Crossed Fingers", + "๐ŸคŸ": "Love-You Gesture", + "๐Ÿค˜": "Sign of the Horns", + "๐Ÿค™": "Call Me Hand", + "๐Ÿ‘ˆ": "Backhand Index Pointing Left", + "๐Ÿ‘‰": "Backhand Index Pointing Right", + "๐Ÿ‘†": "Backhand Index Pointing Up", + "๐Ÿ–•": "Middle Finger", + "๐Ÿ‘‡": "Backhand Index Pointing Down", + "โ˜๏ธ": "Index Pointing Up", + "๐Ÿ‘": "Thumbs Up", + "๐Ÿ‘Ž": "Thumbs Down", + "โœŠ": "Raised Fist", + "๐Ÿ‘Š": "Oncoming Fist", + "๐Ÿค›": "Left-Facing Fist", + "๐Ÿคœ": "Right-Facing Fist", + "๐Ÿ‘": "Clapping Hands", + "๐Ÿ™Œ": "Raising Hands", + "๐Ÿ‘": "Open Hands", + "๐Ÿคฒ": "Palms Up Together", + "๐Ÿค": "Handshake", + "๐Ÿ™": "Folded Hands", + "โœ๏ธ": "Writing Hand", + "๐Ÿ’…": "Nail Polish", + "๐Ÿคณ": "Selfie", + "๐Ÿ’ช": "Flexed Biceps", + "๐Ÿฆพ": "Mechanical Arm", + "๐Ÿฆฟ": "Mechanical Leg", + "๐Ÿฆต": "Leg", + "๐Ÿฆถ": "Foot", + "๐Ÿ‘‚": "Ear", + "๐Ÿฆป": "Ear with Hearing Aid", + "๐Ÿ‘ƒ": "Nose", + "๐Ÿง ": "Brain", + "๐Ÿซ€": "Anatomical Heart", + "๐Ÿซ": "Lungs", + "๐Ÿฆท": "Tooth", + "๐Ÿฆด": "Bone", + "๐Ÿ‘€": "Eyes", + "๐Ÿ‘๏ธ": "Eye", + "๐Ÿ‘…": "Tongue", + "๐Ÿ‘„": "Mouth", + "๐Ÿ‘ถ": "Baby", + "๐Ÿง’": "Child", + "๐Ÿ‘ฆ": "Boy", + "๐Ÿ‘ง": "Girl", + "๐Ÿง‘": "Person", + "๐Ÿ‘ฑ": "Person: Blond Hair", + "๐Ÿ‘จ": "Man", + "๐Ÿง”": "Person: Beard", + "๐Ÿ‘จโ€๐Ÿฆฐ": "Man: Red Hair", + "๐Ÿ‘จโ€๐Ÿฆฑ": "Man: Curly Hair", + "๐Ÿ‘จโ€๐Ÿฆณ": "Man: White Hair", + "๐Ÿ‘จโ€๐Ÿฆฒ": "Man: Bald", + "๐Ÿ‘ฉ": "Woman", + "๐Ÿ‘ฉโ€๐Ÿฆฐ": "Woman: Red Hair", + "๐Ÿง‘โ€๐Ÿฆฐ": "Person: Red Hair", + "๐Ÿ‘ฉโ€๐Ÿฆฑ": "Woman: Curly Hair", + "๐Ÿง‘โ€๐Ÿฆฑ": "Person: Curly Hair", + "๐Ÿ‘ฉโ€๐Ÿฆณ": "Woman: White Hair", + "๐Ÿง‘โ€๐Ÿฆณ": "Person: White Hair", + "๐Ÿ‘ฉโ€๐Ÿฆฒ": "Woman: Bald", + "๐Ÿง‘โ€๐Ÿฆฒ": "Person: Bald", + "๐Ÿ‘ฑโ€โ™€๏ธ": "Woman: Blond Hair", + "๐Ÿ‘ฑโ€โ™‚๏ธ": "Man: Blond Hair", + "๐Ÿง“": "Older Person", + "๐Ÿ‘ด": "Old Man", + "๐Ÿ‘ต": "Old Woman", + "๐Ÿ™": "Person Frowning", + "๐Ÿ™โ€โ™‚๏ธ": "Man Frowning", + "๐Ÿ™โ€โ™€๏ธ": "Woman Frowning", + "๐Ÿ™Ž": "Person Pouting", + "๐Ÿ™Žโ€โ™‚๏ธ": "Man Pouting", + "๐Ÿ™Žโ€โ™€๏ธ": "Woman Pouting", + "๐Ÿ™…": "Person Gesturing No", + "๐Ÿ™…โ€โ™‚๏ธ": "Man Gesturing No", + "๐Ÿ™…โ€โ™€๏ธ": "Woman Gesturing No", + "๐Ÿ™†": "Person Gesturing OK", + "๐Ÿ™†โ€โ™‚๏ธ": "Man Gesturing OK", + "๐Ÿ™†โ€โ™€๏ธ": "Woman Gesturing OK", + "๐Ÿ’": "Person Tipping Hand", + "๐Ÿ’โ€โ™‚๏ธ": "Man Tipping Hand", + "๐Ÿ’โ€โ™€๏ธ": "Woman Tipping Hand", + "๐Ÿ™‹": "Person Raising Hand", + "๐Ÿ™‹โ€โ™‚๏ธ": "Man Raising Hand", + "๐Ÿ™‹โ€โ™€๏ธ": "Woman Raising Hand", + "๐Ÿง": "Deaf Person", + "๐Ÿงโ€โ™‚๏ธ": "Deaf Man", + "๐Ÿงโ€โ™€๏ธ": "Deaf Woman", + "๐Ÿ™‡": "Person Bowing", + "๐Ÿ™‡โ€โ™‚๏ธ": "Man Bowing", + "๐Ÿ™‡โ€โ™€๏ธ": "Woman Bowing", + "๐Ÿคฆ": "Person Facepalming", + "๐Ÿคฆโ€โ™‚๏ธ": "Man Facepalming", + "๐Ÿคฆโ€โ™€๏ธ": "Woman Facepalming", + "๐Ÿคท": "Person Shrugging", + "๐Ÿคทโ€โ™‚๏ธ": "Man Shrugging", + "๐Ÿคทโ€โ™€๏ธ": "Woman Shrugging", + "๐Ÿง‘โ€โš•๏ธ": "Health Worker", + "๐Ÿ‘จโ€โš•๏ธ": "Man Health Worker", + "๐Ÿ‘ฉโ€โš•๏ธ": "Woman Health Worker", + "๐Ÿง‘โ€๐ŸŽ“": "Student", + "๐Ÿ‘จโ€๐ŸŽ“": "Man Student", + "๐Ÿ‘ฉโ€๐ŸŽ“": "Woman Student", + "๐Ÿง‘โ€๐Ÿซ": "Teacher", + "๐Ÿ‘จโ€๐Ÿซ": "Man Teacher", + "๐Ÿ‘ฉโ€๐Ÿซ": "Woman Teacher", + "๐Ÿง‘โ€โš–๏ธ": "Judge", + "๐Ÿ‘จโ€โš–๏ธ": "Man Judge", + "๐Ÿ‘ฉโ€โš–๏ธ": "Woman Judge", + "๐Ÿง‘โ€๐ŸŒพ": "Farmer", + "๐Ÿ‘จโ€๐ŸŒพ": "Man Farmer", + "๐Ÿ‘ฉโ€๐ŸŒพ": "Woman Farmer", + "๐Ÿง‘โ€๐Ÿณ": "Cook", + "๐Ÿ‘จโ€๐Ÿณ": "Man Cook", + "๐Ÿ‘ฉโ€๐Ÿณ": "Woman Cook", + "๐Ÿง‘โ€๐Ÿ”ง": "Mechanic", + "๐Ÿ‘จโ€๐Ÿ”ง": "Man Mechanic", + "๐Ÿ‘ฉโ€๐Ÿ”ง": "Woman Mechanic", + "๐Ÿง‘โ€๐Ÿญ": "Factory Worker", + "๐Ÿ‘จโ€๐Ÿญ": "Man Factory Worker", + "๐Ÿ‘ฉโ€๐Ÿญ": "Woman Factory Worker", + "๐Ÿง‘โ€๐Ÿ’ผ": "Office Worker", + "๐Ÿ‘จโ€๐Ÿ’ผ": "Man Office Worker", + "๐Ÿ‘ฉโ€๐Ÿ’ผ": "Woman Office Worker", + "๐Ÿง‘โ€๐Ÿ”ฌ": "Scientist", + "๐Ÿ‘จโ€๐Ÿ”ฌ": "Man Scientist", + "๐Ÿ‘ฉโ€๐Ÿ”ฌ": "Woman Scientist", + "๐Ÿง‘โ€๐Ÿ’ป": "Technologist", + "๐Ÿ‘จโ€๐Ÿ’ป": "Man Technologist", + "๐Ÿ‘ฉโ€๐Ÿ’ป": "Woman Technologist", + "๐Ÿง‘โ€๐ŸŽค": "Singer", + "๐Ÿ‘จโ€๐ŸŽค": "Man Singer", + "๐Ÿ‘ฉโ€๐ŸŽค": "Woman Singer", + "๐Ÿง‘โ€๐ŸŽจ": "Artist", + "๐Ÿ‘จโ€๐ŸŽจ": "Man Artist", + "๐Ÿ‘ฉโ€๐ŸŽจ": "Woman Artist", + "๐Ÿง‘โ€โœˆ๏ธ": "Pilot", + "๐Ÿ‘จโ€โœˆ๏ธ": "Man Pilot", + "๐Ÿ‘ฉโ€โœˆ๏ธ": "Woman Pilot", + "๐Ÿง‘โ€๐Ÿš€": "Astronaut", + "๐Ÿ‘จโ€๐Ÿš€": "Man Astronaut", + "๐Ÿ‘ฉโ€๐Ÿš€": "Woman Astronaut", + "๐Ÿง‘โ€๐Ÿš’": "Firefighter", + "๐Ÿ‘จโ€๐Ÿš’": "Man Firefighter", + "๐Ÿ‘ฉโ€๐Ÿš’": "Woman Firefighter", + "๐Ÿ‘ฎ": "Police Officer", + "๐Ÿ‘ฎโ€โ™‚๏ธ": "Man Police Officer", + "๐Ÿ‘ฎโ€โ™€๏ธ": "Woman Police Officer", + "๐Ÿ•ต๏ธ": "Detective", + "๐Ÿ•ต๏ธโ€โ™‚๏ธ": "Man Detective", + "๐Ÿ•ต๏ธโ€โ™€๏ธ": "Woman Detective", + "๐Ÿ’‚": "Guard", + "๐Ÿ’‚โ€โ™‚๏ธ": "Man Guard", + "๐Ÿ’‚โ€โ™€๏ธ": "Woman Guard", + "๐Ÿฅท": "Ninja", + "๐Ÿ‘ท": "Construction Worker", + "๐Ÿ‘ทโ€โ™‚๏ธ": "Man Construction Worker", + "๐Ÿ‘ทโ€โ™€๏ธ": "Woman Construction Worker", + "๐Ÿคด": "Prince", + "๐Ÿ‘ธ": "Princess", + "๐Ÿ‘ณ": "Person Wearing Turban", + "๐Ÿ‘ณโ€โ™‚๏ธ": "Man Wearing Turban", + "๐Ÿ‘ณโ€โ™€๏ธ": "Woman Wearing Turban", + "๐Ÿ‘ฒ": "Person With Skullcap", + "๐Ÿง•": "Woman with Headscarf", + "๐Ÿคต": "Person in Tuxedo", + "๐Ÿคตโ€โ™‚๏ธ": "Man in Tuxedo", + "๐Ÿคตโ€โ™€๏ธ": "Woman in Tuxedo", + "๐Ÿ‘ฐ": "Person With Veil", + "๐Ÿ‘ฐโ€โ™‚๏ธ": "Man with Veil", + "๐Ÿ‘ฐโ€โ™€๏ธ": "Woman with Veil", + "๐Ÿคฐ": "Pregnant Woman", + "๐Ÿคฑ": "Breast-Feeding", + "๐Ÿ‘ฉโ€๐Ÿผ": "Woman Feeding Baby", + "๐Ÿ‘จโ€๐Ÿผ": "Man Feeding Baby", + "๐Ÿง‘โ€๐Ÿผ": "Person Feeding Baby", + "๐Ÿ‘ผ": "Baby Angel", + "๐ŸŽ…": "Santa Claus", + "๐Ÿคถ": "Mrs. Claus", + "๐Ÿง‘โ€๐ŸŽ„": "Mx Claus", + "๐Ÿฆธ": "Superhero", + "๐Ÿฆธโ€โ™‚๏ธ": "Man Superhero", + "๐Ÿฆธโ€โ™€๏ธ": "Woman Superhero", + "๐Ÿฆน": "Supervillain", + "๐Ÿฆนโ€โ™‚๏ธ": "Man Supervillain", + "๐Ÿฆนโ€โ™€๏ธ": "Woman Supervillain", + "๐Ÿง™": "Mage", + "๐Ÿง™โ€โ™‚๏ธ": "Man Mage", + "๐Ÿง™โ€โ™€๏ธ": "Woman Mage", + "๐Ÿงš": "Fairy", + "๐Ÿงšโ€โ™‚๏ธ": "Man Fairy", + "๐Ÿงšโ€โ™€๏ธ": "Woman Fairy", + "๐Ÿง›": "Vampire", + "๐Ÿง›โ€โ™‚๏ธ": "Man Vampire", + "๐Ÿง›โ€โ™€๏ธ": "Woman Vampire", + "๐Ÿงœ": "Merperson", + "๐Ÿงœโ€โ™‚๏ธ": "Merman", + "๐Ÿงœโ€โ™€๏ธ": "Mermaid", + "๐Ÿง": "Elf", + "๐Ÿงโ€โ™‚๏ธ": "Man Elf", + "๐Ÿงโ€โ™€๏ธ": "Woman Elf", + "๐Ÿงž": "Genie", + "๐Ÿงžโ€โ™‚๏ธ": "Man Genie", + "๐Ÿงžโ€โ™€๏ธ": "Woman Genie", + "๐ŸงŸ": "Zombie", + "๐ŸงŸโ€โ™‚๏ธ": "Man Zombie", + "๐ŸงŸโ€โ™€๏ธ": "Woman Zombie", + "๐Ÿ’†": "Person Getting Massage", + "๐Ÿ’†โ€โ™‚๏ธ": "Man Getting Massage", + "๐Ÿ’†โ€โ™€๏ธ": "Woman Getting Massage", + "๐Ÿ’‡": "Person Getting Haircut", + "๐Ÿ’‡โ€โ™‚๏ธ": "Man Getting Haircut", + "๐Ÿ’‡โ€โ™€๏ธ": "Woman Getting Haircut", + "๐Ÿšถ": "Person Walking", + "๐Ÿšถโ€โ™‚๏ธ": "Man Walking", + "๐Ÿšถโ€โ™€๏ธ": "Woman Walking", + "๐Ÿง": "Person Standing", + "๐Ÿงโ€โ™‚๏ธ": "Man Standing", + "๐Ÿงโ€โ™€๏ธ": "Woman Standing", + "๐ŸงŽ": "Person Kneeling", + "๐ŸงŽโ€โ™‚๏ธ": "Man Kneeling", + "๐ŸงŽโ€โ™€๏ธ": "Woman Kneeling", + "๐Ÿง‘โ€๐Ÿฆฏ": "Person with White Cane", + "๐Ÿ‘จโ€๐Ÿฆฏ": "Man with White Cane", + "๐Ÿ‘ฉโ€๐Ÿฆฏ": "Woman with White Cane", + "๐Ÿง‘โ€๐Ÿฆผ": "Person in Motorized Wheelchair", + "๐Ÿ‘จโ€๐Ÿฆผ": "Man in Motorized Wheelchair", + "๐Ÿ‘ฉโ€๐Ÿฆผ": "Woman in Motorized Wheelchair", + "๐Ÿง‘โ€๐Ÿฆฝ": "Person in Manual Wheelchair", + "๐Ÿ‘จโ€๐Ÿฆฝ": "Man in Manual Wheelchair", + "๐Ÿ‘ฉโ€๐Ÿฆฝ": "Woman in Manual Wheelchair", + "๐Ÿƒ": "Person Running", + "๐Ÿƒโ€โ™‚๏ธ": "Man Running", + "๐Ÿƒโ€โ™€๏ธ": "Woman Running", + "๐Ÿ’ƒ": "Woman Dancing", + "๐Ÿ•บ": "Man Dancing", + "๐Ÿ•ด๏ธ": "Person in Suit Levitating", + "๐Ÿ‘ฏ": "People with Bunny Ears", + "๐Ÿ‘ฏโ€โ™‚๏ธ": "Men with Bunny Ears", + "๐Ÿ‘ฏโ€โ™€๏ธ": "Women with Bunny Ears", + "๐Ÿง–": "Person in Steamy Room", + "๐Ÿง–โ€โ™‚๏ธ": "Man in Steamy Room", + "๐Ÿง–โ€โ™€๏ธ": "Woman in Steamy Room", + "๐Ÿง˜": "Person in Lotus Position", + "๐Ÿง‘โ€๐Ÿคโ€๐Ÿง‘": "People Holding Hands", + "๐Ÿ‘ญ": "Women Holding Hands", + "๐Ÿ‘ซ": "Woman and Man Holding Hands", + "๐Ÿ‘ฌ": "Men Holding Hands", + "๐Ÿ’": "Kiss", + "๐Ÿ‘ฉโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ": "Kiss: Woman, Man", + "๐Ÿ‘จโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ": "Kiss: Man, Man", + "๐Ÿ‘ฉโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘ฉ": "Kiss: Woman, Woman", + "๐Ÿ’‘": "Couple with Heart", + "๐Ÿ‘ฉโ€โค๏ธโ€๐Ÿ‘จ": "Couple with Heart: Woman, Man", + "๐Ÿ‘จโ€โค๏ธโ€๐Ÿ‘จ": "Couple with Heart: Man, Man", + "๐Ÿ‘ฉโ€โค๏ธโ€๐Ÿ‘ฉ": "Couple with Heart: Woman, Woman", + "๐Ÿ‘ช": "Family", + "๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘ฆ": "Family: Man, Woman, Boy", + "๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘ง": "Family: Man, Woman, Girl", + "๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ฆ": "Family: Man, Woman, Girl, Boy", + "๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘ฆโ€๐Ÿ‘ฆ": "Family: Man, Woman, Boy, Boy", + "๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ง": "Family: Man, Woman, Girl, Girl", + "๐Ÿ‘จโ€๐Ÿ‘จโ€๐Ÿ‘ฆ": "Family: Man, Man, Boy", + "๐Ÿ‘จโ€๐Ÿ‘จโ€๐Ÿ‘ง": "Family: Man, Man, Girl", + "๐Ÿ‘จโ€๐Ÿ‘จโ€๐Ÿ‘งโ€๐Ÿ‘ฆ": "Family: Man, Man, Girl, Boy", + "๐Ÿ‘จโ€๐Ÿ‘จโ€๐Ÿ‘ฆโ€๐Ÿ‘ฆ": "Family: Man, Man, Boy, Boy", + "๐Ÿ‘จโ€๐Ÿ‘จโ€๐Ÿ‘งโ€๐Ÿ‘ง": "Family: Man, Man, Girl, Girl", + "๐Ÿ‘ฉโ€๐Ÿ‘ฉโ€๐Ÿ‘ฆ": "Family: Woman, Woman, Boy", + "๐Ÿ‘ฉโ€๐Ÿ‘ฉโ€๐Ÿ‘ง": "Family: Woman, Woman, Girl", + "๐Ÿ‘ฉโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ฆ": "Family: Woman, Woman, Girl, Boy", + "๐Ÿ‘ฉโ€๐Ÿ‘ฉโ€๐Ÿ‘ฆโ€๐Ÿ‘ฆ": "Family: Woman, Woman, Boy, Boy", + "๐Ÿ‘ฉโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ง": "Family: Woman, Woman, Girl, Girl", + "๐Ÿ‘จโ€๐Ÿ‘ฆ": "Family: Man, Boy", + "๐Ÿ‘จโ€๐Ÿ‘ฆโ€๐Ÿ‘ฆ": "Family: Man, Boy, Boy", + "๐Ÿ‘จโ€๐Ÿ‘ง": "Family: Man, Girl", + "๐Ÿ‘จโ€๐Ÿ‘งโ€๐Ÿ‘ฆ": "Family: Man, Girl, Boy", + "๐Ÿ‘จโ€๐Ÿ‘งโ€๐Ÿ‘ง": "Family: Man, Girl, Girl", + "๐Ÿ‘ฉโ€๐Ÿ‘ฆ": "Family: Woman, Boy", + "๐Ÿ‘ฉโ€๐Ÿ‘ฆโ€๐Ÿ‘ฆ": "Family: Woman, Boy, Boy", + "๐Ÿ‘ฉโ€๐Ÿ‘ง": "Family: Woman, Girl", + "๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ฆ": "Family: Woman, Girl, Boy", + "๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ง": "Family: Woman, Girl, Girl", + "๐Ÿ—ฃ๏ธ": "Speaking Head", + "๐Ÿ‘ค": "Bust in Silhouette", + "๐Ÿ‘ฅ": "Busts in Silhouette", + "๐Ÿซ‚": "People Hugging", + "๐Ÿ‘ฃ": "Footprints", + "๐Ÿงณ": "Luggage", + "๐ŸŒ‚": "Closed Umbrella", + "โ˜‚๏ธ": "Umbrella", + "๐ŸŽƒ": "Jack-O-Lantern", + "๐Ÿงต": "Thread", + "๐Ÿงถ": "Yarn", + "๐Ÿ‘“": "Glasses", + "๐Ÿ•ถ๏ธ": "Sunglasses", + "๐Ÿฅฝ": "Goggles", + "๐Ÿฅผ": "Lab Coat", + "๐Ÿฆบ": "Safety Vest", + "๐Ÿ‘”": "Necktie", + "๐Ÿ‘•": "T-Shirt", + "๐Ÿ‘–": "Jeans", + "๐Ÿงฃ": "Scarf", + "๐Ÿงค": "Gloves", + "๐Ÿงฅ": "Coat", + "๐Ÿงฆ": "Socks", + "๐Ÿ‘—": "Dress", + "๐Ÿ‘˜": "Kimono", + "๐Ÿฅป": "Sari", + "๐Ÿฉฑ": "One-Piece Swimsuit", + "๐Ÿฉฒ": "Briefs", + "๐Ÿฉณ": "Shorts", + "๐Ÿ‘™": "Bikini", + "๐Ÿ‘š": "Womanโ€™s Clothes", + "๐Ÿ‘›": "Purse", + "๐Ÿ‘œ": "Handbag", + "๐Ÿ‘": "Clutch Bag", + "๐ŸŽ’": "Backpack", + "๐Ÿฉด": "Thong Sandal", + "๐Ÿ‘ž": "Manโ€™s Shoe", + "๐Ÿ‘Ÿ": "Running Shoe", + "๐Ÿฅพ": "Hiking Boot", + "๐Ÿฅฟ": "Flat Shoe", + "๐Ÿ‘ ": "High-Heeled Shoe", + "๐Ÿ‘ก": "Womanโ€™s Sandal", + "๐Ÿฉฐ": "Ballet Shoes", + "๐Ÿ‘ข": "Womanโ€™s Boot", + "๐Ÿ‘‘": "Crown", + "๐Ÿ‘’": "Womanโ€™s Hat", + "๐ŸŽฉ": "Top Hat", + "๐ŸŽ“": "Graduation Cap", + "๐Ÿงข": "Billed Cap", + "๐Ÿช–": "Military Helmet", + "โ›‘๏ธ": "Rescue Workerโ€™s Helmet", + "๐Ÿ’„": "Lipstick", + "๐Ÿ’": "Ring", + "๐Ÿ’ผ": "Briefcase", + "๐Ÿฉธ": "Drop of Blood", + "๐Ÿ˜ฎโ€๐Ÿ’จ": "Face Exhaling", + "๐Ÿ˜ตโ€๐Ÿ’ซ": "Face with Spiral Eyes", + "๐Ÿ˜ถโ€๐ŸŒซ๏ธ": "Face in Clouds" + }, + "Animals & Nature": { + "๐Ÿ™ˆ": "See-No-Evil Monkey", + "๐Ÿ™‰": "Hear-No-Evil Monkey", + "๐Ÿ™Š": "Speak-No-Evil Monkey", + "๐Ÿ’ฅ": "Collision", + "๐Ÿ’ซ": "Dizzy", + "๐Ÿ’ฆ": "Sweat Droplets", + "๐Ÿ’จ": "Dashing Away", + "๐Ÿต": "Monkey Face", + "๐Ÿ’": "Monkey", + "๐Ÿฆ": "Gorilla", + "๐Ÿฆง": "Orangutan", + "๐Ÿถ": "Dog Face", + "๐Ÿ•": "Dog", + "๐Ÿฆฎ": "Guide Dog", + "๐Ÿ•โ€๐Ÿฆบ": "Service Dog", + "๐Ÿฉ": "Poodle", + "๐Ÿบ": "Wolf", + "๐ŸฆŠ": "Fox", + "๐Ÿฆ": "Raccoon", + "๐Ÿฑ": "Cat Face", + "๐Ÿˆ": "Cat", + "๐Ÿˆโ€โฌ›": "Black Cat", + "๐Ÿฆ": "Lion", + "๐Ÿฏ": "Tiger Face", + "๐Ÿ…": "Tiger", + "๐Ÿ†": "Leopard", + "๐Ÿด": "Horse Face", + "๐ŸŽ": "Horse", + "๐Ÿฆ„": "Unicorn", + "๐Ÿฆ“": "Zebra", + "๐ŸฆŒ": "Deer", + "๐Ÿฆฌ": "Bison", + "๐Ÿฎ": "Cow Face", + "๐Ÿ‚": "Ox", + "๐Ÿƒ": "Water Buffalo", + "๐Ÿ„": "Cow", + "๐Ÿท": "Pig Face", + "๐Ÿ–": "Pig", + "๐Ÿ—": "Boar", + "๐Ÿฝ": "Pig Nose", + "๐Ÿ": "Ram", + "๐Ÿ‘": "Ewe", + "๐Ÿ": "Goat", + "๐Ÿช": "Camel", + "๐Ÿซ": "Two-Hump Camel", + "๐Ÿฆ™": "Llama", + "๐Ÿฆ’": "Giraffe", + "๐Ÿ˜": "Elephant", + "๐Ÿฆฃ": "Mammoth", + "๐Ÿฆ": "Rhinoceros", + "๐Ÿฆ›": "Hippopotamus", + "๐Ÿญ": "Mouse Face", + "๐Ÿ": "Mouse", + "๐Ÿ€": "Rat", + "๐Ÿน": "Hamster", + "๐Ÿฐ": "Rabbit Face", + "๐Ÿ‡": "Rabbit", + "๐Ÿฟ๏ธ": "Chipmunk", + "๐Ÿฆซ": "Beaver", + "๐Ÿฆ”": "Hedgehog", + "๐Ÿฆ‡": "Bat", + "๐Ÿป": "Bear", + "๐Ÿปโ€โ„๏ธ": "Polar Bear", + "๐Ÿจ": "Koala", + "๐Ÿผ": "Panda", + "๐Ÿฆฅ": "Sloth", + "๐Ÿฆฆ": "Otter", + "๐Ÿฆจ": "Skunk", + "๐Ÿฆ˜": "Kangaroo", + "๐Ÿฆก": "Badger", + "๐Ÿพ": "Paw Prints", + "๐Ÿฆƒ": "Turkey", + "๐Ÿ”": "Chicken", + "๐Ÿ“": "Rooster", + "๐Ÿฃ": "Hatching Chick", + "๐Ÿค": "Baby Chick", + "๐Ÿฅ": "Front-Facing Baby Chick", + "๐Ÿฆ": "Bird", + "๐Ÿง": "Penguin", + "๐Ÿ•Š๏ธ": "Dove", + "๐Ÿฆ…": "Eagle", + "๐Ÿฆ†": "Duck", + "๐Ÿฆข": "Swan", + "๐Ÿฆ‰": "Owl", + "๐Ÿฆค": "Dodo", + "๐Ÿชถ": "Feather", + "๐Ÿฆฉ": "Flamingo", + "๐Ÿฆš": "Peacock", + "๐Ÿฆœ": "Parrot", + "๐Ÿธ": "Frog", + "๐ŸŠ": "Crocodile", + "๐Ÿข": "Turtle", + "๐ŸฆŽ": "Lizard", + "๐Ÿ": "Snake", + "๐Ÿฒ": "Dragon Face", + "๐Ÿ‰": "Dragon", + "๐Ÿฆ•": "Sauropod", + "๐Ÿฆ–": "T-Rex", + "๐Ÿณ": "Spouting Whale", + "๐Ÿ‹": "Whale", + "๐Ÿฌ": "Dolphin", + "๐Ÿฆญ": "Seal", + "๐ŸŸ": "Fish", + "๐Ÿ ": "Tropical Fish", + "๐Ÿก": "Blowfish", + "๐Ÿฆˆ": "Shark", + "๐Ÿ™": "Octopus", + "๐Ÿš": "Spiral Shell", + "๐ŸŒ": "Snail", + "๐Ÿฆ‹": "Butterfly", + "๐Ÿ›": "Bug", + "๐Ÿœ": "Ant", + "๐Ÿ": "Honeybee", + "๐Ÿชฒ": "Beetle", + "๐Ÿž": "Lady Beetle", + "๐Ÿฆ—": "Cricket", + "๐Ÿชณ": "Cockroach", + "๐Ÿ•ท๏ธ": "Spider", + "๐Ÿ•ธ๏ธ": "Spider Web", + "๐Ÿฆ‚": "Scorpion", + "๐ŸฆŸ": "Mosquito", + "๐Ÿชฐ": "Fly", + "๐Ÿชฑ": "Worm", + "๐Ÿฆ ": "Microbe", + "๐Ÿ’": "Bouquet", + "๐ŸŒธ": "Cherry Blossom", + "๐Ÿ’ฎ": "White Flower", + "๐Ÿต๏ธ": "Rosette", + "๐ŸŒน": "Rose", + "๐Ÿฅ€": "Wilted Flower", + "๐ŸŒบ": "Hibiscus", + "๐ŸŒป": "Sunflower", + "๐ŸŒผ": "Blossom", + "๐ŸŒท": "Tulip", + "๐ŸŒฑ": "Seedling", + "๐Ÿชด": "Potted Plant", + "๐ŸŒฒ": "Evergreen Tree", + "๐ŸŒณ": "Deciduous Tree", + "๐ŸŒด": "Palm Tree", + "๐ŸŒต": "Cactus", + "๐ŸŒพ": "Sheaf of Rice", + "๐ŸŒฟ": "Herb", + "โ˜˜๏ธ": "Shamrock", + "๐Ÿ€": "Four Leaf Clover", + "๐Ÿ": "Maple Leaf", + "๐Ÿ‚": "Fallen Leaf", + "๐Ÿƒ": "Leaf Fluttering in Wind", + "๐Ÿ„": "Mushroom", + "๐ŸŒฐ": "Chestnut", + "๐Ÿฆ€": "Crab", + "๐Ÿฆž": "Lobster", + "๐Ÿฆ": "Shrimp", + "๐Ÿฆ‘": "Squid", + "๐ŸŒ": "Globe Showing Europe-Africa", + "๐ŸŒŽ": "Globe Showing Americas", + "๐ŸŒ": "Globe Showing Asia-Australia", + "๐ŸŒ": "Globe with Meridians", + "๐Ÿชจ": "Rock", + "๐ŸŒ‘": "New Moon", + "๐ŸŒ’": "Waxing Crescent Moon", + "๐ŸŒ“": "First Quarter Moon", + "๐ŸŒ”": "Waxing Gibbous Moon", + "๐ŸŒ•": "Full Moon", + "๐ŸŒ–": "Waning Gibbous Moon", + "๐ŸŒ—": "Last Quarter Moon", + "๐ŸŒ˜": "Waning Crescent Moon", + "๐ŸŒ™": "Crescent Moon", + "๐ŸŒš": "New Moon Face", + "๐ŸŒ›": "First Quarter Moon Face", + "๐ŸŒœ": "Last Quarter Moon Face", + "โ˜€๏ธ": "Sun", + "๐ŸŒ": "Full Moon Face", + "๐ŸŒž": "Sun with Face", + "โญ": "Star", + "๐ŸŒŸ": "Glowing Star", + "๐ŸŒ ": "Shooting Star", + "โ˜๏ธ": "Cloud", + "โ›…": "Sun Behind Cloud", + "โ›ˆ๏ธ": "Cloud with Lightning and Rain", + "๐ŸŒค๏ธ": "Sun Behind Small Cloud", + "๐ŸŒฅ๏ธ": "Sun Behind Large Cloud", + "๐ŸŒฆ๏ธ": "Sun Behind Rain Cloud", + "๐ŸŒง๏ธ": "Cloud with Rain", + "๐ŸŒจ๏ธ": "Cloud with Snow", + "๐ŸŒฉ๏ธ": "Cloud with Lightning", + "๐ŸŒช๏ธ": "Tornado", + "๐ŸŒซ๏ธ": "Fog", + "๐ŸŒฌ๏ธ": "Wind Face", + "๐ŸŒˆ": "Rainbow", + "โ˜‚๏ธ": "Umbrella", + "โ˜”": "Umbrella with Rain Drops", + "โšก": "High Voltage", + "โ„๏ธ": "Snowflake", + "โ˜ƒ๏ธ": "Snowman", + "โ›„": "Snowman Without Snow", + "โ˜„๏ธ": "Comet", + "๐Ÿ”ฅ": "Fire", + "๐Ÿ’ง": "Droplet", + "๐ŸŒŠ": "Water Wave", + "๐ŸŽ„": "Christmas Tree", + "โœจ": "Sparkles", + "๐ŸŽ‹": "Tanabata Tree", + "๐ŸŽ": "Pine Decoration" + }, + "Food & Drink": { + "๐Ÿ‡": "Grapes", + "๐Ÿˆ": "Melon", + "๐Ÿ‰": "Watermelon", + "๐ŸŠ": "Tangerine", + "๐Ÿ‹": "Lemon", + "๐ŸŒ": "Banana", + "๐Ÿ": "Pineapple", + "๐Ÿฅญ": "Mango", + "๐ŸŽ": "Red Apple", + "๐Ÿ": "Green Apple", + "๐Ÿ": "Pear", + "๐Ÿ‘": "Peach", + "๐Ÿ’": "Cherries", + "๐Ÿ“": "Strawberry", + "๐Ÿซ": "Blueberries", + "๐Ÿฅ": "Kiwi Fruit", + "๐Ÿ…": "Tomato", + "๐Ÿซ’": "Olive", + "๐Ÿฅฅ": "Coconut", + "๐Ÿฅ‘": "Avocado", + "๐Ÿ†": "Eggplant", + "๐Ÿฅ”": "Potato", + "๐Ÿฅ•": "Carrot", + "๐ŸŒฝ": "Ear of Corn", + "๐ŸŒถ๏ธ": "Hot Pepper", + "๐Ÿซ‘": "Bell Pepper", + "๐Ÿฅ’": "Cucumber", + "๐Ÿฅฌ": "Leafy Green", + "๐Ÿฅฆ": "Broccoli", + "๐Ÿง„": "Garlic", + "๐Ÿง…": "Onion", + "๐Ÿ„": "Mushroom", + "๐Ÿฅœ": "Peanuts", + "๐ŸŒฐ": "Chestnut", + "๐Ÿž": "Bread", + "๐Ÿฅ": "Croissant", + "๐Ÿฅ–": "Baguette Bread", + "๐Ÿซ“": "Flatbread", + "๐Ÿฅจ": "Pretzel", + "๐Ÿฅฏ": "Bagel", + "๐Ÿฅž": "Pancakes", + "๐Ÿง‡": "Waffle", + "๐Ÿง€": "Cheese Wedge", + "๐Ÿ–": "Meat on Bone", + "๐Ÿ—": "Poultry Leg", + "๐Ÿฅฉ": "Cut of Meat", + "๐Ÿฅ“": "Bacon", + "๐Ÿ”": "Hamburger", + "๐ŸŸ": "French Fries", + "๐Ÿ•": "Pizza", + "๐ŸŒญ": "Hot Dog", + "๐Ÿฅช": "Sandwich", + "๐ŸŒฎ": "Taco", + "๐ŸŒฏ": "Burrito", + "๐Ÿซ”": "Tamale", + "๐Ÿฅ™": "Stuffed Flatbread", + "๐Ÿง†": "Falafel", + "๐Ÿฅš": "Egg", + "๐Ÿณ": "Cooking", + "๐Ÿฅ˜": "Shallow Pan of Food", + "๐Ÿฒ": "Pot of Food", + "๐Ÿซ•": "Fondue", + "๐Ÿฅฃ": "Bowl with Spoon", + "๐Ÿฅ—": "Green Salad", + "๐Ÿฟ": "Popcorn", + "๐Ÿงˆ": "Butter", + "๐Ÿง‚": "Salt", + "๐Ÿฅซ": "Canned Food", + "๐Ÿฑ": "Bento Box", + "๐Ÿ˜": "Rice Cracker", + "๐Ÿ™": "Rice Ball", + "๐Ÿš": "Cooked Rice", + "๐Ÿ›": "Curry Rice", + "๐Ÿœ": "Steaming Bowl", + "๐Ÿ": "Spaghetti", + "๐Ÿ ": "Roasted Sweet Potato", + "๐Ÿข": "Oden", + "๐Ÿฃ": "Sushi", + "๐Ÿค": "Fried Shrimp", + "๐Ÿฅ": "Fish Cake with Swirl", + "๐Ÿฅฎ": "Moon Cake", + "๐Ÿก": "Dango", + "๐ŸฅŸ": "Dumpling", + "๐Ÿฅ ": "Fortune Cookie", + "๐Ÿฅก": "Takeout Box", + "๐Ÿฆช": "Oyster", + "๐Ÿฆ": "Soft Ice Cream", + "๐Ÿง": "Shaved Ice", + "๐Ÿจ": "Ice Cream", + "๐Ÿฉ": "Doughnut", + "๐Ÿช": "Cookie", + "๐ŸŽ‚": "Birthday Cake", + "๐Ÿฐ": "Shortcake", + "๐Ÿง": "Cupcake", + "๐Ÿฅง": "Pie", + "๐Ÿซ": "Chocolate Bar", + "๐Ÿฌ": "Candy", + "๐Ÿญ": "Lollipop", + "๐Ÿฎ": "Custard", + "๐Ÿฏ": "Honey Pot", + "๐Ÿผ": "Baby Bottle", + "๐Ÿฅ›": "Glass of Milk", + "โ˜•": "Hot Beverage", + "๐Ÿซ–": "Teapot", + "๐Ÿต": "Teacup Without Handle", + "๐Ÿถ": "Sake", + "๐Ÿพ": "Bottle with Popping Cork", + "๐Ÿท": "Wine Glass", + "๐Ÿธ": "Cocktail Glass", + "๐Ÿน": "Tropical Drink", + "๐Ÿบ": "Beer Mug", + "๐Ÿป": "Clinking Beer Mugs", + "๐Ÿฅ‚": "Clinking Glasses", + "๐Ÿฅƒ": "Tumbler Glass", + "๐Ÿฅค": "Cup with Straw", + "๐Ÿง‹": "Bubble Tea", + "๐Ÿงƒ": "Beverage Box", + "๐Ÿง‰": "Mate", + "๐ŸงŠ": "Ice", + "๐Ÿฅข": "Chopsticks", + "๐Ÿฝ๏ธ": "Fork and Knife with Plate", + "๐Ÿด": "Fork and Knife", + "๐Ÿฅ„": "Spoon" + }, + "Activity": { + "๐Ÿ•ด๏ธ": "Person in Suit Levitating", + "๐Ÿง—": "Person Climbing", + "๐Ÿง—โ€โ™‚๏ธ": "Man Climbing", + "๐Ÿง—โ€โ™€๏ธ": "Woman Climbing", + "๐Ÿคบ": "Person Fencing", + "๐Ÿ‡": "Horse Racing", + "โ›ท๏ธ": "Skier", + "๐Ÿ‚": "Snowboarder", + "๐ŸŒ๏ธ": "Person Golfing", + "๐ŸŒ๏ธโ€โ™‚๏ธ": "Man Golfing", + "๐ŸŒ๏ธโ€โ™€๏ธ": "Woman Golfing", + "๐Ÿ„": "Person Surfing", + "๐Ÿ„โ€โ™‚๏ธ": "Man Surfing", + "๐Ÿ„โ€โ™€๏ธ": "Woman Surfing", + "๐Ÿšฃ": "Person Rowing Boat", + "๐Ÿšฃโ€โ™‚๏ธ": "Man Rowing Boat", + "๐Ÿšฃโ€โ™€๏ธ": "Woman Rowing Boat", + "๐ŸŠ": "Person Swimming", + "๐ŸŠโ€โ™‚๏ธ": "Man Swimming", + "๐ŸŠโ€โ™€๏ธ": "Woman Swimming", + "โ›น๏ธ": "Person Bouncing Ball", + "โ›น๏ธโ€โ™‚๏ธ": "Man Bouncing Ball", + "โ›น๏ธโ€โ™€๏ธ": "Woman Bouncing Ball", + "๐Ÿ‹๏ธ": "Person Lifting Weights", + "๐Ÿ‹๏ธโ€โ™‚๏ธ": "Man Lifting Weights", + "๐Ÿ‹๏ธโ€โ™€๏ธ": "Woman Lifting Weights", + "๐Ÿšด": "Person Biking", + "๐Ÿšดโ€โ™‚๏ธ": "Man Biking", + "๐Ÿšดโ€โ™€๏ธ": "Woman Biking", + "๐Ÿšต": "Person Mountain Biking", + "๐Ÿšตโ€โ™‚๏ธ": "Man Mountain Biking", + "๐Ÿšตโ€โ™€๏ธ": "Woman Mountain Biking", + "๐Ÿคธ": "Person Cartwheeling", + "๐Ÿคธโ€โ™‚๏ธ": "Man Cartwheeling", + "๐Ÿคธโ€โ™€๏ธ": "Woman Cartwheeling", + "๐Ÿคผ": "People Wrestling", + "๐Ÿคผโ€โ™‚๏ธ": "Men Wrestling", + "๐Ÿคผโ€โ™€๏ธ": "Women Wrestling", + "๐Ÿคฝ": "Person Playing Water Polo", + "๐Ÿคฝโ€โ™‚๏ธ": "Man Playing Water Polo", + "๐Ÿคฝโ€โ™€๏ธ": "Woman Playing Water Polo", + "๐Ÿคพ": "Person Playing Handball", + "๐Ÿคพโ€โ™‚๏ธ": "Man Playing Handball", + "๐Ÿคพโ€โ™€๏ธ": "Woman Playing Handball", + "๐Ÿคน": "Person Juggling", + "๐Ÿคนโ€โ™‚๏ธ": "Man Juggling", + "๐Ÿคนโ€โ™€๏ธ": "Woman Juggling", + "๐Ÿง˜": "Person in Lotus Position", + "๐Ÿง˜โ€โ™‚๏ธ": "Man in Lotus Position", + "๐Ÿง˜โ€โ™€๏ธ": "Woman in Lotus Position", + "๐ŸŽช": "Circus Tent", + "๐Ÿ›น": "Skateboard", + "๐Ÿ›ผ": "Roller Skate", + "๐Ÿ›ถ": "Canoe", + "๐ŸŽ—๏ธ": "Reminder Ribbon", + "๐ŸŽŸ๏ธ": "Admission Tickets", + "๐ŸŽซ": "Ticket", + "๐ŸŽ–๏ธ": "Military Medal", + "๐Ÿ†": "Trophy", + "๐Ÿ…": "Sports Medal", + "๐Ÿฅ‡": "1st Place Medal", + "๐Ÿฅˆ": "2nd Place Medal", + "๐Ÿฅ‰": "3rd Place Medal", + "โšฝ": "Soccer Ball", + "โšพ": "Baseball", + "๐ŸฅŽ": "Softball", + "๐Ÿ€": "Basketball", + "๐Ÿ": "Volleyball", + "๐Ÿˆ": "American Football", + "๐Ÿ‰": "Rugby Football", + "๐ŸŽพ": "Tennis", + "๐Ÿฅ": "Flying Disc", + "๐ŸŽณ": "Bowling", + "๐Ÿ": "Cricket Game", + "๐Ÿ‘": "Field Hockey", + "๐Ÿ’": "Ice Hockey", + "๐Ÿฅ": "Lacrosse", + "๐Ÿ“": "Ping Pong", + "๐Ÿธ": "Badminton", + "๐ŸฅŠ": "Boxing Glove", + "๐Ÿฅ‹": "Martial Arts Uniform", + "๐Ÿฅ…": "Goal Net", + "โ›ณ": "Flag in Hole", + "โ›ธ๏ธ": "Ice Skate", + "๐ŸŽฃ": "Fishing Pole", + "๐ŸŽฝ": "Running Shirt", + "๐ŸŽฟ": "Skis", + "๐Ÿ›ท": "Sled", + "๐ŸฅŒ": "Curling Stone", + "๐ŸŽฏ": "Direct Hit", + "๐ŸŽฑ": "Pool 8 Ball", + "๐ŸŽฎ": "Video Game", + "๐ŸŽฐ": "Slot Machine", + "๐ŸŽฒ": "Game Die", + "๐Ÿงฉ": "Puzzle Piece", + "โ™Ÿ๏ธ": "Chess Pawn", + "๐ŸŽญ": "Performing Arts", + "๐ŸŽจ": "Artist Palette", + "๐Ÿงต": "Thread", + "๐Ÿงถ": "Yarn", + "๐ŸŽผ": "Musical Score", + "๐ŸŽค": "Microphone", + "๐ŸŽง": "Headphone", + "๐ŸŽท": "Saxophone", + "๐Ÿช—": "Accordion", + "๐ŸŽธ": "Guitar", + "๐ŸŽน": "Musical Keyboard", + "๐ŸŽบ": "Trumpet", + "๐ŸŽป": "Violin", + "๐Ÿฅ": "Drum", + "๐Ÿช˜": "Long Drum", + "๐ŸŽฌ": "Clapper Board", + "๐Ÿน": "Bow and Arrow" + }, + "Travel & Places": { + "๐Ÿšฃ": "Person Rowing Boat", + "๐Ÿ—พ": "Map of Japan", + "๐Ÿ”๏ธ": "Snow-Capped Mountain", + "โ›ฐ๏ธ": "Mountain", + "๐ŸŒ‹": "Volcano", + "๐Ÿ—ป": "Mount Fuji", + "๐Ÿ•๏ธ": "Camping", + "๐Ÿ–๏ธ": "Beach with Umbrella", + "๐Ÿœ๏ธ": "Desert", + "๐Ÿ๏ธ": "Desert Island", + "๐Ÿž๏ธ": "National Park", + "๐ŸŸ๏ธ": "Stadium", + "๐Ÿ›๏ธ": "Classical Building", + "๐Ÿ—๏ธ": "Building Construction", + "๐Ÿ›–": "Hut", + "๐Ÿ˜๏ธ": "Houses", + "๐Ÿš๏ธ": "Derelict House", + "๐Ÿ ": "House", + "๐Ÿก": "House with Garden", + "๐Ÿข": "Office Building", + "๐Ÿฃ": "Japanese Post Office", + "๐Ÿค": "Post Office", + "๐Ÿฅ": "Hospital", + "๐Ÿฆ": "Bank", + "๐Ÿจ": "Hotel", + "๐Ÿฉ": "Love Hotel", + "๐Ÿช": "Convenience Store", + "๐Ÿซ": "School", + "๐Ÿฌ": "Department Store", + "๐Ÿญ": "Factory", + "๐Ÿฏ": "Japanese Castle", + "๐Ÿฐ": "Castle", + "๐Ÿ’’": "Wedding", + "๐Ÿ—ผ": "Tokyo Tower", + "๐Ÿ—ฝ": "Statue of Liberty", + "โ›ช": "Church", + "๐Ÿ•Œ": "Mosque", + "๐Ÿ›•": "Hindu Temple", + "๐Ÿ•": "Synagogue", + "โ›ฉ๏ธ": "Shinto Shrine", + "๐Ÿ•‹": "Kaaba", + "โ›ฒ": "Fountain", + "โ›บ": "Tent", + "๐ŸŒ": "Foggy", + "๐ŸŒƒ": "Night with Stars", + "๐Ÿ™๏ธ": "Cityscape", + "๐ŸŒ„": "Sunrise Over Mountains", + "๐ŸŒ…": "Sunrise", + "๐ŸŒ†": "Cityscape at Dusk", + "๐ŸŒ‡": "Sunset", + "๐ŸŒ‰": "Bridge at Night", + "๐ŸŽ ": "Carousel Horse", + "๐ŸŽก": "Ferris Wheel", + "๐ŸŽข": "Roller Coaster", + "๐Ÿš‚": "Locomotive", + "๐Ÿšƒ": "Railway Car", + "๐Ÿš„": "High-Speed Train", + "๐Ÿš…": "Bullet Train", + "๐Ÿš†": "Train", + "๐Ÿš‡": "Metro", + "๐Ÿšˆ": "Light Rail", + "๐Ÿš‰": "Station", + "๐ŸšŠ": "Tram", + "๐Ÿš": "Monorail", + "๐Ÿšž": "Mountain Railway", + "๐Ÿš‹": "Tram Car", + "๐ŸšŒ": "Bus", + "๐Ÿš": "Oncoming Bus", + "๐ŸšŽ": "Trolleybus", + "๐Ÿš": "Minibus", + "๐Ÿš‘": "Ambulance", + "๐Ÿš’": "Fire Engine", + "๐Ÿš“": "Police Car", + "๐Ÿš”": "Oncoming Police Car", + "๐Ÿš•": "Taxi", + "๐Ÿš–": "Oncoming Taxi", + "๐Ÿš—": "Automobile", + "๐Ÿš˜": "Oncoming Automobile", + "๐Ÿš™": "Sport Utility Vehicle", + "๐Ÿ›ป": "Pickup Truck", + "๐Ÿšš": "Delivery Truck", + "๐Ÿš›": "Articulated Lorry", + "๐Ÿšœ": "Tractor", + "๐ŸŽ๏ธ": "Racing Car", + "๐Ÿ๏ธ": "Motorcycle", + "๐Ÿ›ต": "Motor Scooter", + "๐Ÿ›บ": "Auto Rickshaw", + "๐Ÿšฒ": "Bicycle", + "๐Ÿ›ด": "Kick Scooter", + "๐Ÿš": "Bus Stop", + "๐Ÿ›ฃ๏ธ": "Motorway", + "๐Ÿ›ค๏ธ": "Railway Track", + "โ›ฝ": "Fuel Pump", + "๐Ÿšจ": "Police Car Light", + "๐Ÿšฅ": "Horizontal Traffic Light", + "๐Ÿšฆ": "Vertical Traffic Light", + "๐Ÿšง": "Construction", + "โš“": "Anchor", + "โ›ต": "Sailboat", + "๐Ÿšค": "Speedboat", + "๐Ÿ›ณ๏ธ": "Passenger Ship", + "โ›ด๏ธ": "Ferry", + "๐Ÿ›ฅ๏ธ": "Motor Boat", + "๐Ÿšข": "Ship", + "โœˆ๏ธ": "Airplane", + "๐Ÿ›ฉ๏ธ": "Small Airplane", + "๐Ÿ›ซ": "Airplane Departure", + "๐Ÿ›ฌ": "Airplane Arrival", + "๐Ÿช‚": "Parachute", + "๐Ÿ’บ": "Seat", + "๐Ÿš": "Helicopter", + "๐ŸšŸ": "Suspension Railway", + "๐Ÿš ": "Mountain Cableway", + "๐Ÿšก": "Aerial Tramway", + "๐Ÿ›ฐ๏ธ": "Satellite", + "๐Ÿš€": "Rocket", + "๐Ÿ›ธ": "Flying Saucer", + "๐Ÿช": "Ringed Planet", + "๐ŸŒ ": "Shooting Star", + "๐ŸŒŒ": "Milky Way", + "โ›ฑ๏ธ": "Umbrella on Ground", + "๐ŸŽ†": "Fireworks", + "๐ŸŽ‡": "Sparkler", + "๐ŸŽ‘": "Moon Viewing Ceremony", + "๐Ÿ’ด": "Yen Banknote", + "๐Ÿ’ต": "Dollar Banknote", + "๐Ÿ’ถ": "Euro Banknote", + "๐Ÿ’ท": "Pound Banknote", + "๐Ÿ—ฟ": "Moai", + "๐Ÿ›‚": "Passport Control", + "๐Ÿ›ƒ": "Customs", + "๐Ÿ›„": "Baggage Claim", + "๐Ÿ›…": "Left Luggage" + }, + "Objects": { + "๐Ÿ’Œ": "Love Letter", + "๐Ÿ•ณ๏ธ": "Hole", + "๐Ÿ’ฃ": "Bomb", + "๐Ÿ›€": "Person Taking Bath", + "๐Ÿ›Œ": "Person in Bed", + "๐Ÿ”ช": "Kitchen Knife", + "๐Ÿบ": "Amphora", + "๐Ÿ—บ๏ธ": "World Map", + "๐Ÿงญ": "Compass", + "๐Ÿงฑ": "Brick", + "๐Ÿ’ˆ": "Barber Pole", + "๐Ÿฆฝ": "Manual Wheelchair", + "๐Ÿฆผ": "Motorized Wheelchair", + "๐Ÿ›ข๏ธ": "Oil Drum", + "๐Ÿ›Ž๏ธ": "Bellhop Bell", + "๐Ÿงณ": "Luggage", + "โŒ›": "Hourglass Done", + "โณ": "Hourglass Not Done", + "โŒš": "Watch", + "โฐ": "Alarm Clock", + "โฑ๏ธ": "Stopwatch", + "โฒ๏ธ": "Timer Clock", + "๐Ÿ•ฐ๏ธ": "Mantelpiece Clock", + "๐ŸŒก๏ธ": "Thermometer", + "โ›ฑ๏ธ": "Umbrella on Ground", + "๐Ÿงจ": "Firecracker", + "๐ŸŽˆ": "Balloon", + "๐ŸŽ‰": "Party Popper", + "๐ŸŽŠ": "Confetti Ball", + "๐ŸŽŽ": "Japanese Dolls", + "๐ŸŽ": "Carp Streamer", + "๐ŸŽ": "Wind Chime", + "๐Ÿงง": "Red Envelope", + "๐ŸŽ€": "Ribbon", + "๐ŸŽ": "Wrapped Gift", + "๐Ÿคฟ": "Diving Mask", + "๐Ÿช€": "Yo-Yo", + "๐Ÿช": "Kite", + "๐Ÿ”ฎ": "Crystal Ball", + "๐Ÿช„": "Magic Wand", + "๐Ÿงฟ": "Nazar Amulet", + "๐Ÿ•น๏ธ": "Joystick", + "๐Ÿงธ": "Teddy Bear", + "๐Ÿช…": "Piรฑata", + "๐Ÿช†": "Nesting Dolls", + "๐Ÿ–ผ๏ธ": "Framed Picture", + "๐Ÿงต": "Thread", + "๐Ÿชก": "Sewing Needle", + "๐Ÿงถ": "Yarn", + "๐Ÿชข": "Knot", + "๐Ÿ›๏ธ": "Shopping Bags", + "๐Ÿ“ฟ": "Prayer Beads", + "๐Ÿ’Ž": "Gem Stone", + "๐Ÿ“ฏ": "Postal Horn", + "๐ŸŽ™๏ธ": "Studio Microphone", + "๐ŸŽš๏ธ": "Level Slider", + "๐ŸŽ›๏ธ": "Control Knobs", + "๐Ÿ“ป": "Radio", + "๐Ÿช•": "Banjo", + "๐Ÿ“ฑ": "Mobile Phone", + "๐Ÿ“ฒ": "Mobile Phone with Arrow", + "โ˜Ž๏ธ": "Telephone", + "๐Ÿ“ž": "Telephone Receiver", + "๐Ÿ“Ÿ": "Pager", + "๐Ÿ“ ": "Fax Machine", + "๐Ÿ”‹": "Battery", + "๐Ÿ”Œ": "Electric Plug", + "๐Ÿ’ป": "Laptop", + "๐Ÿ–ฅ๏ธ": "Desktop Computer", + "๐Ÿ–จ๏ธ": "Printer", + "โŒจ๏ธ": "Keyboard", + "๐Ÿ–ฑ๏ธ": "Computer Mouse", + "๐Ÿ–ฒ๏ธ": "Trackball", + "๐Ÿ’ฝ": "Computer Disk", + "๐Ÿ’พ": "Floppy Disk", + "๐Ÿ’ฟ": "Optical Disk", + "๐Ÿ“€": "DVD", + "๐Ÿงฎ": "Abacus", + "๐ŸŽฅ": "Movie Camera", + "๐ŸŽž๏ธ": "Film Frames", + "๐Ÿ“ฝ๏ธ": "Film Projector", + "๐Ÿ“บ": "Television", + "๐Ÿ“ท": "Camera", + "๐Ÿ“ธ": "Camera with Flash", + "๐Ÿ“น": "Video Camera", + "๐Ÿ“ผ": "Videocassette", + "๐Ÿ”": "Magnifying Glass Tilted Left", + "๐Ÿ”Ž": "Magnifying Glass Tilted Right", + "๐Ÿ•ฏ๏ธ": "Candle", + "๐Ÿ’ก": "Light Bulb", + "๐Ÿ”ฆ": "Flashlight", + "๐Ÿฎ": "Red Paper Lantern", + "๐Ÿช”": "Diya Lamp", + "๐Ÿ“”": "Notebook with Decorative Cover", + "๐Ÿ“•": "Closed Book", + "๐Ÿ“–": "Open Book", + "๐Ÿ“—": "Green Book", + "๐Ÿ“˜": "Blue Book", + "๐Ÿ“™": "Orange Book", + "๐Ÿ“š": "Books", + "๐Ÿ““": "Notebook", + "๐Ÿ“’": "Ledger", + "๐Ÿ“ƒ": "Page with Curl", + "๐Ÿ“œ": "Scroll", + "๐Ÿ“„": "Page Facing Up", + "๐Ÿ“ฐ": "Newspaper", + "๐Ÿ—ž๏ธ": "Rolled-Up Newspaper", + "๐Ÿ“‘": "Bookmark Tabs", + "๐Ÿ”–": "Bookmark", + "๐Ÿท๏ธ": "Label", + "๐Ÿ’ฐ": "Money Bag", + "๐Ÿช™": "Coin", + "๐Ÿ’ด": "Yen Banknote", + "๐Ÿ’ต": "Dollar Banknote", + "๐Ÿ’ถ": "Euro Banknote", + "๐Ÿ’ท": "Pound Banknote", + "๐Ÿ’ธ": "Money with Wings", + "๐Ÿ’ณ": "Credit Card", + "๐Ÿงพ": "Receipt", + "โœ‰๏ธ": "Envelope", + "๐Ÿ“ง": "E-Mail", + "๐Ÿ“จ": "Incoming Envelope", + "๐Ÿ“ฉ": "Envelope with Arrow", + "๐Ÿ“ค": "Outbox Tray", + "๐Ÿ“ฅ": "Inbox Tray", + "๐Ÿ“ฆ": "Package", + "๐Ÿ“ซ": "Closed Mailbox with Raised Flag", + "๐Ÿ“ช": "Closed Mailbox with Lowered Flag", + "๐Ÿ“ฌ": "Open Mailbox with Raised Flag", + "๐Ÿ“ญ": "Open Mailbox with Lowered Flag", + "๐Ÿ“ฎ": "Postbox", + "๐Ÿ—ณ๏ธ": "Ballot Box with Ballot", + "โœ๏ธ": "Pencil", + "โœ’๏ธ": "Black Nib", + "๐Ÿ–‹๏ธ": "Fountain Pen", + "๐Ÿ–Š๏ธ": "Pen", + "๐Ÿ–Œ๏ธ": "Paintbrush", + "๐Ÿ–๏ธ": "Crayon", + "๐Ÿ“": "Memo", + "๐Ÿ“": "File Folder", + "๐Ÿ“‚": "Open File Folder", + "๐Ÿ—‚๏ธ": "Card Index Dividers", + "๐Ÿ“…": "Calendar", + "๐Ÿ“†": "Tear-Off Calendar", + "๐Ÿ—’๏ธ": "Spiral Notepad", + "๐Ÿ—“๏ธ": "Spiral Calendar", + "๐Ÿ“‡": "Card Index", + "๐Ÿ“ˆ": "Chart Increasing", + "๐Ÿ“‰": "Chart Decreasing", + "๐Ÿ“Š": "Bar Chart", + "๐Ÿ“‹": "Clipboard", + "๐Ÿ“Œ": "Pushpin", + "๐Ÿ“": "Round Pushpin", + "๐Ÿ“Ž": "Paperclip", + "๐Ÿ–‡๏ธ": "Linked Paperclips", + "๐Ÿ“": "Straight Ruler", + "๐Ÿ“": "Triangular Ruler", + "โœ‚๏ธ": "Scissors", + "๐Ÿ—ƒ๏ธ": "Card File Box", + "๐Ÿ—„๏ธ": "File Cabinet", + "๐Ÿ—‘๏ธ": "Wastebasket", + "๐Ÿ”’": "Locked", + "๐Ÿ”“": "Unlocked", + "๐Ÿ”": "Locked with Pen", + "๐Ÿ”": "Locked with Key", + "๐Ÿ”‘": "Key", + "๐Ÿ—๏ธ": "Old Key", + "๐Ÿ”จ": "Hammer", + "๐Ÿช“": "Axe", + "โ›๏ธ": "Pick", + "โš’๏ธ": "Hammer and Pick", + "๐Ÿ› ๏ธ": "Hammer and Wrench", + "๐Ÿ—ก๏ธ": "Dagger", + "โš”๏ธ": "Crossed Swords", + "๐Ÿ”ซ": "Pistol", + "๐Ÿชƒ": "Boomerang", + "๐Ÿ›ก๏ธ": "Shield", + "๐Ÿชš": "Carpentry Saw", + "๐Ÿ”ง": "Wrench", + "๐Ÿช›": "Screwdriver", + "๐Ÿ”ฉ": "Nut and Bolt", + "โš™๏ธ": "Gear", + "๐Ÿ—œ๏ธ": "Clamp", + "โš–๏ธ": "Balance Scale", + "๐Ÿฆฏ": "White Cane", + "๐Ÿ”—": "Link", + "โ›“๏ธ": "Chains", + "๐Ÿช": "Hook", + "๐Ÿงฐ": "Toolbox", + "๐Ÿงฒ": "Magnet", + "๐Ÿชœ": "Ladder", + "โš—๏ธ": "Alembic", + "๐Ÿงช": "Test Tube", + "๐Ÿงซ": "Petri Dish", + "๐Ÿงฌ": "DNA", + "๐Ÿ”ฌ": "Microscope", + "๐Ÿ”ญ": "Telescope", + "๐Ÿ“ก": "Satellite Antenna", + "๐Ÿ’‰": "Syringe", + "๐Ÿฉธ": "Drop of Blood", + "๐Ÿ’Š": "Pill", + "๐Ÿฉน": "Adhesive Bandage", + "๐Ÿฉบ": "Stethoscope", + "๐Ÿšช": "Door", + "๐Ÿชž": "Mirror", + "๐ŸชŸ": "Window", + "๐Ÿ›๏ธ": "Bed", + "๐Ÿ›‹๏ธ": "Couch and Lamp", + "๐Ÿช‘": "Chair", + "๐Ÿšฝ": "Toilet", + "๐Ÿช ": "Plunger", + "๐Ÿšฟ": "Shower", + "๐Ÿ›": "Bathtub", + "๐Ÿชค": "Mouse Trap", + "๐Ÿช’": "Razor", + "๐Ÿงด": "Lotion Bottle", + "๐Ÿงท": "Safety Pin", + "๐Ÿงน": "Broom", + "๐Ÿงบ": "Basket", + "๐Ÿงป": "Roll of Paper", + "๐Ÿชฃ": "Bucket", + "๐Ÿงผ": "Soap", + "๐Ÿชฅ": "Toothbrush", + "๐Ÿงฝ": "Sponge", + "๐Ÿงฏ": "Fire Extinguisher", + "๐Ÿ›’": "Shopping Cart", + "๐Ÿšฌ": "Cigarette", + "โšฐ๏ธ": "Coffin", + "๐Ÿชฆ": "Headstone", + "โšฑ๏ธ": "Funeral Urn", + "๐Ÿ—ฟ": "Moai", + "๐Ÿชง": "Placard", + "๐Ÿšฐ": "Potable Water" + }, + "Symbols": { + "๐Ÿ’˜": "Heart with Arrow", + "๐Ÿ’": "Heart with Ribbon", + "๐Ÿ’–": "Sparkling Heart", + "๐Ÿ’—": "Growing Heart", + "๐Ÿ’“": "Beating Heart", + "๐Ÿ’ž": "Revolving Hearts", + "๐Ÿ’•": "Two Hearts", + "๐Ÿ’Ÿ": "Heart Decoration", + "โฃ๏ธ": "Heart Exclamation", + "๐Ÿ’”": "Broken Heart", + "โค๏ธ": "Red Heart", + "๐Ÿงก": "Orange Heart", + "๐Ÿ’›": "Yellow Heart", + "๐Ÿ’š": "Green Heart", + "๐Ÿ’™": "Blue Heart", + "๐Ÿ’œ": "Purple Heart", + "๐ŸคŽ": "Brown Heart", + "๐Ÿ–ค": "Black Heart", + "๐Ÿค": "White Heart", + "๐Ÿ’ฏ": "Hundred Points", + "๐Ÿ’ข": "Anger Symbol", + "๐Ÿ’ฌ": "Speech Balloon", + "๐Ÿ‘๏ธโ€๐Ÿ—จ๏ธ": "Eye in Speech Bubble", + "๐Ÿ—จ๏ธ": "Left Speech Bubble", + "๐Ÿ—ฏ๏ธ": "Right Anger Bubble", + "๐Ÿ’ญ": "Thought Balloon", + "๐Ÿ’ค": "Zzz", + "๐Ÿ’ฎ": "White Flower", + "โ™จ๏ธ": "Hot Springs", + "๐Ÿ’ˆ": "Barber Pole", + "๐Ÿ›‘": "Stop Sign", + "๐Ÿ•›": "Twelve Oโ€™Clock", + "๐Ÿ•ง": "Twelve-Thirty", + "๐Ÿ•": "One Oโ€™Clock", + "๐Ÿ•œ": "One-Thirty", + "๐Ÿ•‘": "Two Oโ€™Clock", + "๐Ÿ•": "Two-Thirty", + "๐Ÿ•’": "Three Oโ€™Clock", + "๐Ÿ•ž": "Three-Thirty", + "๐Ÿ•“": "Four Oโ€™Clock", + "๐Ÿ•Ÿ": "Four-Thirty", + "๐Ÿ•”": "Five Oโ€™Clock", + "๐Ÿ• ": "Five-Thirty", + "๐Ÿ••": "Six Oโ€™Clock", + "๐Ÿ•ก": "Six-Thirty", + "๐Ÿ•–": "Seven Oโ€™Clock", + "๐Ÿ•ข": "Seven-Thirty", + "๐Ÿ•—": "Eight Oโ€™Clock", + "๐Ÿ•ฃ": "Eight-Thirty", + "๐Ÿ•˜": "Nine Oโ€™Clock", + "๐Ÿ•ค": "Nine-Thirty", + "๐Ÿ•™": "Ten Oโ€™Clock", + "๐Ÿ•ฅ": "Ten-Thirty", + "๐Ÿ•š": "Eleven Oโ€™Clock", + "๐Ÿ•ฆ": "Eleven-Thirty", + "๐ŸŒ€": "Cyclone", + "โ™ ๏ธ": "Spade Suit", + "โ™ฅ๏ธ": "Heart Suit", + "โ™ฆ๏ธ": "Diamond Suit", + "โ™ฃ๏ธ": "Club Suit", + "๐Ÿƒ": "Joker", + "๐Ÿ€„": "Mahjong Red Dragon", + "๐ŸŽด": "Flower Playing Cards", + "๐Ÿ”‡": "Muted Speaker", + "๐Ÿ”ˆ": "Speaker Low Volume", + "๐Ÿ”‰": "Speaker Medium Volume", + "๐Ÿ”Š": "Speaker High Volume", + "๐Ÿ“ข": "Loudspeaker", + "๐Ÿ“ฃ": "Megaphone", + "๐Ÿ“ฏ": "Postal Horn", + "๐Ÿ””": "Bell", + "๐Ÿ”•": "Bell with Slash", + "๐ŸŽต": "Musical Note", + "๐ŸŽถ": "Musical Notes", + "๐Ÿ’น": "Chart Increasing with Yen", + "๐Ÿ›—": "Elevator", + "๐Ÿง": "ATM Sign", + "๐Ÿšฎ": "Litter in Bin Sign", + "๐Ÿšฐ": "Potable Water", + "โ™ฟ": "Wheelchair Symbol", + "๐Ÿšน": "Menโ€™s Room", + "๐Ÿšบ": "Womenโ€™s Room", + "๐Ÿšป": "Restroom", + "๐Ÿšผ": "Baby Symbol", + "๐Ÿšพ": "Water Closet", + "โš ๏ธ": "Warning", + "๐Ÿšธ": "Children Crossing", + "โ›”": "No Entry", + "๐Ÿšซ": "Prohibited", + "๐Ÿšณ": "No Bicycles", + "๐Ÿšญ": "No Smoking", + "๐Ÿšฏ": "No Littering", + "๐Ÿšฑ": "Non-Potable Water", + "๐Ÿšท": "No Pedestrians", + "๐Ÿ“ต": "No Mobile Phones", + "๐Ÿ”ž": "No One Under Eighteen", + "โ˜ข๏ธ": "Radioactive", + "โ˜ฃ๏ธ": "Biohazard", + "โฌ†๏ธ": "Up Arrow", + "โ†—๏ธ": "Up-Right Arrow", + "โžก๏ธ": "Right Arrow", + "โ†˜๏ธ": "Down-Right Arrow", + "โฌ‡๏ธ": "Down Arrow", + "โ†™๏ธ": "Down-Left Arrow", + "โฌ…๏ธ": "Left Arrow", + "โ†–๏ธ": "Up-Left Arrow", + "โ†•๏ธ": "Up-Down Arrow", + "โ†”๏ธ": "Left-Right Arrow", + "โ†ฉ๏ธ": "Right Arrow Curving Left", + "โ†ช๏ธ": "Left Arrow Curving Right", + "โคด๏ธ": "Right Arrow Curving Up", + "โคต๏ธ": "Right Arrow Curving Down", + "๐Ÿ”ƒ": "Clockwise Vertical Arrows", + "๐Ÿ”„": "Counterclockwise Arrows Button", + "๐Ÿ”™": "Back Arrow", + "๐Ÿ”š": "End Arrow", + "๐Ÿ”›": "On! Arrow", + "๐Ÿ”œ": "Soon Arrow", + "๐Ÿ”": "Top Arrow", + "๐Ÿ›": "Place of Worship", + "โš›๏ธ": "Atom Symbol", + "๐Ÿ•‰๏ธ": "Om", + "โœก๏ธ": "Star of David", + "โ˜ธ๏ธ": "Wheel of Dharma", + "โ˜ฏ๏ธ": "Yin Yang", + "โœ๏ธ": "Latin Cross", + "โ˜ฆ๏ธ": "Orthodox Cross", + "โ˜ช๏ธ": "Star and Crescent", + "โ˜ฎ๏ธ": "Peace Symbol", + "๐Ÿ•Ž": "Menorah", + "๐Ÿ”ฏ": "Dotted Six-Pointed Star", + "โ™ˆ": "Aries", + "โ™‰": "Taurus", + "โ™Š": "Gemini", + "โ™‹": "Cancer", + "โ™Œ": "Leo", + "โ™": "Virgo", + "โ™Ž": "Libra", + "โ™": "Scorpio", + "โ™": "Sagittarius", + "โ™‘": "Capricorn", + "โ™’": "Aquarius", + "โ™“": "Pisces", + "โ›Ž": "Ophiuchus", + "๐Ÿ”€": "Shuffle Tracks Button", + "๐Ÿ”": "Repeat Button", + "๐Ÿ”‚": "Repeat Single Button", + "โ–ถ๏ธ": "Play Button", + "โฉ": "Fast-Forward Button", + "โญ๏ธ": "Next Track Button", + "โฏ๏ธ": "Play or Pause Button", + "โ—€๏ธ": "Reverse Button", + "โช": "Fast Reverse Button", + "โฎ๏ธ": "Last Track Button", + "๐Ÿ”ผ": "Upwards Button", + "โซ": "Fast Up Button", + "๐Ÿ”ฝ": "Downwards Button", + "โฌ": "Fast Down Button", + "โธ๏ธ": "Pause Button", + "โน๏ธ": "Stop Button", + "โบ๏ธ": "Record Button", + "โ๏ธ": "Eject Button", + "๐ŸŽฆ": "Cinema", + "๐Ÿ”…": "Dim Button", + "๐Ÿ”†": "Bright Button", + "๐Ÿ“ถ": "Antenna Bars", + "๐Ÿ“ณ": "Vibration Mode", + "๐Ÿ“ด": "Mobile Phone Off", + "โ™€๏ธ": "Female Sign", + "โ™‚๏ธ": "Male Sign", + "โœ–๏ธ": "Multiply", + "โž•": "Plus", + "โž–": "Minus", + "โž—": "Divide", + "โ™พ๏ธ": "Infinity", + "โ€ผ๏ธ": "Double Exclamation Mark", + "โ‰๏ธ": "Exclamation Question Mark", + "โ“": "Question Mark", + "โ”": "White Question Mark", + "โ•": "White Exclamation Mark", + "โ—": "Exclamation Mark", + "ใ€ฐ๏ธ": "Wavy Dash", + "๐Ÿ’ฑ": "Currency Exchange", + "๐Ÿ’ฒ": "Heavy Dollar Sign", + "โš•๏ธ": "Medical Symbol", + "โ™ป๏ธ": "Recycling Symbol", + "โšœ๏ธ": "Fleur-de-lis", + "๐Ÿ”ฑ": "Trident Emblem", + "๐Ÿ“›": "Name Badge", + "๐Ÿ”ฐ": "Japanese Symbol for Beginner", + "โญ•": "Hollow Red Circle", + "โœ…": "Check Mark Button", + "โ˜‘๏ธ": "Check Box with Check", + "โœ”๏ธ": "Check Mark", + "โŒ": "Cross Mark", + "โŽ": "Cross Mark Button", + "โžฐ": "Curly Loop", + "โžฟ": "Double Curly Loop", + "ใ€ฝ๏ธ": "Part Alternation Mark", + "โœณ๏ธ": "Eight-Spoked Asterisk", + "โœด๏ธ": "Eight-Pointed Star", + "โ‡๏ธ": "Sparkle", + "ยฉ๏ธ": "Copyright", + "ยฎ๏ธ": "Registered", + "โ„ข๏ธ": "Trade Mark", + "#๏ธโƒฃ": "Keycap Number Sign", + "*๏ธโƒฃ": "Keycap Asterisk", + "0๏ธโƒฃ": "Keycap Digit Zero", + "1๏ธโƒฃ": "Keycap Digit One", + "2๏ธโƒฃ": "Keycap Digit Two", + "3๏ธโƒฃ": "Keycap Digit Three", + "4๏ธโƒฃ": "Keycap Digit Four", + "5๏ธโƒฃ": "Keycap Digit Five", + "6๏ธโƒฃ": "Keycap Digit Six", + "7๏ธโƒฃ": "Keycap Digit Seven", + "8๏ธโƒฃ": "Keycap Digit Eight", + "9๏ธโƒฃ": "Keycap Digit Nine", + "๐Ÿ”Ÿ": "Keycap: 10", + "๐Ÿ” ": "Input Latin Uppercase", + "๐Ÿ”ก": "Input Latin Lowercase", + "๐Ÿ”ข": "Input Numbers", + "๐Ÿ”ฃ": "Input Symbols", + "๐Ÿ”ค": "Input Latin Letters", + "๐Ÿ…ฐ๏ธ": "A Button (Blood Type)", + "๐Ÿ†Ž": "AB Button (Blood Type)", + "๐Ÿ…ฑ๏ธ": "B Button (Blood Type)", + "๐Ÿ†‘": "CL Button", + "๐Ÿ†’": "Cool Button", + "๐Ÿ†“": "Free Button", + "โ„น๏ธ": "Information", + "๐Ÿ†”": "ID Button", + "โ“‚๏ธ": "Circled M", + "๐Ÿ†•": "New Button", + "๐Ÿ†–": "NG Button", + "๐Ÿ…พ๏ธ": "O Button (Blood Type)", + "๐Ÿ†—": "OK Button", + "๐Ÿ…ฟ๏ธ": "P Button", + "๐Ÿ†˜": "SOS Button", + "๐Ÿ†™": "Up! Button", + "๐Ÿ†š": "Vs Button", + "๐Ÿˆ": "Japanese โ€œHereโ€ Button", + "๐Ÿˆ‚๏ธ": "Japanese โ€œService Chargeโ€ Button", + "๐Ÿˆท๏ธ": "Japanese โ€œMonthly Amountโ€ Button", + "๐Ÿˆถ": "Japanese โ€œNot Free of Chargeโ€ Button", + "๐Ÿˆฏ": "Japanese โ€œReservedโ€ Button", + "๐Ÿ‰": "Japanese โ€œBargainโ€ Button", + "๐Ÿˆน": "Japanese โ€œDiscountโ€ Button", + "๐Ÿˆš": "Japanese โ€œFree of Chargeโ€ Button", + "๐Ÿˆฒ": "Japanese โ€œProhibitedโ€ Button", + "๐Ÿ‰‘": "Japanese โ€œAcceptableโ€ Button", + "๐Ÿˆธ": "Japanese โ€œApplicationโ€ Button", + "๐Ÿˆด": "Japanese โ€œPassing Gradeโ€ Button", + "๐Ÿˆณ": "Japanese โ€œVacancyโ€ Button", + "ใŠ—๏ธ": "Japanese โ€œCongratulationsโ€ Button", + "ใŠ™๏ธ": "Japanese โ€œSecretโ€ Button", + "๐Ÿˆบ": "Japanese โ€œOpen for Businessโ€ Button", + "๐Ÿˆต": "Japanese โ€œNo Vacancyโ€ Button", + "๐Ÿ”ด": "Red Circle", + "๐ŸŸ ": "Orange Circle", + "๐ŸŸก": "Yellow Circle", + "๐ŸŸข": "Green Circle", + "๐Ÿ”ต": "Blue Circle", + "๐ŸŸฃ": "Purple Circle", + "๐ŸŸค": "Brown Circle", + "โšซ": "Black Circle", + "โšช": "White Circle", + "๐ŸŸฅ": "Red Square", + "๐ŸŸง": "Orange Square", + "๐ŸŸจ": "Yellow Square", + "๐ŸŸฉ": "Green Square", + "๐ŸŸฆ": "Blue Square", + "๐ŸŸช": "Purple Square", + "๐ŸŸซ": "Brown Square", + "โฌ›": "Black Large Square", + "โฌœ": "White Large Square", + "โ—ผ๏ธ": "Black Medium Square", + "โ—ป๏ธ": "White Medium Square", + "โ—พ": "Black Medium-Small Square", + "โ—ฝ": "White Medium-Small Square", + "โ–ช๏ธ": "Black Small Square", + "โ–ซ๏ธ": "White Small Square", + "๐Ÿ”ถ": "Large Orange Diamond", + "๐Ÿ”ท": "Large Blue Diamond", + "๐Ÿ”ธ": "Small Orange Diamond", + "๐Ÿ”น": "Small Blue Diamond", + "๐Ÿ”บ": "Red Triangle Pointed Up", + "๐Ÿ”ป": "Red Triangle Pointed Down", + "๐Ÿ’ ": "Diamond with a Dot", + "๐Ÿ”˜": "Radio Button", + "๐Ÿ”ณ": "White Square Button", + "๐Ÿ”ฒ": "Black Square Button", + "โค๏ธโ€๐Ÿ”ฅ": "Heart on Fire", + "โค๏ธโ€๐Ÿฉน": "Mending Heart" + }, + "Flags": { + "๐Ÿ": "Chequered Flag", + "๐Ÿšฉ": "Triangular Flag", + "๐ŸŽŒ": "Crossed Flags", + "๐Ÿด": "Black Flag", + "๐Ÿณ๏ธ": "White Flag", + "๐Ÿณ๏ธโ€๐ŸŒˆ": "Rainbow Flag", + "๐Ÿณ๏ธโ€โšง๏ธ": "Transgender Flag", + "๐Ÿดโ€โ˜ ๏ธ": "Pirate Flag", + "๐Ÿ‡ฆ๐Ÿ‡จ": "Flag: Ascension Island", + "๐Ÿ‡ฆ๐Ÿ‡ฉ": "Flag: Andorra", + "๐Ÿ‡ฆ๐Ÿ‡ช": "Flag: United Arab Emirates", + "๐Ÿ‡ฆ๐Ÿ‡ซ": "Flag: Afghanistan", + "๐Ÿ‡ฆ๐Ÿ‡ฌ": "Flag: Antigua & Barbuda", + "๐Ÿ‡ฆ๐Ÿ‡ฎ": "Flag: Anguilla", + "๐Ÿ‡ฆ๐Ÿ‡ฑ": "Flag: Albania", + "๐Ÿ‡ฆ๐Ÿ‡ฒ": "Flag: Armenia", + "๐Ÿ‡ฆ๐Ÿ‡ด": "Flag: Angola", + "๐Ÿ‡ฆ๐Ÿ‡ถ": "Flag: Antarctica", + "๐Ÿ‡ฆ๐Ÿ‡ท": "Flag: Argentina", + "๐Ÿ‡ฆ๐Ÿ‡ธ": "Flag: American Samoa", + "๐Ÿ‡ฆ๐Ÿ‡น": "Flag: Austria", + "๐Ÿ‡ฆ๐Ÿ‡บ": "Flag: Australia", + "๐Ÿ‡ฆ๐Ÿ‡ผ": "Flag: Aruba", + "๐Ÿ‡ฆ๐Ÿ‡ฝ": "Flag: ร…land Islands", + "๐Ÿ‡ฆ๐Ÿ‡ฟ": "Flag: Azerbaijan", + "๐Ÿ‡ง๐Ÿ‡ฆ": "Flag: Bosnia & Herzegovina", + "๐Ÿ‡ง๐Ÿ‡ง": "Flag: Barbados", + "๐Ÿ‡ง๐Ÿ‡ฉ": "Flag: Bangladesh", + "๐Ÿ‡ง๐Ÿ‡ช": "Flag: Belgium", + "๐Ÿ‡ง๐Ÿ‡ซ": "Flag: Burkina Faso", + "๐Ÿ‡ง๐Ÿ‡ฌ": "Flag: Bulgaria", + "๐Ÿ‡ง๐Ÿ‡ญ": "Flag: Bahrain", + "๐Ÿ‡ง๐Ÿ‡ฎ": "Flag: Burundi", + "๐Ÿ‡ง๐Ÿ‡ฏ": "Flag: Benin", + "๐Ÿ‡ง๐Ÿ‡ฑ": "Flag: St. Barthรฉlemy", + "๐Ÿ‡ง๐Ÿ‡ฒ": "Flag: Bermuda", + "๐Ÿ‡ง๐Ÿ‡ณ": "Flag: Brunei", + "๐Ÿ‡ง๐Ÿ‡ด": "Flag: Bolivia", + "๐Ÿ‡ง๐Ÿ‡ถ": "Flag: Caribbean Netherlands", + "๐Ÿ‡ง๐Ÿ‡ท": "Flag: Brazil", + "๐Ÿ‡ง๐Ÿ‡ธ": "Flag: Bahamas", + "๐Ÿ‡ง๐Ÿ‡น": "Flag: Bhutan", + "๐Ÿ‡ง๐Ÿ‡ป": "Flag: Bouvet Island", + "๐Ÿ‡ง๐Ÿ‡ผ": "Flag: Botswana", + "๐Ÿ‡ง๐Ÿ‡พ": "Flag: Belarus", + "๐Ÿ‡ง๐Ÿ‡ฟ": "Flag: Belize", + "๐Ÿ‡จ๐Ÿ‡ฆ": "Flag: Canada", + "๐Ÿ‡จ๐Ÿ‡จ": "Flag: Cocos (Keeling) Islands", + "๐Ÿ‡จ๐Ÿ‡ฉ": "Flag: Congo - Kinshasa", + "๐Ÿ‡จ๐Ÿ‡ซ": "Flag: Central African Republic", + "๐Ÿ‡จ๐Ÿ‡ฌ": "Flag: Congo - Brazzaville", + "๐Ÿ‡จ๐Ÿ‡ญ": "Flag: Switzerland", + "๐Ÿ‡จ๐Ÿ‡ฎ": "Flag: Cรดte dโ€™Ivoire", + "๐Ÿ‡จ๐Ÿ‡ฐ": "Flag: Cook Islands", + "๐Ÿ‡จ๐Ÿ‡ฑ": "Flag: Chile", + "๐Ÿ‡จ๐Ÿ‡ฒ": "Flag: Cameroon", + "๐Ÿ‡จ๐Ÿ‡ณ": "Flag: China", + "๐Ÿ‡จ๐Ÿ‡ด": "Flag: Colombia", + "๐Ÿ‡จ๐Ÿ‡ต": "Flag: Clipperton Island", + "๐Ÿ‡จ๐Ÿ‡ท": "Flag: Costa Rica", + "๐Ÿ‡จ๐Ÿ‡บ": "Flag: Cuba", + "๐Ÿ‡จ๐Ÿ‡ป": "Flag: Cape Verde", + "๐Ÿ‡จ๐Ÿ‡ผ": "Flag: Curaรงao", + "๐Ÿ‡จ๐Ÿ‡ฝ": "Flag: Christmas Island", + "๐Ÿ‡จ๐Ÿ‡พ": "Flag: Cyprus", + "๐Ÿ‡จ๐Ÿ‡ฟ": "Flag: Czechia", + "๐Ÿ‡ฉ๐Ÿ‡ช": "Flag: Germany", + "๐Ÿ‡ฉ๐Ÿ‡ฌ": "Flag: Diego Garcia", + "๐Ÿ‡ฉ๐Ÿ‡ฏ": "Flag: Djibouti", + "๐Ÿ‡ฉ๐Ÿ‡ฐ": "Flag: Denmark", + "๐Ÿ‡ฉ๐Ÿ‡ฒ": "Flag: Dominica", + "๐Ÿ‡ฉ๐Ÿ‡ด": "Flag: Dominican Republic", + "๐Ÿ‡ฉ๐Ÿ‡ฟ": "Flag: Algeria", + "๐Ÿ‡ช๐Ÿ‡ฆ": "Flag: Ceuta & Melilla", + "๐Ÿ‡ช๐Ÿ‡จ": "Flag: Ecuador", + "๐Ÿ‡ช๐Ÿ‡ช": "Flag: Estonia", + "๐Ÿ‡ช๐Ÿ‡ฌ": "Flag: Egypt", + "๐Ÿ‡ช๐Ÿ‡ญ": "Flag: Western Sahara", + "๐Ÿ‡ช๐Ÿ‡ท": "Flag: Eritrea", + "๐Ÿ‡ช๐Ÿ‡ธ": "Flag: Spain", + "๐Ÿ‡ช๐Ÿ‡น": "Flag: Ethiopia", + "๐Ÿ‡ช๐Ÿ‡บ": "Flag: European Union", + "๐Ÿ‡ซ๐Ÿ‡ฎ": "Flag: Finland", + "๐Ÿ‡ซ๐Ÿ‡ฏ": "Flag: Fiji", + "๐Ÿ‡ซ๐Ÿ‡ฐ": "Flag: Falkland Islands", + "๐Ÿ‡ซ๐Ÿ‡ฒ": "Flag: Micronesia", + "๐Ÿ‡ซ๐Ÿ‡ด": "Flag: Faroe Islands", + "๐Ÿ‡ซ๐Ÿ‡ท": "Flag: France", + "๐Ÿ‡ฌ๐Ÿ‡ฆ": "Flag: Gabon", + "๐Ÿ‡ฌ๐Ÿ‡ง": "Flag: United Kingdom", + "๐Ÿ‡ฌ๐Ÿ‡ฉ": "Flag: Grenada", + "๐Ÿ‡ฌ๐Ÿ‡ช": "Flag: Georgia", + "๐Ÿ‡ฌ๐Ÿ‡ซ": "Flag: French Guiana", + "๐Ÿ‡ฌ๐Ÿ‡ฌ": "Flag: Guernsey", + "๐Ÿ‡ฌ๐Ÿ‡ญ": "Flag: Ghana", + "๐Ÿ‡ฌ๐Ÿ‡ฎ": "Flag: Gibraltar", + "๐Ÿ‡ฌ๐Ÿ‡ฑ": "Flag: Greenland", + "๐Ÿ‡ฌ๐Ÿ‡ฒ": "Flag: Gambia", + "๐Ÿ‡ฌ๐Ÿ‡ณ": "Flag: Guinea", + "๐Ÿ‡ฌ๐Ÿ‡ต": "Flag: Guadeloupe", + "๐Ÿ‡ฌ๐Ÿ‡ถ": "Flag: Equatorial Guinea", + "๐Ÿ‡ฌ๐Ÿ‡ท": "Flag: Greece", + "๐Ÿ‡ฌ๐Ÿ‡ธ": "Flag: South Georgia & South Sandwich Islands", + "๐Ÿ‡ฌ๐Ÿ‡น": "Flag: Guatemala", + "๐Ÿ‡ฌ๐Ÿ‡บ": "Flag: Guam", + "๐Ÿ‡ฌ๐Ÿ‡ผ": "Flag: Guinea-Bissau", + "๐Ÿ‡ฌ๐Ÿ‡พ": "Flag: Guyana", + "๐Ÿ‡ญ๐Ÿ‡ฐ": "Flag: Hong Kong SAR China", + "๐Ÿ‡ญ๐Ÿ‡ฒ": "Flag: Heard & McDonald Islands", + "๐Ÿ‡ญ๐Ÿ‡ณ": "Flag: Honduras", + "๐Ÿ‡ญ๐Ÿ‡ท": "Flag: Croatia", + "๐Ÿ‡ญ๐Ÿ‡น": "Flag: Haiti", + "๐Ÿ‡ญ๐Ÿ‡บ": "Flag: Hungary", + "๐Ÿ‡ฎ๐Ÿ‡จ": "Flag: Canary Islands", + "๐Ÿ‡ฎ๐Ÿ‡ฉ": "Flag: Indonesia", + "๐Ÿ‡ฎ๐Ÿ‡ช": "Flag: Ireland", + "๐Ÿ‡ฎ๐Ÿ‡ฑ": "Flag: Israel", + "๐Ÿ‡ฎ๐Ÿ‡ฒ": "Flag: Isle of Man", + "๐Ÿ‡ฎ๐Ÿ‡ณ": "Flag: India", + "๐Ÿ‡ฎ๐Ÿ‡ด": "Flag: British Indian Ocean Territory", + "๐Ÿ‡ฎ๐Ÿ‡ถ": "Flag: Iraq", + "๐Ÿ‡ฎ๐Ÿ‡ท": "Flag: Iran", + "๐Ÿ‡ฎ๐Ÿ‡ธ": "Flag: Iceland", + "๐Ÿ‡ฎ๐Ÿ‡น": "Flag: Italy", + "๐Ÿ‡ฏ๐Ÿ‡ช": "Flag: Jersey", + "๐Ÿ‡ฏ๐Ÿ‡ฒ": "Flag: Jamaica", + "๐Ÿ‡ฏ๐Ÿ‡ด": "Flag: Jordan", + "๐Ÿ‡ฏ๐Ÿ‡ต": "Flag: Japan", + "๐Ÿ‡ฐ๐Ÿ‡ช": "Flag: Kenya", + "๐Ÿ‡ฐ๐Ÿ‡ฌ": "Flag: Kyrgyzstan", + "๐Ÿ‡ฐ๐Ÿ‡ญ": "Flag: Cambodia", + "๐Ÿ‡ฐ๐Ÿ‡ฎ": "Flag: Kiribati", + "๐Ÿ‡ฐ๐Ÿ‡ฒ": "Flag: Comoros", + "๐Ÿ‡ฐ๐Ÿ‡ณ": "Flag: St. Kitts & Nevis", + "๐Ÿ‡ฐ๐Ÿ‡ต": "Flag: North Korea", + "๐Ÿ‡ฐ๐Ÿ‡ท": "Flag: South Korea", + "๐Ÿ‡ฐ๐Ÿ‡ผ": "Flag: Kuwait", + "๐Ÿ‡ฐ๐Ÿ‡พ": "Flag: Cayman Islands", + "๐Ÿ‡ฐ๐Ÿ‡ฟ": "Flag: Kazakhstan", + "๐Ÿ‡ฑ๐Ÿ‡ฆ": "Flag: Laos", + "๐Ÿ‡ฑ๐Ÿ‡ง": "Flag: Lebanon", + "๐Ÿ‡ฑ๐Ÿ‡จ": "Flag: St. Lucia", + "๐Ÿ‡ฑ๐Ÿ‡ฎ": "Flag: Liechtenstein", + "๐Ÿ‡ฑ๐Ÿ‡ฐ": "Flag: Sri Lanka", + "๐Ÿ‡ฑ๐Ÿ‡ท": "Flag: Liberia", + "๐Ÿ‡ฑ๐Ÿ‡ธ": "Flag: Lesotho", + "๐Ÿ‡ฑ๐Ÿ‡น": "Flag: Lithuania", + "๐Ÿ‡ฑ๐Ÿ‡บ": "Flag: Luxembourg", + "๐Ÿ‡ฑ๐Ÿ‡ป": "Flag: Latvia", + "๐Ÿ‡ฑ๐Ÿ‡พ": "Flag: Libya", + "๐Ÿ‡ฒ๐Ÿ‡ฆ": "Flag: Morocco", + "๐Ÿ‡ฒ๐Ÿ‡จ": "Flag: Monaco", + "๐Ÿ‡ฒ๐Ÿ‡ฉ": "Flag: Moldova", + "๐Ÿ‡ฒ๐Ÿ‡ช": "Flag: Montenegro", + "๐Ÿ‡ฒ๐Ÿ‡ซ": "Flag: St. Martin", + "๐Ÿ‡ฒ๐Ÿ‡ฌ": "Flag: Madagascar", + "๐Ÿ‡ฒ๐Ÿ‡ญ": "Flag: Marshall Islands", + "๐Ÿ‡ฒ๐Ÿ‡ฐ": "Flag: North Macedonia", + "๐Ÿ‡ฒ๐Ÿ‡ฑ": "Flag: Mali", + "๐Ÿ‡ฒ๐Ÿ‡ฒ": "Flag: Myanmar (Burma)", + "๐Ÿ‡ฒ๐Ÿ‡ณ": "Flag: Mongolia", + "๐Ÿ‡ฒ๐Ÿ‡ด": "Flag: Macao Sar China", + "๐Ÿ‡ฒ๐Ÿ‡ต": "Flag: Northern Mariana Islands", + "๐Ÿ‡ฒ๐Ÿ‡ถ": "Flag: Martinique", + "๐Ÿ‡ฒ๐Ÿ‡ท": "Flag: Mauritania", + "๐Ÿ‡ฒ๐Ÿ‡ธ": "Flag: Montserrat", + "๐Ÿ‡ฒ๐Ÿ‡น": "Flag: Malta", + "๐Ÿ‡ฒ๐Ÿ‡บ": "Flag: Mauritius", + "๐Ÿ‡ฒ๐Ÿ‡ป": "Flag: Maldives", + "๐Ÿ‡ฒ๐Ÿ‡ผ": "Flag: Malawi", + "๐Ÿ‡ฒ๐Ÿ‡ฝ": "Flag: Mexico", + "๐Ÿ‡ฒ๐Ÿ‡พ": "Flag: Malaysia", + "๐Ÿ‡ฒ๐Ÿ‡ฟ": "Flag: Mozambique", + "๐Ÿ‡ณ๐Ÿ‡ฆ": "Flag: Namibia", + "๐Ÿ‡ณ๐Ÿ‡จ": "Flag: New Caledonia", + "๐Ÿ‡ณ๐Ÿ‡ช": "Flag: Niger", + "๐Ÿ‡ณ๐Ÿ‡ซ": "Flag: Norfolk Island", + "๐Ÿ‡ณ๐Ÿ‡ฌ": "Flag: Nigeria", + "๐Ÿ‡ณ๐Ÿ‡ฎ": "Flag: Nicaragua", + "๐Ÿ‡ณ๐Ÿ‡ฑ": "Flag: Netherlands", + "๐Ÿ‡ณ๐Ÿ‡ด": "Flag: Norway", + "๐Ÿ‡ณ๐Ÿ‡ต": "Flag: Nepal", + "๐Ÿ‡ณ๐Ÿ‡ท": "Flag: Nauru", + "๐Ÿ‡ณ๐Ÿ‡บ": "Flag: Niue", + "๐Ÿ‡ณ๐Ÿ‡ฟ": "Flag: New Zealand", + "๐Ÿ‡ด๐Ÿ‡ฒ": "Flag: Oman", + "๐Ÿ‡ต๐Ÿ‡ฆ": "Flag: Panama", + "๐Ÿ‡ต๐Ÿ‡ช": "Flag: Peru", + "๐Ÿ‡ต๐Ÿ‡ซ": "Flag: French Polynesia", + "๐Ÿ‡ต๐Ÿ‡ฌ": "Flag: Papua New Guinea", + "๐Ÿ‡ต๐Ÿ‡ญ": "Flag: Philippines", + "๐Ÿ‡ต๐Ÿ‡ฐ": "Flag: Pakistan", + "๐Ÿ‡ต๐Ÿ‡ฑ": "Flag: Poland", + "๐Ÿ‡ต๐Ÿ‡ฒ": "Flag: St. Pierre & Miquelon", + "๐Ÿ‡ต๐Ÿ‡ณ": "Flag: Pitcairn Islands", + "๐Ÿ‡ต๐Ÿ‡ท": "Flag: Puerto Rico", + "๐Ÿ‡ต๐Ÿ‡ธ": "Flag: Palestinian Territories", + "๐Ÿ‡ต๐Ÿ‡น": "Flag: Portugal", + "๐Ÿ‡ต๐Ÿ‡ผ": "Flag: Palau", + "๐Ÿ‡ต๐Ÿ‡พ": "Flag: Paraguay", + "๐Ÿ‡ถ๐Ÿ‡ฆ": "Flag: Qatar", + "๐Ÿ‡ท๐Ÿ‡ช": "Flag: Rรฉunion", + "๐Ÿ‡ท๐Ÿ‡ด": "Flag: Romania", + "๐Ÿ‡ท๐Ÿ‡ธ": "Flag: Serbia", + "๐Ÿ‡ท๐Ÿ‡บ": "Flag: Russia", + "๐Ÿ‡ท๐Ÿ‡ผ": "Flag: Rwanda", + "๐Ÿ‡ธ๐Ÿ‡ฆ": "Flag: Saudi Arabia", + "๐Ÿ‡ธ๐Ÿ‡ง": "Flag: Solomon Islands", + "๐Ÿ‡ธ๐Ÿ‡จ": "Flag: Seychelles", + "๐Ÿ‡ธ๐Ÿ‡ฉ": "Flag: Sudan", + "๐Ÿ‡ธ๐Ÿ‡ช": "Flag: Sweden", + "๐Ÿ‡ธ๐Ÿ‡ฌ": "Flag: Singapore", + "๐Ÿ‡ธ๐Ÿ‡ญ": "Flag: St. Helena", + "๐Ÿ‡ธ๐Ÿ‡ฎ": "Flag: Slovenia", + "๐Ÿ‡ธ๐Ÿ‡ฏ": "Flag: Svalbard & Jan Mayen", + "๐Ÿ‡ธ๐Ÿ‡ฐ": "Flag: Slovakia", + "๐Ÿ‡ธ๐Ÿ‡ฑ": "Flag: Sierra Leone", + "๐Ÿ‡ธ๐Ÿ‡ฒ": "Flag: San Marino", + "๐Ÿ‡ธ๐Ÿ‡ณ": "Flag: Senegal", + "๐Ÿ‡ธ๐Ÿ‡ด": "Flag: Somalia", + "๐Ÿ‡ธ๐Ÿ‡ท": "Flag: Suriname", + "๐Ÿ‡ธ๐Ÿ‡ธ": "Flag: South Sudan", + "๐Ÿ‡ธ๐Ÿ‡น": "Flag: Sรฃo Tomรฉ & Prรญncipe", + "๐Ÿ‡ธ๐Ÿ‡ป": "Flag: El Salvador", + "๐Ÿ‡ธ๐Ÿ‡ฝ": "Flag: Sint Maarten", + "๐Ÿ‡ธ๐Ÿ‡พ": "Flag: Syria", + "๐Ÿ‡ธ๐Ÿ‡ฟ": "Flag: Eswatini", + "๐Ÿ‡น๐Ÿ‡ฆ": "Flag: Tristan Da Cunha", + "๐Ÿ‡น๐Ÿ‡จ": "Flag: Turks & Caicos Islands", + "๐Ÿ‡น๐Ÿ‡ฉ": "Flag: Chad", + "๐Ÿ‡น๐Ÿ‡ซ": "Flag: French Southern Territories", + "๐Ÿ‡น๐Ÿ‡ฌ": "Flag: Togo", + "๐Ÿ‡น๐Ÿ‡ญ": "Flag: Thailand", + "๐Ÿ‡น๐Ÿ‡ฏ": "Flag: Tajikistan", + "๐Ÿ‡น๐Ÿ‡ฐ": "Flag: Tokelau", + "๐Ÿ‡น๐Ÿ‡ฑ": "Flag: Timor-Leste", + "๐Ÿ‡น๐Ÿ‡ฒ": "Flag: Turkmenistan", + "๐Ÿ‡น๐Ÿ‡ณ": "Flag: Tunisia", + "๐Ÿ‡น๐Ÿ‡ด": "Flag: Tonga", + "๐Ÿ‡น๐Ÿ‡ท": "Flag: Turkey", + "๐Ÿ‡น๐Ÿ‡น": "Flag: Trinidad & Tobago", + "๐Ÿ‡น๐Ÿ‡ป": "Flag: Tuvalu", + "๐Ÿ‡น๐Ÿ‡ผ": "Flag: Taiwan", + "๐Ÿ‡น๐Ÿ‡ฟ": "Flag: Tanzania", + "๐Ÿ‡บ๐Ÿ‡ฆ": "Flag: Ukraine", + "๐Ÿ‡บ๐Ÿ‡ฌ": "Flag: Uganda", + "๐Ÿ‡บ๐Ÿ‡ฒ": "Flag: U.S. Outlying Islands", + "๐Ÿ‡บ๐Ÿ‡ณ": "Flag: United Nations", + "๐Ÿ‡บ๐Ÿ‡ธ": "Flag: United States", + "๐Ÿ‡บ๐Ÿ‡พ": "Flag: Uruguay", + "๐Ÿ‡บ๐Ÿ‡ฟ": "Flag: Uzbekistan", + "๐Ÿ‡ป๐Ÿ‡ฆ": "Flag: Vatican City", + "๐Ÿ‡ป๐Ÿ‡จ": "Flag: St. Vincent & Grenadines", + "๐Ÿ‡ป๐Ÿ‡ช": "Flag: Venezuela", + "๐Ÿ‡ป๐Ÿ‡ฌ": "Flag: British Virgin Islands", + "๐Ÿ‡ป๐Ÿ‡ฎ": "Flag: U.S. Virgin Islands", + "๐Ÿ‡ป๐Ÿ‡ณ": "Flag: Vietnam", + "๐Ÿ‡ป๐Ÿ‡บ": "Flag: Vanuatu", + "๐Ÿ‡ผ๐Ÿ‡ซ": "Flag: Wallis & Futuna", + "๐Ÿ‡ผ๐Ÿ‡ธ": "Flag: Samoa", + "๐Ÿ‡ฝ๐Ÿ‡ฐ": "Flag: Kosovo", + "๐Ÿ‡พ๐Ÿ‡ช": "Flag: Yemen", + "๐Ÿ‡พ๐Ÿ‡น": "Flag: Mayotte", + "๐Ÿ‡ฟ๐Ÿ‡ฆ": "Flag: South Africa", + "๐Ÿ‡ฟ๐Ÿ‡ฒ": "Flag: Zambia", + "๐Ÿ‡ฟ๐Ÿ‡ผ": "Flag: Zimbabwe", + "๐Ÿด๓ ง๓ ข๓ ฅ๓ ฎ๓ ง๓ ฟ": "Flag: England", + "๐Ÿด๓ ง๓ ข๓ ณ๓ ฃ๓ ด๓ ฟ": "Flag: Scotland", + "๐Ÿด๓ ง๓ ข๓ ท๓ ฌ๓ ณ๓ ฟ": "Flag: Wales", + "๐Ÿด๓ ต๓ ณ๓ ด๓ ธ๓ ฟ": "Flag for Texas (US-TX)" + } +} diff --git a/qtribu/resources/emojis/selection.json b/qtribu/resources/emojis/selection.json new file mode 100644 index 00000000..b66ae350 --- /dev/null +++ b/qtribu/resources/emojis/selection.json @@ -0,0 +1,39 @@ +{ + "Gestures": { + "๐Ÿคฒ": { + "name": "Palms Up Together", + "codes": [ + "palms" + ] + }, + "๐Ÿค": { + "name": "Handshake", + "codes": [ + "handshake", + "shake" + ] + } + }, + "Smileys & People": { + "๐Ÿ™‚": { + "name": "Slightly Smiling Face", + "codes": [ + "palms" + ] + }, + "๐Ÿ˜‚": { + "name": "Handshake", + "codes": [ + "handshake", + "shake" + ] + }, + "๐Ÿ˜‡": { + "name": "Handshake", + "codes": [ + "handshake", + "shake" + ] + } + } +} diff --git a/qtribu/toolbelt/preferences.py b/qtribu/toolbelt/preferences.py index 666228e0..a3c1377a 100644 --- a/qtribu/toolbelt/preferences.py +++ b/qtribu/toolbelt/preferences.py @@ -47,6 +47,14 @@ class PlgSettingsStructure: qchat_color_mention: str = "#4169e1" qchat_color_self: str = "#00cc00" qchat_color_admin: str = "#ffa500" + font_emoji_family: str = "Noto Color Emoji" + font_emoji_download_url: str = ( + "https://github.com/google/fonts/raw/main/ofl/notocoloremoji/NotoColorEmoji-Regular.ttf" + ) + + # QChat + qchat_instance_uri: str = "https://gischat.geotribu.net" + qchat_nickname: str = "J.D." # usage browser: int = 1