forked from pandolia/qqbot
-
Notifications
You must be signed in to change notification settings - Fork 0
/
changes
367 lines (250 loc) · 24.3 KB
/
changes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
2017-07-02 qqbot v2.3.4
1) 修正多行消息直接发送给 IRC 客户端的 bug
2017-07-02 qqbot v2.3.3
1) 增加 --daemon 选项,在 UNIX 类系统中可以将 qqbot 放到后台运行,即便控制台窗口关闭也不会停止运行。
2) 修正某些系统下 socket-server 出现 accept-timeout 的错误。
3) 修改 pickle 文件的命名为:v2.x-pyx-xxx.pickle 。
4) 增加 CronTrigger 引用,规避打包时的潜在 bug 。
5) 增加一个插件: qqbot.plugins.miniirc ,可在 linux 系统中使用 IRC 客户端和 QQ 好友/群/讨论组 聊天,
详见 https://github.com/pandolia/qqbot/blob/master/qqbot/plugins/miniirc.md 。
感谢 @sjdy521 的大力帮助。
2017-06-13 qqbot v2.3.2
1) 原 onExpire 扩充为 onExit 函数,在 QQBot 停止、重启、登录过期、未知错误时被调用。原 onExpire 被删除。
2) 修改默认插件 sampleslots 中的 onQQMessage 函数,该函数仅回复自己在群内发的 “--version” 。
3) 修改文档中 qqbotsched 的 day_of_week 参数说明, 0 代表周一, 6 代表周日。
4) 增加功能: QQBot-term 服务器端口号设置为 0 时,将不会开启此服务器。
5) 修正 “因协议更改引起的部分表情被解析为 /惊讶 " 的错误。
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 方法的参数都变了。
2017-05-26 qqbot v2.2.19
1) 因协议调整,修正“群内禁言消息误报为自己发的消息”的问题。
2017-05-25 qqbot v2.2.18
1) 因协议调整, poll 消息时不再忽略 1202 代码。
2) 修正 setup.py 中的 bug ,(此 bug 导致需要手动安装依赖后,才能安装本程序)。
3) 修正 python3 下 qq 命令出错的 bug , 感谢 @007pig 反馈。
2017-05-24 qqbot v2.2.15
1) 去掉 flask ,采用简单的 socket server 来显示二维码。
2) 因 webqq 协议调整,已可收到自己通过其他客户端发送的群消息。
3) 修正指定插件目录的路径名中存在中文时的编码错误问题,感谢网友 Accept 反馈
2017-05-17 qqbot v2.2.14
1) 修正群内 全体禁言/解除全体禁言 通知到来时强制进行群成员更新的 bug。
2) 修正 fetch.fetchGroupTable 和 QContactDB.find 中的 bug ,感谢网友 ★匆匆★ 反馈。
2017-05-16 qqbot v2.2.13
1) 增加 patchfetch 插件 。
2) 增加插件详细说明及插件列表,感谢 @feisuweb 分享插件
3) 修正群内 禁言/解除禁言 通知到来时强制进行群成员更新的 bug
4) pycharm-loader.py 增加了对插件模式的调试的支持, 感谢 @SuperMarioSF
5) bot 对象增加 started 属性,插件可通过检查 QQBot._bot.started 来确定本插件是在启动时被加载,还是在启动后被加载。
2017-05-15 qqbot v2.2.12
1) 腾讯又将好友列表和群成员列表的接口调整回 5 月 12 日之前的模式了,因此 fetch.py 中的代码相应调整回 v2.2.9 。
2017-05-14 qqbot v2.2.11
1) 修改 pycharm-loader.py 文件,感谢 @SuperMarioSF
2) 修正小部分情况下自动重启时无法读取到上次运行的 qq 号码的 bug (此 bug 几乎不影响使用)
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 属性。
如果有网友的机器人程序利用了这两个属性,需要修改代码。
2017-05-11 qqbot v2.2.9
1) 修正某些 linux 系统下 python2 下 sqlite3 数据库文件路径 bug ,感谢 lang 反馈问题。
2) 根据测试结果, poll 消息时不再忽略 100001 代码,但忽略 103 代码。
3) 当 poll 消息时收到未知代码时,先运行一次 session.TestLogin() ,只有在测试未通过时才会真正的停止本次 QQBot 的运行。
2017-05-07 qqbot v2.2.8
1) 忽略 poll 返回 100001 代码。
2) 修正 python2 下 sqlite3 数据库文件不支持中文路径的 bug 。
2017-05-06 qqbot v2.2.7
1) 二维码邮件内容中增加 conf.user 和 conf.qq ,方便区分是哪个用户登录时发送的二维码邮件。
2) 二维码 url 地址改为 http://{httpServerIP}:{httpServerPort}/{any} 其中 {any} 可以是任意的字母或数字组成的字符串。
3) 修正 Partition 函数中 utf8 分割的 bug
4) QTERM 服务器单次请求内容长度由 1024 改为 8192
5) 修正自动登录时当 session.session.verify == False 时没有隐藏 https warning 的 bug
6) poll 加入 Ejimo 字符转义,感谢 @NineLucas 分享代码
7) 修正 windows-py3-idle 中 sys.stdout 不存在 buffer 属性的情况下无法运行的 bug
8) 命令行参数中增加 -b|--bench 选项,用来指定工作目录。默认的工作目录为 ~\.qqbot-tmp\ 。
2017-05-02 qqbot v2.2.6
1) 修正 http 二维码服务器需要刷新的 bug ,二维码的 url 地址改为: http://{httpServerIP}:{httpServerPort}/{pngid} 。感谢 @huangzk 反馈
2017-04-27 qqbot v2.2.5
1) http-api 返回成员列表的 json 中增加成员的 ctype 属性。
2) 执行 list 命令时,采用 prettytable 打印成员列表。感谢网友 chx 提供帮助。
3) 改正文档中的几处笔误,感谢网友 繁星 等人反馈问题。
4) 缩小文本二维码的大小,感谢 @kairyu
2017-04-25 qqbot v2.2.4
1) 忽略 poll 返回 1202 代码。
2) 修正 qconf.py/qsession.py 中 python2 处理中文路径的 bug
2017-04-22 qqbot v2.2.3
1) 修正 list 查询或搜索时存在的 bug 。如 qq list discuss card=x 会报 <class 'sqlite3.OperationalError'>no such column: card 的错误,因为 discuss 不存在 card 属性。
2017-04-21 qqbot v2.2.2
1) list 等命令/接口的参数增加 :like: 字段,提供强大的联系人搜索功能。示例:
# 列出名称中含有 “李” 的好友
qq list buddy :like:李
# 列出 QQ 中含有 “234” 的群
qq list group :like:234
# 列出备注名中含有 jack 的好友
qq list buddy mark:like:jack
# 列出 群“456班” 的中名称中含有 “李” 的成员
qq list group-member 456班 :like:李
# 列出 群“456班” 中名片中含有 “mike” 的成员
qq list group-member 456班 card:like:mike
# 列出的 讨论组“xx小组” 中名为 jack 的好友
qq list discuss-member :like:小组 jack
2017-04-21 qqbot v2.2.1
1) 基本上修复了因 get_friend_uin2 接口被关闭而引起的一系列问题。但当 好友/群/群成员 存在同名现象或名称中含特殊字符时,还是存在无法绑定其实际 QQ 的问题。
2) 由于 smartqq 中获取联系人列表的接口实在太不稳定了,因此关闭后台联系人获取,联系人列表只有在需要用到的时候才会去请求相应的接口获取列表并更新至联系人数据库内。由此取消了 onNewContact 、 onLostContact 和 onFetchComplete 三个回调函数,并取消了 fetchInterval 和 monitorTables 两个配置选项。
3) 整理、优化联系人列表和资料的数据结构,并采用 sqlite3 数据库保存联系人列表和资料。增加联系人的各属性的详细解释,同时,各属性不再不加区分的保存为 str 对象,而是根据需要保存为 str 对象和 int 对象。
4) 利用原 2.1 版开发的机器人程序需要进行以下改动:
1. ~\.qqbot-tmp\ 目录下的配置文件名应改为 v2.2.conf ,并删除其中的 fetchInterval 和 monitorTables 选项
2. 删除机器人程序中的 onNewContact 、 onLostContact 和 onFetchComplete 三个回调函数。如果确实需要 onFetchComplete ,可将其中的代码放到 onStartupComplete 中,并将启动方式设置为 “联系人列表获取完成后再启动” (将 startAfterFetch 选项设置为True)。
3. 根据联系人对象( QContact 对象)的各属性的类型和含义的变化对原有的代码进行调整。
2017-04-17 qqbot v2.1.21
1) 修正 onTermCommand 中 PY3 中 Reply('') 的 bug
2) 因原有的 获取联系人实际 QQ (get_friend_uin2 ) 接口 已无法使用,因此暂时不去调用此接口(由此导致了无法获取到群成员资料的问题)。
2017-04-17 qqbot v2.1.20
2017-04-15 qqbot v2.1.19
1) 修正 v2.1.17 中 PY3 中消息分段函数中的 bug
2017-04-14 qqbot v2.1.17
1) 修正 v2.1.16 中 QContact 类增加 getattr 方法导致无法被 pickle 的 bug ,感谢 @lixindreamer 不二 kairyu 的帮助
2) 优化消息分段,一次发消息内容最长为 240 个汉字或 720 个英文,也就是 utf8 编码后的长度不能超过 720 ,超过此长度将被分段,按以下原则分段:如果 620~720之间有空格字符(空格,\t,\n等),则按最后一个空格进行分割,否则,按 720 进行分割。
3) QQBot 类中将判断是否被 @ 的功能分离出来,放到 detectAtMe 方法中,如果需要实现自己的 @ 判断逻辑,可以覆盖此方法。
4) bot.SendTo 接口中增加一个参数: reSendOn1202 ,若此参数为 True (默认值),则发消息时如果 QQ 服务器返回 1202 代码(表明发消息可能失败),还会继续发送 3 次,直至返回 0 代码, 若此参数为 False ,则不会尝试重发。
设为 True 在绝大部分情况下能保证消息一定能发出去,但缺点是有时一条消息会重复发送。设为 False 则相反,消息不会重复发送,但有时消息发送不出去。
总之因为这个 1202 代码的不确定性,没有完美的解决办法。
5) 配置文件中增加一个 pluginsConf 项,用户可以在此项中保存自己的配置,在运行的过程中通过 bot.conf.pluginsConf 访问, qqbot 会在启动时自动读取这里面的配置。
6) 增加一个 fresh-restart 命令,此命令重启程序且不加载 pickle 文件(必须手动扫码)。修改原来的 restart 命令的重启方式,此命令重启程序,且会加载 pickle 文件。
2017-04-13 qqbot v2.1.16
1) 恢复群管理功能(踢人、设置群名片、设置|取消管理员),再次感谢 @waylonwang ,他提供了用 qinfo.clt.qq.com 的接口实现上述功能的代码。
2) 修正踢人和设置群名片成功后更新缓存的过程中的 bug 。
3) 增加 update 命令及相关接口, qq update buddy 可以强制更新好友列表
2017-04-12 qqbot v2.1.15
1) 昨天开始,由于 qun.qq.com 的 search_group_members 接口无法使用 w.qq.com 的 cookie,因此无法获取群成员列表,由此导致了所有和群成员相关的功能都无法使用了(包括 list group-member, group-manage, @me 等)。非常感谢 @waylonwang 迅速的提供了用 qinfo.clt.qq.com 的接口获取群成员信息的代码,完美的修复了此问题,目前所有相关功能都已恢复正常使用,另外还带了一个好处就是现在可以获取到完整的群名片(以往群名片如果太长会被截断)。
2) 增加了后台获取联系人的间歇时间,每个列表获取完后 sleep 15 秒,所有列表获取完后 sleep 至少 10 分钟。另外,建议暂不要使用 特别监视列表 的功能,避免过于频繁的在后台获取联系人, @lixindreamer 反映开启此功能后 python 的内存占用不断增大,尚不清楚是否确实是程序引起的问题。
3) 测试发现 qun.qq.com 中的 群管理接口中除了 禁言 功能外,其他功能也无法使用了。因此在文档中注明了这些功能暂无法使用。相关的代码暂未删除。
4) 成员属性不再全部保存为 str ,而是根据需要保存为 str , int 或 boolean
5) 修复了 python3.4 下无法使用 b'%s' % 'xxx' 的 bug
2017-04-07 qqbot v2.1.14
1) 增加群内成员的扩展属性, 感谢 @SuperMarioSF
2) 增加 Windows 下用 virtualenv+pyinstaller 打包的说明,见 faq.md
3) 完善 HTTP-API 接口的 response ,所有 HTTP-API 的 response 均采用 json 格式
注意: 可能是 qun.qq.com 的协议有变,目前 GroupSetAdmin 和 GroupKick 已无法使用,因此请暂时不要使用这两个命令及相应接口。
2017-04-05 qqbot v2.1.13
1) 修正部分终端文本模式显示二维码无法扫码的问题,感谢 @xrdavies
2) 增加一个函数装饰器 QQBotSched ,提供强大的定制定时任务的功能
2017-04-04 qqbot v2.1.12
1) 增加 HTTP API 接口,可供 web 前端开发者调用
2) 增加 文本模式显示二维码 的功能,感谢 @xrdavies
2017-04-02 qqbot v2.1.11
1) 修正 python2.7 下命令行中 -mt 选项不能输中文的bug。
2) 大部分 log 信息的级别由降低至 DEBUG ,在调试模式关闭的情况下,控制台输出的 log 更加清爽。
3) 更新 pycharm-loader.py,在其中提供了一些调试用的示例。 感谢 @SuperMarioSF 提供此文件。
4) 增加“用插件形式扩展QQBot”的功能,插件可以在 QQBot 的运行过程中动态的加载和卸载,可以同时加载多个插件。建议尽量采用插件的形式来扩展 QQBot 。
5) 第一次运行时将显示已创建默认配置文件的信息。
6) 整理了配置文件的级别,目前的配置优先级更加明确,也更加方便,具体来说:
使用 qqbot -u somebody 启动程序时,依次加载:
根配置 -> 默认配置 -> 用户 somebody 的配置 -> 命令行参数配置
使用 qqbot 启动程序时,依次加载:
根配置 -> 默认配置 -> 命令行参数配置
根配置 是固定的,用户无法修改; 默认配置 和 用户配置 可由用户在 v2.1.conf 文件中进行修改;最后,还可以在 命令行参数 中输入配置。
可能有少量网友注意到了之前的版本中,RunBot 函数和 QQBot 类构造方法可以接受 qq 和 user 两个参数,这两个参数的优先级比命令行参数都要高。请注意:这个功能只是为了方便测试用的,请大家尽量不要利用此功能(测试除外),原因如下:1. 很容易把用户搞混,因为一般的概念是命令行参数的配置优先级最高;2. 在源代码中来设置配置是一个很坏的习惯,因为其他用户无法看到这个配置、也无法修改这个配置。
2017-03-30 qqbot v2.1.10
1) 增加 “需要特别监视的列表( monitorTables )” 的选项,将需要关心的群加入到此项中,此群中的成员变动通知的滞后时间可以大幅缩短(最好的情况下可以缩短至 1~3 秒)。
2017-03-30 qqbot v2.1.9
1) 增加 “联系人列表获取完成后再启动 QQBot ( startAfterFetch )” 的选项
2) 修复 smartRequest 方法中的 bug ,感谢 @chenhouwu 反馈
3) 增加 “用于在JetBrains PyCharm IDE环境下进行开发时的一个启动文件” ,感谢 @SuperMarioSF 提供此文件
4) 增加 requirements.txt ,感谢 @gtt116
2017-03-29 qqbot v2.1.8
1) 修复了 fetchGroupTable 中一个隐藏的很深的 bug ,此 bug 可能导致群的 qq 号获取错误,进而引起一系列的成员获取错误等问题。感谢 SuperMarioSF 的大力支持和帮助调试程序。
2) 当 fetchInterval 设置为负数时,只进行一次联系人列表获取,且此时 QQBot 延后至联系人资料获取完了再启动。
3) 完善表情代码,感谢 刘洋 精心整理的更全的表情代码。
2017-03-26 qqbot v2.1.7
1) 获取群成员列表时不再绑定uin和qq,只在需要时进行绑定。原来 1880 人的群需要 3 分钟采用获取完成员列表,修改后只需 3 秒。
由此也修复了原来接收消息、执行命令卡死的 bug 。
再次感谢 SuperMarioSF 帮忙测试和反馈,没有他,这个 bug 可能很久以后才能被发现。
2017-03-25 qqbot v2.1.6
1) 修正 facemap.py 中的bug
2) 修正 python3 下 qsession.py 文件中迭代字典的 items() 过程中修改字典的bug
3) 修正 qqbotcls.py 中 QQBotSlot 函数中的 bug
4) 加长每个联系人列表 fetch 之间的间隔时间至 20 ~ 30 秒,避免执行命令卡顿
5) 如果联系人列表更新时间比上次更新超过 1 个小时,则不调用 onNewContact 和 onLostContact 了
感谢 SuperMarioSF 帮忙测试和反馈。
2017-03-24 qqbot v2.1.4
1) 用命令行发消息时可以使用 "\n", "\t" 等转义字符。
2) 增加两个 slot : onStartupComplete 和 onFetchComplete 。
3) 增加一个选项 -fi,--fetchInterval ,用来设置每轮联系人列表刷新之间的间隙时间,如果设置为 -1 ,则只会进行一次联系人列表获取。
4) 增加群管理(设置管理员 、 设置群名片 、 群成员禁言 以及 踢除群成员)功能。
5) 增加发送表情功能,感谢 @sjdy521 精心整理的表情代码表。
6) 命令行的 help 文档改用中文,感谢 SuperMarioSF 精心制作的中文文档。
2017-03-23 qqbot v2.1.3
1) 修正“群名中含某些特殊字符时无法获取到其真实qq,进而无法获取到其成员列表”的bug。感谢网友 SuperMarioSF 和 某10 的帮助和反馈。
2017-03-22 qqbot v2.1.2
1) 细化文档,增加 List 接口返回值的含义说明;增加 QContact 对象的 nick/mark/card/name 的属性的含义说明。
2) 增加针对 “获取好友列表有时返回的json中没有备注名列表” 的情况的处理。
2017-03-20 qqbot v2.1.1
2.1 版在 2.0 版的基础上再次进行大量的重构,功能加强,运行更加稳定,修正了几个 bug ,但不再兼容 2.0 版的接口。主要修改如下:
1) 联系人资料获取和查询功能加强,可获取到联系人的 QQ号/昵称/名称/备注名/群名片 。群内非好友的 QQ 号也可以获取到。
2) 联系人资料实时更新,增加 新增/失去 联系人的事件通知。
3) 将启动速度加快到极致, 扫码后 10 秒内可启动 QQBot 。 2.0 版需要获取完所有联系人资料才会启动 QQBot ,新版登陆成功后立即启动 QQBot ,同时在后台开始获取联系人资料。当联系人资料获取尚未全部完成时收到 QQ 消息或 list/send 命令,会主动获取所需的联系人资料,因此 QQBot 刚启动时收到新消息或 list/send 命令会稍微卡顿 1~2 秒。
4) 修正联系人资料获取中的 bug ,联系人资料获取更加稳定;修正程序掉线时有时无法自动重启的 bug ;修正 windows 下用某些图片浏览器弹出二维码后程序一直卡在等待图片窗口关闭的 bug 。
5) 修改 qq 命令行工具的命令及格式,去掉 2.0 版的 get 和 member 命令,新的 list 命令提供强大的联系人查询功能。
6) 修改 QQBot 对象的接口,去掉原来的 Get/Member/Send 接口,只保留 List/SendTo/Stop/Restart 四个接口,新的 List 接口功能更加强大,且参数的格式可读性更好。
7) 修改 注册事件响应函数 的格式,修改注册 QQ 消息响应函数的格式,新的格式可读性更好。
8) 增加 新增/失去联系人 事件,可注册这两个事件的响应函数,实现 新人入群/退群 的通知功能。
9) 增加 Interval 事件,每隔 5 分钟被调用,可注册此事件的响应函数,实现定时执行任务的功能。
10) 程序的内部运行方式和数据结构有较大改变。程序的主体运行流程见 mainloop.py ,用非常简单和优雅的方式实现了多线程的并行和同步功能。
11) 配置文件由 ~/.qqbot-tmp/v2.0.conf 改为 ~/.qqbot-tmp/v2.1.conf 。
非常感谢以下网友在本次升级过程的帮助和支持:
@sjdy521 提供了 ”使用 qun.qq.com 的 api 获取联系人实际 QQ ” 的宝贵建议,另外本次新版的 QQBot 启动方式也受到了他的项目的启发。
@bolfhsu 提出 ”List与Get功能重复、Get应该是获取消息“ 的意见。原版中的 Get 接口很容易让人误解为 ”获取消息“ ,虽然我的本意是 ”获取联系人“ ,本次去掉了 Get 接口,将其功能合并到 List 接口中。
@279632990 和 Moofeng 反馈了 ”程序掉线时有时无法自动重启“ 的 bug 。
阿兰若 和 怪我瞎咯 反馈了 ”windows 下用某些图片浏览器弹出二维码后程序一直卡在等待图片窗口关闭的 bug “。
2017-03-05 qqbot v2.0.12
1) 增加 python3 的支持
2) 增加采用 virtualenv 安装至独立的运行环境的脚本
3) 增加测试脚本