使用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下载
  • 下载图片
  • 下载视频
  • 下载文件
  • 下载语音
  • 下载表情包
待更新
  • 发送引用消息
  • 发送@消息
  • 语音转文字
  • 获取朋友圈
  • 消息标记已读

操作步骤

准备工作
  1. 安装给定版本(3.9.6.32)的微信到任意目录
  2. 安装给定的python-3.8.10.exe到任意目录, 不懂的话,安装选项可以一直默认
  3. 编辑配置文件,主要修改微信安装目录和Python安装目录
  4. 打开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: ...
功能: 发送文本消息
参数:

  1. wxid: 对方的wxid
  2. text: 发送的文本内容
SendXmlMsg

函数原型: def SendXmlMsg(wxid:str, xml:str, dtype:int) -> int: ...
功能: 发送xml消息,接受消息类型为49,应该都可以把xml拿下来重新发出去。只测试了发送公众号文章
参数:

  1. wxid: 对方的wxid
  2. xml: 发送的xml内容
  3. dtype: xml里面的类型,可以从xml里解析出来
SendEmotionMsg

函数原型: def SendEmotionMsg(wxid:str, path:str) -> int: ...
功能: 发送表情包
参数:

  1. wxid: 对方的wxid
  2. path: 表情包的绝对路径,可以是未加密的表情包、也可以是 FileStorage\CustomEmotion下的加密表情
SendCardMsg

函数原型: def SendCardMsg(wxid:str, xml:str) -> int: ...
功能: 发送某个好友的名片, 也可以使用下面那个函数,可以直接通过好友wxid发送
参数:

  1. wxid: 对方的wxid
  2. xml: 名片的xml数据,可以先发送一个出去,然后在接受消息里打印出来就能看到
SendCardMsgByWxid

函数原型: def SendCardMsg(wxid:str, cardWxid:str) -> int: ...
功能: 发送某个好友的名片
参数:

  1. wxid: 对方的wxid
  2. cardWxid: 需要发送的好友wxid
SendPatMsg

函数原型: def SendPatMsg(roomid:str, wxid:str) -> int: ...
功能: 发送拍一拍消息
参数:

  1. roomid: 群id
  2. wxid: 拍的人的wxid
SendImageMsg

函数原型: def SendImageMsg(wxid:str, path:str) -> int: ...
功能: 发送图片
参数:

  1. wxid: …
  2. path: 发送的图片绝对路径
SendFileMsg

函数原型: def SendFileMsg(wxid:str, path:str) -> int: ...
功能: 发送文件
参数:

  1. wxid: …
  2. path: 发送的文件绝对路径
SendAppMsg

函数原型: def SendAppMsg(wxid:str, gappid:str) -> int: ...
功能: 发送小程序消息
参数:

  1. wxid: …
  2. gappid: 类似gh_xxxxxxxx@app这样的id, 可以转发一个小程序,里面的xml就有
ForwardMessage

函数原型: def ForwardMessage(wxid:str, localid:int) -> int: ...
功能: 转发消息
参数:

  1. wxid: …
  2. localid: 消息里面的localid字段
EditRemark

函数原型: def EditRemark(wxid:str, remark:str) -> int: ...
功能: 编辑好友备注
参数:

  1. wxid: …
  2. remark: 备注内容
RecvTransfer

函数原型: def RecvTransfer(wxid:str, transferid:str, transcationid:str) -> int: ...
功能: 接收转账
参数:

  1. wxid: …
  2. transferid: 转账消息的xml里可以提取到
  3. transcationid: 转账消息的xml里可以提取到
RefundTransfer

函数原型: def RefundTransfer(wxid:str, transferid:str, transcationid:str) -> int: ...
功能: 退还转账
参数:

  1. wxid: …
  2. transferid: 转账消息的xml里可以提取到
  3. transcationid: 转账消息的xml里可以提取到
GetChatRoomMembers

函数原型: def GetChatRoomMembers(roomid:str) -> str: ...
功能: 获取某个群的所有群成员
参数:

  1. roomid: 群id
GetChatRoomMemberNickname

函数原型: def GetChatRoomMemberNickname(roomid:str, wxid:str) -> str: ...
功能: 获取群成员昵称
参数:

  1. roomid: 群id
  2. wxid: 要获取昵称的wxid
GetUserInfoJsonByCache

函数原型: def GetUserInfoJsonByCache(wxid:str) -> str: ...
功能: 获取某个用户的昵称, 可以是好友或者群成员
参数:

  1. wxid: 要获取昵称的wxid
DelChatRoomMembers

函数原型: def DelChatRoomMembers(roomid:str, wxid:str) -> int: ...
功能: 删除群成员
参数:

  1. roomid: 群id
  2. wxid: 要删除的那个人的wxid
SetChatRoomAnnouncement

函数原型: def SetChatRoomAnnouncement(roomid:str, content:str) -> int: ...
功能: 设置群公告
参数:

  1. roomid: 群id
  2. content: 公告内容,仅支持文本内容
SetChatRoomName

函数原型: def SetChatRoomName(roomid:str, name:str) -> int: ...
功能: 修改群名称
参数:

  1. roomid: 群id
  2. name: 名称
SetChatRoomMyNickname

函数原型: def SetChatRoomMyNickname(roomid:str, name:str) -> int: ...
功能: 修改自己的群昵称
参数:

  1. roomid: 群id
  2. name: 名称
AddChatRoomMembers

函数原型: def AddChatRoomMembers(roomid:str, wxid:str) -> int: ...
功能: 邀请好友进程,该接口仅支持40人以下的群
参数:

  1. roomid: 群id
  2. wxid: 好友的wxid
DownloadImageFromCdnByLocalid

函数原型: def DownloadImageFromCdnByLocalid(localid:int, file_path:str) -> int: ...
功能: 下载某个图片消息的图片到指定路径下
参数:

  1. localid: 消息的localid
  2. file_path: 路径一般是微信的目录,然后解密拷贝出来。具体见Python示例
DownloadFileFromCdnByLocalid

函数原型: def DownloadFileFromCdnByLocalid(localid:int, file_path:str) -> int: ...
功能: 下载某个文件消息到指定路径下
参数:

  1. localid: 消息的localid
  2. file_path: 路径一般是微信的目录,然后拷贝出来。具体见Python示例
DownloadVideoFromCdnByLocalid

函数原型: def DownloadVideoFromCdnByLocalid(localid:int, file_path:str) -> int: ...
功能: 下载某个视频消息到指定路径下
参数:

  1. localid: 消息的localid
  2. file_path: 路径一般是微信的目录,然后拷贝出来。具体见Python示例
AddFriendByWxidOrV3

函数原型: def AddFriendByV3V4(v3:str, v4:str, addType:int) -> int: ...
功能: 同意还有请求,v3、v4和addType都在好友请求的消息xml里,具体字段见Python示例
参数:

  1. v3: …
  2. v4: …
  3. addType: 添加的类型,比如通过wxid添加就是6,通过名片添加的就是17,
getVoiceByMsgid

函数原型: def getVoiceByMsgid(msgid:str) -> str: ...
功能: 通过msgid获取语音文件,获取的格式是slik,需要转常见的音频格式比如mp3才能播放
参数:

  1. msgid: 音频消息中的msgid
CheckFriendStatus

函数原型: def CheckFriendStatus(wxid:str) -> dict: ...
功能: 检测好友状态,拉黑、删除等,可以用来做僵尸粉检测,建议调用增加间隔时间。可能会出现添加好友的提示,属于正常现象,对方看不到
参数:

  1. wxid: …
SearchFriend

函数原型: def SearchFriend(phone:str) -> dict: ...
功能: 通过微信号或者手机号搜索用户
参数:

  1. phone: 要搜索的微信号或手机号

获取我的wxid

函数原型: def GetMyWxid() -> dict: ...
功能: 获取开发者的wxid
返回值:kanadeblisst

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/143236.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

windows11系统没有系统散热方式的解决办法

一、问题描述 当我们查看Win11系统的(同时按下键盘的WinR键即可打开运行窗口)【控制面板】-->【硬件和声音】-->【电源选项】-->【更改计划设置】-->【 更改高级电源设置】-->【处理器电源管理】下没有系统散热方式的选项,如下…

【C语言】【结构体的内存对齐】计算结构体内存大小,有图解

计算结构体内存大小&#xff0c;需要用到结构体内存对齐的知识 来段代码看看什么是结构体对齐&#xff1a; #include<stdio.h> struct S1 {char a;char b;int num; }; struct S2 {char a;int num;char b; }; int main() {printf("%zd\n", sizeof(struct S1))…

Armv9 Cortex-A720的L2 memory system 和 L2 Cache

9 L2 memory system Cortex-A720核心的L2内存系统通过CPU bridge连接core与DynamIQ Shared Unit-120,其中包括私有的L2缓存。 L2缓存是统一的,每个Cortex-A720核心在一个集群中都有私有的L2缓存。 L2内存系统包括使用虚拟地址(VA)和程序计数器(PC)的数据预取引擎。不同…

SpringCloud nacos1.x.x版本升级到2.2.3版本并开启鉴权踩坑

近期由于服务器漏洞扫描&#xff0c;检测出nacos存在绕过登录鉴权漏洞&#xff0c;如图 需要进行升级并开启鉴权&#xff0c;就此次升级做下记录。 1.首先备份原来的nacos&#xff0c;导出配置文件作为备份&#xff1b; 2&#xff0c;从官网下载nacos-server-2.2.3.zip&#x…

rk3568环境配置和推理报错: RKNN_ERR_MALLOC_FAIL

前言 最近在部署算法在板子侧遇到的一些问题汇总一下&#xff1a; 一、版本问题 经过测试现在将自己环境配置如下&#xff1a; 本地linux安装rknn-toolkit2-1.5.0 本地Linux使用的miniconda新建的一个python虚拟环境&#xff08;自行网上查找相关方法&#xff09; 安装好自…

Android导航抽屉

本文所有代码均位于https://github.com/MADMAX110/CatChat 之前使用过标签页布局可以让用户在应用中轻松地导航。 当只有为数不多地几个类别屏幕&#xff0c;而且它们都在应用层次结构地同一级上&#xff0c;标签页布局就很适用。 而抽屉导航可以实现更多选择&#xff0c;这是一…

python(自4) xpath下载 lxml安装 lxml语法 使用方式

&#xff08;一&#xff09;安装 搜索xpath 讲解 XPath 教程 (w3school.com.cn) 一&#xff0c;下载地址 &#xff1a; https://chrome.zzzmh.cn/info/hgimnogjllphhhkhlmebbmlgjoejdpjl 二 &#xff0c;拖拽 &#xff08;二&#xff09;lxml安装 cmd 打开终端 cd pythond…

JAVA中使用CompletableFuture进行异步编程

JAVA中使用CompletableFuture进行异步编程 1、什么是CompletableFuture CompletableFuture 是 JDK8 提供的 Future 增强类&#xff0c;CompletableFuture 异步任务执行线程池&#xff0c;默认是把异步任 务都放在 ForkJoinPool 中执行。 在这种方式中&#xff0c;主线程不会…

Textpad 缺少Java编译和运行功能

一、问题 缺少Java编译和运行功能 二、处理方法 1、点击菜单Configure->Preferences 2、点击 Tools -> Add -> Java SDK Commands 3、点击应用和确认 三、结果

MATLAB算法实战应用案例精讲-【优化算法】Tiki-taka算法(TTA)(附MATLAB代码实现)

前言 Tiki-Taka战术体系曾经帮助西班牙国家队及巴塞罗那俱乐部取得了巨大的成功。然而,在2018年世界杯西班牙全场传球1100余次(职业比赛场均传球500次左右,西班牙场均800次左右)却被控球率只有20%的俄罗斯淘汰后,人们开始意识到大量机械的传球不但会让球迷觉得枯燥乏味,…

基于微信小程序的停车场预约收费小程序设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言系统主要功能&#xff1a;具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序&#xff08;小蔡coding&#xff09;有保障的售后福利 代码参考源码获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计…

【数据结构】冒泡排序,快速排序的学习知识总结

目录 1、冒泡排序 1.1 算法思想 1.2 代码实现 方式一&#xff1a;顺序表 方式二&#xff1a;链表 2、快速排序 2.1 算法思想 2.2 代码实现 2.3 例题分析 1、冒泡排序 1.1 算法思想 冒泡排序是一种简单的排序算法&#xff0c;它的基本思想是从数组的第一个元素开始…

ahk系列——ahk_v2实现win10任意界面搜狗翻译

1、准备环境 win10或者以上系统安装ahkv2_64环境&#xff0c;安装包安装好后会有32和64位的unicode版本准备一个编译器&#xff0c;我用idea&#xff0c;不会ahk编程的我会把编译好的exe连接放到最后需要 联网 才能翻译 2、 使用方法 选中需要翻译的文字&#xff0c;然后ctr…

【OSCAR开源产业大会分论坛】开源大模型走向何方?

再过俩月&#xff0c;ChatGPT 即将迎来推出一周年纪念日。作为开历史先河的 AI 大模型&#xff0c;ChatGPT 像一针猛戳进千行百业中枢神经的兴奋剂&#xff0c;在全球掀起空前绝后的 AI 军备竞赛热潮。 近一年来&#xff0c;我们看到 GPT-3.5 完成向多模态的 GPT-4 进化&#x…

[Realtek sdk-3.4.14b]RTL8197FH-VG 2.4G to WAN吞吐量低于60%的问题分析及解决方案

问题描述 RTL8197FH-VG 2.4G wifi to WAN吞吐量低于65%的标准,正常2T2R的wifi 300Mbps x 65% = 195Mbps,但是实际只能跑到160Mbps,这个时候CPU的idl已经为0,sirq占用率达到98%左右 网络拓扑 一台PC通过2.4G WiFi连接到RTL8197FH-VG,另外一台PC直接通过WAN口连接到RTL8197…

【Verilog教程】6.7 Verilog流水线

关键词&#xff1a;流水线&#xff0c;乘法器 硬件描述语言的一个突出优点就是指令执行的并行性。多条语句能够在相同时钟周期内并行处理多个信号数据。 但是当数据串行输入时&#xff0c;指令执行的并行性并不能体现出其优势。而且很多时候有些计算并不能在一个或两个时钟周期…

美篇作文网教学资源源码-自带作文数据

非常漂亮的UI设计和页面排版&#xff01; 自适应手机pc端 页面内容均支持自定义 可以用来做网站矩阵&#xff0c;或者增强你其他网站板块&#xff0c;或者单独运营都可以。 可以通过广告方式变现&#xff0c;或者引流等等 友好的seo&#xff0c;更容易被浏览器收录 关注青狐…

LINUX|ubuntu常用指令

文章目录 查看IP显示当前路径下所有文件安装编译工具GCC、调试工具GDB、连接工具SSHmkdir 创建目录export命令显示当前系统定义的所有环境变量echo $PATH命令输出当前的PATH环境变量的值当前命令行添加环境变量&#xff0c;关闭失效&#xff0c;防止多版本库冲突时使用sudo su打…

新移科技发布基于联发科MT8390(Genio 700)平台的物联网 AI 核心板

新移科技研发的XY8390物联网 AI 核心板是一款高度集成、功能强大的平台&#xff0c;该核心板专为各种人工智能 (AI) 和物联网 (IoT) 用例而设计。 处理器采用了 Arm DynamIQ™ 技术&#xff0c;结合了高性能 Cortex-A78 内核和高能效 Cortex-A55 内核&#xff0c;并配备了 Arm …

二维平面扭曲的python实现及思路

二维平面扭曲的python实现及思路 缘起原理实现代码 缘起 工作需要&#xff0c;需要一个尝试改变设备布点的方法&#xff0c;在csdn闲逛时&#xff0c;偶然间发现这样的一篇文章 二维扭曲&#xff0c;参考这位博主的文章&#xff0c;我对其内容进行复现和进一步挖掘。若有侵权或…