Skip to content

事件监听

基本用法

使用 @bot.handle() 装饰器注册事件处理函数:

python
from pywechat_libencode import WeChat, events

bot = WeChat(version="4.1.8.67")

# 监听所有消息
@bot.handle()
def on_all(bot, data):
    print(data)

# 监听指定事件
@bot.handle(events=events.TEXT_MESSAGE)
def on_text(bot, data):
    print(data)

# 监听多个事件
@bot.handle(events=[events.TEXT_MESSAGE, events.IMAGE_MESSAGE])
def on_text_or_image(bot, data):
    print(data)

bot.run()

事件类型列表

事件常量说明
全部信息ALL_MESSAGE-1监听所有类型消息
用户退出登录USER_LOGOUT_MESSAGE0用户主动退出
文本消息TEXT_MESSAGE1普通文本消息
图片消息IMAGE_MESSAGE3图片消息
好友减少FRIEND_DECREASE_MESSAGE14被删除或删除好友
好友增加FRIEND_INCREASE_MESSAGE15新增好友
语音消息VOICE_MESSAGE34语音消息
好友请求FRIEND_REQUEST_MESSAGE37收到好友申请
名片消息CARD_MESSAGE42个人名片消息
视频消息VIDEO_MESSAGE43视频消息
表情消息EMOJI_MESSAGE47表情包消息
位置消息LOCATION_MESSAGE48位置分享消息
XML卡片消息XML_CARD_MESSAGE49文件/红包/转账/小程序/公众号文章
语音/视频电话VOIP_MESSAGE50语音视频通话邀请
同步消息SYNC_MESSAGE51消息同步
用户登录USER_LOGIN_MESSAGE1002用户登录成功
聊天对象变化CHAT_CHANGE_MESSAGE1005当前聊天窗口变化
登录二维码LOGIN_QR_CODE_MESSAGE1007登录二维码生成
安全退出SECURITY_LOGOUT_MESSAGE1028手机退出/异常退出
系统消息SYSTEM_MESSAGE110000系统通知消息
微信连接成功WECHAT_CONNECT_MESSAGE10001微信连接建立
系统消息(撤回/拍一拍)SYSTEM_MESSAGE210002撤回消息/拍一拍等

完整事件处理示例

python
from pywechat_libencode import WeChat4, events

bot = WeChat4(version="4.1.8.67")

@bot.handle(events=events.TEXT_MESSAGE)
def on_text(bot: WeChat4, data: dict):
    """处理文本消息"""
    content = data["content"]["String"]
    from_wxid = data["fromUserName"]["String"]
    account_wxid = data["account_wxid"]

    # 跳过自己发出的消息
    if from_wxid == account_wxid:
        return

    # 跳过群消息
    if from_wxid.endswith("@chatroom"):
        return

    # 自动回复
    bot.send_text(from_wxid, f"收到: {content}")

@bot.handle(events=events.FRIEND_REQUEST_MESSAGE)
def on_friend_request(bot: WeChat4, data: dict):
    """自动通过好友验证"""
    v3 = data["v3"]
    v4 = data["v4"]
    scene = data["scene"]
    bot.verify_friend(v3=v3, v4=v4, scene=scene)

@bot.handle(events=events.IMAGE_MESSAGE)
def on_image(bot: WeChat4, data: dict):
    """处理图片消息"""
    print(f"收到图片: {data}")

@bot.handle(events=events.USER_LOGIN_MESSAGE)
def on_login(bot: WeChat4, data: dict):
    """登录成功回调"""
    print("登录成功!")
    bot.init()  # 初始化联系人和群列表

bot.run()

WeChat3 消息数据格式

WeChat3 版本的消息数据字段名与 WeChat4 略有不同:

python
@bot.handle(events=events.TEXT_MESSAGE)
def on_text(bot: WeChat3, data: dict):
    content = data["Content"]["String"]       # 注意首字母大写
    from_wxid = data["FromUserName"]["String"]  # 注意首字母大写
    self_wxid = data["from"]

WeChat4 消息数据格式

python
@bot.handle(events=events.TEXT_MESSAGE)
def on_text(bot: WeChat4, data: dict):
    content = data["content"]["String"]         # 首字母小写
    from_wxid = data["fromUserName"]["String"]  # 驼峰命名
    account_wxid = data["account_wxid"]

基于 MIT 许可发布