mirror of
https://github.com/miloira/wxhook.git
synced 2024-11-22 02:19:26 +08:00
6.1 KiB
6.1 KiB
WxHook
简介
WxHook是一个基于dll注入实现的python微信机器人框架,支持多种接口、高扩展性、多线程消息处理,让你轻松应对海量消息,为你的需求实现提供便捷灵活的支持。
支持的接口
- hook同步消息
- 取消hook同步消息
- hook日志
- 取消hook日志
- 检查登录状态
- 获取用户信息
- 发送文本消息
- 发送图片消息
- 发送文件消息
- 发送表情消息
- 发送小程序消息
- 发送群@消息
- 发送拍一拍消息
- 获取联系人列表
- 获取联系人详情
- 创建群聊
- 退出群聊
- 获取群详情
- 获取群成员列表
- 添加群成员
- 删除群成员
- 邀请群成员
- 修改群成员昵称
- 设置群置顶消息
- 移除群置顶消息
- 转发消息
- 获取朋友圈首页
- 获取朋友圈下一页
- 收藏消息
- 收藏图片
- 下载附件
- 转发公众号消息
- 转发公众号消息通过消息ID
- 解码图片
- 获取语音通过消息ID
- 图片文本识别
- 获取数据库句柄
- 执行SQL命令
- 测试
微信版本下载
安装
pip install wxhook
使用示例
消息事件处理例子
# import os
# os.environ["WXHOOK_LOG_LEVEL"] = "INFO" # 修改日志输出级别
import time
from wxhook import Bot
from wxhook import events
from wxhook.model import Event
def on_login(bot: Bot):
bot.send_text("filehelper", "登录成功之后会触发这个函数")
def on_start(bot: Bot):
print("微信客户端打开之后会触发这个函数")
def on_stop(bot: Bot):
bot.send_text("filehelper", "关闭微信客户端之前会触发这个函数")
time.sleep(1) # 防止客户端关闭太快导致消息发送失败
bot = Bot(
on_login=on_login,
on_start=on_start,
on_stop=on_stop
)
# 消息回调地址
# bot.set_webhook_url("http://127.0.0.1:8000")
@bot.handle(events.TEXT_MESSAGE, once=True)
def on_message(bot: Bot, event: Event):
bot.send_text("filehelper", "这条消息只会发送一次哦")
@bot.handle(events.TEXT_MESSAGE)
def on_message(bot: Bot, event: Event):
if event.fromUser != bot.info.wxid:
bot.send_text(event.fromUser, event.content)
@bot.handle([events.IMAGE_MESSAGE, events.EMOJI_MESSAGE, events.VIDEO_MESSAGE])
def on_message(bot: Bot, event: Event):
if event.fromUser != bot.info.wxid:
if event.type == events.IMAGE_MESSAGE:
bot.send_text(event.fromUser, "图片消息")
elif event.type == events.EMOJI_MESSAGE:
bot.send_text(event.fromUser, "表情消息")
elif event.type == events.VIDEO_MESSAGE:
bot.send_text(event.fromUser, "视频消息")
bot.run()
接口使用例子
import os
import json
from wxhook import Bot
from wxhook import events
from wxhook.model import Event
# faked_version="3.9.10.19"解除微信低版本登录限制
bot = Bot()
msgid_list = []
@bot.handle(events.TEXT_MESSAGE)
def on_text_message(bot: Bot, event: Event):
self_id = bot.info.wxid
content = event.content
sender = event.fromUser
msg_id = event.msgId
if sender != self_id:
if content.find("发送文本") != -1:
bot.send_text(sender, "这是一条文本消息")
elif content.find("发送图片") != -1:
bot.send_image(sender, os.path.abspath("test.png"))
elif content.find("发送表情") != -1:
bot.send_emotion(sender, os.path.abspath("test.png"))
elif content.find("发送文件") != -1:
print(print(bot.send_file(sender, os.path.abspath("test.xlsx"))))
elif content.find("发送音频") != -1:
bot.send_file(sender, os.path.abspath("test.mp3"))
elif content.find("发送视频") != -1:
print(bot.send_file(sender, os.path.abspath("test.mp4")))
elif content.find("创建群聊") != -1:
bot.create_room(["wxid1", "wxid2"])
elif content.find("获取群成员列表") != -1:
print(bot.get_room_members("<chatroomid>"))
elif content.find("删除群成员") != -1:
bot.delete_room_member("<chatroomid>", ["<wxid>"])
elif content.find("添加群成员") != -1:
bot.add_room_member("<chatroomid>", ["<wxid>"])
elif content.find("邀请群成员") != -1:
bot.invite_room_member("<chatroomid>", ["<wxid>"])
elif content.find("修改在群聊中的昵称") != -1:
print(bot.modify_member_nickname(sender, "<self-wxid>", "测试机器人"))
elif content.find("退出群聊") != -1:
bot.quit_room("<chatroomid>")
elif content.find("at全体成员") != -1:
bot.send_room_at(sender, ["notify@all", "<wxid>"], "这是一条at全体成员的消息")
elif content.find("发送群at") != -1:
bot.send_room_at(sender, ["<wxid1>", "<wxid2>"], "这是一条at群成员的消息")
elif content.find("发送群聊拍一拍") != -1:
bot.send_pat(sender, "wxid_vqj81fdula0x22")
elif content.find("发送私聊拍一拍") != -1:
bot.send_pat(sender, sender)
elif content.find("置顶消息") != -1:
bot.top_msg(msg_id)
msgid_list.append(msg_id)
elif content.find("取消置顶的消息") != -1:
bot.remove_top_msg(sender, msgid_list.pop())
elif content.find("获取联系人列表") != -1:
bot.send_text(sender, json.dumps(bot.get_contacts()))
elif content.find("获取联系人详情") != -1:
bot.send_text(sender, json.dumps(bot.get_contact("<wxid>")))
elif content.find("获取群详情") != -1:
print(bot.get_room("<chatroomid>"))
elif content.find("收藏消息") != -1:
bot.collect_msg(msg_id)
elif content.find("收藏图片") != -1:
bot.collect_image(sender, os.path.abspath("test.png"))
elif content.find("ocr") != -1:
print(bot.ocr(os.path.abspath("test.png")))
bot.run()
QQ交流群:625920216