使用Python做一个微信机器人
介绍
简介
该程序将微信的内部功能提取出来,然后在程序里加载Python,接着将这些功能导出成库函数,就可以在Python里使用这些函数
程序启动的时候会执行py_code目录下的main.py,类似于你在命令行使用python main.py
。
现在会以插件的形式加载py脚本,将脚本放到plugins目录下,忽略掉以_开头的脚本,然后加载所有其他的py脚本
插件脚本分为两类,以msg开头的py文件会在deal_msg.py【处理消息】里加载,其他脚本在main.py里加载。如果需要收到消息做什么事的话就以msg开头命名,不然就随便命名
main.py加载的所有脚本都在同一个线程内运行,如果需要多线程,请在脚本里继承一下threading.Thread, 参考check_friend.py
程序导出了一个函数库可以在Python里使用,库名是wxfunction,具体函数看下面的功能介绍。该库为其他语言编写,只是导出接口给Python使用
已有插件
- 检测所有好友状态(拉黑、删除等): check_friend.py
- 监控群消息,触发关键词预警(后续增加关键词规则): msg_monitor_keyword.py
- 每隔一段时间发一次消息: _send_msg_timing.py
- 给指定好友自动回复消息: msg_auto_reply.py
- 保存聊天记录到postgre数据库: msg_postgre.py
- 自动收款
- 自动接收好友请求
- 自动保存聊天文件、图片等
- 更多插件待开发
内置功能
- 保存所有文件、图片、视频、语音和表情包
- 如果想修改保存路径,可以参考保存的代码文件
发消息例子
举个例子,如果想每隔五分钟发一次消息,Python代码如下(修改完Python代码,需要关闭软件重新打开才能生效,微信不需要重新登录)
from threading import Timerdef sendmsg(interval):'''每隔interval秒给文件传输助手发一次消息, filehelper是文件传输助手的wxid'''wxfunction.SendTextMsg("filehelper", "测试消息!")timer = Timer(interval, sendmsg, args=(interval,))timer.start()sendmsg(5*60)
SendTextMsg就是程序导出的发送文本消息的函数,第一个参数是wxid,这是微信内部使用的唯一id,每个微信号都有对应的wxid,可以通过获取好友列表来获取,第二个参数是发送的消息内容
接收消息例子
收到的消息处理,比如你想收到某人的回复,然后给他发一个消息,就像对接机器人一样的操作方式, 代码主要看deal_msg.py,其中的启动函数如下
def run(self):while self.event.is_set():msg = self.wxfunction.popFromMsgQueue()if not msg:time.sleep(0.5)continuemsg_data = json.loads(msg)msg_struct = ChatMsgStruct(**msg_data)self._deal_msg(msg_struct)
代码很简单,从程序的消息队列里弹出一条json格式的消息,然后转成类,在_deal_msg方法里处理它。转成类的好处是我在类里定义了消息的相应字段, 在写代码时可以使用msg_struct.content来获取,编辑器会自动补全
你只需要在_deal_msg方法里判断发送人的wxid是不是你要回复的那个人,然后调用wxfunction.SendTextMsg给他发消息即可
所有功能
接收消息
- 好友消息
- 群消息
- 通知类消息(成员进群通知等)
- 公众号推送(可以用来监控公众号的发文)
- 公众号消息(公众号发送的消息)
- 好友请求
- 撤回提示消息
- 群公告
- 转账消息
- 收款消息(可以写一个自动发卡的)
- 关注的公众号直播提醒
- 大文件上传完成提示(别人发文件时)
- 更多消息自己发现
- 有遗漏的消息类型也可以提出来
发消息
- 发送文本
- 发送图片
- 发送文件
- 发送表情
- 发送名片
- 发送xml消息
- 发送拍一拍
- 发送小程序
- 转发消息
防撤回
- 已内置(打开软件,默认开启,无法关闭)
群相关
- 获取群成员
- 获取群成员昵称
- 删除群成员
- 设置群公告
- 修改群名称
- 修改自己的群昵称
- 邀请好友进群
加好友
- 同意好友请求(案例Python代码可配置自动同意)
- 检测好友状态(该功能用法参考插件check_friend.py)
- 搜索好友(可通过手机号或微信号搜索)
- 添加好友
转账收款
- 接收转账和退还转账(案例Python代码可配置自动接收)
其他
- 修改好友备注
- 获取好友详细信息
- 获取好友列表
- 获取wxid的相关信息
CDN下载
- 下载图片
- 下载视频
- 下载文件
- 下载语音
- 下载表情包
待更新
- 发送引用消息
- 发送@消息
- 语音转文字
- 获取朋友圈
- 消息标记已读
操作步骤
准备工作
- 安装给定版本(3.9.6.32)的微信到任意目录
- 安装给定的python-3.8.10.exe到任意目录, 不懂的话,安装选项可以一直默认
- 编辑配置文件,主要修改微信安装目录和Python安装目录
- 打开wxrobot.exe软件,点击软件界面的-》帮助-》启动微信,登录即可(如果出现监听不到消息的情况,需要以管理员权限运行微信,在运行软件)
提示1: Python版本并不需要是给定的3.8.10,更新的版本应该都能用,但必须是32位的Python
提示2: 不一定要使用软件启动微信,也可以自己点击快捷方式启动,但是软件和微信都需要以管理员方式运行,如果不是的话,软件是控制不了其他用户的程序的
所有功能介绍
getSelfWxid
函数原型: def getSelfWxid() -> str: ...
功能: 获取自己登录的微信的wxid
getWeChatFilePath
函数原型: def getWeChatFilePath() -> str: ...
功能: 获取微信文件的保存路径(微信设置文件管理里的微信文件的默认保存路径)
GetUsers
函数原型: def GetUsers() -> List[dict]: ...
功能: 获取当前已登录的wxid、微信号和昵称
GetContactList
函数原型: def GetContactList() -> List[list]: ...
功能: 获取好友和群列表
popFromMsgQueue
函数原型: def popFromMsgQueue() -> Union[str, None]: ...
功能: 从已接收到的消息队列里弹出一条消息,消息类型为json字符串
SendTextMsg
函数原型: def SendTextMsg(wxid:str, text:str) -> int: ...
功能: 发送文本消息
参数:
- wxid: 对方的wxid
- text: 发送的文本内容
SendXmlMsg
函数原型: def SendXmlMsg(wxid:str, xml:str, dtype:int) -> int: ...
功能: 发送xml消息,接受消息类型为49,应该都可以把xml拿下来重新发出去。只测试了发送公众号文章
参数:
- wxid: 对方的wxid
- xml: 发送的xml内容
- dtype: xml里面的类型,可以从xml里解析出来
SendEmotionMsg
函数原型: def SendEmotionMsg(wxid:str, path:str) -> int: ...
功能: 发送表情包
参数:
- wxid: 对方的wxid
- path: 表情包的绝对路径,可以是未加密的表情包、也可以是 FileStorage\CustomEmotion下的加密表情
SendCardMsg
函数原型: def SendCardMsg(wxid:str, xml:str) -> int: ...
功能: 发送某个好友的名片, 也可以使用下面那个函数,可以直接通过好友wxid发送
参数:
- wxid: 对方的wxid
- xml: 名片的xml数据,可以先发送一个出去,然后在接受消息里打印出来就能看到
SendCardMsgByWxid
函数原型: def SendCardMsg(wxid:str, cardWxid:str) -> int: ...
功能: 发送某个好友的名片
参数:
- wxid: 对方的wxid
- cardWxid: 需要发送的好友wxid
SendPatMsg
函数原型: def SendPatMsg(roomid:str, wxid:str) -> int: ...
功能: 发送拍一拍消息
参数:
- roomid: 群id
- wxid: 拍的人的wxid
SendImageMsg
函数原型: def SendImageMsg(wxid:str, path:str) -> int: ...
功能: 发送图片
参数:
- wxid: …
- path: 发送的图片绝对路径
SendFileMsg
函数原型: def SendFileMsg(wxid:str, path:str) -> int: ...
功能: 发送文件
参数:
- wxid: …
- path: 发送的文件绝对路径
SendAppMsg
函数原型: def SendAppMsg(wxid:str, gappid:str) -> int: ...
功能: 发送小程序消息
参数:
- wxid: …
- gappid: 类似gh_xxxxxxxx@app这样的id, 可以转发一个小程序,里面的xml就有
ForwardMessage
函数原型: def ForwardMessage(wxid:str, localid:int) -> int: ...
功能: 转发消息
参数:
- wxid: …
- localid: 消息里面的localid字段
EditRemark
函数原型: def EditRemark(wxid:str, remark:str) -> int: ...
功能: 编辑好友备注
参数:
- wxid: …
- remark: 备注内容
RecvTransfer
函数原型: def RecvTransfer(wxid:str, transferid:str, transcationid:str) -> int: ...
功能: 接收转账
参数:
- wxid: …
- transferid: 转账消息的xml里可以提取到
- transcationid: 转账消息的xml里可以提取到
RefundTransfer
函数原型: def RefundTransfer(wxid:str, transferid:str, transcationid:str) -> int: ...
功能: 退还转账
参数:
- wxid: …
- transferid: 转账消息的xml里可以提取到
- transcationid: 转账消息的xml里可以提取到
GetChatRoomMembers
函数原型: def GetChatRoomMembers(roomid:str) -> str: ...
功能: 获取某个群的所有群成员
参数:
- roomid: 群id
GetChatRoomMemberNickname
函数原型: def GetChatRoomMemberNickname(roomid:str, wxid:str) -> str: ...
功能: 获取群成员昵称
参数:
- roomid: 群id
- wxid: 要获取昵称的wxid
GetUserInfoJsonByCache
函数原型: def GetUserInfoJsonByCache(wxid:str) -> str: ...
功能: 获取某个用户的昵称, 可以是好友或者群成员
参数:
- wxid: 要获取昵称的wxid
DelChatRoomMembers
函数原型: def DelChatRoomMembers(roomid:str, wxid:str) -> int: ...
功能: 删除群成员
参数:
- roomid: 群id
- wxid: 要删除的那个人的wxid
SetChatRoomAnnouncement
函数原型: def SetChatRoomAnnouncement(roomid:str, content:str) -> int: ...
功能: 设置群公告
参数:
- roomid: 群id
- content: 公告内容,仅支持文本内容
SetChatRoomName
函数原型: def SetChatRoomName(roomid:str, name:str) -> int: ...
功能: 修改群名称
参数:
- roomid: 群id
- name: 名称
SetChatRoomMyNickname
函数原型: def SetChatRoomMyNickname(roomid:str, name:str) -> int: ...
功能: 修改自己的群昵称
参数:
- roomid: 群id
- name: 名称
AddChatRoomMembers
函数原型: def AddChatRoomMembers(roomid:str, wxid:str) -> int: ...
功能: 邀请好友进程,该接口仅支持40人以下的群
参数:
- roomid: 群id
- wxid: 好友的wxid
DownloadImageFromCdnByLocalid
函数原型: def DownloadImageFromCdnByLocalid(localid:int, file_path:str) -> int: ...
功能: 下载某个图片消息的图片到指定路径下
参数:
- localid: 消息的localid
- file_path: 路径一般是微信的目录,然后解密拷贝出来。具体见Python示例
DownloadFileFromCdnByLocalid
函数原型: def DownloadFileFromCdnByLocalid(localid:int, file_path:str) -> int: ...
功能: 下载某个文件消息到指定路径下
参数:
- localid: 消息的localid
- file_path: 路径一般是微信的目录,然后拷贝出来。具体见Python示例
DownloadVideoFromCdnByLocalid
函数原型: def DownloadVideoFromCdnByLocalid(localid:int, file_path:str) -> int: ...
功能: 下载某个视频消息到指定路径下
参数:
- localid: 消息的localid
- file_path: 路径一般是微信的目录,然后拷贝出来。具体见Python示例
AddFriendByWxidOrV3
函数原型: def AddFriendByV3V4(v3:str, v4:str, addType:int) -> int: ...
功能: 同意还有请求,v3、v4和addType都在好友请求的消息xml里,具体字段见Python示例
参数:
- v3: …
- v4: …
- addType: 添加的类型,比如通过wxid添加就是6,通过名片添加的就是17,
getVoiceByMsgid
函数原型: def getVoiceByMsgid(msgid:str) -> str: ...
功能: 通过msgid获取语音文件,获取的格式是slik,需要转常见的音频格式比如mp3才能播放
参数:
- msgid: 音频消息中的msgid
CheckFriendStatus
函数原型: def CheckFriendStatus(wxid:str) -> dict: ...
功能: 检测好友状态,拉黑、删除等,可以用来做僵尸粉检测,建议调用增加间隔时间。可能会出现添加好友的提示,属于正常现象,对方看不到
参数:
- wxid: …
SearchFriend
函数原型: def SearchFriend(phone:str) -> dict: ...
功能: 通过微信号或者手机号搜索用户
参数:
- phone: 要搜索的微信号或手机号
获取我的wxid
函数原型: def GetMyWxid() -> dict: ...
功能: 获取开发者的wxid
返回值:kanadeblisst
相关文章:
使用Python做一个微信机器人
介绍 简介 该程序将微信的内部功能提取出来,然后在程序里加载Python,接着将这些功能导出成库函数,就可以在Python里使用这些函数 程序启动的时候会执行py_code目录下的main.py,类似于你在命令行使用python main.py。 现在会以…...
云计算战略:选择适合你业务的云平台
文章目录 云计算的概述选择云平台的关键因素1. 业务需求2. 预算3. 性能要求4. 数据隐私和合规性 示例:选择适合的云平台业务需求预算性能要求数据隐私和合规性 代码示例:使用云平台服务结论 🎉欢迎来到云计算技术应用专栏~云计算战略…...
Python:打印目录下每层的文件总数
代码如下: import osclass FileCount(object):def __init__(self,root_path: str):self.root_path root_pathself._count Noneself._file_count Noneself.children []def get_count(self):if self._count is None:self._count 0self._file_count 0for child_…...
LVS-NAT模式
LVS负载均衡群集 群集的定义 Cluster,集群(也称群集)由多台主机构成,但对外只表现为一一个整体,只提供一-个访问入口(域名或IP地址), 相当于一台大型计算机。 群集的作用 对于企业服务的的性能提升一般…...
【神印王座】龙皓晨竟然上了头版头条!内容违背,新闻真实性原则
Hello,小伙伴们,我是小郑继续为大家深度解析神印王座国漫。 大家有没有发现,当龙皓晨他们从驱魔关回到圣城时,有这么一幕,一个卖报小孩边走边说:驱魔关大捷,少年英雄龙皓晨操控守护与怜悯之神印王座&#x…...
C++之类和函数权限访问总结(二百二十七)
简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 人生格言: 人生…...
手动部署 OceanBase 集群
手动部署一个 OB 单副本集群,包括一个 OBProxy 节点 部署环境 服务器信息 IP地址 192.168.0.26 网卡名 ifcfg-enp1s0 OS Kylin Linux Advanced Server release V10 CPU 8C 内存 32G 磁盘1 本地盘 /data/1 磁盘2 本地盘 /data/log1 机器和角色划分 …...
【操作系统笔记十二】Linux常用基础命令
Linux 常用快捷键 Tab 命令或路径等的补全键,特别常用的快捷键Ctrl insert 复制命令行内容(常用可提高效率)Shift insert 粘贴命令行内容(常用可提高效率)Ctrl C 中断当前任务(退出)Ctrl Z…...
Compose LazyColumn 对比 RecyclerView ,谁的性能更好?
LazyColumn 是 compose 中用来实现类似 RecyclerView 效果的控件 ,但是大家都说LazyColumn性能比RecyclerView差太多,毕竟 RecyclerView google优化了十多年了,比RecyclerView差一点也正常,今天我们就用实际数据来对比LazyColumn和…...
[python 刷题] 49 Group Anagrams
[python 刷题] 49 Group Anagrams 题目: Given an array of strings strs, group the anagrams together. You can return the answer in any order. An Anagram is a word or phrase formed by rearranging the letters of a different word or phrase, typically…...
vue+element plus 使用table组件,清空用户的选择项
<el-table ref"tableRef"> .... </el-table> <script lang"ts" setup> import { onMounted, reactive, ref, nextTick } from vue const clearBtn () > {console.log(清空用户的选择项)tableRef.value.clearSelection() } </scr…...
改写软件-怎么选择改写软件
什么是改写软件?改写软件是基于自然语言处理技术的工具,它们可以分析一段文字,并将其重新表达,以保持原始意义,但使用不同的词汇和结构。这种技术可用于减少内容的重复,增加多样性,或者简化复杂…...
gateway之跨域处理
文章目录 什么是跨域跨域带来的问题 gateway解决跨域解决跨域的其他方式比较代码示例 总结提升 什么是跨域 跨域(Cross-Origin)是指在浏览器中,当一个Web应用程序试图访问与其所属页面不同的源(origin)的资源时&#…...
uniapp 实现不同用户展示不同的tabbar(底部导航栏)
一、背景 最近在做一个uniapp开发的小程序遇到一个需求,希望不同用户登录后展示不同的tabbar页面,但是uniapp项目中的pages.json是只有一个list数组的,并且是不能写成动态效果,为了实现这个需求,便自定义了tabbar组件 …...
线性归一化是什么,用python实现数据的线性归一化
线性归一化(Linear Normalization)是一种常见的数据预处理方法,也被称为 Min-Max 归一化。它通过对原始数据进行线性变换,将其缩放到特定的范围内,常用的是将数据缩放到 [0, 1] 或 [-1, 1] 范围内。 具体来说ÿ…...
超级好用绘图工具(Draw.io+Github)
超级好用绘图工具(Draw.ioGithub) 方案简介 绘图工具:Draw.io 存储方式: Github 1 Draw.io 1.2 简介 是一款免费开源的在线流程图绘制软件,可以用于创建流程图、组织结构图、网络图、UML图等各种类型的图表。…...
全国职业技能大赛云计算--高职组赛题卷③(私有云)
全国职业技能大赛云计算--高职组赛题卷③(私有云) 第一场次题目:OpenStack平台部署与运维任务1 基础运维任务(5分)任务2 OpenStack搭建任务(15分)任务3 OpenStack云平台运维(15分&am…...
Redis SCAN命令操作实战(详细)
目录 SCAN 介绍 SCAN 命令基本用法 MATCH 选项用法 COUNT 选项用法 TYPE 选项用法 补充 并发执行多个迭代 中途停止迭代 使用错误的游标进行增量式迭代 迭代终结的保证 SCAN 介绍 SCAN cursor [MATCH pattern] [COUNT count][TYPE type]:SCAN 命令及其相…...
计网第五章(运输层)(六)(TCP可靠传输的实现)
目录 一、基本概述 二、具体实现 1.前后沿: 2.利用指针描述发送窗口的状态 3.有差错情况 之前在数据链路层时已经讨论过可靠传输(计网第三章(数据链路层)(二)(可靠传输)&#x…...
酒店外卖小程序商城的作用是什么
随着线上餐品销售属性增强,传统酒店除了承接到店客户,外送也成为生意的一部分,但传统打电话、微信发送的方式无法实现餐品全面呈现和客户随时订购需求,在配送方面也无法规范化。 除此之外,还需要完善营销、会员管理、…...
居家养老一键通的功能
居家养老一键通的功能 居家养老一键通是指为老年人提供全方位的居家养老服务的平台或系统。它通过整合各种资源和服务,为老年人提供便捷、安全、舒适的居家养老环境,帮助他们解决生活中的各种难题。 居家养老一键通的功能通常包括以下几个方面ÿ…...
海外代理IP是什么?如何使用?
一、海外代理IP是什么? 首先,代理服务器是在用户和互联网之间提供网关的系统或路由器。它是一个服务器,被称为“中介”,因为它位于最终用户和他们在线访问的网页之间。 海外IP代理是就是指从海外地区获取的IP地址,用…...
mmdetection v3避坑
命令: python tools/test.py projects/DiffusionDet/configs/diffusiondet_r50_fpn_500-proposals_1-step_crop-ms-480-800-450k_coco.py /data/zhangrui/mmdetection-master/checkpoints/diffusiondet_r50_fpn_500-proposals_1-step_crop-ms-480-800-450k_coco_202…...
备份服务器数据库并保存到Git仓库
备份项目及数据库脚本 #!/bin/bash # MySQL数据库信息 DB_HOST"localhost" DB_USER"root" DB_PASS"************" DB_NAME"my-space" # 导出文件目录 EXPORT_PATH"/home/MySpace/mysql" # 获取当前时间并格式…...
尚硅谷wepack课程学习笔记
为什么需要使用打包工具? 开发时使用的框架、es6 语法 、less 等浏览器无法识别。 需要经过编译成浏览器能识别的css、js才可以运行。 打包工具可以帮我们编译,号可以做代码压缩、兼容处理、性能优化。 常见的打包工具有什么? vite、webpac…...
c++模版元编程-可变参数模版
在 C 中,我们可以使用模板参数包(Template Parameter Pack)和展开表达式(Expanding Expression)来定义可变参数模板。 模板参数包 模板参数包是一种特殊的语法,用于表示接受多个模板类型参数或非类型参数…...
pcl--第十节 点云曲面重建
曲面重建技术在逆向工程、数据可视化、机器视觉、虚拟现实、医疗技术等领域中得到了广泛的应用 。 例如,在汽车、航空等工业领域中,复杂外形产品的设计仍需要根据手工模型,采用逆向工程的手段建立产品的数字化模型,根据测量数据建…...
【力扣-每日一题】2560. 打家劫舍 IV
class Solution { public:bool check(vector<int> &nums,int max_num,int k){//只需要计算可以偷的房间。在满足最大值为max_num下时,能偷的最多的房间,与k值比较//如果大于K,说明max_num还可以缩小//如果小于看,说明ma…...
vue简单案例----小张记事本
小张记事本 具体效果如图所示,这里就简单展示,还有很多不足的地方,希望大家可以对这个小项目进行改进,话不多说可以参考下面的代码 源代码如下 <html lang"en"><head><meta charset"UTF-8"…...
爬虫获取接口数据
上一讲讲的是获取静态网页数据的教程,适用于我们要爬取的数据在网页源代码中出现,但是还是有很多的数据是源代码中没有的,需要通过接口访问服务器来获得,下面我就来讲讲如何爬取这类数据。 以巨潮资讯网爬取比亚迪企业年报为例。…...
通化网站开发/网站seo方案策划书
1.设计了一个接口用于包装其它 pojo,以计算是否过期public interface CatchWrapper{public long getCatchedTime();public T getValue();public boolean valid();}某一个实现:public class DeviceCatchWrapper implements CatchWrapper {private final l…...
怎么做网购网站/seo自然排名优化
在AI人才正式进入产业之前,各项赛事可以说是绝佳的“演兵场”,为广大学子提供将理论转化为实践的契机。5月20日,由深度学习技术及应用国家工程实验室与百度联合主办的“WAVE SUMMIT”2020深度学习开发者峰会召开,2020百度之星大赛…...
石家庄外贸网站建设公司排名/制作网站首页
AutoHotkey 初学者向导 https://wyagd001.github.io/zh-cn/docs/Tutorial.htm 1 - 基础 在我们开始我们的旅程之前, 让我给你一些建议吧. 在本向导中, 你会看到大量的文字和大量代码. 为了更有效的学习, 建议你阅读这些文字并尝试这些代码. 然后再深入学习这些代码. 你可以复…...
wordpress sidebar.php/万维网域名注册查询
MongoDB 进程控制 进程控制db.currentOp() # 查看活动进程 db.$cmd.sys.inprog.findOne() # 查看活动进程 与上面一样 opid # 操作进程号 op # 操作类型(查询\更新) ns # 命名空间,指操作的是哪个对象 query # 如果操作类型是查询,这里将显示具体的查询内容 lockType # 锁的类型…...
jquery扁平自适应网站html5模板/设计网页的软件
计算机等级考试一级(Ms Office 2010)操作复习提纲EXCEL版计算机等级考试一级考查EXCEL主要从以下三个方面进行考查:1、基础性考查2、函数应用考查3、数据处理的考查其中函数应用考查最难,因为其考查的范围广,函数应用多是很多同学的痛点。但我…...
怎么做网购网站/营销咨询公司排名前十
发现网页上包含RM视频文件的一个致命弱点,那就是必须将所有的RM文件下载到本地,然后才开始播放,这样网页打开很慢,而且一不小心,Realone就会提示你连接超时。通过在局域网内进行测试,发现一个20M多的视频文…...