Skip to content
This repository has been archived by the owner on Aug 23, 2020. It is now read-only.

Releases: pandolia/qqbot

QQBot

11 Jun 03:03
Compare
Choose a tag to compare

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

25 May 11:51
Compare
Choose a tag to compare

2017-05-25 qqbot v2.2.18
1) 因协议调整, poll 消息时不再忽略 1202 代码。
2) 修正 setup.py 中的 bug ,(此 bug 导致需要手动安装依赖后,才能安装本程序)。
3) 修正 python3 下 qq 命令出错的 bug , 感谢 @007pig 反馈。

QQbot

25 May 06:27
Compare
Choose a tag to compare

修正setup.py中的bug。

QQbot

25 May 01:05
Compare
Choose a tag to compare

2017-05-25 qqbot v2.2.16
1) 因协议调整, poll 消息时不再忽略 1202 代码。

QQbot

24 May 08:04
Compare
Choose a tag to compare

2017-05-24 qqbot v2.2.15
1) 去掉 flask ,采用简单的 socket server 来显示二维码。
2) 因 webqq 协议调整,已可收到自己通过其他客户端发送的群消息。
3) 修正指定插件目录的路径名中存在中文时的编码错误问题,感谢网友 Accept 反馈

QQbot

17 May 11:54
Compare
Choose a tag to compare

2017-05-17 qqbot v2.2.14
1) 修正群内 全体禁言/解除全体禁言 通知到来时强制进行群成员更新的 bug。
2) 修正 fetch.fetchGroupTable 和 QContactDB.find 中的 bug ,感谢网友 ★匆匆★ 反馈。

QQBot

16 May 15:46
Compare
Choose a tag to compare

2017-05-16 qqbot v2.2.13
1) 增加 patchfetch 插件 。
2) 增加插件详细说明及插件列表,感谢 @feisuweb 分享插件
3) 修正群内 禁言/解除禁言 通知到来时强制进行群成员更新的 bug
4) pycharm-loader.py 增加了对插件模式的调试的支持, 感谢 @SuperMarioSF
5) bot 对象增加 started 属性,插件可通过检查 QQBot._bot.started 来确定本插件是在启动时被加载,还是在启动后被加载。

QQBot

15 May 15:45
Compare
Choose a tag to compare

2017-05-15 qqbot v2.2.12
1) 腾讯又将好友列表和群成员列表的接口调整回 5 月 12 日之前的模式了,因此 fetch.py 中的代码相应调整回 v2.2.9 。

QQBot

13 May 16:37
Compare
Choose a tag to compare

2017-05-14 qqbot v2.2.11
1) 修改 pycharm-loader.py 文件,感谢 @SuperMarioSF
2) 修正小部分情况下自动重启时无法读取到上次运行的 qq 号码的 bug (此 bug 几乎不影响使用)

QQBot

11 May 18:22
Compare
Choose a tag to compare

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 属性。
如果有网友的机器人程序利用了这两个属性,需要修改代码。