ItChat Versions Save

A complete and graceful API for Wechat. 微信个人号接口、微信机器人及命令行微信,三十行即可自定义个人号机器人。

v1.2.10

7 years ago

增强了pkl的版本兼容

这样在itchat更新的时候就不需要手动删除pkl了,我也不用因为修改pkl的内容导致bug而被吐槽。

增加了qrCallback

好像很久以前就有说需要增加二维码的回调,但以前都是建议不使用auto_login,自定义登录过程。 现在auto_login里面的功能多了之后,还是给加上qrCallback吧。 需要注意的是,如果使用了qrCallback,系统默认不会再存储二维码并显示,这些内容全都交给qrCallback。

可以通过如下程序测试:

import logging

import itchat

itchat.set_logging(loggingLevel=logging.DEBUG)

def qrCallback(uuid, status, qrcode):
    if status == '0':
        with open('qr.jpg', 'wb') as f:
            f.write(qrcode)
        itchat.utils.print_qr('qr.jpg')
    print('** qr callback **')
    print('%s: %s' % (uuid, status))
    print('qr size: %s' % len(qrcode))
    print('*****************')

itchat.auto_login(True, qrCallback=qrCallback)

itchat.run(debug=True)

qrCallback必须接受三个参数,uuid status qrcode。 uuid和qrcode分别对应qrcode的uuid以及二进制图片。 status有0, 200, 201, 400, 408(都是字符串形式),对应为:

  • 0 - 获取到图片
  • 200 - 登陆成功
  • 201 - 需要在手机端确认登录
  • 400 - 二维码失效
  • 408 - 二维码尚未被扫描也未失效

这里给出一个使用这个功能通过网页显示二维码的示例:源码

修复了因为群聊没有self键导致群聊消息遗漏的问题

好像也没什么好说的,之后如果发现一些奇怪的问题,记得这样调试:

itchat.run(debug=True)

v1.2.8

7 years ago

修复了通讯录混乱问题

本来由于对于webwxsync(itchat.get_msg())返回的用户信息全部默认为群聊,导致了该问题。

目前已经修复,使用如下代码测试,记得删一下itchat.pkl之后测试:

import logging, sys

import itchat
from itchat.content import *

itchat.set_logging(loggingLevel=logging.DEBUG)

itchat.auto_login(True)

@itchat.msg_register(FRIENDS)
def add_friend(msg):
    itchat.add_friend(**msg['Text'])

@itchat.msg_register(TEXT)
def check_contact(msg):
    print('** Contact check begin **')
    for member in itchat.get_friends():
        if '@@' in member['UserName']:
            print('Fake member: %s' % member['NickName'])
    for chatroom in itchat.get_chatrooms():
        if '@@' not in chatroom['UserName']:
            print('Fake chatroom: %s' % member['NickName'])
    print('** Contact check finish **')

itchat.run()

为每个发送消息增加了logging信息

为了方便之后的调试与交流,每个发送操作都会产生带参数的logging信息。

可以通过如下代码测试:

import itchat
from itchat.content import *

itchat.auto_login(True)

@itchat.msg_register([PICTURE, RECORDING, ATTACHMENT, VIDEO])
def download_files(msg):
    msg['Text'](msg['FileName'])
    return '@%s@%s' % ({'Picture': 'img', 'Video': 'vid'}.get(
        msg['Type'], 'fil'), msg['FileName'])

itchat.run(debug=True)

修复了好友列表首位非自己的问题

这就是我手滑,原谅我,同样记得删除itchat.pkl之后测试。

v1.2.0

7 years ago

为了方便之后对代码的修改和调整,与itchatmp的适配,实现一些一直累计的需求。

在1.2.0版本中作如下更改:

主要更改

  • 加入日志
  • 更改返回值内容
  • 完善多实例及退出
  • 更新构架

加入日志

使用logging记录日志。

新增接口,设定日志输出位置(文件、控制台),类似这样操作:

itchat.set_logging(showOnCmd=True, loggingFile=None, loggingLevel=10)

更改返回值内容

使用能够记录更多信息的返回值,类似这样操作:

# r.json() -> {'BaseResponse': {'Ret': 0 }}
r = ReturnValue(r.json())

if r:
    print('True')
else:
    print('False')

print(r['BaseResponse'])
# {'Ret': 0}

完善多实例及退出

增加新实例接口与退出接口

itchat.new_instance()
itchat.logout()

更新构架

将本处于init.py中的方法也加入client

将client以初始化时加载形式组织

定义时方法仅作占位及注释作用

# core.py 即原client.py
from .messages import load_messages_components

class Core(object):
    def __init__(self):
        self.__load_components()
    def load_components(self):
        load_messages_components(self)
    def produce_msg(self, msg):
        ''' place for docs
         * will be initialized in messages
        '''
        raise NotImplementedError()
# messages.py

def load_components(core):
    core.produce_msg = produce_msg

def produce_msg(self, msg):
    pass