[
  {
    "path": ".gitignore",
    "content": "*.txt\n!requirements.txt\n*.db\n*.html\n*.db-shm\n*.db-wal\n*.zip\n*.exe\n*.spec\n!GUI.spec\nbuild/\ndist/\n__pycache__/\nqq/\nQQ*/\ncom.tencent.mobileqq/\nchatimg/\noutput_*\ntest_qq_files/"
  },
  {
    "path": "GUI.py",
    "content": "import tkinter as tk\nfrom tkinter import filedialog\nimport tkinter.ttk as ttk\nfrom icon import qq_icon_png, github_mark\n# 防止加载不出图标\nimport base64\nimport QQ_History\nimport os\nimport webbrowser\nfrom time import sleep\n\n\nclass GUI_CONST:\n    TITLE = \"QQ聊天记录导出\"\n    URL = \"https://github.com/Young-Lord/QQ_History_Backup\"\n\ndef Enter():\n    base_path, qq_self, qq = e1.get(), e2.get(), e3.get()\n    for i in (e4, e5, e6, e7, e8):\n        if i.get() not in i['values']:\n            info.set(f\"某个输入框的值{i.get()}不在允许的取值{i['values']}内！\")\n            return ()\n    group = 1 if e4.get() == '私聊' else 2\n    emoji = 1 if e5.get() == '新' else 2\n    dump_all = True if e8.get() == '是' else False\n    with_img = True if e6.get() == '是' else False\n    combine_img = True if e7.get() == '是' else False\n    if (base_path == \"\" or qq_self == \"\") or (qq == \"\" and (not dump_all)):\n        info.set(\"信息不完整！\")\n        return ()\n    # info.set(\"开始导出……\")\n    # if dump_all:\n    #     info.set(\"批量导出较慢，请耐心等待……\")\n    # 只要界面未更新 用户就看不到\n    try:\n        config = (base_path, qq_self, qq, group,\n                        emoji, with_img, combine_img, dump_all)\n        QQ_History.main(base_path, qq_self, qq, group,\n                        emoji, with_img, combine_img, dump_all=dump_all)\n        info.set(\"导出完成。\")\n    except Exception as e:\n        info.set(str(config)+\"\\r\\n\"+str(repr(e)))\n    return ()\n\n\ndef SelectDBPath():\n    dir = filedialog.askdirectory()\n    base_path_get.set(dir)\n\n\ndef SelectImgPath():\n    dir = filedialog.askdirectory()\n    img_path_get.set(dir)\n\n\ndef url():\n    webbrowser.open_new(GUI_CONST.URL)\n\n\nroot = tk.Tk()\nbase_path_get, img_path_get, key_get, info = tk.StringVar(\n), tk.StringVar(), tk.StringVar(), tk.StringVar()\n\ntmp = open(\"tmp.png\", \"wb+\")\ntmp.write(base64.b64decode(qq_icon_png))\ntmp.close()\nroot.call('wm', 'iconphoto', root._w,tk.PhotoImage(file='tmp.png'))\nos.remove(\"tmp.png\")\n\nroot.title(GUI_CONST.TITLE)\n\nttk.Label(root, text=\"*com.tencent.mobileqq：\").grid(row=0, column=0, sticky=\"e\")\ne1 = ttk.Entry(root, textvariable=base_path_get)\ne1.grid(row=0, column=1, columnspan=2, sticky=\"ew\", pady=3)\nttk.Button(root, text=\"选择\", command=SelectDBPath,\n           width=5).grid(row=0, column=3)\n\nttk.Label(root, text=\"*自己QQ号：\").grid(row=1, column=0, sticky=\"e\")\ne2 = ttk.Entry(root)\ne2.grid(row=1, column=1, columnspan=3, sticky=\"ew\", pady=3)\n\nttk.Label(root, text=\"导出所有记录：\").grid(\n    row=2, column=0, sticky=\"e\")  # 每个row属性都得更改，什么离谱布局\ne8 = ttk.Combobox(root)\ne8['values'] = ('是', '否')\ne8.current(1)\ne8.grid(row=2, column=1, columnspan=3, sticky=\"ew\", pady=3)\n\nttk.Label(root, text=\"QQ号/群号：\").grid(row=3, column=0, sticky=\"e\")\ne3 = ttk.Entry(root)\ne3.grid(row=3, column=1, columnspan=3, sticky=\"ew\", pady=3)\n\nttk.Label(root, text=\"私聊/群聊：\").grid(row=4, column=0, sticky=\"e\")\ne4 = ttk.Combobox(root)\ne4['values'] = ('私聊', '群聊')\ne4.current(0)\ne4.grid(row=4, column=1, columnspan=3, sticky=\"ew\", pady=3)\n\nttk.Label(root, text=\"表情版本：\").grid(row=5, column=0, sticky=\"e\")\ne5 = ttk.Combobox(root)\ne5['values'] = ('新', '旧')\ne5.current(0)\ne5.grid(row=5, column=1, columnspan=3, sticky=\"ew\", pady=3)\n\nttk.Label(root, text=\"导出图片：\").grid(row=6, column=0, sticky=\"e\")\ne6 = ttk.Combobox(root)\ne6['values'] = ('是', '否')\ne6.current(0)\ne6.grid(row=6, column=1, columnspan=3, sticky=\"ew\", pady=3)\n\nttk.Label(root, text=\"合并图片：\").grid(row=7, column=0, sticky=\"e\")\ne7 = ttk.Combobox(root)\ne7['values'] = ('是', '否')\ne7.current(1)\ne7.grid(row=7, column=1, columnspan=3, sticky=\"ew\", pady=3)\n\nroot.grid_columnconfigure(2, weight=1)\ninfo.set(\"开始\")\nttk.Button(root, textvariable=info, command=Enter).grid(row=8, column=1)\n\ntmp = open(\"tmp.png\", \"wb+\")\ntmp.write(base64.b64decode(github_mark))\ntmp.close()\ngithub = tk.PhotoImage(file='tmp.png')\nos.remove(\"tmp.png\")\n\nbutton_img = tk.Button(root, image=github, text='b', command=url, bd=0)\nbutton_img.grid(row=9, rowspan=7, column=0, sticky=\"ws\")\n\nroot.mainloop()\n"
  },
  {
    "path": "GUI.spec",
    "content": "# -*- mode: python ; coding: utf-8 -*-\n\n\nblock_cipher = None\n\n\na = Analysis(\n    ['GUI.py'],\n    pathex=[],\n    binaries=[],\n    datas=[],\n    hiddenimports=[],\n    hookspath=[],\n    hooksconfig={},\n    runtime_hooks=[],\n    excludes=[],\n    win_no_prefer_redirects=False,\n    win_private_assemblies=False,\n    cipher=block_cipher,\n    noarchive=False,\n)\npyz = PYZ(a.pure, a.zipped_data, cipher=block_cipher)\n\nexe = EXE(\n    pyz,\n    a.scripts,\n    a.binaries,\n    a.zipfiles,\n    a.datas,\n    [],\n    name='GUI',\n    debug=False,\n    bootloader_ignore_signals=False,\n    strip=False,\n    upx=True,\n    upx_exclude=[],\n    runtime_tmpdir=None,\n    console=False,\n    disable_windowed_traceback=False,\n    argv_emulation=False,\n    target_arch=None,\n    codesign_identity=None,\n    entitlements_file=None,\n    icon=['icon.ico'],\n)\n"
  },
  {
    "path": "LICENSE",
    "content": "MIT License\n\nCopyright (c) 2023 Young-Lord\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "QQ_History.py",
    "content": "import hashlib\nimport sqlite3\nimport time\nimport os\nimport traceback\nimport json\nimport base64\nfrom proto.RichMsg_pb2 import PicRec\nfrom proto.RichMsg_pb2 import Elem\nfrom proto.RichMsg_pb2 import Msg\nfrom proto.RichMsg_pb2 import PttRec\nfrom html import escape\nfrom tempfile import NamedTemporaryFile\n\n\n_crc64_init = False\n_crc64_table = [0] * 256\n\n\ndef crc64(s):\n    global _crc64_init\n    if not _crc64_init:\n        for i in range(256):\n            bf = i\n            for j in range(8):\n                if bf & 1 != 0:\n                    bf = bf >> 1 ^ -7661587058870466123\n                else:\n                    bf >>= 1\n            _crc64_table[i] = bf\n        _crc64_init = True\n    v = -1\n    for i in range(len(s)):\n        v = _crc64_table[(ord(s[i]) ^ v) & 255] ^ v >> 8\n    return v\n\n\ndef tempFilename() -> str:\n    f = NamedTemporaryFile(delete=False)\n    f.close()\n    return f.name\n\n\ndef isEmpty(s):\n    if s is None:\n        return True\n    if type(s) == int and s == 0:\n        return True\n    if type(s) == str and s == '':\n        return True\n    return False\n\n\nclass QQoutput():\n    def __init__(self, base_path: str, qq_self: str, emoji: int = 1, with_img: bool = True, combine_img: bool = False):\n        # 真正用到的文件只有[f\"{QQ}.db\", f\"slowtable_{QQ}.db\", \"kc\"]，这里我直接合并到一个层级下了\n        self.IS_TIM = False  # TIM会缺少一些字段\n        self.base_path = base_path\n        if type(qq_self) == int:\n            qq_self = str(qq_self)\n        assert(type(qq_self) == str)\n        self.qq_self: str = qq_self  # 自己的QQ号\n        self.uin_to_username = {}\n        self.troopuin_to_troopname = {}\n        self.troopuin_to_troopmembers = {}\n        self.init_paths()\n        self.init_key()  # 解密用的密钥\n        self.c1 = sqlite3.connect(self.db_main_path).cursor()\n        try:\n            self.c2 = sqlite3.connect(self.db_slow_path).cursor()\n        except:\n            pass\n        self.detect_TIM()\n        self.init_friend_list()\n        self.init_troop_list()\n#        self.qq: str = qq # 导出对象的QQ号\n#        self.mode = mode # 1为私聊，2为群聊\n        assert(emoji in (1, 2))\n        self.emoji = emoji  # 1为新表情，2为旧表情\n        assert(type(with_img) == bool)\n        self.with_img = with_img  # True为生成图片，False为不生成图片\n        assert(type(combine_img) == bool)\n        self.combine_img = combine_img  # True为将图片嵌入HTML文件中，False为在HTML中存储图片的相对路径\n\n        # self.num_to_name = {}\n        # 双重映射，即self.troop_members_name[群号][发言人QQ号]\n        self.troop_members_name = {}\n        self.emoji_map = self.map_new_emoji()\n\n    @staticmethod\n    def getDisplayName(friend: list) -> str:\n        if isEmpty(friend[1]):\n            ans = friend[2]\n        else:\n            ans = friend[1]\n        return ans\n\n    @staticmethod\n    def getSafePath(ans: str) -> str:\n        ban_words = \"\\\\  /  :  *  ?  \\\"  '  <  >  |  $  \\r  \\n\".replace(\n            ' ', '')\n        ban_strips = \"#/~\"\n        while True:\n            ans_bak = ans\n            for i in ban_words:\n                ans = ans.replace(i, \"\")\n            for i in ban_strips:\n                ans = ans.strip(i)\n            if ans == ans_bak:  # 多次匹配\n                break\n        return ans\n\n    def detect_TIM(self):\n        try:\n            self.fill_cursor(\"select troopRemark from TroopInfoV2\")\n        except sqlite3.OperationalError:\n            self.IS_TIM = True\n            print(\"检测到 TIM，部分功能可能缺失！\")\n        else:\n            self.IS_TIM = False\n        return self.IS_TIM\n\n    def mydecrypt(self, data):\n        # 综合一下\n        s = self.fix(data, 1)\n        if s != \"\":\n            return s\n        return self.decrypt(data)\n\n    def fix(self, data, mode):\n        # msgdata mode=0\n        # other mode=1\n        # https://github.com/roadwide/qqmessageoutput/blob/master/q.py\n        # decrypt处理Emoji时会出问题，而这个不会\n        if (mode == 0):\n            rowbyte = []\n            # 这么做是为了解决汉字的utf-8是三字节\n            for i in range(0, len(data)):\n                rowbyte.append(data[i] ^ ord(self.key[i % len(self.key)]))\n            rowbyte = bytes(rowbyte)\n            try:\n                msg = rowbyte.decode(encoding='utf-8')\n            except:\n                msg = \"\"\n            return msg\n        elif (mode == 1):\n            str = ''\n            try:\n                j = 0\n                for i in range(0, len(data)):\n                    # 获取unicode码\n                    unicode = ord(data[i])\n                    # 如果大于ffff 处理emoji\n                    if (unicode > 0xffff):\n                        # 分为2个10位二进制与两个密码进行异或\n                        code = unicode ^ (\n                            (ord(self.key[i+j % len(self.key)]) << 10) + ord(self.key[i+j+1 % len(self.key)]))\n                        str += chr(code)\n                        j = j + 1\n                    else:\n                        str += chr(ord(data[i]) ^\n                                   ord(self.key[i+j % len(self.key)]))\n            except:\n                str = \"\"\n            return str\n\n    def decrypt(self, data, msg_type=-1000):\n        # fix处理**一些东西**会出问题，这个不会\n        try:\n            msg = b''\n            if type(data) == bytes:\n                msg = b''\n                for i in range(0, len(data)):\n                    msg += bytes([data[i] ^ ord(self.key[i % len(self.key)])])\n            elif type(data) == str:\n                msg = ''\n                for i in range(0, len(data)):\n                    msg += chr(ord(data[i]) ^ ord(self.key[i % len(self.key)]))\n                return msg\n\n            if msg_type == -1000 or msg_type == -1049 or msg_type == -1051:\n                try:\n                    return escape(msg.decode('utf-8'))\n                except:\n                    # print(msg)\n                    pass\n                    return '[decode error]'\n\n            if not self.with_img:\n                return None\n            elif msg_type == -2000:\n                return self.decode_pic(msg)\n            elif msg_type == -1035:\n                return self.decode_mix_msg(msg)\n            elif msg_type == -5008:\n                return self.decode_share_url(msg)\n            elif msg_type == -5012 or msg_type == -5018:\n                return '[戳一戳]'\n            elif msg_type == -2002:  # 语音消息\n                return self.decode_silk(msg)\n        except:\n            return f'[解码失败({msg_type})]'\n        # for debug\n        return '[unknown msg_type {}]'.format(msg_type)\n        # return ''\n\n    def add_emoji(self, msg):\n        pos = msg.find('\\x14')\n        while pos != -1:\n            lastpos = pos\n            num = ord(msg[pos + 1])\n            if str(num) in self.emoji_map:\n                index = self.emoji_map[str(num)]\n\n                if self.emoji == 1:\n                    filename = \"new/s\" + index + \".png\"\n                else:\n                    filename = \"old/\" + index + \".gif\"\n\n                emoticon_path = os.path.join('emoticon', filename)\n                if self.combine_img:\n                    try:\n                        emoticon_path = self.get_base64_from_pic(emoticon_path)\n                    except:\n                        pass\n                msg = msg.replace(\n                    msg[pos:pos + 2], '<img src=\"{}\" alt=\"{}\" />'.format(emoticon_path, index))\n            else:\n                msg = msg.replace(msg[pos:pos + 2],\n                                  '[emoji:{}]'.format(str(num)))\n            pos = msg.find('\\x14')\n            if pos == lastpos:\n                break\n        return msg\n\n    def message(self, qq: str, mode: int):\n        # mode=1 friend\n        # mode=2 troop\n        num = qq.encode(\"utf-8\")\n        md5num = hashlib.md5(num).hexdigest().upper()\n        if mode == 1:\n            cmd = \"select msgData,senderuin,time,msgtype from mr_friend_{}_New order by time\".format(\n                md5num)\n#            self.get_friends()\n        else:\n            cmd = \"select msgData,senderuin,time,msgtype from mr_troop_{}_New order by time\".format(\n                md5num)\n            # print('Groups {} -> {}'.format(num, md5num))\n            self.get_troop_members(qq)\n\n        cursor = self.fill_cursor(cmd)\n        allmsg = []\n        for row in cursor:\n            msgdata: bytes = row[0]\n            if not msgdata:\n                continue\n            uin = row[1]\n            ltime = time.localtime(row[2])\n            sendtime = time.strftime(\"%Y-%m-%d %H:%M:%S\", ltime)\n            msg_type = row[3]\n            msg_final = self.decrypt(msgdata, msg_type)\n            if msg_final is None:\n                continue\n\n            allmsg.append(\n                [sendtime, msg_type, self.decrypt(uin), msg_final])\n        return allmsg\n\n    def get_friends(self):\n        raise NotImplementedError\n\n    def get_troop_members(self, qq: str):\n        self.troopuin_to_troopmembers[qq] = {}\n        cmd = \"SELECT troopuin, memberuin, autoremark, troopnick, friendnick, recommendRemark, mUniqueTitle FROM TroopMemberInfo\"\n        cursor = self.fill_cursor(cmd)\n        for row in cursor:\n            if self.fix(row[0], 1) != qq:\n                continue\n            num = self.fix(row[1], 1)\n            names = [self.fix(i, 1) for i in row[2:6]]\n            # 2是你给好友的备注，3是好友的群昵称，4是好友名字，5是好友的群昵称，mUniqueTitle是群头衔\n            # xxx 我不知道这个顺序怎么搞的 一部分是猜\n            try:\n                final_name = [i for i in names[1:] if not isEmpty(i)][0]\n            except IndexError:\n                try:\n                    final_name = names[0]\n                except IndexError:\n                    print(f\"{qq}群中{num}好友无法匹配名字。names={names}\")\n                    print(\"开Issue！\")\n            if num in self.uin_to_username:  # 是你对话过的人\n                if not isEmpty(names[0]):\n                    final_name = names[0]\n                else:\n                    #                    print(names)\n                    #                    print(\"↑你这个好友怎么没有备注的？开Issue！\")\n                    pass\n            self.troopuin_to_troopmembers[qq][num] = final_name\n#            print([self.fix(i, 1) for i in row[2:6]])\n            if not isEmpty(row[6]):  # 添加头衔\n                self.troopuin_to_troopmembers[qq][num] = f\"【{row[6]}】\" + \\\n                    self.troopuin_to_troopmembers[qq][num]\n\n    def _fill_cursors(self, cmd):\n        cursors = []\n        # slowtable might not contain related message, so just skip it\n        try:\n            cursors.append(self.c2.execute(cmd))\n        except:\n            pass\n        try:\n            cursors.append(self.c1.execute(cmd))\n        except sqlite3.OperationalError:\n            pass\n        return cursors\n\n    def fill_cursor(self, cmd):\n        cursors = self._fill_cursors(cmd)\n        ans = []\n        for cs in cursors:\n            for row in cs:\n                ans.append(row)\n        return ans\n\n    def output(self, qq: str, mode: int, output_path: str = \".\"):\n        self.outut_path = output_path\n        if type(qq) == int:\n            qq = str(qq)\n        assert(type(qq) == str)\n        assert(mode in (1, 2))\n        name1 = \"我\"\n        fileprefix = \"\"\n        if mode == 1:\n            fileprefix = \"私聊\"\n            filebasename = self.getSafePath(self.uin_to_username.get(qq, str(qq)))\n            if qq not in self.uin_to_username:\n                print(f\"警告：{qq}无法在好友列表内找到，请检查聊天类型是否填写正确\")\n        else:\n            fileprefix = \"群聊\"\n            filebasename = self.getSafePath(self.troopuin_to_troopname.get(qq, str(qq)))\n            if qq not in self.troopuin_to_troopname:\n                print(f\"警告：{qq}无法在群聊列表内找到，请检查聊天类型是否填写正确\")\n        file = f\"{fileprefix}-{filebasename}-{qq}.html\"\n        file = os.path.join(output_path, file)\n        allmsg = self.message(qq, mode)\n        if len(allmsg) == 0:\n            print(f\"{qq}_{mode}没有聊天记录，跳过。\")\n            return\n        f2 = open(file, \"w\", encoding=\"utf-8\")\n        f2.write(\n            \"<head><meta http-equiv=\\\"Content-Type\\\" content=\\\"text/html; charset=utf-8\\\" /></head>\"\n        )\n        f2.write(\"<div style='white-space: pre-line'>\")\n        if mode == 1:\n            table = self.uin_to_username\n        else:\n            table = self.troopuin_to_troopmembers.get(qq, {})\n        for ts, _, uid, msg in allmsg:\n            if not msg:\n                continue\n            if uid == str(self.qq_self):\n                f2.write(\"<p align='right'>\")\n                f2.write(\"<font color=\\\"green\\\">\")\n                f2.write(ts)\n                f2.write(\"</font>-----<font color=\\\"blue\\\"><b>\")\n                f2.write(name1)\n                f2.write(\"</font></b></br>\")\n            else:\n                f2.write(\"<p align='left'>\")\n                f2.write(\"<font color=\\\"blue\\\"><b>\")\n                f2.write(escape(\"{}({})\".format(\n                    table.get(uid, \"？？？未知？？？\"), uid)))\n                f2.write(\"</b></font>-----<font color=\\\"green\\\">\")\n                f2.write(ts)\n                f2.write(\"</font></br>\")\n            f2.write(self.add_emoji(msg))\n            f2.write(\"</br></br>\")\n            f2.write(\"</p>\")\n        f2.write(\"</div>\")\n        f2.close()\n        print(\"导出已完成。文件目录：\" + file)\n\n    def init_key(self):\n        kc_file = open(self.kc_path, \"r\")\n        self.key = kc_file.read().strip('\\r \\n')\n        kc_file.close()\n\n    def init_paths(self):\n        join = os.path.join\n        mainb = self.qq_self + \".db\"\n        slowb = \"slowtable_\" + self.qq_self + \".db\"\n        db_main_paths = [mainb, join(\"databases\", mainb), join(\"db\", mainb)]\n        db_slow_paths = [slowb, join(\"databases\", slowb), join(\"db\", slowb)]\n        kc_paths = [\"kc\", join(\"files\", \"kc\"), join(\"f\", \"kc\")]\n        self.kc_path = self.db_main_path = self.db_slow_path = None\n        for i in db_main_paths:\n            current_file = join(self.base_path, i)\n            if os.path.isfile(current_file):\n                self.db_main_path = current_file\n        for i in db_slow_paths:\n            current_file = join(self.base_path, i)\n            if os.path.isfile(current_file):\n                self.db_slow_path = current_file\n        for i in kc_paths:\n            current_file = join(self.base_path, i)\n            if os.path.isfile(current_file):\n                self.kc_path = current_file\n        if self.kc_path is None or self.db_main_path is None:  # 很少记录的号没有slowtable，故不判断\n            raise FileNotFoundError(\n                f\"无法找到目标文件！\\n路径：{self.base_path}\\n当前匹配列表：{[self.kc_path, self.db_main_path, self.db_slow_path]}\")\n\n    def init_friend_list(self):\n        self.FriendsData = []\n        # uin-QQ号，remark-备注，name-昵称\n        execute = \"select uin,remark,name from Friends\"\n        cursor = self.fill_cursor(execute)\n        for i in cursor:\n            uin, remark, name = i[0], i[1], i[2]\n            decode_uin = self.mydecrypt(uin)\n            decode_remark = self.mydecrypt(remark)\n            decode_name = self.mydecrypt(name)\n            friend = [decode_uin, decode_remark, decode_name]\n            self.FriendsData.append(friend)\n            self.uin_to_username[decode_uin] = self.getDisplayName(friend)\n\n    def init_troop_list(self):\n        self.TroopsData = []\n        # troopuin-群号，troopRemark-群备注，troopname-群名\n        execute = \"select troopuin,troopRemark,troopname from TroopInfoV2\"\n        if self.IS_TIM:\n            execute = execute.replace(\n                \"troopRemark\", \"troopname\")  # TIM无法给群聊设备注\n        cursor = self.fill_cursor(execute)\n        for i in cursor:\n            uin, remark, name = i[0], i[1], i[2]\n#            print([self.fix(ii,1) for ii in i])\n            decode_uin = self.mydecrypt(uin)\n            decode_remark = self.mydecrypt(remark)\n            decode_name = self.mydecrypt(name)\n            troop = [decode_uin, decode_remark, decode_name]\n            self.TroopsData.append(troop)\n#            print(troop)\n            self.troopuin_to_troopname[decode_uin] = self.getDisplayName(troop)\n\n    def map_new_emoji(self):\n        with open(os.path.join(os.path.dirname(os.path.abspath(__file__)), './emoticon/face_config.json'), encoding='utf-8') as f:\n            # 这个地方可能会在打包的时候出问题\n            emojis = json.load(f)\n        new_emoji_map = {}\n\n        for e in emojis['sysface']:\n            if self.emoji == 1:\n                new_emoji_map[e[\"AQLid\"]] = e[\"QSid\"]\n            else:\n                if len(e[\"EMCode\"]) == 3:\n                    new_emoji_map[e[\"AQLid\"]] = str(int(e[\"EMCode\"]) - 100)\n        return new_emoji_map\n\n    def get_base64_from_pic(self, path):\n        with open(path, \"rb\") as image_file:\n            return (b'data:image/png;base64,' + base64.b64encode(image_file.read())).decode(\"utf-8\")\n\n    def decode_pic(self, data):\n        try:\n            doc = PicRec()\n            doc.ParseFromString(data)\n            url = 'chatimg:' + doc.md5\n            filename = hex(crc64(url))\n            filename = 'Cache_' + filename.replace('0x', '')\n            chatimg_basepath = os.path.join(self.base_path, \"chatimg\")\n            if not os.path.isdir(chatimg_basepath):\n                chatimg_basepath = \"chatimg\"\n            rel_path = os.path.join(chatimg_basepath, filename[-3:], filename)\n            if os.path.exists(rel_path):\n                print(rel_path)\n                w = 'auto' if doc.uint32_thumb_width == 0 else str(\n                    doc.uint32_thumb_width)\n                h = 'auto' if doc.uint32_thumb_height == 0 else str(\n                    doc.uint32_thumb_height)\n                if self.combine_img:\n                    rel_path = self.get_base64_from_pic(rel_path)\n                return '<img src=\"{}\" width=\"{}\" height=\"{}\" />'.format(rel_path, w, h)\n                # 最后这里必须用相对路径\n        except Exception as e:\n            pass\n        return '[图片]'\n\n    def decode_mix_msg(self, data):\n        try:\n            doc = Msg()\n            doc.ParseFromString(data)\n            message = ''\n            for elem in doc.elems:\n                if elem.picMsg:\n                    message += self.decode_pic(elem.picMsg)\n                else:\n                    message += escape(elem.textMsg.decode('utf-8'))\n            return message\n        except:\n            pass\n        return '[混合消息]'\n\n    def decode_silk(self, data):\n        # TODO\n        try:\n            import pilk\n            import av\n            av.logging.set_level(av.logging.ERROR)\n            doc = PttRec()\n            doc.ParseFromString(data)\n            print(doc.sttText)\n            voiceLength = doc.voiceLength  # 以秒为单位\n            filename = doc.localPath[doc.localPath.find(\"/ptt/\")+5:]\n            ptt_basepath = os.path.join(self.base_path, \"ptt\")\n            if not os.path.isdir(ptt_basepath):\n                ptt_basepath = \"ptt\"\n            if not os.path.isdir(ptt_basepath):\n                return '[语音消息]（目录不存在）'\n            rel_path = os.path.join(ptt_basepath, filename)\n            if not os.path.exists(rel_path):\n                p = [\".amr\", \".slk\"]\n                if rel_path.endswith(p[0]) and os.path.exists(rel_path[:-4]+p[1]): # 试着更改后缀匹配\n                    filename = filename[:-4]+p[1]\n                    rel_path = rel_path[:-4]+p[1]\n                elif rel_path.endswith(p[1]) and os.path.exists(rel_path[:-4]+p[0]):\n                    filename = filename[:-4]+p[0]\n                    rel_path = rel_path[:-4]+p[0]\n                else:\n                    # 摆了！\n                    return f\"[语音消息]（文件{rel_path}不存在）\"\n            voice_path = os.path.join(self.outut_path, \"voice\")\n            if not os.path.exists(voice_path):\n                os.makedirs(voice_path)\n            pcm = tempFilename()\n            pilk.decode(rel_path, pcm)\n            absolute_output = os.path.join(voice_path, filename[:-4]+\".mp3\")\n            relative_output = os.path.join(\"voice\", filename[:-4]+\".mp3\")\n            rate=24000# pilk源码写的，不管了\n            with av.open(pcm,format='s16le',options={'ar':str(rate),'ac':'1'}) as in_container:\n                in_stream = in_container.streams.audio[0]\n                with av.open(absolute_output, 'w') as out_container:\n                    out_stream = out_container.add_stream(\n                        'mp3',\n                        rate=rate,\n                        layout='mono'\n                    )\n                    try:\n                        for frame in in_container.decode(in_stream):\n                            frame.pts = None\n                            for packet in out_stream.encode(frame):\n                                out_container.mux(packet)\n                    except Exception as ee:\n                        raise ee\n                        pass\n            os.remove(pcm)\n            return '<audio src=\"{}\" controls title=\"{}\"/>'.format(relative_output, f\"时长 {voiceLength} 秒的语音消息\")\n            # 最后这里必须用相对路径\n        except Exception as e:\n            print(traceback.format_exc())\n        return '[语音消息]'\n\n    def decode_share_url(self, msg):\n        # TODO\n        return '[分享卡片]'\n\n\ndef main(base_path, qq_self, qq, mode, emoji, with_img, combine_img, dump_all):\n    try:\n        f = open('log.txt', 'w', encoding=\"utf-8\")\n    except:\n        class ff:\n            def write(): pass\n            def close(): pass\n        f = ff()\n    global print\n    print_bak = print\n\n    def print(*arg, **kwarg):\n        print_bak(*arg, **kwarg)\n        f.write(\"[PRINT]: \"+' '.join([str(i) for i in arg])+\"\\n\")\n    try:\n        q = QQoutput(base_path, str(qq_self), emoji, with_img, combine_img)\n        if dump_all:\n            print(\"正在批量导出……\")\n            dest = \"output_\" + \\\n                time.strftime(\"%Y%m%d-%H%M%S\", time.localtime(time.time()))\n            try:\n                os.mkdir(dest)\n            except:\n                raise ValueError(\"目录创建失败，退出。\")\n            for i in q.FriendsData:\n                try:\n                    q.output(i[0], 1, dest)\n                except Exception as e:\n                    f.write(repr(e))\n                    f.write(traceback.format_exc())\n            for i in q.TroopsData:\n                try:\n                    q.output(i[0], 2, dest)\n                except Exception as e:\n                    f.write(repr(e))\n                    f.write(traceback.format_exc())\n            print(\"\")\n            print(\"=\"*30)\n            print(\"所有记录导出完成。\")\n            print(\"=\"*30)\n        else:\n            q.output(qq, mode)\n    except Exception as e:\n        f.write(repr(e))\n        f.write(traceback.format_exc())\n\n        print(traceback.format_exc())\n        if repr(e).split(\":\")[0] == \"OperationalError('no such table\":\n            raise ValueError(\"信息填入错误\")\n        else:\n            raise BaseException(\"Error! See log.txt\")\n\n\ndef run_directly():\n    base_path = r\"修改这里！\"  # com.tencent.mobileqq 路径\n    qq_self = \"修改这里！\"  # 自己的QQ号\n    batch = True  # 是否导出所有记录\n    q = QQoutput(base_path, str(qq_self))\n    f = open('log.txt', 'w', encoding=\"utf-8\")\n    if batch:\n        print(\"正在批量导出……\")\n        dest = \"output_\" + \\\n            time.strftime(\"%Y%m%d-%H%M%S\", time.localtime(time.time()))\n        try:\n            os.mkdir(dest)\n        except:\n            raise ValueError(\"目录创建失败，退出。\")\n        for i in q.FriendsData:\n            try:\n                q.output(i[0], 1, dest)\n            except Exception as e:\n                f.write(repr(e))\n                f.write(traceback.format_exc())\n        for i in q.TroopsData:\n            try:\n                q.output(i[0], 2, dest)\n            except Exception as e:\n                f.write(repr(e))\n                f.write(traceback.format_exc())\n        print(\"\")\n        print(\"=\"*30)\n        print(\"所有记录导出完成。\")\n        print(\"=\"*30)\n\n    else:\n        qq = \"修改这里！\"\n        mode = 1  # 修改这里！私聊为1，群聊为2\n        q.output(qq, mode)\n    f.close()\n\n\nif __name__ == '__main__':\n    run_directly()\n"
  },
  {
    "path": "README.md",
    "content": "# QQ聊天记录导出\n\n本项目用于将 **非 QQNT** 的 Android 端 QQ/TIM 的聊天记录数据库转换为 HTML 文件，并转换图片、语音等部分特殊消息。 \n\n## 关于其他平台（Windows, MacOS, iOS…）\n\n请看 [QQBackup/qq-win-db-key](https://github.com/QQBackup/qq-win-db-key)。\n\n## 维护情况\n\n省流：没时间维护，欢迎新 maintainer 与 PR（或者可以自行开个fork）。请提交到`dev`分支。\n\n同时，请参看[qq-win-db-key 中列出的改进版](https://github.com/QQBackup/qq-win-db-key/blob/master/%E6%95%99%E7%A8%8B%20-%20%E5%AE%89%E5%8D%93%E7%89%88QQ%E5%8F%8ATIM.md#%E8%A7%A3%E5%AF%86%E8%BD%AC%E6%8D%A2)。\n\n## 运行方式\n\n1. 一切操作之前，你需要先安装 Python 3.x（建议使用可下载的最高版本，已知支持`3.12`），可参考[此文章（Windows）](https://zhuanlan.zhihu.com/p/458428159)。\n2. 然后，在当前目录打开终端，Windows 用户若不懂可以看[这篇博文](https://blog.csdn.net/Lzy410992/article/details/105937780)\n3. 输入以下命令永久加速相关依赖的下载（换源）：`pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple`\n3. 安装依赖：`pip install -r requirements.txt`\n4. 若是运行 GUI，就`python GUI.py`\n5. 若是直接运行命令行版，就修改好`QQ_History.py`最下面的内容，并运行：`python QQ_History.py`\n\n## 声明\n\n本项目仅供学习交流使用，严禁用于任何违反中国大陆法律法规、您所在地区法律法规、[QQ软件许可及服务协议](https://rule.tencent.com/rule/preview/46a15f24-e42c-4cb6-a308-2347139b1201)的行为，本人不承担任何相关行为导致的直接或间接责任。\n\n本项目理论仅能将可以通过正常方法查看的聊天记录**导出**，而不能进行包括但不限于已删除聊天记录恢复在内的操作。\n\n本项目不对生成内容的完整性、准确性作任何担保，因此生成的一切内容**没有法律效力**，您不应当将其用于学习与交流外的任何用途。\n\n## 简介\n\n作为国内最常用的聊天工具之一，QQ 为了用户留存度，默认聊天记录备份无法脱离 QQ 被独立打开。\n\n目前版本往往需要通过命令行运行，本方法在之前版本的基础上简化了操作，制作了GUI方便使用；并且不再需要提供密钥，自动填入备注/昵称，添加了QQ表情、图片和语音的一并导出。\n\n如果你不使用打包后的版本，请首先运行以下命令以安装依赖：`pip install -r requirements.txt`\n\n## 获取聊天记录文件夹方法\n\n> 注：以下提到的“电脑”泛指一切可以运行此程序的环境，如安卓手机上的 Termux 也属于此列\n\n> 注：以下内容假设您使用的是 QQ 而非 TIM，如果您在使用 TIM，请将`com.tencent.mobileqq`改为`com.tencent.tim`，将`MobileQQ`改为`Tim`\n\n如果手机已获得 root 权限，聊天记录可在以下路径找到。\n\n```\n/data/data/com.tencent.mobileqq/\n```\n\n我们需要的文件只有`databases/<QQ号>.db`，`databases/slowtable_<QQ号>.db`，`files/kc`，因此您可以将整个文件夹压缩后传输到电脑上，亦或将这三个文件单独放在同一个目录中传输。本程序会自动识别这两种不同的目录结构。\n\n如果没有 root 权限，可以通过手机自带的备份工具备份整个 QQ，拷贝备份文件到电脑，解压找到 `com.tencent.mobileqq`。\n\n具体方法可以参见\n\n> 怎样导出手机中的QQ聊天记录？ - 益新软件的回答 - 知乎\n> <https://www.zhihu.com/question/28574047/answer/964813560>\n\n关于苹果设备导出，参见[此讨论](https://github.com/Yiyiyimu/QQ-History-Backup/issues/42)；对于安卓系统导出内容的提取，请自行在互联网查询。\n\n如果同时需要在聊天记录中显示图片，拷贝手机中 `/sdcard/Android/data/com.tencent.mobileqq/Tencent/MobileQQ/chatpic/chatimg` 至 `GUI.exe` 同一文件夹中或者拷贝过来的`com.tencent.mobileqq`目录下。\n\n（QQ）如果同时需要在聊天记录中显示语音，拷贝手机中 `/sdcard/Android/data/com.tencent.mobileqq/Tencent/MobileQQ/<QQ号>/ptt` 至 `GUI.exe` 同一文件夹中或者拷贝过来的`com.tencent.mobileqq`目录下。\n\n（TIM）如果同时需要在聊天记录中显示语音，拷贝手机中 `/sdcard/Android/data/com.tencent.tim/Tencent/Tim/ptt/<QQ号>` 至 `GUI.exe` 同一文件夹中或者拷贝过来的`com.tencent.mobileqq`目录下，并重命名为`ptt`。\n\n## GUI使用方法\n\n![GUI_image](./img/GUI.png)\n\n- `com.tencent.mobileqq`：选择导出的相应文件夹，对于备份方式，一般为`apps/com.tencent.mobileqq`\n- 表情版本：默认为新版QQ表情。如果你的聊天记录来自很早以前，可以切换为旧版的表情\n- 导出所有记录：若此项选择“是”，则`QQ号/群号：`与`私聊/群聊：`选项会被忽略。\n- 导出图片：若此项与前一项均选择“是”，必须把`chatimg`目录复制到生成的`output_xxx`目录下，图片才能正常显示\n- 合并图片：默认为否\n  - 不启用合并图片好处在于：1. 使导出的 HTML 文件具有可读性；2. 减小 HTML 文件体积方便打开\n  - 启用合并图片好处：拷贝时不需要和 `emoticon` 以及 `chatimg` 文件夹一起拷贝，更加方便\n\n## 输出截图\n\n![screenshot](./img/layout.png)\n![screenshot](./img/images.png)\n\n如果没有启用合并图片，拷贝生成的聊天记录时需要一起拷贝 `emoticon` 以及 `chatimg` 文件夹.\n\n有 bug 的话提 issue，记得附上 log.txt 里的内容以及终端的报错内容。\n\n## TODO\n\n- [x] 支持群聊导出\n- [x] 支持自动查找密钥\n- [x] 使用好友/群聊昵称作为默认用户名\n- [x] 自动合并 db 和 slow-table\n- [x] 支持新 QQ emoji\n- [x] 支持单一文件导出\n- [x] 支持音频导出\n- [ ] 支持视频导出\n- [ ] 支持合并转发消息导出\n- [ ] 支持戳一戳导出\n- [ ] 支持缩略图\n- [ ] 支持卡片分享\n- [ ] 重构代码\n- [ ] 加入 i18n 与自定义翻译支持\n- [ ] 支持使用[silk-v3-decoder](https://github.com/ZhangJun2017/QQChatHistoryExporter)转换音频文件\n- [ ] 使用 Jinja2 生成 HTML 文件\n- [ ] 允许插入自定义 CSS 与 自定义 JS\n- [ ] 分析并试图优化解密相关函数\n- [ ] 更新预览图\n- [ ] 基于 GitHub Actions 以 PyInstaller 生成在 Windows 下的可执行文件\n\n\n\n## FAQ\n\n- **聊天记录中显示 `[图片]` 是因为什么？**\n\n   解码出的图片路径在 `chatimg` 找不到相应文件。可能原因为在手机中没有加载过该文件，导致图片没有存在手机里。\n\n## CHANGELOG\n\n### v2\n\n- 直接从 `files/kc` 提取明文的密钥，不用再手动输入或解密\n- 支持群聊记录导出\n- 支持 私聊/群聊 的 备注/昵称 自动填入\n- 支持 slowtable 的直接整合\n- 支持新版 QQ 表情\n\n### v2.2\n\n- 支持导出图片至聊天记录\n- 支持合并图片至单一文件方便传输\n\n### v2.3\n\n- 支持读取不同的目录结构\n- 支持单独导出一个私聊对话或群聊对话\n- 部分修复解密函数存在的 bug\n- 支持批量导出\n- 修复导出的 HTML 中的字符转义\n\n### v2.4\n\n- 支持读取音频\n\n## 致谢\n\n1. [roadwide/qqmessageoutput](https://github.com/roadwide/qqmessageoutput)\n\n2. [WincerChan/export.py](https://gist.github.com/WincerChan/362331456a6e0417c5aa1cf3ff7be2b7)\n\n3. [Yiyiyimu/QQ-History-Backup](https://github.com/Yiyiyimu/QQ-History-Backup) （本仓库的来源，致敬！同时，源代码基于 MIT 协议使用。）\n\n4. [ZhangJun2017/QQChatHistoryExporter](https://github.com/ZhangJun2017/QQChatHistoryExporter) （参考了 Protobuf 相关内容）\n\n## 适配新类型笔记\n\n1. 下载 [protoc](https://github.com/protocolbuffers/protobuf/releases) 这一可执行文件，设置可执行权限（仅 Linux 类系统）并移动到适当位置（位于 PATH 环境变量中的目录）\n\n2. 编辑`proto/RichMsg.proto`，增加新类型（可以参照[此项目](https://github.com/ZhangJun2017/QQChatHistoryExporter/blob/f97eb64581229a30514d55aa0a8423b138b09437/src/RawMessage.java#L41)）\n\n3. 切换到目录`proto`中，运行`compile`，在 Windows 下需先将其改名为`compile.bat`\n\n4. 编辑`QQ_History.py`中的`decrypt`，加入`msgtype`对应判断与处理代码\n\n5. **记得写文档**\n"
  },
  {
    "path": "emoticon/face_config.json",
    "content": "{\n  \"sysface\": [\n    {\n      \"QSid\": \"14\",\n      \"QDes\": \"/微笑\",\n      \"IQLid\": \"23\",\n      \"AQLid\": \"23\",\n      \"EMCode\": \"100\"\n    },\n    {\n      \"QSid\": \"1\",\n      \"QDes\": \"/撇嘴\",\n      \"IQLid\": \"40\",\n      \"AQLid\": \"40\",\n      \"EMCode\": \"101\"\n    },\n    {\n      \"QSid\": \"2\",\n      \"QDes\": \"/色\",\n      \"IQLid\": \"19\",\n      \"AQLid\": \"19\",\n      \"EMCode\": \"102\"\n    },\n    {\n      \"QSid\": \"3\",\n      \"QDes\": \"/发呆\",\n      \"IQLid\": \"43\",\n      \"AQLid\": \"43\",\n      \"EMCode\": \"103\"\n    },\n    {\n      \"QSid\": \"4\",\n      \"QDes\": \"/得意\",\n      \"IQLid\": \"21\",\n      \"AQLid\": \"21\",\n      \"EMCode\": \"104\"\n    },\n    {\n      \"QSid\": \"5\",\n      \"QDes\": \"/流泪\",\n      \"IQLid\": \"9\",\n      \"AQLid\": \"9\",\n      \"EMCode\": \"105\"\n    },\n    {\n      \"QSid\": \"6\",\n      \"QDes\": \"/害羞\",\n      \"IQLid\": \"20\",\n      \"AQLid\": \"20\",\n      \"EMCode\": \"106\"\n    },\n    {\n      \"QSid\": \"7\",\n      \"QDes\": \"/闭嘴\",\n      \"IQLid\": \"104\",\n      \"AQLid\": \"106\",\n      \"EMCode\": \"107\"\n    },\n    {\n      \"QSid\": \"8\",\n      \"QDes\": \"/睡\",\n      \"IQLid\": \"35\",\n      \"AQLid\": \"35\",\n      \"EMCode\": \"108\"\n    },\n    {\n      \"QSid\": \"9\",\n      \"QDes\": \"/大哭\",\n      \"IQLid\": \"10\",\n      \"AQLid\": \"10\",\n      \"EMCode\": \"109\"\n    },\n    {\n      \"QSid\": \"10\",\n      \"QDes\": \"/尴尬\",\n      \"IQLid\": \"25\",\n      \"AQLid\": \"25\",\n      \"EMCode\": \"110\"\n    },\n    {\n      \"QSid\": \"11\",\n      \"QDes\": \"/发怒\",\n      \"IQLid\": \"24\",\n      \"AQLid\": \"24\",\n      \"EMCode\": \"111\"\n    },\n    {\n      \"QSid\": \"12\",\n      \"QDes\": \"/调皮\",\n      \"IQLid\": \"1\",\n      \"AQLid\": \"1\",\n      \"EMCode\": \"112\"\n    },\n    {\n      \"QSid\": \"13\",\n      \"QDes\": \"/呲牙\",\n      \"IQLid\": \"0\",\n      \"AQLid\": \"0\",\n      \"EMCode\": \"113\"\n    },\n    {\n      \"QSid\": \"0\",\n      \"QDes\": \"/惊讶\",\n      \"IQLid\": \"33\",\n      \"AQLid\": \"33\",\n      \"EMCode\": \"114\"\n    },\n    {\n      \"QSid\": \"15\",\n      \"QDes\": \"/难过\",\n      \"isStatic\": \"1\",\n      \"IQLid\": \"32\",\n      \"AQLid\": \"32\",\n      \"EMCode\": \"115\"\n    },\n    {\n      \"QSid\": \"16\",\n      \"QDes\": \"/酷\",\n      \"IQLid\": \"12\",\n      \"AQLid\": \"12\",\n      \"EMCode\": \"116\"\n    },\n    {\n      \"QSid\": \"96\",\n      \"QDes\": \"/冷汗\",\n      \"IQLid\": \"27\",\n      \"AQLid\": \"27\",\n      \"EMCode\": \"117\"\n    },\n    {\n      \"QSid\": \"18\",\n      \"QDes\": \"/抓狂\",\n      \"IQLid\": \"13\",\n      \"AQLid\": \"13\",\n      \"EMCode\": \"118\"\n    },\n    {\n      \"QSid\": \"19\",\n      \"QDes\": \"/吐\",\n      \"IQLid\": \"22\",\n      \"AQLid\": \"22\",\n      \"EMCode\": \"119\"\n    },\n    {\n      \"QSid\": \"20\",\n      \"QDes\": \"/偷笑\",\n      \"IQLid\": \"3\",\n      \"AQLid\": \"3\",\n      \"EMCode\": \"120\"\n    },\n    {\n      \"QSid\": \"21\",\n      \"QDes\": \"/可爱\",\n      \"IQLid\": \"18\",\n      \"AQLid\": \"18\",\n      \"EMCode\": \"121\"\n    },\n    {\n      \"QSid\": \"22\",\n      \"QDes\": \"/白眼\",\n      \"IQLid\": \"30\",\n      \"AQLid\": \"30\",\n      \"EMCode\": \"122\"\n    },\n    {\n      \"QSid\": \"23\",\n      \"QDes\": \"/傲慢\",\n      \"IQLid\": \"31\",\n      \"AQLid\": \"31\",\n      \"EMCode\": \"123\"\n    },\n    {\n      \"QSid\": \"24\",\n      \"QDes\": \"/饥饿\",\n      \"IQLid\": \"79\",\n      \"AQLid\": \"81\",\n      \"EMCode\": \"124\"\n    },\n    {\n      \"QSid\": \"25\",\n      \"QDes\": \"/困\",\n      \"IQLid\": \"80\",\n      \"AQLid\": \"82\",\n      \"EMCode\": \"125\"\n    },\n    {\n      \"QSid\": \"26\",\n      \"QDes\": \"/惊恐\",\n      \"IQLid\": \"26\",\n      \"AQLid\": \"26\",\n      \"EMCode\": \"126\"\n    },\n    {\n      \"QSid\": \"27\",\n      \"QDes\": \"/流汗\",\n      \"IQLid\": \"2\",\n      \"AQLid\": \"2\",\n      \"EMCode\": \"127\"\n    },\n    {\n      \"QSid\": \"28\",\n      \"QDes\": \"/憨笑\",\n      \"IQLid\": \"37\",\n      \"AQLid\": \"37\",\n      \"EMCode\": \"128\"\n    },\n    {\n      \"QSid\": \"29\",\n      \"QDes\": \"/悠闲\",\n      \"IQLid\": \"50\",\n      \"AQLid\": \"50\",\n      \"EMCode\": \"129\"\n    },\n    {\n      \"QSid\": \"30\",\n      \"QDes\": \"/奋斗\",\n      \"IQLid\": \"42\",\n      \"AQLid\": \"42\",\n      \"EMCode\": \"130\"\n    },\n    {\n      \"QSid\": \"31\",\n      \"QDes\": \"/咒骂\",\n      \"IQLid\": \"81\",\n      \"AQLid\": \"83\",\n      \"EMCode\": \"131\"\n    },\n    {\n      \"QSid\": \"32\",\n      \"QDes\": \"/疑问\",\n      \"IQLid\": \"34\",\n      \"AQLid\": \"34\",\n      \"EMCode\": \"132\"\n    },\n    {\n      \"QSid\": \"33\",\n      \"QDes\": \"/嘘\",\n      \"IQLid\": \"11\",\n      \"AQLid\": \"11\",\n      \"EMCode\": \"133\"\n    },\n    {\n      \"QSid\": \"34\",\n      \"QDes\": \"/晕\",\n      \"IQLid\": \"49\",\n      \"AQLid\": \"49\",\n      \"EMCode\": \"134\"\n    },\n    {\n      \"QSid\": \"35\",\n      \"QDes\": \"/折磨\",\n      \"IQLid\": \"82\",\n      \"AQLid\": \"84\",\n      \"EMCode\": \"135\"\n    },\n    {\n      \"QSid\": \"36\",\n      \"QDes\": \"/衰\",\n      \"isStatic\": \"1\",\n      \"IQLid\": \"39\",\n      \"AQLid\": \"39\",\n      \"EMCode\": \"136\"\n    },\n    {\n      \"QSid\": \"37\",\n      \"QDes\": \"/骷髅\",\n      \"isStatic\": \"1\",\n      \"IQLid\": \"76\",\n      \"AQLid\": \"78\",\n      \"EMCode\": \"137\"\n    },\n    {\n      \"QSid\": \"38\",\n      \"QDes\": \"/敲打\",\n      \"IQLid\": \"5\",\n      \"AQLid\": \"5\",\n      \"EMCode\": \"138\"\n    },\n    {\n      \"QSid\": \"39\",\n      \"QDes\": \"/再见\",\n      \"IQLid\": \"4\",\n      \"AQLid\": \"4\",\n      \"EMCode\": \"139\"\n    },\n    {\n      \"QSid\": \"97\",\n      \"QDes\": \"/擦汗\",\n      \"IQLid\": \"6\",\n      \"AQLid\": \"6\",\n      \"EMCode\": \"140\"\n    },\n    {\n      \"QSid\": \"98\",\n      \"QDes\": \"/抠鼻\",\n      \"IQLid\": \"83\",\n      \"AQLid\": \"85\",\n      \"EMCode\": \"141\"\n    },\n    {\n      \"QSid\": \"99\",\n      \"QDes\": \"/鼓掌\",\n      \"IQLid\": \"84\",\n      \"AQLid\": \"86\",\n      \"EMCode\": \"142\"\n    },\n    {\n      \"QSid\": \"100\",\n      \"QDes\": \"/糗大了\",\n      \"IQLid\": \"85\",\n      \"AQLid\": \"87\",\n      \"EMCode\": \"143\"\n    },\n    {\n      \"QSid\": \"101\",\n      \"QDes\": \"/坏笑\",\n      \"IQLid\": \"46\",\n      \"AQLid\": \"46\",\n      \"EMCode\": \"144\"\n    },\n    {\n      \"QSid\": \"102\",\n      \"QDes\": \"/左哼哼\",\n      \"IQLid\": \"86\",\n      \"AQLid\": \"88\",\n      \"EMCode\": \"145\"\n    },\n    {\n      \"QSid\": \"103\",\n      \"QDes\": \"/右哼哼\",\n      \"IQLid\": \"44\",\n      \"AQLid\": \"44\",\n      \"EMCode\": \"146\"\n    },\n    {\n      \"QSid\": \"104\",\n      \"QDes\": \"/哈欠\",\n      \"IQLid\": \"87\",\n      \"AQLid\": \"89\",\n      \"EMCode\": \"147\"\n    },\n    {\n      \"QSid\": \"105\",\n      \"QDes\": \"/鄙视\",\n      \"IQLid\": \"48\",\n      \"AQLid\": \"48\",\n      \"EMCode\": \"148\"\n    },\n    {\n      \"QSid\": \"106\",\n      \"QDes\": \"/委屈\",\n      \"IQLid\": \"14\",\n      \"AQLid\": \"14\",\n      \"EMCode\": \"149\"\n    },\n    {\n      \"QSid\": \"107\",\n      \"QDes\": \"/快哭了\",\n      \"IQLid\": \"88\",\n      \"AQLid\": \"90\",\n      \"EMCode\": \"150\"\n    },\n    {\n      \"QSid\": \"108\",\n      \"QDes\": \"/阴险\",\n      \"IQLid\": \"41\",\n      \"AQLid\": \"41\",\n      \"EMCode\": \"151\"\n    },\n    {\n      \"QSid\": \"109\",\n      \"QDes\": \"/亲亲\",\n      \"IQLid\": \"36\",\n      \"AQLid\": \"36\",\n      \"EMCode\": \"152\"\n    },\n    {\n      \"QSid\": \"110\",\n      \"QDes\": \"/吓\",\n      \"IQLid\": \"89\",\n      \"AQLid\": \"91\",\n      \"EMCode\": \"153\"\n    },\n    {\n      \"QSid\": \"111\",\n      \"QDes\": \"/可怜\",\n      \"IQLid\": \"51\",\n      \"AQLid\": \"51\",\n      \"EMCode\": \"154\"\n    },\n    {\n      \"QSid\": \"172\",\n      \"QDes\": \"/眨眼睛\",\n      \"IQLid\": \"142\",\n      \"AQLid\": \"164\",\n      \"EMCode\": \"242\"\n    },\n    {\n      \"QSid\": \"182\",\n      \"QDes\": \"/笑哭\",\n      \"IQLid\": \"152\",\n      \"AQLid\": \"174\",\n      \"EMCode\": \"252\"\n    },\n    {\n      \"QSid\": \"179\",\n      \"QDes\": \"/doge\",\n      \"IQLid\": \"149\",\n      \"AQLid\": \"171\",\n      \"EMCode\": \"249\"\n    },\n    {\n      \"QSid\": \"173\",\n      \"QDes\": \"/泪奔\",\n      \"IQLid\": \"143\",\n      \"AQLid\": \"165\",\n      \"EMCode\": \"243\"\n    },\n    {\n      \"QSid\": \"174\",\n      \"QDes\": \"/无奈\",\n      \"IQLid\": \"144\",\n      \"AQLid\": \"166\",\n      \"EMCode\": \"244\"\n    },\n    {\n      \"QSid\": \"212\",\n      \"QDes\": \"/托腮\",\n      \"IQLid\": \"182\",\n      \"AQLid\": \"161\",\n      \"EMCode\": \"282\"\n    },\n    {\n      \"QSid\": \"175\",\n      \"QDes\": \"/卖萌\",\n      \"IQLid\": \"145\",\n      \"AQLid\": \"167\",\n      \"EMCode\": \"245\"\n    },\n    {\n      \"QSid\": \"178\",\n      \"QDes\": \"/斜眼笑\",\n      \"IQLid\": \"148\",\n      \"AQLid\": \"170\",\n      \"EMCode\": \"248\"\n    },\n    {\n      \"QSid\": \"177\",\n      \"QDes\": \"/喷血\",\n      \"IQLid\": \"147\",\n      \"AQLid\": \"169\",\n      \"EMCode\": \"247\"\n    },\n    {\n      \"QSid\": \"180\",\n      \"QDes\": \"/惊喜\",\n      \"IQLid\": \"150\",\n      \"AQLid\": \"172\",\n      \"EMCode\": \"250\"\n    },\n    {\n      \"QSid\": \"181\",\n      \"QDes\": \"/骚扰\",\n      \"IQLid\": \"151\",\n      \"AQLid\": \"173\",\n      \"EMCode\": \"251\"\n    },\n    {\n      \"QSid\": \"176\",\n      \"QDes\": \"/小纠结\",\n      \"IQLid\": \"146\",\n      \"AQLid\": \"168\",\n      \"EMCode\": \"246\"\n    },\n    {\n      \"QSid\": \"183\",\n      \"QDes\": \"/我最美\",\n      \"IQLid\": \"153\",\n      \"AQLid\": \"175\",\n      \"EMCode\": \"253\"\n    },\n    {\n      \"QSid\": \"245\",\n      \"QDes\": \"/加油必胜\",\n      \"IQLid\": \"245\",\n      \"AQLid\": \"217\",\n      \"EMCode\": \"202001\"\n    },\n    {\n      \"QSid\": \"246\",\n      \"QDes\": \"/加油抱抱\",\n      \"IQLid\": \"246\",\n      \"AQLid\": \"218\",\n      \"EMCode\": \"202002\"\n    },\n    {\n      \"QSid\": \"247\",\n      \"QDes\": \"/口罩护体\",\n      \"IQLid\": \"247\",\n      \"AQLid\": \"219\",\n      \"EMCode\": \"202003\"\n    },\n    {\n      \"QSid\": \"260\",\n      \"QDes\": \"/搬砖中\",\n      \"isStatic\": \"1\",\n      \"IQLid\": \"260\",\n      \"AQLid\": \"260\",\n      \"EMCode\": \"10260\"\n    },\n    {\n      \"QSid\": \"261\",\n      \"QDes\": \"/忙到飞起\",\n      \"IQLid\": \"261\",\n      \"AQLid\": \"261\",\n      \"EMCode\": \"10261\"\n    },\n    {\n      \"QSid\": \"262\",\n      \"QDes\": \"/脑阔疼\",\n      \"IQLid\": \"262\",\n      \"AQLid\": \"262\",\n      \"EMCode\": \"10262\"\n    },\n    {\n      \"QSid\": \"263\",\n      \"QDes\": \"/沧桑\",\n      \"IQLid\": \"263\",\n      \"AQLid\": \"263\",\n      \"EMCode\": \"10263\"\n    },\n    {\n      \"QSid\": \"264\",\n      \"QDes\": \"/捂脸\",\n      \"IQLid\": \"264\",\n      \"AQLid\": \"264\",\n      \"EMCode\": \"10264\"\n    },\n    {\n      \"QSid\": \"265\",\n      \"QDes\": \"/辣眼睛\",\n      \"IQLid\": \"265\",\n      \"AQLid\": \"265\",\n      \"EMCode\": \"10265\"\n    },\n    {\n      \"QSid\": \"266\",\n      \"QDes\": \"/哦哟\",\n      \"IQLid\": \"266\",\n      \"AQLid\": \"266\",\n      \"EMCode\": \"10266\"\n    },\n    {\n      \"QSid\": \"267\",\n      \"QDes\": \"/头秃\",\n      \"IQLid\": \"267\",\n      \"AQLid\": \"267\",\n      \"EMCode\": \"10267\"\n    },\n    {\n      \"QSid\": \"268\",\n      \"QDes\": \"/问号脸\",\n      \"IQLid\": \"268\",\n      \"AQLid\": \"268\",\n      \"EMCode\": \"10268\"\n    },\n    {\n      \"QSid\": \"269\",\n      \"QDes\": \"/暗中观察\",\n      \"IQLid\": \"269\",\n      \"AQLid\": \"269\",\n      \"EMCode\": \"10269\"\n    },\n    {\n      \"QSid\": \"270\",\n      \"QDes\": \"/emm\",\n      \"IQLid\": \"270\",\n      \"AQLid\": \"270\",\n      \"EMCode\": \"10270\"\n    },\n    {\n      \"QSid\": \"271\",\n      \"QDes\": \"/吃瓜\",\n      \"IQLid\": \"271\",\n      \"AQLid\": \"271\",\n      \"EMCode\": \"10271\"\n    },\n    {\n      \"QSid\": \"272\",\n      \"QDes\": \"/呵呵哒\",\n      \"IQLid\": \"272\",\n      \"AQLid\": \"272\",\n      \"EMCode\": \"10272\"\n    },\n    {\n      \"QSid\": \"277\",\n      \"QDes\": \"/汪汪\",\n      \"isStatic\": \"1\",\n      \"IQLid\": \"277\",\n      \"AQLid\": \"277\",\n      \"EMCode\": \"10277\"\n    },\n    {\n      \"QSid\": \"281\",\n      \"QDes\": \"/无眼笑\",\n      \"IQLid\": \"281\",\n      \"AQLid\": \"281\",\n      \"EMCode\": \"10281\"\n    },\n    {\n      \"QSid\": \"282\",\n      \"QDes\": \"/敬礼\",\n      \"IQLid\": \"282\",\n      \"AQLid\": \"282\",\n      \"EMCode\": \"10282\"\n    },\n    {\n      \"QSid\": \"283\",\n      \"QDes\": \"/狂笑\",\n      \"IQLid\": \"283\",\n      \"AQLid\": \"283\",\n      \"EMCode\": \"10283\"\n    },\n    {\n      \"QSid\": \"284\",\n      \"QDes\": \"/面无表情\",\n      \"IQLid\": \"284\",\n      \"AQLid\": \"284\",\n      \"EMCode\": \"10284\"\n    },\n    {\n      \"QSid\": \"285\",\n      \"QDes\": \"/摸鱼\",\n      \"IQLid\": \"285\",\n      \"AQLid\": \"285\",\n      \"EMCode\": \"10285\"\n    },\n    {\n      \"QSid\": \"286\",\n      \"QDes\": \"/魔鬼笑\",\n      \"IQLid\": \"286\",\n      \"AQLid\": \"286\",\n      \"EMCode\": \"10286\"\n    },\n    {\n      \"QSid\": \"287\",\n      \"QDes\": \"/哦\",\n      \"IQLid\": \"287\",\n      \"AQLid\": \"287\",\n      \"EMCode\": \"10287\"\n    },\n    {\n      \"QSid\": \"288\",\n      \"QDes\": \"/请\",\n      \"IQLid\": \"288\",\n      \"AQLid\": \"288\",\n      \"EMCode\": \"10288\"\n    },\n    {\n      \"QSid\": \"289\",\n      \"QDes\": \"/睁眼\",\n      \"IQLid\": \"289\",\n      \"AQLid\": \"289\",\n      \"EMCode\": \"10289\"\n    },\n    {\n      \"QSid\": \"273\",\n      \"QDes\": \"/我酸了\",\n      \"isStatic\": \"1\",\n      \"IQLid\": \"273\",\n      \"AQLid\": \"273\",\n      \"EMCode\": \"10273\"\n    },\n    {\n      \"QSid\": \"274\",\n      \"QDes\": \"/太南了\",\n      \"isStatic\": \"1\",\n      \"IQLid\": \"274\",\n      \"AQLid\": \"274\",\n      \"EMCode\": \"10274\"\n    }, \n    {\n      \"QSid\": \"112\",\n      \"QDes\": \"/菜刀\",\n      \"IQLid\": \"17\",\n      \"AQLid\": \"17\",\n      \"EMCode\": \"155\"\n    },\n    {\n      \"QSid\": \"89\",\n      \"QDes\": \"/西瓜\",\n      \"isStatic\": \"1\",\n      \"IQLid\": \"60\",\n      \"AQLid\": \"60\",\n      \"EMCode\": \"156\"\n    },\n    {\n      \"QSid\": \"276\",\n      \"QDes\": \"/辣椒酱\",\n      \"isStatic\": \"1\",\n      \"IQLid\": \"276\",\n      \"AQLid\": \"276\",\n\t  \"QHide\": \"1\",\n      \"EMCode\": \"10276\"\n    }, \n    {\n      \"QSid\": \"113\",\n      \"QDes\": \"/啤酒\",\n      \"IQLid\": \"61\",\n      \"AQLid\": \"61\",\n      \"EMCode\": \"157\"\n    },\n    {\n      \"QSid\": \"114\",\n      \"QDes\": \"/篮球\",\n      \"IQLid\": \"90\",\n      \"AQLid\": \"92\",\n      \"EMCode\": \"158\"\n    },\n    {\n      \"QSid\": \"115\",\n      \"QDes\": \"/乒乓\",\n      \"IQLid\": \"91\",\n      \"AQLid\": \"93\",\n      \"EMCode\": \"159\"\n    },\n    {\n      \"QSid\": \"171\",\n      \"QDes\": \"/茶\",\n      \"IQLid\": \"141\",\n      \"AQLid\": \"163\",\n      \"EMCode\": \"241\"\n    },\n    {\n      \"QSid\": \"60\",\n      \"QDes\": \"/咖啡\",\n      \"IQLid\": \"66\",\n      \"AQLid\": \"66\",\n      \"EMCode\": \"160\"\n    },\n    {\n      \"QSid\": \"61\",\n      \"QDes\": \"/饭\",\n      \"isStatic\": \"1\",\n      \"IQLid\": \"58\",\n      \"AQLid\": \"58\",\n      \"EMCode\": \"161\"\n    },\n    {\n      \"QSid\": \"46\",\n      \"QDes\": \"/猪头\",\n      \"isStatic\": \"1\",\n      \"IQLid\": \"7\",\n      \"AQLid\": \"7\",\n      \"EMCode\": \"162\"\n    },\n    {\n      \"QSid\": \"63\",\n      \"QDes\": \"/玫瑰\",\n      \"isStatic\": \"1\",\n      \"IQLid\": \"8\",\n      \"AQLid\": \"8\",\n      \"EMCode\": \"163\"\n    },\n    {\n      \"QSid\": \"64\",\n      \"QDes\": \"/凋谢\",\n      \"isStatic\": \"1\",\n      \"IQLid\": \"57\",\n      \"AQLid\": \"57\",\n      \"EMCode\": \"164\"\n    },\n    {\n      \"QSid\": \"116\",\n      \"QDes\": \"/示爱\",\n      \"IQLid\": \"29\",\n      \"AQLid\": \"29\",\n      \"EMCode\": \"165\"\n    },\n    {\n      \"QSid\": \"66\",\n      \"QDes\": \"/爱心\",\n      \"IQLid\": \"28\",\n      \"AQLid\": \"28\",\n      \"EMCode\": \"166\"\n    },\n    {\n      \"QSid\": \"67\",\n      \"QDes\": \"/心碎\",\n      \"IQLid\": \"72\",\n      \"AQLid\": \"74\",\n      \"EMCode\": \"167\"\n    },\n    {\n      \"QSid\": \"53\",\n      \"QDes\": \"/蛋糕\",\n      \"IQLid\": \"59\",\n      \"AQLid\": \"59\",\n      \"EMCode\": \"168\"\n    },\n    {\n      \"QSid\": \"54\",\n      \"QDes\": \"/闪电\",\n      \"isStatic\": \"1\",\n      \"IQLid\": \"78\",\n      \"AQLid\": \"80\",\n      \"EMCode\": \"169\"\n    },\n    {\n      \"QSid\": \"55\",\n      \"QDes\": \"/炸弹\",\n      \"isStatic\": \"1\",\n      \"IQLid\": \"16\",\n      \"AQLid\": \"16\",\n      \"EMCode\": \"170\"\n    },\n    {\n      \"QSid\": \"56\",\n      \"QDes\": \"/刀\",\n      \"IQLid\": \"68\",\n      \"AQLid\": \"70\",\n      \"EMCode\": \"171\"\n    },\n    {\n      \"QSid\": \"145\",\n      \"QDes\": \"/祈祷\",\n      \"isStatic\": \"1\",\n      \"IQLid\": \"115\",\n      \"AQLid\": \"117\",\n      \"EMCode\": \"121010\"\n    },\n    {\n      \"QSid\": \"57\",\n      \"QDes\": \"/足球\",\n      \"IQLid\": \"75\",\n      \"AQLid\": \"77\",\n      \"EMCode\": \"172\"\n    },\n    {\n      \"QSid\": \"117\",\n      \"QDes\": \"/瓢虫\",\n      \"IQLid\": \"62\",\n      \"AQLid\": \"62\",\n      \"EMCode\": \"173\"\n    },\n    {\n      \"QSid\": \"59\",\n      \"QDes\": \"/便便\",\n      \"IQLid\": \"15\",\n      \"AQLid\": \"15\",\n      \"EMCode\": \"174\"\n    },\n    {\n      \"QSid\": \"75\",\n      \"QDes\": \"/月亮\",\n      \"isStatic\": \"1\",\n      \"IQLid\": \"67\",\n      \"AQLid\": \"68\",\n      \"EMCode\": \"175\"\n    },\n    {\n      \"QSid\": \"74\",\n      \"QDes\": \"/太阳\",\n      \"isStatic\": \"1\",\n      \"IQLid\": \"73\",\n      \"AQLid\": \"75\",\n      \"EMCode\": \"176\"\n    },\n    {\n      \"QSid\": \"69\",\n      \"QDes\": \"/礼物\",\n      \"isStatic\": \"1\",\n      \"IQLid\": \"74\",\n      \"AQLid\": \"76\",\n      \"EMCode\": \"177\"\n    },\n    {\n      \"QSid\": \"49\",\n      \"QDes\": \"/拥抱\",\n      \"IQLid\": \"45\",\n      \"AQLid\": \"45\",\n      \"EMCode\": \"178\"\n    },\n    {\n      \"QSid\": \"76\",\n      \"QDes\": \"/赞\",\n      \"IQLid\": \"52\",\n      \"AQLid\": \"52\",\n      \"EMCode\": \"179\"\n    },\n    {\n      \"QSid\": \"77\",\n      \"QDes\": \"/踩\",\n      \"IQLid\": \"53\",\n      \"AQLid\": \"53\",\n      \"EMCode\": \"180\"\n    },\n    {\n      \"QSid\": \"78\",\n      \"QDes\": \"/握手\",\n      \"IQLid\": \"54\",\n      \"AQLid\": \"54\",\n      \"EMCode\": \"181\"\n    },\n    {\n      \"QSid\": \"79\",\n      \"QDes\": \"/胜利\",\n      \"IQLid\": \"55\",\n      \"AQLid\": \"55\",\n      \"EMCode\": \"182\"\n    },\n    {\n      \"QSid\": \"118\",\n      \"QDes\": \"/抱拳\",\n      \"IQLid\": \"56\",\n      \"AQLid\": \"56\",\n      \"EMCode\": \"183\"\n    },\n    {\n      \"QSid\": \"119\",\n      \"QDes\": \"/勾引\",\n      \"IQLid\": \"63\",\n      \"AQLid\": \"63\",\n      \"EMCode\": \"184\"\n    },\n    {\n      \"QSid\": \"120\",\n      \"QDes\": \"/拳头\",\n      \"IQLid\": \"71\",\n      \"AQLid\": \"73\",\n      \"EMCode\": \"185\"\n    },\n    {\n      \"QSid\": \"121\",\n      \"QDes\": \"/差劲\",\n      \"IQLid\": \"70\",\n      \"AQLid\": \"72\",\n      \"EMCode\": \"186\"\n    },\n    {\n      \"QSid\": \"122\",\n      \"QDes\": \"/爱你\",\n      \"IQLid\": \"65\",\n      \"AQLid\": \"65\",\n      \"EMCode\": \"187\"\n    },\n    {\n      \"QSid\": \"123\",\n      \"QDes\": \"/NO\",\n      \"IQLid\": \"92\",\n      \"AQLid\": \"94\",\n      \"EMCode\": \"188\"\n    },\n    {\n      \"QSid\": \"124\",\n      \"QDes\": \"/OK\",\n      \"isStatic\": \"1\",\n      \"IQLid\": \"64\",\n      \"AQLid\": \"64\",\n      \"EMCode\": \"189\"\n    },\n    {\n      \"QSid\": \"42\",\n      \"QDes\": \"/爱情\",\n      \"IQLid\": \"38\",\n      \"AQLid\": \"38\",\n      \"EMCode\": \"190\"\n    },\n    {\n      \"QSid\": \"85\",\n      \"QDes\": \"/飞吻\",\n      \"isStatic\": \"1\",\n      \"IQLid\": \"47\",\n      \"AQLid\": \"47\",\n      \"EMCode\": \"191\"\n    },\n    {\n      \"QSid\": \"43\",\n      \"QDes\": \"/跳跳\",\n      \"IQLid\": \"93\",\n      \"AQLid\": \"95\",\n      \"EMCode\": \"192\"\n    },\n    {\n      \"QSid\": \"41\",\n      \"QDes\": \"/发抖\",\n      \"isStatic\": \"1\",\n      \"IQLid\": \"69\",\n      \"AQLid\": \"71\",\n      \"EMCode\": \"193\"\n    },\n    {\n      \"QSid\": \"86\",\n      \"QDes\": \"/怄火\",\n      \"IQLid\": \"94\",\n      \"AQLid\": \"96\",\n      \"EMCode\": \"194\"\n    },\n    {\n      \"QSid\": \"125\",\n      \"QDes\": \"/转圈\",\n      \"IQLid\": \"95\",\n      \"AQLid\": \"97\",\n      \"EMCode\": \"195\"\n    },\n    {\n      \"QSid\": \"126\",\n      \"QDes\": \"/磕头\",\n      \"IQLid\": \"96\",\n      \"AQLid\": \"98\",\n      \"EMCode\": \"196\"\n    },\n    {\n      \"QSid\": \"127\",\n      \"QDes\": \"/回头\",\n      \"IQLid\": \"97\",\n      \"AQLid\": \"99\",\n      \"EMCode\": \"197\"\n    },\n    {\n      \"QSid\": \"128\",\n      \"QDes\": \"/跳绳\",\n      \"IQLid\": \"98\",\n      \"AQLid\": \"100\",\n      \"EMCode\": \"198\"\n    },\n    {\n      \"QSid\": \"129\",\n      \"QDes\": \"/挥手\",\n      \"IQLid\": \"77\",\n      \"AQLid\": \"79\",\n      \"EMCode\": \"199\"\n    },\n    {\n      \"QSid\": \"130\",\n      \"QDes\": \"/激动\",\n      \"IQLid\": \"99\",\n      \"AQLid\": \"101\",\n      \"EMCode\": \"200\"\n    },\n    {\n      \"QSid\": \"131\",\n      \"QDes\": \"/街舞\",\n      \"IQLid\": \"100\",\n      \"AQLid\": \"102\",\n      \"EMCode\": \"201\"\n    },\n    {\n      \"QSid\": \"132\",\n      \"QDes\": \"/献吻\",\n      \"IQLid\": \"101\",\n      \"AQLid\": \"103\",\n      \"EMCode\": \"202\"\n    },\n    {\n      \"QSid\": \"133\",\n      \"QDes\": \"/左太极\",\n      \"IQLid\": \"102\",\n      \"AQLid\": \"104\",\n      \"EMCode\": \"203\"\n    },\n    {\n      \"QSid\": \"134\",\n      \"QDes\": \"/右太极\",\n      \"IQLid\": \"103\",\n      \"AQLid\": \"105\",\n      \"EMCode\": \"204\"\n    },\n    {\n      \"QSid\": \"136\",\n      \"QDes\": \"/双喜\",\n      \"isStatic\": \"1\",\n      \"IQLid\": \"106\",\n      \"AQLid\": \"108\",\n      \"EMCode\": \"121001\"\n    },\n    {\n      \"QSid\": \"137\",\n      \"QDes\": \"/鞭炮\",\n      \"isStatic\": \"1\",\n      \"IQLid\": \"107\",\n      \"AQLid\": \"109\",\n      \"EMCode\": \"121002\"\n    },\n    {\n      \"QSid\": \"138\",\n      \"QDes\": \"/灯笼\",\n      \"isStatic\": \"1\",\n      \"IQLid\": \"108\",\n      \"AQLid\": \"110\",\n      \"EMCode\": \"121003\"\n    },\n    {\n      \"QSid\": \"140\",\n      \"QDes\": \"/K歌\",\n      \"isStatic\": \"1\",\n      \"IQLid\": \"110\",\n      \"AQLid\": \"112\",\n      \"EMCode\": \"121005\"\n    },\n    {\n      \"QSid\": \"144\",\n      \"QDes\": \"/喝彩\",\n      \"isStatic\": \"1\",\n      \"IQLid\": \"114\",\n      \"AQLid\": \"116\",\n      \"EMCode\": \"121009\"\n    },\n    {\n      \"QSid\": \"146\",\n      \"QDes\": \"/爆筋\",\n      \"isStatic\": \"1\",\n      \"IQLid\": \"116\",\n      \"AQLid\": \"118\",\n      \"EMCode\": \"121011\"\n    },\n    {\n      \"QSid\": \"147\",\n      \"QDes\": \"/棒棒糖\",\n      \"isStatic\": \"1\",\n      \"IQLid\": \"117\",\n      \"AQLid\": \"119\",\n      \"EMCode\": \"121012\"\n    },\n    {\n      \"QSid\": \"148\",\n      \"QDes\": \"/喝奶\",\n      \"isStatic\": \"1\",\n      \"IQLid\": \"118\",\n      \"AQLid\": \"120\",\n      \"EMCode\": \"121013\"\n    },\n    {\n      \"QSid\": \"151\",\n      \"QDes\": \"/飞机\",\n      \"isStatic\": \"1\",\n      \"IQLid\": \"121\",\n      \"AQLid\": \"123\",\n      \"EMCode\": \"121016\"\n    },\n    {\n      \"QSid\": \"158\",\n      \"QDes\": \"/钞票\",\n      \"isStatic\": \"1\",\n      \"IQLid\": \"128\",\n      \"AQLid\": \"130\",\n      \"EMCode\": \"121023\"\n    },\n    {\n      \"QSid\": \"168\",\n      \"QDes\": \"/药\",\n      \"isStatic\": \"1\",\n      \"IQLid\": \"138\",\n      \"AQLid\": \"140\",\n      \"EMCode\": \"121033\"\n    },\n    {\n      \"QSid\": \"169\",\n      \"QDes\": \"/手枪\",\n      \"isStatic\": \"1\",\n      \"IQLid\": \"139\",\n      \"AQLid\": \"141\",\n      \"EMCode\": \"121034\"\n    },\n    {\n      \"QSid\": \"188\",\n      \"QDes\": \"/蛋\",\n      \"IQLid\": \"158\",\n      \"AQLid\": \"180\",\n      \"EMCode\": \"258\"\n    },\n    {\n      \"QSid\": \"192\",\n      \"QDes\": \"/红包\",\n      \"IQLid\": \"162\",\n      \"AQLid\": \"184\",\n      \"EMCode\": \"262\"\n    },\n    {\n      \"QSid\": \"184\",\n      \"QDes\": \"/河蟹\",\n      \"IQLid\": \"154\",\n      \"AQLid\": \"176\",\n      \"EMCode\": \"254\"\n    },\n    {\n      \"QSid\": \"185\",\n      \"QDes\": \"/羊驼\",\n      \"IQLid\": \"155\",\n      \"AQLid\": \"177\",\n      \"EMCode\": \"255\"\n    },\n    {\n      \"QSid\": \"190\",\n      \"QDes\": \"/菊花\",\n      \"IQLid\": \"160\",\n      \"AQLid\": \"182\",\n      \"EMCode\": \"260\"\n    },\n    {\n      \"QSid\": \"187\",\n      \"QDes\": \"/幽灵\",\n      \"IQLid\": \"157\",\n      \"AQLid\": \"179\",\n      \"EMCode\": \"257\"\n    },\n    {\n      \"QSid\": \"193\",\n      \"QDes\": \"/大笑\",\n      \"IQLid\": \"163\",\n      \"AQLid\": \"185\",\n      \"EMCode\": \"263\"\n    },\n    {\n      \"QSid\": \"194\",\n      \"QDes\": \"/不开心\",\n      \"IQLid\": \"164\",\n      \"AQLid\": \"143\",\n      \"EMCode\": \"264\"\n    },\n    {\n      \"QSid\": \"197\",\n      \"QDes\": \"/冷漠\",\n      \"IQLid\": \"167\",\n      \"AQLid\": \"146\",\n      \"EMCode\": \"267\"\n    },\n    {\n      \"QSid\": \"198\",\n      \"QDes\": \"/呃\",\n      \"IQLid\": \"168\",\n      \"AQLid\": \"147\",\n      \"EMCode\": \"268\"\n    },\n    {\n      \"QSid\": \"199\",\n      \"QDes\": \"/好棒\",\n      \"IQLid\": \"169\",\n      \"AQLid\": \"148\",\n      \"EMCode\": \"269\"\n    },\n    {\n      \"QSid\": \"200\",\n      \"QDes\": \"/拜托\",\n      \"IQLid\": \"170\",\n      \"AQLid\": \"149\",\n      \"EMCode\": \"270\"\n    },\n    {\n      \"QSid\": \"201\",\n      \"QDes\": \"/点赞\",\n      \"IQLid\": \"171\",\n      \"AQLid\": \"150\",\n      \"EMCode\": \"271\"\n    },\n    {\n      \"QSid\": \"202\",\n      \"QDes\": \"/无聊\",\n      \"IQLid\": \"172\",\n      \"AQLid\": \"151\",\n      \"EMCode\": \"272\"\n    },\n    {\n      \"QSid\": \"203\",\n      \"QDes\": \"/托脸\",\n      \"IQLid\": \"173\",\n      \"AQLid\": \"152\",\n      \"EMCode\": \"273\"\n    },\n    {\n      \"QSid\": \"204\",\n      \"QDes\": \"/吃\",\n      \"IQLid\": \"174\",\n      \"AQLid\": \"153\",\n      \"EMCode\": \"274\"\n    },\n    {\n      \"QSid\": \"205\",\n      \"QDes\": \"/送花\",\n      \"IQLid\": \"175\",\n      \"AQLid\": \"154\",\n      \"EMCode\": \"275\"\n    },\n    {\n      \"QSid\": \"206\",\n      \"QDes\": \"/害怕\",\n      \"IQLid\": \"176\",\n      \"AQLid\": \"155\",\n      \"EMCode\": \"276\"\n    },\n    {\n      \"QSid\": \"207\",\n      \"QDes\": \"/花痴\",\n      \"IQLid\": \"177\",\n      \"AQLid\": \"156\",\n      \"EMCode\": \"277\"\n    },\n    {\n      \"QSid\": \"208\",\n      \"QDes\": \"/小样儿\",\n      \"IQLid\": \"178\",\n      \"AQLid\": \"157\",\n      \"EMCode\": \"278\"\n    },\n    {\n      \"QSid\": \"210\",\n      \"QDes\": \"/飙泪\",\n      \"IQLid\": \"180\",\n      \"AQLid\": \"159\",\n      \"EMCode\": \"280\"\n    },\n    {\n      \"QSid\": \"211\",\n      \"QDes\": \"/我不看\",\n      \"IQLid\": \"181\",\n      \"AQLid\": \"160\",\n      \"EMCode\": \"281\"\n    },\n    {\n      \"QSid\": \"278\",\n      \"QDes\": \"/汗\",\n      \"IQLid\": \"278\",\n      \"isCMEmoji\": \"1\",\n      \"AQLid\": \"278\",\n      \"EMCode\": \"20237\"\n    },\n    {\n      \"QSid\": \"279\",\n      \"QDes\": \"/打脸\",\n      \"IQLid\": \"279\",\n      \"isCMEmoji\": \"1\",\n      \"AQLid\": \"279\",\n      \"EMCode\": \"20238\"\n    },\n    {\n      \"QSid\": \"280\",\n      \"QDes\": \"/击掌\",\n      \"IQLid\": \"280\",\n      \"isCMEmoji\": \"1\",\n      \"AQLid\": \"280\",\n      \"EMCode\": \"20239\"\n    },\n    {\n      \"QSid\": \"242\",\n      \"QDes\": \"/头撞击\",\n      \"IQLid\": \"212\",\n      \"isCMEmoji\": \"1\",\n      \"AQLid\": \"214\",\n      \"EMCode\": \"314\"\n    },\n    {\n      \"QSid\": \"243\",\n      \"QDes\": \"/甩头\",\n      \"IQLid\": \"213\",\n      \"isCMEmoji\": \"1\",\n      \"AQLid\": \"215\",\n      \"EMCode\": \"313\"\n    },\n    {\n      \"QSid\": \"244\",\n      \"QDes\": \"/扔狗\",\n      \"IQLid\": \"214\",\n      \"isCMEmoji\": \"1\",\n      \"AQLid\": \"216\",\n      \"EMCode\": \"312\"\n    },\n    {\n      \"QSid\": \"215\",\n      \"QDes\": \"/糊脸\",\n      \"IQLid\": \"185\",\n      \"isCMEmoji\": \"1\",\n      \"AQLid\": \"187\",\n      \"EMCode\": \"285\"\n    },\n    {\n      \"QSid\": \"237\",\n      \"QDes\": \"/偷看\",\n      \"IQLid\": \"207\",\n      \"isCMEmoji\": \"1\",\n      \"AQLid\": \"209\",\n      \"EMCode\": \"307\"\n    },\n    {\n      \"QSid\": \"226\",\n      \"QDes\": \"/拍桌\",\n      \"IQLid\": \"196\",\n      \"isCMEmoji\": \"1\",\n      \"AQLid\": \"198\",\n      \"EMCode\": \"297\"\n    },\n    {\n      \"QSid\": \"214\",\n      \"QDes\": \"/啵啵\",\n      \"IQLid\": \"184\",\n      \"isCMEmoji\": \"1\",\n      \"AQLid\": \"186\",\n      \"EMCode\": \"284\"\n    },\n    {\n      \"QSid\": \"217\",\n      \"QDes\": \"/扯一扯\",\n      \"IQLid\": \"187\",\n      \"isCMEmoji\": \"1\",\n      \"AQLid\": \"189\",\n      \"EMCode\": \"287\"\n    },\n    {\n      \"QSid\": \"240\",\n      \"QDes\": \"/喷脸\",\n      \"IQLid\": \"210\",\n      \"isCMEmoji\": \"1\",\n      \"AQLid\": \"212\",\n      \"EMCode\": \"310\"\n    },\n    {\n      \"QSid\": \"216\",\n      \"QDes\": \"/拍头\",\n      \"IQLid\": \"186\",\n      \"isCMEmoji\": \"1\",\n      \"AQLid\": \"188\",\n      \"EMCode\": \"286\"\n    },\n    {\n      \"QSid\": \"218\",\n      \"QDes\": \"/舔一舔\",\n      \"IQLid\": \"188\",\n      \"isCMEmoji\": \"1\",\n      \"AQLid\": \"190\",\n      \"EMCode\": \"288\"\n    },\n    {\n      \"QSid\": \"229\",\n      \"QDes\": \"/干杯\",\n      \"IQLid\": \"199\",\n      \"isCMEmoji\": \"1\",\n      \"AQLid\": \"201\",\n      \"EMCode\": \"299\"\n    },\n    {\n      \"QSid\": \"238\",\n      \"QDes\": \"/扇脸\",\n      \"IQLid\": \"208\",\n      \"isCMEmoji\": \"1\",\n      \"AQLid\": \"210\",\n      \"EMCode\": \"308\"\n    },\n    {\n      \"QSid\": \"219\",\n      \"QDes\": \"/蹭一蹭\",\n      \"IQLid\": \"189\",\n      \"isCMEmoji\": \"1\",\n      \"AQLid\": \"191\",\n      \"EMCode\": \"289\"\n    },\n    {\n      \"QSid\": \"225\",\n      \"QDes\": \"/撩一撩\",\n      \"IQLid\": \"195\",\n      \"isCMEmoji\": \"1\",\n      \"AQLid\": \"197\",\n      \"EMCode\": \"296\"\n    },\n    {\n      \"QSid\": \"231\",\n      \"QDes\": \"/哼\",\n      \"IQLid\": \"201\",\n      \"isCMEmoji\": \"1\",\n      \"AQLid\": \"203\",\n      \"EMCode\": \"301\"\n    },\n    {\n      \"QSid\": \"233\",\n      \"QDes\": \"/掐一掐\",\n      \"IQLid\": \"203\",\n      \"isCMEmoji\": \"1\",\n      \"AQLid\": \"205\",\n      \"EMCode\": \"303\"\n    },\n    {\n      \"QSid\": \"221\",\n      \"QDes\": \"/顶呱呱\",\n      \"IQLid\": \"191\",\n      \"isCMEmoji\": \"1\",\n      \"AQLid\": \"193\",\n      \"EMCode\": \"291\"\n    },\n    {\n      \"QSid\": \"222\",\n      \"QDes\": \"/抱抱\",\n      \"IQLid\": \"192\",\n      \"isCMEmoji\": \"1\",\n      \"AQLid\": \"194\",\n      \"EMCode\": \"292\"\n    },\n    {\n      \"QSid\": \"239\",\n      \"QDes\": \"/原谅\",\n      \"IQLid\": \"209\",\n      \"isCMEmoji\": \"1\",\n      \"AQLid\": \"211\",\n      \"EMCode\": \"309\"\n    },\n    {\n      \"QSid\": \"232\",\n      \"QDes\": \"/佛系\",\n      \"IQLid\": \"202\",\n      \"isCMEmoji\": \"1\",\n      \"AQLid\": \"204\",\n      \"EMCode\": \"302\"\n    },\n    {\n      \"QSid\": \"220\",\n      \"QDes\": \"/拽炸天\",\n      \"IQLid\": \"190\",\n      \"isCMEmoji\": \"1\",\n      \"AQLid\": \"192\",\n      \"EMCode\": \"290\"\n    },\n    {\n      \"QSid\": \"235\",\n      \"QDes\": \"/颤抖\",\n      \"IQLid\": \"205\",\n      \"isCMEmoji\": \"1\",\n      \"AQLid\": \"207\",\n      \"EMCode\": \"305\"\n    },\n    {\n      \"QSid\": \"241\",\n      \"QDes\": \"/生日快乐\",\n      \"IQLid\": \"211\",\n      \"isCMEmoji\": \"1\",\n      \"AQLid\": \"213\",\n      \"EMCode\": \"311\"\n    },\n    {\n      \"QSid\": \"230\",\n      \"QDes\": \"/嘲讽\",\n      \"IQLid\": \"200\",\n      \"isCMEmoji\": \"1\",\n      \"AQLid\": \"202\",\n      \"EMCode\": \"300\"\n    },\n    {\n      \"QSid\": \"224\",\n      \"QDes\": \"/开枪\",\n      \"IQLid\": \"194\",\n      \"isCMEmoji\": \"1\",\n      \"AQLid\": \"196\",\n      \"EMCode\": \"295\"\n    },\n    {\n      \"QSid\": \"236\",\n      \"QDes\": \"/啃头\",\n      \"IQLid\": \"206\",\n      \"isCMEmoji\": \"1\",\n      \"AQLid\": \"208\",\n      \"EMCode\": \"306\"\n    },\n    {\n      \"QSid\": \"228\",\n      \"QDes\": \"/恭喜\",\n      \"IQLid\": \"198\",\n      \"isCMEmoji\": \"1\",\n      \"AQLid\": \"200\",\n      \"EMCode\": \"298\"\n    },\n    {\n      \"QSid\": \"234\",\n      \"QDes\": \"/惊呆\",\n      \"IQLid\": \"204\",\n      \"isCMEmoji\": \"1\",\n      \"AQLid\": \"206\",\n      \"EMCode\": \"304\"\n    },\n    {\n      \"QSid\": \"223\",\n      \"QDes\": \"/暴击\",\n      \"IQLid\": \"193\",\n      \"isCMEmoji\": \"1\",\n      \"AQLid\": \"195\",\n      \"EMCode\": \"293\"\n    },\n    {\n      \"QSid\": \"227\",\n      \"QDes\": \"/拍手\",\n      \"IQLid\": \"197\",\n      \"isCMEmoji\": \"1\",\n      \"AQLid\": \"199\",\n      \"EMCode\": \"294\"\n    }\n  ],\n  \"emoji\": [\n    {\n      \"QSid\": \"😊\",\n      \"QCid\": \"128522\",\n      \"AQLid\": \"0\",\n      \"QDes\": \"/嘿嘿\",\n      \"EMCode\": \"400832\"\n    },\n    {\n      \"QSid\": \"😌\",\n      \"QCid\": \"128524\",\n      \"AQLid\": \"1\",\n      \"QDes\": \"/羞涩\",\n      \"EMCode\": \"400834\"\n    },\n    {\n      \"QSid\": \"😚\",\n      \"QCid\": \"128538\",\n      \"AQLid\": \"2\",\n      \"QDes\": \"/亲亲\",\n      \"EMCode\": \"400848\"\n    },\n    {\n      \"QSid\": \"😓\",\n      \"QCid\": \"128531\",\n      \"AQLid\": \"3\",\n      \"QDes\": \"/汗\",\n      \"EMCode\": \"400841\"\n    },\n    {\n      \"QSid\": \"😰\",\n      \"QCid\": \"128560\",\n      \"AQLid\": \"4\",\n      \"QDes\": \"/紧张\",\n      \"EMCode\": \"400870\"\n    },\n    {\n      \"QSid\": \"😝\",\n      \"QCid\": \"128541\",\n      \"AQLid\": \"5\",\n      \"QDes\": \"/吐舌\",\n      \"EMCode\": \"400851\"\n    },\n    {\n      \"QSid\": \"😁\",\n      \"QCid\": \"128513\",\n      \"AQLid\": \"6\",\n      \"QDes\": \"/呲牙\",\n      \"EMCode\": \"400823\"\n    },\n    {\n      \"QSid\": \"😜\",\n      \"QCid\": \"128540\",\n      \"AQLid\": \"7\",\n      \"QDes\": \"/淘气\",\n      \"EMCode\": \"400850\"\n    },\n    {\n      \"QSid\": \"☺\",\n      \"QCid\": \"9786\",\n      \"AQLid\": \"8\",\n      \"QDes\": \"/可爱\",\n      \"EMCode\": \"401181\"\n    },\n    {\n      \"QSid\": \"😉\",\n      \"QCid\": \"128521\",\n      \"AQLid\": \"9\",\n      \"QDes\": \"/媚眼\",\n      \"EMCode\": \"400831\"\n    },\n    {\n      \"QSid\": \"😍\",\n      \"QCid\": \"128525\",\n      \"AQLid\": \"10\",\n      \"QDes\": \"/花痴\",\n      \"EMCode\": \"400835\"\n    },\n    {\n      \"QSid\": \"😔\",\n      \"QCid\": \"128532\",\n      \"AQLid\": \"11\",\n      \"QDes\": \"/失落\",\n      \"EMCode\": \"400842\"\n    },\n    {\n      \"QSid\": \"😄\",\n      \"QCid\": \"128516\",\n      \"AQLid\": \"12\",\n      \"QDes\": \"/高兴\",\n      \"EMCode\": \"400826\"\n    },\n    {\n      \"QSid\": \"😏\",\n      \"QCid\": \"128527\",\n      \"AQLid\": \"13\",\n      \"QDes\": \"/哼哼\",\n      \"EMCode\": \"400837\"\n    },\n    {\n      \"QSid\": \"😒\",\n      \"QCid\": \"128530\",\n      \"AQLid\": \"14\",\n      \"QDes\": \"/不屑\",\n      \"EMCode\": \"400840\"\n    },\n    {\n      \"QSid\": \"😳\",\n      \"QCid\": \"128563\",\n      \"AQLid\": \"15\",\n      \"QDes\": \"/瞪眼\",\n      \"EMCode\": \"400873\"\n    },\n    {\n      \"QSid\": \"😘\",\n      \"QCid\": \"128536\",\n      \"AQLid\": \"16\",\n      \"QDes\": \"/飞吻\",\n      \"EMCode\": \"400846\"\n    },\n    {\n      \"QSid\": \"😭\",\n      \"QCid\": \"128557\",\n      \"AQLid\": \"17\",\n      \"QDes\": \"/大哭\",\n      \"EMCode\": \"400867\"\n    },\n    {\n      \"QSid\": \"😱\",\n      \"QCid\": \"128561\",\n      \"AQLid\": \"18\",\n      \"QDes\": \"/害怕\",\n      \"EMCode\": \"400871\"\n    },\n    {\n      \"QSid\": \"😂\",\n      \"QCid\": \"128514\",\n      \"AQLid\": \"19\",\n      \"QDes\": \"/激动\",\n      \"EMCode\": \"400824\"\n    },\n    {\n      \"QSid\": \"💪\",\n      \"QCid\": \"128170\",\n      \"AQLid\": \"20\",\n      \"QDes\": \"/肌肉\",\n      \"EMCode\": \"400644\"\n    },\n    {\n      \"QSid\": \"👊\",\n      \"QCid\": \"128074\",\n      \"AQLid\": \"21\",\n      \"QDes\": \"/拳头\",\n      \"EMCode\": \"400390\"\n    },\n    {\n      \"QSid\": \"👍\",\n      \"QCid\": \"128077\",\n      \"AQLid\": \"22\",\n      \"QDes\": \"/厉害\",\n      \"EMCode\": \"400408\"\n    },\n    {\n      \"QSid\": \"☝\",\n      \"QCid\": \"9757\",\n      \"AQLid\": \"23\",\n      \"QDes\": \"/向上\",\n      \"EMCode\": \"401203\"\n    },\n    {\n      \"QSid\": \"👏\",\n      \"QCid\": \"128079\",\n      \"AQLid\": \"24\",\n      \"QDes\": \"/鼓掌\",\n      \"EMCode\": \"400420\"\n    },\n    {\n      \"QSid\": \"✌\",\n      \"QCid\": \"9996\",\n      \"AQLid\": \"25\",\n      \"QDes\": \"/胜利\",\n      \"EMCode\": \"401210\"\n    },\n    {\n      \"QSid\": \"👎\",\n      \"QCid\": \"128078\",\n      \"AQLid\": \"26\",\n      \"QDes\": \"/鄙视\",\n      \"EMCode\": \"400414\"\n    },\n    {\n      \"QSid\": \"🙏\",\n      \"QCid\": \"128591\",\n      \"AQLid\": \"27\",\n      \"QDes\": \"/合十\",\n      \"EMCode\": \"400396\"\n    },\n    {\n      \"QSid\": \"👌\",\n      \"QCid\": \"128076\",\n      \"AQLid\": \"28\",\n      \"QDes\": \"/好的\",\n      \"EMCode\": \"400402\"\n    },\n    {\n      \"QSid\": \"👈\",\n      \"QCid\": \"128072\",\n      \"AQLid\": \"29\",\n      \"QDes\": \"/向左\",\n      \"EMCode\": \"400378\"\n    },\n    {\n      \"QSid\": \"👉\",\n      \"QCid\": \"128073\",\n      \"AQLid\": \"30\",\n      \"QDes\": \"/向右\",\n      \"EMCode\": \"400384\"\n    },\n    {\n      \"QSid\": \"👆\",\n      \"QCid\": \"128070\",\n      \"AQLid\": \"31\",\n      \"QDes\": \"/向上\",\n      \"EMCode\": \"400366\"\n    },\n    {\n      \"QSid\": \"👇\",\n      \"QCid\": \"128071\",\n      \"AQLid\": \"32\",\n      \"QDes\": \"/向下\",\n      \"EMCode\": \"400372\"\n    },\n    {\n      \"QSid\": \"👀\",\n      \"QCid\": \"128064\",\n      \"AQLid\": \"33\",\n      \"QDes\": \"/眼睛\",\n      \"EMCode\": \"400351\"\n    },\n    {\n      \"QSid\": \"👃\",\n      \"QCid\": \"128067\",\n      \"AQLid\": \"34\",\n      \"QDes\": \"/鼻子\",\n      \"EMCode\": \"400358\"\n    },\n    {\n      \"QSid\": \"👄\",\n      \"QCid\": \"128068\",\n      \"AQLid\": \"35\",\n      \"QDes\": \"/嘴唇\",\n      \"EMCode\": \"400364\"\n    },\n    {\n      \"QSid\": \"👂\",\n      \"QCid\": \"128066\",\n      \"AQLid\": \"36\",\n      \"QDes\": \"/耳朵\",\n      \"EMCode\": \"400352\"\n    },\n    {\n      \"QSid\": \"🍚\",\n      \"QCid\": \"127834\",\n      \"AQLid\": \"37\",\n      \"QDes\": \"/米饭\",\n      \"EMCode\": \"400149\"\n    },\n    {\n      \"QSid\": \"🍝\",\n      \"QCid\": \"127837\",\n      \"AQLid\": \"38\",\n      \"QDes\": \"/意面\",\n      \"EMCode\": \"400152\"\n    },\n    {\n      \"QSid\": \"🍜\",\n      \"QCid\": \"127836\",\n      \"AQLid\": \"39\",\n      \"QDes\": \"/拉面\",\n      \"EMCode\": \"400151\"\n    },\n    {\n      \"QSid\": \"🍙\",\n      \"QCid\": \"127833\",\n      \"AQLid\": \"40\",\n      \"QDes\": \"/饭团\",\n      \"EMCode\": \"400148\"\n    },\n    {\n      \"QSid\": \"🍧\",\n      \"QCid\": \"127847\",\n      \"AQLid\": \"41\",\n      \"QDes\": \"/刨冰\",\n      \"EMCode\": \"400162\"\n    },\n    {\n      \"QSid\": \"🍣\",\n      \"QCid\": \"127843\",\n      \"AQLid\": \"42\",\n      \"QDes\": \"/寿司\",\n      \"EMCode\": \"400158\"\n    },\n    {\n      \"QSid\": \"🎂\",\n      \"QCid\": \"127874\",\n      \"AQLid\": \"43\",\n      \"QDes\": \"/蛋糕\",\n      \"EMCode\": \"400186\"\n    },\n    {\n      \"QSid\": \"🍞\",\n      \"QCid\": \"127838\",\n      \"AQLid\": \"44\",\n      \"QDes\": \"/面包\",\n      \"EMCode\": \"400153\"\n    },\n    {\n      \"QSid\": \"🍔\",\n      \"QCid\": \"127828\",\n      \"AQLid\": \"45\",\n      \"QDes\": \"/汉堡\",\n      \"EMCode\": \"400143\"\n    },\n    {\n      \"QSid\": \"🍳\",\n      \"QCid\": \"127859\",\n      \"AQLid\": \"46\",\n      \"QDes\": \"/煎蛋\",\n      \"EMCode\": \"400174\"\n    },\n    {\n      \"QSid\": \"🍟\",\n      \"QCid\": \"127839\",\n      \"AQLid\": \"47\",\n      \"QDes\": \"/薯条\",\n      \"EMCode\": \"400154\"\n    },\n    {\n      \"QSid\": \"🍺\",\n      \"QCid\": \"127866\",\n      \"AQLid\": \"48\",\n      \"QDes\": \"/啤酒\",\n      \"EMCode\": \"400181\"\n    },\n    {\n      \"QSid\": \"🍻\",\n      \"QCid\": \"127867\",\n      \"AQLid\": \"49\",\n      \"QDes\": \"/干杯\",\n      \"EMCode\": \"400182\"\n    },\n    {\n      \"QSid\": \"🍸\",\n      \"QCid\": \"127864\",\n      \"AQLid\": \"50\",\n      \"QDes\": \"/高脚杯\",\n      \"EMCode\": \"400179\"\n    },\n    {\n      \"QSid\": \"☕\",\n      \"QCid\": \"9749\",\n      \"AQLid\": \"51\",\n      \"QDes\": \"/咖啡\",\n      \"EMCode\": \"401262\"\n    },\n    {\n      \"QSid\": \"🍎\",\n      \"QCid\": \"127822\",\n      \"AQLid\": \"52\",\n      \"QDes\": \"/苹果\",\n      \"EMCode\": \"400137\"\n    },\n    {\n      \"QSid\": \"🍊\",\n      \"QCid\": \"127818\",\n      \"AQLid\": \"53\",\n      \"QDes\": \"/橙子\",\n      \"EMCode\": \"400133\"\n    },\n    {\n      \"QSid\": \"🍓\",\n      \"QCid\": \"127827\",\n      \"AQLid\": \"54\",\n      \"QDes\": \"/草莓\",\n      \"EMCode\": \"400142\"\n    },\n    {\n      \"QSid\": \"🍉\",\n      \"QCid\": \"127817\",\n      \"AQLid\": \"55\",\n      \"QDes\": \"/西瓜\",\n      \"EMCode\": \"400132\"\n    },\n    {\n      \"QSid\": \"💊\",\n      \"QCid\": \"128138\",\n      \"AQLid\": \"56\",\n      \"QDes\": \"/药丸\",\n      \"EMCode\": \"400612\"\n    },\n    {\n      \"QSid\": \"🚬\",\n      \"QCid\": \"128684\",\n      \"AQLid\": \"57\",\n      \"QDes\": \"/吸烟\",\n      \"EMCode\": \"400987\"\n    },\n    {\n      \"QSid\": \"🎄\",\n      \"QCid\": \"127876\",\n      \"AQLid\": \"58\",\n      \"QDes\": \"/圣诞树\",\n      \"EMCode\": \"400188\"\n    },\n    {\n      \"QSid\": \"🌹\",\n      \"QCid\": \"127801\",\n      \"AQLid\": \"59\",\n      \"QDes\": \"/玫瑰\",\n      \"EMCode\": \"400116\"\n    },\n    {\n      \"QSid\": \"🎉\",\n      \"QCid\": \"127881\",\n      \"AQLid\": \"60\",\n      \"QDes\": \"/庆祝\",\n      \"EMCode\": \"400198\"\n    },\n    {\n      \"QSid\": \"🌴\",\n      \"QCid\": \"127796\",\n      \"AQLid\": \"61\",\n      \"QDes\": \"/椰子树\",\n      \"EMCode\": \"400112\"\n    },\n    {\n      \"QSid\": \"💝\",\n      \"QCid\": \"128157\",\n      \"AQLid\": \"62\",\n      \"QDes\": \"/礼物\",\n      \"EMCode\": \"400631\"\n    },\n    {\n      \"QSid\": \"🎀\",\n      \"QCid\": \"127872\",\n      \"AQLid\": \"63\",\n      \"QDes\": \"/蝴蝶结\",\n      \"EMCode\": \"400184\"\n    },\n    {\n      \"QSid\": \"🎈\",\n      \"QCid\": \"127880\",\n      \"AQLid\": \"64\",\n      \"QDes\": \"/气球\",\n      \"EMCode\": \"400197\"\n    },\n    {\n      \"QSid\": \"🐚\",\n      \"QCid\": \"128026\",\n      \"AQLid\": \"65\",\n      \"QDes\": \"/海螺\",\n      \"EMCode\": \"400314\"\n    },\n    {\n      \"QSid\": \"💍\",\n      \"QCid\": \"128141\",\n      \"AQLid\": \"66\",\n      \"QDes\": \"/戒指\",\n      \"EMCode\": \"400615\"\n    },\n    {\n      \"QSid\": \"💣\",\n      \"QCid\": \"128163\",\n      \"AQLid\": \"67\",\n      \"QDes\": \"/炸弹\",\n      \"EMCode\": \"400637\"\n    },\n    {\n      \"QSid\": \"👑\",\n      \"QCid\": \"128081\",\n      \"AQLid\": \"68\",\n      \"QDes\": \"/皇冠\",\n      \"EMCode\": \"400432\"\n    },\n    {\n      \"QSid\": \"🔔\",\n      \"QCid\": \"128276\",\n      \"AQLid\": \"69\",\n      \"QDes\": \"/铃铛\",\n      \"EMCode\": \"400751\"\n    },\n    {\n      \"QSid\": \"⭐\",\n      \"QCid\": \"11088\",\n      \"AQLid\": \"70\",\n      \"QDes\": \"/星星\",\n      \"EMCode\": \"401686\"\n    },\n    {\n      \"QSid\": \"✨\",\n      \"QCid\": \"10024\",\n      \"AQLid\": \"71\",\n      \"QDes\": \"/闪光\",\n      \"EMCode\": \"401137\"\n    },\n    {\n      \"QSid\": \"💨\",\n      \"QCid\": \"128168\",\n      \"AQLid\": \"72\",\n      \"QDes\": \"/吹气\",\n      \"EMCode\": \"400642\"\n    },\n    {\n      \"QSid\": \"💦\",\n      \"QCid\": \"128166\",\n      \"AQLid\": \"73\",\n      \"QDes\": \"/水\",\n      \"EMCode\": \"400640\"\n    },\n    {\n      \"QSid\": \"🔥\",\n      \"QCid\": \"128293\",\n      \"AQLid\": \"74\",\n      \"QDes\": \"/火\",\n      \"EMCode\": \"400768\"\n    },\n    {\n      \"QSid\": \"🏆\",\n      \"QCid\": \"127942\",\n      \"AQLid\": \"75\",\n      \"QDes\": \"/奖杯\",\n      \"EMCode\": \"400256\"\n    },\n    {\n      \"QSid\": \"💰\",\n      \"QCid\": \"128176\",\n      \"AQLid\": \"76\",\n      \"QDes\": \"/钱\",\n      \"EMCode\": \"400655\"\n    },\n    {\n      \"QSid\": \"💤\",\n      \"QCid\": \"128164\",\n      \"AQLid\": \"77\",\n      \"QDes\": \"/睡觉\",\n      \"EMCode\": \"400638\"\n    },\n    {\n      \"QSid\": \"⚡\",\n      \"QCid\": \"9889\",\n      \"AQLid\": \"78\",\n      \"QDes\": \"/闪电\",\n      \"EMCode\": \"401685\"\n    },\n    {\n      \"QSid\": \"👣\",\n      \"QCid\": \"128099\",\n      \"AQLid\": \"79\",\n      \"QDes\": \"/脚印\",\n      \"EMCode\": \"400450\"\n    },\n    {\n      \"QSid\": \"💩\",\n      \"QCid\": \"128169\",\n      \"AQLid\": \"80\",\n      \"QDes\": \"/便便\",\n      \"EMCode\": \"400643\"\n    },\n    {\n      \"QSid\": \"💉\",\n      \"QCid\": \"128137\",\n      \"AQLid\": \"81\",\n      \"QDes\": \"/打针\",\n      \"EMCode\": \"400611\"\n    },\n    {\n      \"QSid\": \"♨\",\n      \"QCid\": \"9832\",\n      \"AQLid\": \"82\",\n      \"QDes\": \"/热\",\n      \"EMCode\": \"401287\"\n    },\n    {\n      \"QSid\": \"📫\",\n      \"QCid\": \"128235\",\n      \"AQLid\": \"83\",\n      \"QDes\": \"/邮箱\",\n      \"EMCode\": \"400714\"\n    },\n    {\n      \"QSid\": \"🔑\",\n      \"QCid\": \"128273\",\n      \"AQLid\": \"84\",\n      \"QDes\": \"/钥匙\",\n      \"EMCode\": \"400748\"\n    },\n    {\n      \"QSid\": \"🔒\",\n      \"QCid\": \"128274\",\n      \"AQLid\": \"85\",\n      \"QDes\": \"/锁\",\n      \"EMCode\": \"400749\"\n    },\n    {\n      \"QSid\": \"✈\",\n      \"QCid\": \"9992\",\n      \"AQLid\": \"86\",\n      \"QDes\": \"/飞机\",\n      \"EMCode\": \"401298\"\n    },\n    {\n      \"QSid\": \"🚄\",\n      \"QCid\": \"128644\",\n      \"AQLid\": \"87\",\n      \"QDes\": \"/列车\",\n      \"EMCode\": \"400942\"\n    },\n    {\n      \"QSid\": \"🚗\",\n      \"QCid\": \"128663\",\n      \"AQLid\": \"88\",\n      \"QDes\": \"/汽车\",\n      \"EMCode\": \"400961\"\n    },\n    {\n      \"QSid\": \"🚤\",\n      \"QCid\": \"128676\",\n      \"AQLid\": \"89\",\n      \"QDes\": \"/快艇\",\n      \"EMCode\": \"400979\"\n    },\n    {\n      \"QSid\": \"🚲\",\n      \"QCid\": \"128690\",\n      \"AQLid\": \"90\",\n      \"QDes\": \"/自行车\",\n      \"EMCode\": \"400993\"\n    },\n    {\n      \"QSid\": \"🐎\",\n      \"QCid\": \"128014\",\n      \"AQLid\": \"91\",\n      \"QDes\": \"/骑马\",\n      \"EMCode\": \"400302\"\n    },\n    {\n      \"QSid\": \"🚀\",\n      \"QCid\": \"128640\",\n      \"AQLid\": \"92\",\n      \"QDes\": \"/火箭\",\n      \"EMCode\": \"400938\"\n    },\n    {\n      \"QSid\": \"🚌\",\n      \"QCid\": \"128652\",\n      \"AQLid\": \"93\",\n      \"QDes\": \"/公交\",\n      \"EMCode\": \"400950\"\n    },\n    {\n      \"QSid\": \"⛵\",\n      \"QCid\": \"9973\",\n      \"AQLid\": \"94\",\n      \"QDes\": \"/船\",\n      \"EMCode\": \"401294\"\n    },\n    {\n      \"QSid\": \"👩\",\n      \"QCid\": \"128105\",\n      \"AQLid\": \"95\",\n      \"QDes\": \"/妈妈\",\n      \"EMCode\": \"400482\"\n    },\n    {\n      \"QSid\": \"👨\",\n      \"QCid\": \"128104\",\n      \"AQLid\": \"96\",\n      \"QDes\": \"/爸爸\",\n      \"EMCode\": \"400465\"\n    },\n    {\n      \"QSid\": \"👧\",\n      \"QCid\": \"128103\",\n      \"AQLid\": \"97\",\n      \"QDes\": \"/女孩\",\n      \"EMCode\": \"400459\"\n    },\n    {\n      \"QSid\": \"👦\",\n      \"QCid\": \"128102\",\n      \"AQLid\": \"98\",\n      \"QDes\": \"/男孩\",\n      \"EMCode\": \"400453\"\n    },\n    {\n      \"QSid\": \"🐵\",\n      \"QCid\": \"128053\",\n      \"AQLid\": \"99\",\n      \"QDes\": \"/猴\",\n      \"EMCode\": \"400341\"\n    },\n    {\n      \"QSid\": \"🐙\",\n      \"QCid\": \"128025\",\n      \"AQLid\": \"100\",\n      \"QDes\": \"/章鱼\",\n      \"EMCode\": \"400313\"\n    },\n    {\n      \"QSid\": \"🐷\",\n      \"QCid\": \"128055\",\n      \"AQLid\": \"101\",\n      \"QDes\": \"/猪\",\n      \"EMCode\": \"400343\"\n    },\n    {\n      \"QSid\": \"💀\",\n      \"QCid\": \"128128\",\n      \"AQLid\": \"102\",\n      \"QDes\": \"/骷髅\",\n      \"EMCode\": \"400572\"\n    },\n    {\n      \"QSid\": \"🐤\",\n      \"QCid\": \"128036\",\n      \"AQLid\": \"103\",\n      \"QDes\": \"/小鸡\",\n      \"EMCode\": \"400324\"\n    },\n    {\n      \"QSid\": \"🐨\",\n      \"QCid\": \"128040\",\n      \"AQLid\": \"104\",\n      \"QDes\": \"/树懒\",\n      \"EMCode\": \"400328\"\n    },\n    {\n      \"QSid\": \"🐮\",\n      \"QCid\": \"128046\",\n      \"AQLid\": \"105\",\n      \"QDes\": \"/牛\",\n      \"EMCode\": \"400334\"\n    },\n    {\n      \"QSid\": \"🐔\",\n      \"QCid\": \"128020\",\n      \"AQLid\": \"106\",\n      \"QDes\": \"/公鸡\",\n      \"EMCode\": \"400308\"\n    },\n    {\n      \"QSid\": \"🐸\",\n      \"QCid\": \"128056\",\n      \"AQLid\": \"107\",\n      \"QDes\": \"/青蛙\",\n      \"EMCode\": \"400344\"\n    },\n    {\n      \"QSid\": \"👻\",\n      \"QCid\": \"128123\",\n      \"AQLid\": \"108\",\n      \"QDes\": \"/幽灵\",\n      \"EMCode\": \"400562\"\n    },\n    {\n      \"QSid\": \"🐛\",\n      \"QCid\": \"128027\",\n      \"AQLid\": \"109\",\n      \"QDes\": \"/虫\",\n      \"EMCode\": \"400315\"\n    },\n    {\n      \"QSid\": \"🐠\",\n      \"QCid\": \"128032\",\n      \"AQLid\": \"110\",\n      \"QDes\": \"/鱼\",\n      \"EMCode\": \"400320\"\n    },\n    {\n      \"QSid\": \"🐶\",\n      \"QCid\": \"128054\",\n      \"AQLid\": \"111\",\n      \"QDes\": \"/狗\",\n      \"EMCode\": \"400342\"\n    },\n    {\n      \"QSid\": \"🐯\",\n      \"QCid\": \"128047\",\n      \"AQLid\": \"112\",\n      \"QDes\": \"/老虎\",\n      \"EMCode\": \"400335\"\n    },\n    {\n      \"QSid\": \"👼\",\n      \"QCid\": \"128124\",\n      \"AQLid\": \"113\",\n      \"QDes\": \"/天使\",\n      \"EMCode\": \"400563\"\n    },\n    {\n      \"QSid\": \"🐧\",\n      \"QCid\": \"128039\",\n      \"AQLid\": \"114\",\n      \"QDes\": \"/企鹅\",\n      \"EMCode\": \"400327\"\n    },\n    {\n      \"QSid\": \"🐳\",\n      \"QCid\": \"128051\",\n      \"AQLid\": \"115\",\n      \"QDes\": \"/鲸鱼\",\n      \"EMCode\": \"400339\"\n    },\n    {\n      \"QSid\": \"🐭\",\n      \"QCid\": \"128045\",\n      \"AQLid\": \"116\",\n      \"QDes\": \"/老鼠\",\n      \"EMCode\": \"400333\"\n    },\n    {\n      \"QSid\": \"👒\",\n      \"QCid\": \"128082\",\n      \"AQLid\": \"117\",\n      \"QDes\": \"/帽子\",\n      \"EMCode\": \"400433\"\n    },\n    {\n      \"QSid\": \"👗\",\n      \"QCid\": \"128087\",\n      \"AQLid\": \"118\",\n      \"QDes\": \"/连衣裙\",\n      \"EMCode\": \"400438\"\n    },\n    {\n      \"QSid\": \"💄\",\n      \"QCid\": \"128132\",\n      \"AQLid\": \"119\",\n      \"QDes\": \"/口红\",\n      \"EMCode\": \"400591\"\n    },\n    {\n      \"QSid\": \"👠\",\n      \"QCid\": \"128096\",\n      \"AQLid\": \"120\",\n      \"QDes\": \"/高跟鞋\",\n      \"EMCode\": \"400447\"\n    },\n    {\n      \"QSid\": \"👢\",\n      \"QCid\": \"128098\",\n      \"AQLid\": \"121\",\n      \"QDes\": \"/靴子\",\n      \"EMCode\": \"400449\"\n    },\n    {\n      \"QSid\": \"🌂\",\n      \"QCid\": \"127746\",\n      \"AQLid\": \"122\",\n      \"QDes\": \"/雨伞\",\n      \"EMCode\": \"400077\"\n    },\n    {\n      \"QSid\": \"👜\",\n      \"QCid\": \"128092\",\n      \"AQLid\": \"123\",\n      \"QDes\": \"/包\",\n      \"EMCode\": \"400443\"\n    },\n    {\n      \"QSid\": \"👙\",\n      \"QCid\": \"128089\",\n      \"AQLid\": \"124\",\n      \"QDes\": \"/内衣\",\n      \"EMCode\": \"400440\"\n    },\n    {\n      \"QSid\": \"👕\",\n      \"QCid\": \"128085\",\n      \"AQLid\": \"125\",\n      \"QDes\": \"/衣服\",\n      \"EMCode\": \"400436\"\n    },\n    {\n      \"QSid\": \"👟\",\n      \"QCid\": \"128095\",\n      \"AQLid\": \"126\",\n      \"QDes\": \"/鞋子\",\n      \"EMCode\": \"400446\"\n    },\n    {\n      \"QSid\": \"☁\",\n      \"QCid\": \"9729\",\n      \"AQLid\": \"127\",\n      \"QDes\": \"/云朵\",\n      \"EMCode\": \"401329\"\n    },\n    {\n      \"QSid\": \"☀\",\n      \"QCid\": \"9728\",\n      \"AQLid\": \"128\",\n      \"QDes\": \"/晴天\",\n      \"EMCode\": \"401328\"\n    },\n    {\n      \"QSid\": \"☔\",\n      \"QCid\": \"9748\",\n      \"AQLid\": \"129\",\n      \"QDes\": \"/雨天\",\n      \"EMCode\": \"401342\"\n    },\n    {\n      \"QSid\": \"🌙\",\n      \"QCid\": \"127769\",\n      \"AQLid\": \"130\",\n      \"QDes\": \"/月亮\",\n      \"EMCode\": \"400100\"\n    },\n    {\n      \"QSid\": \"⛄\",\n      \"QCid\": \"9924\",\n      \"AQLid\": \"131\",\n      \"QDes\": \"/雪人\",\n      \"EMCode\": \"401346\"\n    },\n    {\n      \"QSid\": \"⭕\",\n      \"QCid\": \"11093\",\n      \"AQLid\": \"132\",\n      \"QDes\": \"/正确\",\n      \"EMCode\": \"401687\"\n    },\n    {\n      \"QSid\": \"❌\",\n      \"QCid\": \"10060\",\n      \"AQLid\": \"133\",\n      \"QDes\": \"/错误\",\n      \"EMCode\": \"401142\"\n    },\n    {\n      \"QSid\": \"❔\",\n      \"QCid\": \"10068\",\n      \"AQLid\": \"134\",\n      \"QDes\": \"/问号\",\n      \"EMCode\": \"401145\"\n    },\n    {\n      \"QSid\": \"❕\",\n      \"QCid\": \"10069\",\n      \"AQLid\": \"135\",\n      \"QDes\": \"/叹号\",\n      \"EMCode\": \"401146\"\n    },\n    {\n      \"QSid\": \"☎\",\n      \"QCid\": \"9742\",\n      \"AQLid\": \"136\",\n      \"QDes\": \"/电话\",\n      \"EMCode\": \"401398\"\n    },\n    {\n      \"QSid\": \"📷\",\n      \"QCid\": \"128247\",\n      \"AQLid\": \"137\",\n      \"QDes\": \"/相机\",\n      \"EMCode\": \"400726\"\n    },\n    {\n      \"QSid\": \"📱\",\n      \"QCid\": \"128241\",\n      \"AQLid\": \"138\",\n      \"QDes\": \"/手机\",\n      \"EMCode\": \"400720\"\n    },\n    {\n      \"QSid\": \"📠\",\n      \"QCid\": \"128224\",\n      \"AQLid\": \"139\",\n      \"QDes\": \"/传真\",\n      \"EMCode\": \"400703\"\n    },\n    {\n      \"QSid\": \"💻\",\n      \"QCid\": \"128187\",\n      \"AQLid\": \"140\",\n      \"QDes\": \"/电脑\",\n      \"EMCode\": \"400666\"\n    },\n    {\n      \"QSid\": \"🎥\",\n      \"QCid\": \"127909\",\n      \"AQLid\": \"141\",\n      \"QDes\": \"/摄影机\",\n      \"EMCode\": \"400214\"\n    },\n    {\n      \"QSid\": \"🎤\",\n      \"QCid\": \"127908\",\n      \"AQLid\": \"142\",\n      \"QDes\": \"/话筒\",\n      \"EMCode\": \"400213\"\n    },\n    {\n      \"QSid\": \"🔫\",\n      \"QCid\": \"128299\",\n      \"AQLid\": \"143\",\n      \"QDes\": \"/手枪\",\n      \"EMCode\": \"400774\"\n    },\n    {\n      \"QSid\": \"💿\",\n      \"QCid\": \"128191\",\n      \"AQLid\": \"144\",\n      \"QDes\": \"/光碟\",\n      \"EMCode\": \"400670\"\n    },\n    {\n      \"QSid\": \"💓\",\n      \"QCid\": \"128147\",\n      \"AQLid\": \"145\",\n      \"QDes\": \"/爱心\",\n      \"EMCode\": \"400621\"\n    },\n    {\n      \"QSid\": \"♣\",\n      \"QCid\": \"9827\",\n      \"AQLid\": \"146\",\n      \"QDes\": \"/扑克\",\n      \"EMCode\": \"401385\"\n    },\n    {\n      \"QSid\": \"🀄\",\n      \"QCid\": \"126980\",\n      \"AQLid\": \"147\",\n      \"QDes\": \"/麻将\",\n      \"EMCode\": \"401386\"\n    },\n    {\n      \"QSid\": \"〽\",\n      \"QCid\": \"12349\",\n      \"AQLid\": \"148\",\n      \"QDes\": \"/股票\",\n      \"EMCode\": \"401691\"\n    },\n    {\n      \"QSid\": \"🎰\",\n      \"QCid\": \"127920\",\n      \"AQLid\": \"149\",\n      \"QDes\": \"/老虎机\",\n      \"EMCode\": \"400225\"\n    },\n    {\n      \"QSid\": \"🚥\",\n      \"QCid\": \"128677\",\n      \"AQLid\": \"150\",\n      \"QDes\": \"/信号灯\",\n      \"EMCode\": \"400980\"\n    },\n    {\n      \"QSid\": \"🚧\",\n      \"QCid\": \"128679\",\n      \"AQLid\": \"151\",\n      \"QDes\": \"/路障\",\n      \"EMCode\": \"400982\"\n    },\n    {\n      \"QSid\": \"🎸\",\n      \"QCid\": \"127928\",\n      \"AQLid\": \"152\",\n      \"QDes\": \"/吉他\",\n      \"EMCode\": \"400233\"\n    },\n    {\n      \"QSid\": \"💈\",\n      \"QCid\": \"128136\",\n      \"AQLid\": \"153\",\n      \"QDes\": \"/理发厅\",\n      \"EMCode\": \"400610\"\n    },\n    {\n      \"QSid\": \"🛀\",\n      \"QCid\": \"128704\",\n      \"AQLid\": \"154\",\n      \"QDes\": \"/浴缸\",\n      \"EMCode\": \"401022\"\n    },\n    {\n      \"QSid\": \"🚽\",\n      \"QCid\": \"128701\",\n      \"AQLid\": \"155\",\n      \"QDes\": \"/马桶\",\n      \"EMCode\": \"401019\"\n    },\n    {\n      \"QSid\": \"🏠\",\n      \"QCid\": \"127968\",\n      \"AQLid\": \"156\",\n      \"QDes\": \"/家\",\n      \"EMCode\": \"400271\"\n    },\n    {\n      \"QSid\": \"⛪\",\n      \"QCid\": \"9962\",\n      \"AQLid\": \"157\",\n      \"QDes\": \"/教堂\",\n      \"EMCode\": \"401281\"\n    },\n    {\n      \"QSid\": \"🏦\",\n      \"QCid\": \"127974\",\n      \"AQLid\": \"158\",\n      \"QDes\": \"/银行\",\n      \"EMCode\": \"400277\"\n    },\n    {\n      \"QSid\": \"🏥\",\n      \"QCid\": \"127973\",\n      \"AQLid\": \"159\",\n      \"QDes\": \"/医院\",\n      \"EMCode\": \"400276\"\n    },\n    {\n      \"QSid\": \"🏨\",\n      \"QCid\": \"127976\",\n      \"AQLid\": \"160\",\n      \"QDes\": \"/酒店\",\n      \"EMCode\": \"400279\"\n    },\n    {\n      \"QSid\": \"🏧\",\n      \"QCid\": \"127975\",\n      \"AQLid\": \"161\",\n      \"QDes\": \"/取款机\",\n      \"EMCode\": \"400278\"\n    },\n    {\n      \"QSid\": \"🏪\",\n      \"QCid\": \"127978\",\n      \"AQLid\": \"162\",\n      \"QDes\": \"/便利店\",\n      \"EMCode\": \"400281\"\n    },\n    {\n      \"QSid\": \"🚹\",\n      \"QCid\": \"128697\",\n      \"AQLid\": \"163\",\n      \"QDes\": \"/男性\",\n      \"EMCode\": \"401015\"\n    },\n    {\n      \"QSid\": \"🚺\",\n      \"QCid\": \"128698\",\n      \"AQLid\": \"164\",\n      \"QDes\": \"/女性\",\n      \"EMCode\": \"401016\"\n    }\n  ]\n}"
  },
  {
    "path": "icon.py",
    "content": "qq_icon_png = b'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'\ngithub_mark = b'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'\n"
  },
  {
    "path": "install.ps1",
    "content": "pyinstaller -i icon.ico -w -F ./GUI.py\nsleep 5"
  },
  {
    "path": "proto/RichMsg.proto",
    "content": "syntax = \"proto3\";\n\nmessage ForwardExtra {\n  int32 forward_orgId = 1;\n  string forward_orgUin = 2;\n  int32 forward_orgUinType = 3;\n  string forward_orgUrl = 4;\n  string forward_thumbPath = 5;\n  int32 forward_orgFileSizeType = 6;\n}\n\nmessage PicRec {\n  string localPath = 1;\n  int32 size = 2;\n  int32 type = 3;\n  bool isRead = 4;\n  string uuid = 5;\n  string md5 = 6;\n  string serverStorageSource = 7;\n  string thumbMsgUrl = 8;\n  string bigMsgUrl = 9;\n  string rawMsgUrl = 10;\n  int32 fileSizeFlag = 11;\n  int32 uiOperatorFlag = 12;\n  ForwardExtra forwardInfo = 13;\n  int32 version = 14;\n  int32 isReport = 15;\n  uint64 groupFileID = 16;\n  string localUUID = 17;\n  int32 preDownState = 18;\n  int32 preDownNetwork = 19;\n  int32 previewed = 20;\n  uint32 uint32_thumb_width = 21;\n  uint32 uint32_thumb_height = 22;\n  uint32 uint32_width = 23;\n  uint32 uint32_height = 24;\n  uint32 uint32_image_type = 25;\n  uint32 uint32_show_len = 26;\n  uint32 uint32_download_len = 27;\n  uint32 uint32_current_len = 28;\n  uint32 notPreDownloadReason = 29;\n  bool enableEnc = 30;\n  string bigThumbMsgUrl = 31;\n  bytes bytes_pb_reserved = 32;\n  bool bool_story_pic_send_to_recent = 33;\n}\nmessage MarketFaceRec {\n\n}\n\nmessage Msg {\n  repeated Elem elems = 1;\n}\n\nmessage Elem {\n  bytes textMsg = 1;\n  bytes  picMsg = 2;\n  MarketFaceRec markfaceMsg = 3;\n  string sourceMsgInfo = 4;\n}\n\nmessage SafeMoreInfo {\n  string strMsgTxt = 1;\n  string strFromMobile = 2;\n  string strFromName = 3;\n}\n\nmessage Test {\n  string str = 16;\n}\n\nmessage PttRec {\n  string localPath = 1;\n  uint64 size = 2;\n  uint32 type = 3;\n  bool isRead = 4;\n  string uuid = 5;\n  string md5 = 6;\n  string serverStorageSource = 7;\n  int32 version = 8;\n  int32 isReport = 9;\n  int32 pttFlag = 10;\n  uint64 groupFileID = 11;\n  string sttText = 12;\n  int32 longPttVipFlag = 13;\n  bool expandStt = 14;\n  string group_file_key = 15;\n  uint64 msgRecTime = 16;\n  uint64 msgTime = 17;\n  uint32 voiceType = 18;\n  uint32 voiceLength = 19;\n  uint32 voiceChangeFlag = 20;\n  string directUrl = 21;\n  uint32 busiType = 22;\n  string fullLocalPath = 23;\n  uint64 extFlag = 24;\n  uint32 redpack_type = 25;\n  uint32 autototext_voice = 26;\n}"
  },
  {
    "path": "proto/RichMsg_pb2.py",
    "content": "# -*- coding: utf-8 -*-\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: RichMsg.proto\n\"\"\"Generated protocol buffer code.\"\"\"\nfrom google.protobuf.internal import builder as _builder\nfrom google.protobuf import descriptor as _descriptor\nfrom google.protobuf import descriptor_pool as _descriptor_pool\nfrom google.protobuf import symbol_database as _symbol_database\n# @@protoc_insertion_point(imports)\n\n_sym_db = _symbol_database.Default()\n\n\n\n\nDESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\\n\\rRichMsg.proto\\\"\\xad\\x01\\n\\x0c\\x46orwardExtra\\x12\\x15\\n\\rforward_orgId\\x18\\x01 \\x01(\\x05\\x12\\x16\\n\\x0e\\x66orward_orgUin\\x18\\x02 \\x01(\\t\\x12\\x1a\\n\\x12\\x66orward_orgUinType\\x18\\x03 \\x01(\\x05\\x12\\x16\\n\\x0e\\x66orward_orgUrl\\x18\\x04 \\x01(\\t\\x12\\x19\\n\\x11\\x66orward_thumbPath\\x18\\x05 \\x01(\\t\\x12\\x1f\\n\\x17\\x66orward_orgFileSizeType\\x18\\x06 \\x01(\\x05\\\"\\xf6\\x05\\n\\x06PicRec\\x12\\x11\\n\\tlocalPath\\x18\\x01 \\x01(\\t\\x12\\x0c\\n\\x04size\\x18\\x02 \\x01(\\x05\\x12\\x0c\\n\\x04type\\x18\\x03 \\x01(\\x05\\x12\\x0e\\n\\x06isRead\\x18\\x04 \\x01(\\x08\\x12\\x0c\\n\\x04uuid\\x18\\x05 \\x01(\\t\\x12\\x0b\\n\\x03md5\\x18\\x06 \\x01(\\t\\x12\\x1b\\n\\x13serverStorageSource\\x18\\x07 \\x01(\\t\\x12\\x13\\n\\x0bthumbMsgUrl\\x18\\x08 \\x01(\\t\\x12\\x11\\n\\tbigMsgUrl\\x18\\t \\x01(\\t\\x12\\x11\\n\\trawMsgUrl\\x18\\n \\x01(\\t\\x12\\x14\\n\\x0c\\x66ileSizeFlag\\x18\\x0b \\x01(\\x05\\x12\\x16\\n\\x0euiOperatorFlag\\x18\\x0c \\x01(\\x05\\x12\\\"\\n\\x0b\\x66orwardInfo\\x18\\r \\x01(\\x0b\\x32\\r.ForwardExtra\\x12\\x0f\\n\\x07version\\x18\\x0e \\x01(\\x05\\x12\\x10\\n\\x08isReport\\x18\\x0f \\x01(\\x05\\x12\\x13\\n\\x0bgroupFileID\\x18\\x10 \\x01(\\x04\\x12\\x11\\n\\tlocalUUID\\x18\\x11 \\x01(\\t\\x12\\x14\\n\\x0cpreDownState\\x18\\x12 \\x01(\\x05\\x12\\x16\\n\\x0epreDownNetwork\\x18\\x13 \\x01(\\x05\\x12\\x11\\n\\tpreviewed\\x18\\x14 \\x01(\\x05\\x12\\x1a\\n\\x12uint32_thumb_width\\x18\\x15 \\x01(\\r\\x12\\x1b\\n\\x13uint32_thumb_height\\x18\\x16 \\x01(\\r\\x12\\x14\\n\\x0cuint32_width\\x18\\x17 \\x01(\\r\\x12\\x15\\n\\ruint32_height\\x18\\x18 \\x01(\\r\\x12\\x19\\n\\x11uint32_image_type\\x18\\x19 \\x01(\\r\\x12\\x17\\n\\x0fuint32_show_len\\x18\\x1a \\x01(\\r\\x12\\x1b\\n\\x13uint32_download_len\\x18\\x1b \\x01(\\r\\x12\\x1a\\n\\x12uint32_current_len\\x18\\x1c \\x01(\\r\\x12\\x1c\\n\\x14notPreDownloadReason\\x18\\x1d \\x01(\\r\\x12\\x11\\n\\tenableEnc\\x18\\x1e \\x01(\\x08\\x12\\x16\\n\\x0e\\x62igThumbMsgUrl\\x18\\x1f \\x01(\\t\\x12\\x19\\n\\x11\\x62ytes_pb_reserved\\x18  \\x01(\\x0c\\x12%\\n\\x1d\\x62ool_story_pic_send_to_recent\\x18! \\x01(\\x08\\\"\\x0f\\n\\rMarketFaceRec\\\"\\x1b\\n\\x03Msg\\x12\\x14\\n\\x05\\x65lems\\x18\\x01 \\x03(\\x0b\\x32\\x05.Elem\\\"c\\n\\x04\\x45lem\\x12\\x0f\\n\\x07textMsg\\x18\\x01 \\x01(\\x0c\\x12\\x0e\\n\\x06picMsg\\x18\\x02 \\x01(\\x0c\\x12#\\n\\x0bmarkfaceMsg\\x18\\x03 \\x01(\\x0b\\x32\\x0e.MarketFaceRec\\x12\\x15\\n\\rsourceMsgInfo\\x18\\x04 \\x01(\\t\\\"M\\n\\x0cSafeMoreInfo\\x12\\x11\\n\\tstrMsgTxt\\x18\\x01 \\x01(\\t\\x12\\x15\\n\\rstrFromMobile\\x18\\x02 \\x01(\\t\\x12\\x13\\n\\x0bstrFromName\\x18\\x03 \\x01(\\t\\\"\\x13\\n\\x04Test\\x12\\x0b\\n\\x03str\\x18\\x10 \\x01(\\t\\\"\\xff\\x03\\n\\x06PttRec\\x12\\x11\\n\\tlocalPath\\x18\\x01 \\x01(\\t\\x12\\x0c\\n\\x04size\\x18\\x02 \\x01(\\x04\\x12\\x0c\\n\\x04type\\x18\\x03 \\x01(\\r\\x12\\x0e\\n\\x06isRead\\x18\\x04 \\x01(\\x08\\x12\\x0c\\n\\x04uuid\\x18\\x05 \\x01(\\t\\x12\\x0b\\n\\x03md5\\x18\\x06 \\x01(\\t\\x12\\x1b\\n\\x13serverStorageSource\\x18\\x07 \\x01(\\t\\x12\\x0f\\n\\x07version\\x18\\x08 \\x01(\\x05\\x12\\x10\\n\\x08isReport\\x18\\t \\x01(\\x05\\x12\\x0f\\n\\x07pttFlag\\x18\\n \\x01(\\x05\\x12\\x13\\n\\x0bgroupFileID\\x18\\x0b \\x01(\\x04\\x12\\x0f\\n\\x07sttText\\x18\\x0c \\x01(\\t\\x12\\x16\\n\\x0elongPttVipFlag\\x18\\r \\x01(\\x05\\x12\\x11\\n\\texpandStt\\x18\\x0e \\x01(\\x08\\x12\\x16\\n\\x0egroup_file_key\\x18\\x0f \\x01(\\t\\x12\\x12\\n\\nmsgRecTime\\x18\\x10 \\x01(\\x04\\x12\\x0f\\n\\x07msgTime\\x18\\x11 \\x01(\\x04\\x12\\x11\\n\\tvoiceType\\x18\\x12 \\x01(\\r\\x12\\x13\\n\\x0bvoiceLength\\x18\\x13 \\x01(\\r\\x12\\x17\\n\\x0fvoiceChangeFlag\\x18\\x14 \\x01(\\r\\x12\\x11\\n\\tdirectUrl\\x18\\x15 \\x01(\\t\\x12\\x10\\n\\x08\\x62usiType\\x18\\x16 \\x01(\\r\\x12\\x15\\n\\rfullLocalPath\\x18\\x17 \\x01(\\t\\x12\\x0f\\n\\x07\\x65xtFlag\\x18\\x18 \\x01(\\x04\\x12\\x14\\n\\x0credpack_type\\x18\\x19 \\x01(\\r\\x12\\x18\\n\\x10\\x61utototext_voice\\x18\\x1a \\x01(\\rb\\x06proto3')\n\n_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals())\n_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'RichMsg_pb2', globals())\nif _descriptor._USE_C_DESCRIPTORS == False:\n\n  DESCRIPTOR._options = None\n  _FORWARDEXTRA._serialized_start=18\n  _FORWARDEXTRA._serialized_end=191\n  _PICREC._serialized_start=194\n  _PICREC._serialized_end=952\n  _MARKETFACEREC._serialized_start=954\n  _MARKETFACEREC._serialized_end=969\n  _MSG._serialized_start=971\n  _MSG._serialized_end=998\n  _ELEM._serialized_start=1000\n  _ELEM._serialized_end=1099\n  _SAFEMOREINFO._serialized_start=1101\n  _SAFEMOREINFO._serialized_end=1178\n  _TEST._serialized_start=1180\n  _TEST._serialized_end=1199\n  _PTTREC._serialized_start=1202\n  _PTTREC._serialized_end=1713\n# @@protoc_insertion_point(module_scope)\n"
  },
  {
    "path": "proto/__init__.py",
    "content": "# coding=utf-8\n"
  },
  {
    "path": "proto/compile",
    "content": "protoc RichMsg.proto --python_out=."
  },
  {
    "path": "requirements.txt",
    "content": "tk\nprotobuf\nav\npilk"
  }
]