tencent-connect / bot-docs

QQ频道机器人文档
MIT License
214 stars 241 forks source link

文档中获取频道成员列表的说明仍然是老版本的qqbot库。ppbot在import时在python3.9以上出现了不兼容的情况。希望能更新botpy的对应方法。 #242

Open Es1lama opened 1 month ago

Es1lama commented 1 month ago

对应的文档链接链接:https://bot.q.qq.com/wiki/develop/pythonsdk/api/member/get_guild_members.html

import qqbot时,会出现如下报错:

Traceback (most recent call last):
  File "d:\Desktop\temp\Pylab\qq-bot\1-0\1-2.获取用户列表.py", line 5, in <module>
    import qqbot
  File "C:\Users\esila\.conda\envs\qq-bot\Lib\site-packages\qqbot\__init__.py", line 3, in <module>
    from .qqbotcls import QQBot, QQBotSlot, QQBotSched, RunBot, _bot
  File "C:\Users\esila\.conda\envs\qq-bot\Lib\site-packages\qqbot\qqbotcls.py", line 20, in <module>
    from qqbot.qconf import QConf
  File "C:\Users\esila\.conda\envs\qq-bot\Lib\site-packages\qqbot\qconf.py", line 198, in <module>
    from qqbot.utf8logger import SetLogLevel, INFO, RAWINPUT, PRINT, ERROR
  File "C:\Users\esila\.conda\envs\qq-bot\Lib\site-packages\qqbot\utf8logger.py", line 10, in <module>
    from qqbot.common import PY3
  File "C:\Users\esila\.conda\envs\qq-bot\Lib\site-packages\qqbot\common.py", line 184, in <module>
    import html.parser; htmlUnescape = html.parser.HTMLParser().unescape
                                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
AttributeError: 'HTMLParser' object has no attribute 'unescape'

我询问chatgpt,它给出的解决方案如下: 这个报错是由于在 Python 3.9 及以上版本中,html.parser.HTMLParser().unescape 已被移除。在 Python 3.9 及以上的版本中,你可以使用 html.unescape 来代替 HTMLParser().unescape

解决方法:

你可以修改 qqbot 库中的文件,或者找到一个兼容的版本。如果你不想修改库文件,可以按照以下步骤解决:

  1. 找到 qqbot 的安装目录,并打开文件 utf8logger.py
  2. 在文件中找到这行代码:
    import html.parser; htmlUnescape = html.parser.HTMLParser().unescape

    将其修改为:

    import html; htmlUnescape = html.unescape

这将使用 html.unescape 函数,兼容 Python 3.9 及以上的版本。

或者:

你可以降级到 Python 3.8 或更低版本,这样 html.parser.HTMLParser().unescape 就仍然存在。

如果这个方法不起作用,可能需要使用其他兼容的机器人库,例如 botpy 或者查看 qqbot 是否有更新版本来修复这个问题。

最终,我希望能够使用最新版本的库,来获取频道成员列表。当然,可能库中有对应的方法,本人水平低下,无法读懂,请多海涵,谢谢!