Releases: pandolia/qqbot
QQBot
2017-06-11 qqbot v2.3.1
一、主要修改:
1) 整理了程序的运行流程图,增加了 onInit/onQrcode/onUpdate/onPlug/onUnplug/onExpire 事件。请对照运行流程图查看各事件的发生时机。
2) 修改 QQBot 类的内部代码,将所有 classmethod 改写为 instancemethod 。采用单例模式运行,整个进程只有一个 QQBot 实例对象,该对象保存在 qqbot._bot 或 qqbot.QQBot._bot 中。用户无法调用 bot = QQBot() 来创建其他实例,只能通过 from qqbot import _bot 的方式获得这个实例。
3) 修改 RunBot 函数的参数,该函数只接受一个 argv 参数(v2.2版中该函数接受三个参数 botcls, qq, user),因此原来采用类继承扩展 qqbot 的方式已无法使用了。修改 QQBot.Login 方法的参数,原来的参数为 qq, user ,现在只有一个参数 argv 。
可以在 argv 参数中输入命令行参数,比原来的 qq,user 参数功能更强大。所有配置选项都可以在 argv 中输入。如果不提供 argv ,则会使用 sys.argv[1:] 。如:
bot.Login()
bot.Login(['-u', 'somebody', '-r', '-d'])
4) 将原 qslots.py 中的 回调函数 分离出来,移到 qqbot/plugins/sampleslots.py 中,qslots.py 中仅保留 onTermCommand 函数,且其文件名重名为 termbot.py 。
新增两个默认插件: qqbot.plugins.sampleslots, qqbot.plugins.schedrestart 。
增加一个功能:如果存在 qqbotdefault 的 package ,那么该 package 下的所有子模块会在 qqbot 启动时自动加载。
5) 修正某些 linux + python3 环境下用 root 用户运行时的中文编码错误,感谢 @Ninzero 反馈。
6) 讨论组成员增加 qq 属性,感谢网友 Fury 3 的帮助。
7) 修正某些情况下重启时无法读取到上次运行的登录 QQ 的bug 。
8) 修改完善文档。
二、v2.2版迁移说明:
本次升级并非 webqq 协议变更引起的,目前原 v2.2 版还能继续稳定使用,因此 v2.2 版的用户可以暂时不升级。
迁移之前需要将 v2.2.conf 重命名为 v2.3.conf ,并在文件中的 plugins 选项中增加 2 个默认插件:['qqbot.plugins.sampleslots', 'qqbot.plugins.schedrestart'],如果不需要也可以不增加。
(1) 插件模式
v2.2版中,如果是采用插件模式扩展 qqbot ,那么绝大部分情况下程序无需改动就可以在 v2.3 版中使用。仅仅要注意:如果插件设置为启动时自动加载,那么加载时间会提前至登录前(原来是登录成功后才加载),但插件中的 onPlug 函数会延迟到登录成功后才被调用,因此原插件内的最外层的初始化代码如果调用了 bot.List/SendTo 等接口,那么需要将这些代码移到 onPlug 函数内,例如,如果原插件 xxx.py 中最外层的代码有:
from qqbot import QQBot; bot = QQBot._bot
bl = bot.List('buddy', 'jack')
if bl:
bot.SendTo(bl[0], 'plug')
需要修改为:
def onPlug(bot):
bl = bot.List('buddy', 'jack')
if bl:
bot.SendTo(bl[0], 'plug')
当然,如果是登录后采用 hot-plug 的方式加载,那么原来的代码不修改也可以运行。但为了统一 hot-plug 和 auto-plug-at-start 的行为,建议还是按以上型式进行修改。
(2) 类继承模式或 RunBot
采用类继承方式扩展 QQBot 的方式已经废弃, RunBot 函数也已修改,请按插件模式改写代码。如果需要在 IDE 或 python-shell 里面测试,可参见文档第五节。
另外请注意:由于 RunBot 函数中调用了 Popen(sys.argv) 重启整个程序,因此该函数在 IDE 或 python-shell 中运行可能会出问题。只能直接在脚本文件中运行。
(3) 其他模式
如果使用了 qqbot 的内部代码,需要注意 QQBot 类的内部代码有较大的改变,且不允许用户自己调用其 __init__ 函数来构造 QQBot 实例(如: bot = QQBot() ),需要使用 from qqbot import _bot 来得到这个全局唯一的 QQBot 实例。
另外需要注意, Runbot 函数和 QQBot.Login 方法的参数都变了。
QQbot
QQbot
QQbot
QQbot
QQbot
QQBot
QQBot
QQBot
2017-05-14 qqbot v2.2.11
1) 修改 pycharm-loader.py 文件,感谢 @SuperMarioSF
2) 修正小部分情况下自动重启时无法读取到上次运行的 qq 号码的 bug (此 bug 几乎不影响使用)
QQBot
2017-05-12 qqbot v2.2.10
1) 根据测试结果, poll 消息时不再忽略 103 代码。
2) 绝大部分情况下,所有好友以及所有群成员的 qq 都可以绑定了,也就是说:绝大部分情况下, onQQMessage 中的 contact.qq 或 member.qq 都是有效的 QQ 号码。
感谢腾讯更改协议, webqq 可直接返回已绑定的 qq-uin 。
3) 本次更改协议的副作用:好友的 nick 属性和 mark 属性都不再有意义了(暂时),这两个属性永远都是 '#NULL' ,但可以使用好友的 name 属性。
如果有网友的机器人程序利用了这两个属性,需要修改代码。