WeChatFerry实现简单的微信机器人
项目里需要使用微信推送告警数据,使用PyOfficeRobot能实现但是发送消息速度太慢了,找到一个项目
https://github.com/lich0821/WeChatFerry/ 使用HOOK的方式发送消息,简单做了个服务试了一下
from wcferry import Wcf, WxMsg
from flask import Flask, request
wcf = Wcf()
wcf_rooms = []
for contact in wcf.get_contacts():
if contact['wxid'].endswith("chatroom"):
wcf_rooms.append(contact)
def get_chatroom_roomid(wcf_rooms: list, room_name: str):
for room in wcf_rooms:
if room['name'] == room_name:
return room['wxid']
return None
room_id1 = get_chatroom_roomid(wcf_rooms=wcf_rooms, room_name="预警测试")
print('当前登录用户信息:',wcf.get_user_info())
print('预警测试群id:',room_id1)
app = Flask(__name__)
def send_message(message,room_id=room_id1):
wcf.send_text(message,room_id)
def send_picture(temp_path,room_id=room_id1):
wcf.send_image(temp_path,room_id)
@app.route('/asduih24t45dty4j9874ghssendmessage', methods=['GET', 'POST'])
def handle_message():
message = request.args.get('message') if request.method == 'GET' else request.form.get('message')
if message:
send_message(message)
return "Message sent", 200
else:
return "No message provided", 400
@app.route('/asduih24t45dty4j9874ghssendmessage2', methods=['GET', 'POST'])
def handle_message_and_picture():
# 获取 message 参数
message = request.args.get('message') if request.method == 'GET' else request.form.get('message')
# 获取 picture 参数(假设 picture 是一个文件上传字段)
picture = request.files.get('picture') if request.method == 'POST' else None
if not message:
return "No message provided", 400 # 如果未提供 message,返回 400 错误
# 发送消息
send_message(message)
# 如果提供了图片,则保存并发送
if picture:
# 将图片保存到临时路径
temp_path = r'C:\0.jpg' # 确保路径存在或调整为合适的路径
picture.save(temp_path)
send_picture(temp_path)
return "Message and picture sent", 200
else:
return "Message sent, but no picture provided", 200
if __name__ == '__main__':
app.run(host='0.0.0.0', port=38888)
附函数表备用
函数名称 | 描述 | 返回类型 | ||
---|---|---|---|---|
cleanup | 关闭连接 回收资源 | None | ||
keep_running | 阻塞进程(让 RPC 一直维持连接) | |||
is_receiving_msg | 是否已启动接收消息功能 | bool | ||
get_qrcode | 获取登录二维码(已经登录则返回空字符串) | str | ||
is_login | 检查登录状态 | bool | ||
get_self_wxid | 获取登录账号的 wxid | str | ||
get_msg_types | 获取所有消息类型 | Dict | ||
get_contacts | 获取所有联系人 | List[Dict] | ||
get_friends | 获取所有好友 | List[Dict] | ||
get_dbs | 获取数据库 | List[str] | ||
get_tables | 获取某数据库下的表 | List[Dict] | ||
get_user_info | 获取登录账号个人信息 | Dict | ||
get_audio_msg | 取语音消息并转成 MP3 | str | ||
send_text | 发送文本消息(可 @) | int | ||
downloadfile | 下载文件 | str | ||
processpath | 处理路径(如果是网络路径则下载文件) | str | ||
send_image | 发送图片(非线程安全) | int | ||
send_file | 发送文件(非线程安全) | int | ||
send_xml | 发送 XML | int | ||
send_emotion | 发送表情 | int | ||
send_rich_text | 发送富文本消息 | int | ||
send_pat_msg | 拍一拍群友 | int | ||
forward_msg | 转发消息 | int | ||
get_msg | 从消息队列中获取消息 | WxMsg | ||
enable_receiving_msg | 允许接收消息 | bool | ||
enable_recv_msg | 允许接收消息(旧接口) | bool | ||
disable_recv_msg | 停止接收消息 | bool | ||
query_sql | 执行 SQL 查询 | List[Dict] | ||
accept_new_friend | 接受好友申请 | int | ||
refresh_pyq | 刷新朋友圈 | int | ||
download_attach | 下载附件 | int | ||
get_info_by_wxid | 通过 wxid 查询微信号昵称等信息 | dict | ||
revoke_msg | 撤回消息 | int | ||
decrypt_image | 解密图片 | str | ||
get_ocr_result | 获取 OCR 结果 | str | ||
download_image | 下载图片 | str | ||
add_chatroom_members | 添加群成员 | int | ||
del_chatroom_members | 删除群成员 | int | ||
invite_chatroom_members | 邀请群成员 | int |