用Python做个微信自动回复机器人

article/2025/8/23 5:48:28

微信已经成为我们生活不可或缺的一部分,每天有380亿条消息从微信上发出,其中6亿条是语音消息,有350万个活跃的公众账号,并存在着8亿活跃粉丝。微信是一个庞大的生态群体。

今天我们来玩转一下微信,微信有关的第三方框架很多,比如wxpy,wxBot等。今天要使用的是其中著名的itchat Python模块来做两件有趣的事情。

 

一个自动回复的机器人


微信自上线以来,一直没有自动回复的功能,想必是有他们的理念。但是有些人群,确实对此功能有一定需求,我举两个栗子:

  • 不愿时刻被消息打扰的人

  • 消息需要批量处理的人们(比如微商)

功能列表:

  • 收到消息立即自动回复

  • 收到消息延迟指定时间回复

  • 对不同好友定制不同的回复内容

  • 在手机端随时进行控制


1.启用itchat模块

itchat的原理是通过扫码进行远程微信网页端的登录,然后通过在移动端进行操作,网页端进行响应,来实现一些功能,虽然似乎绕了个弯子,但是在微信的限制下,这似乎已经是一种最佳的方式了。

首先我们需要考虑别的问题是:程序如何在微信端接收到你的指令。此时出现了一个非常重要的角色:文件管理器。(当网页端微信登陆后,消息列表会出现)此时,文件管理器充当了移动端和web端的桥梁。

我们可以先通过设定几个全局变量来做作为功能的开关和保存数据的容器。

然后通过判断web端在”文件管理器“中接收到的字符串指令来进行不同操作,假如此时我们收到了朋友的消息,需要程序给出自动回复。

 

收到朋友消息即时进行自动回复是很简单的,但是如何去做延时发送回复消息呢?我先谈一谈我的想法,抛砖引玉:

 

  • 一般发送消息需要用到队列,进行入队和出队,我在这里设置了一个字典来保存消息发送者的数据。

  • 键为消息发送者的昵称,值是一个长度为2的数组,分别保存消息发送者的微信id和接收消息时的时间戳。

  • 这样我将每条发送过来的朋友信息保存在这个字典中,再通过将设定延迟时间同消息时间戳求和与当前时间戳进行对比,若当前时间戳较大,那么执行发送消息的操作。

  • 此时再开启一个线程作为定时任务,定时去检测字典中每条数据是否到达了发送的临界要求(当前时间戳>=消息时间戳+设定的延迟时间)。

  • Python中有个专门做定时任务的模块叫sched,但是我尝试了一下,sched会阻塞当前主线程,也会阻塞itchat的线程,所以并不合适。

  • 这里我还是采用了threading的Timer来充当定时器,不过要注意使用递归,否则将会出现运行一次就结束的情况。

 


到此为止,主要的功能已经实现了,我用一个测试账号对我的微信进行了各种测试,看一下以下截图:

 

 

 

2.增强功能

这时功能基本已经完成了,这就结束了吗?别着急,再想想有没有需要完善一下的地方?用过微信web端的同学应该知道,当web端长期处于未操作的状态下会失去连接。

 

在我们这个情况下,假如你长时间未收到微信消息,后台程序将会与微信失去连接,再次开启需要登上服务器重启程序,这显然非常麻烦。有没有什么简单的解决办法呢?

 

我想到一些应用的后台通常会做一道心跳检测机制,那我就模仿这个思路,定时给我的”文件管理器“发一个字符串,来保持连接。

 

def keep_alive():text="保持登录"itchat.send(text, toUserName="filehelper")global timer2timer2 = threading.Timer(60*60,keep_alive)timer2.start()

 

最后,我们需要将这个程序发布在服务器上,让它全天候为我的微信服务。

 

这里需要注意,如果仅用python xxxx.py来运行的话,关闭shell会导致进程结束,所以我们需要使用nohup python xxxx.py &来全方位守护进程,这里啰嗦一句,nohup和&的功能是不一样的,很多人容易混淆,感兴趣的话可以去查下资料区分一下。

 

    简单分析微信好友信息

 

上文提到,既然我们能通过itchat来获取好友的信息,那让我们看看都有哪些好玩的信息。这是以json形式返回的我的信息,同理我的好友的这些公开信息我也能获取到。

 

 

我们就来进行一些简单的的数据抓取,清洗与呈现。我看中的字段是:Sex、City、Province、Signature。我想做的是通过图表来直观地展示我微信好友中的性别比例家乡分布(当然不一定准确,很多人都是胡乱设置的),我的江苏朋友的市级分布,以及好友个性签名的词云

 

这部分内容主要是需要熟悉诸如pyecharts、jieba、wordcloud模块的API调取,难度不大,但需要细心调试。我这里就不详细赘述了。

 

1).性别比例

 

用饼图可视化一下:

 

 

2).好友省级分布

def get_data(type):result=[]my_friends = itchat.get_friends(update=True)[0:]for item in my_friends:result.append(item[type])return resultdef friends_province():# 获取好友省份province= get_data("Province")# 分类province_distribution = {}for item in province:#删除英文省份,因为中国地图表中没有if bool(re.search('[a-z]',item)):continueelif not province_distribution.__contains__(item):province_distribution[item] = 1else:province_distribution[item] += 1#将省份名为空的删除province_distribution.pop('')#提取地图接口需要的数据格式province_keys=province_distribution.keys()province_values=province_distribution.values()return province_keys,province_valuesif __name__ == '__main__':itchat.auto_login(True)微信好友省份分布attr,value=friends_province()map = Map("我的微信好友分布", "@寒食君",width=1200, height=600)map.add("", attr, value, maptype='china', is_visualmap=True,visual_text_color='#000')map.render()

 

用地图来显示一下:

 

3).个性签名词云

def friends_signature():signature = get_data("Signature")wash_signature=[]for item in signature:#去除emoji表情等非文字if "emoji" in item:continuerep = re.compile("1f\d+\w*|[<>/=【】『』♂ω]")item=rep.sub("", item)wash_signature.append(item)words="".join(wash_signature)wordlist = jieba.cut(words, cut_all=True)word_space_split = " ".join(wordlist)coloring = np.array(Image.open("C:/Users/casua/Desktop/test1.JPG"))my_wordcloud = WordCloud(background_color="white", max_words=800,mask=coloring, max_font_size=80, random_state=30, scale=2,font_path="C:/Windows/Fonts/STKAITI.ttf").generate(word_space_split)image_colors = ImageColorGenerator(coloring)plt.imshow(my_wordcloud.recolor(color_func=image_colors))plt.imshow(my_wordcloud)plt.axis("off")plt.show()

 

看一下词云图:

 


http://chatgpt.dhexx.cn/article/ZffnI3Ij.shtml

相关文章

微信自动回复的智能聊天机器人怎么做?

wx微信简单话术群消息同步机器人,简单明了效率高。 工具 先安装微信特定版本3.0.0.57,后打开WeiChatTool.exe运行使用/操作 操作主界面如下: 自动通过好友验证以及计数 1.设置通过好友验证时长,一般为2-3秒 2.设置启用新好友信息之后,通过的新好友自动发送保存好的文字/…

如何用 30 行代码实现微信自动回复机器人?

作者 | Ahab 责编 | 胡巍巍 写在前面 很多朋友对itchat非常感兴趣&#xff0c;近日又学到了itchat另一种有趣的玩法——微信自动回复机器人。 程序很简单仅仅三十行代码左右&#xff0c;实现了机器人自动与你的微信好友聊天&#xff0c;下面是我的机器人小笼包跟自己微信好友聊…

手把手教你实现一个微信自动回复机器人

RebateBot 返利机器人 微信聊天机器人代码 项目地址 项目描述 关键词: 返利 微信 阿里妈妈 机器人 跨平台 返利机器人&#xff0c;基于微信建立机器人通道与用户通过聊天快速生成返利链接 利用闲置微信和极小的电脑性能开启24小时无人轮值返利机器人 购物只需要发送链接给…

超简单Python实现微信机器人自动回复

下面这个小文章适合初学Python的童鞋哦~~~ 一个很好用的微信库&#xff1a;itchat 拿使用图灵机器人设置自动回复&#xff0c;让机器人跟微信好友傻傻的聊天&#xff0c;机器人比小编还会聊天&#xff0c;无论是对美眉还是汉纸&#xff0c;上来就是爱&#xff01;爱&#xff…

怎么做一个微信自动回复的智能聊天机器人?

微信自动回复机器人的操作很简单&#xff0c;只需要完成30行代码&#xff0c;就可以让机器人实现查天气、查星座运势、智能回复、关键词回复等功能。 下面我们看个例子&#xff1a; 在程序设定时通过itchat获取微信信息&#xff0c;将微信消息传输到机器人的接口&#xff0…

微信自动回复机器人使用教程

第一步&#xff0c;打开软件&#xff0c;选择关键词回复一栏 第二步&#xff1a;单击鼠标右键选择添加一个词&#xff0c;设置好关键词&#xff0c;回复词&#xff0c;选择回复到哪个微信群即可。 第三步&#xff1a;测试一下效果 第四步&#xff1a;操作就是这么简单&#xff…

如何训练创建一个聊天自动回复的微信机器人(一)

如何创建一个聊天自动回复的微信机器人&#xff08;一&#xff09; 这里&#xff0c;本来打算用一个微信号来做机器人的&#xff0c;但是机器人有几个缺点 1、如果任意一个人想使用机器人的话&#xff0c;那么必须添加机器人为好友才能使用测试 2、基于微信识别异常微信号的自…

Python几十行代码轻松实现微信自动回复机器人

Python几十行代码轻松实现微信自动回复机器人 最近因为太无聊了就考虑能不能做一些好玩的东西出来&#xff0c;正好在CSDN的推荐上看到大佬做的微信自动回复机器人&#xff0c;觉得很有趣&#xff0c;因此想着自己也能动手做一个。在此就写下我的具体思路和实现过程吧。 首先&…

多核CPU算法

多核CPU环境下的进程调度算法有哪些&#xff0c;与单核CPU环境下的进程调度有何不同&#xff1f; 多核CPU调度算法 全局队列调度 操作系统维护一个全局的任务等待队列。当系统中有一个CPU核心空闲时&#xff0c;操作系统就从全局任务等待队列中选取就绪任务开始在此核心上执…

多CPU和多核CPU对应多进程和多线程调度

目录 cpu架构和工作原理多核cpu和多cpu 架构cpu的缓存进程和线程进程和线程在多核cpu&#xff0c;多cpu中的运行关系 cpu架构和工作原理 计算机有5大基本组成部分&#xff0c;运算器&#xff0c;控制器&#xff0c;存储器&#xff0c;输入和输出。运算器和控制器封装到一起&a…

单核CPU vs. 多核CPU

单核CPU vs. 多核CPU 单核CPU 起源&#xff1a; CPU的起源是1971年英特尔公司推出&#xff0c;由此正式宣告计算机的诞生&#xff0c;可以说是世界级的改变&#xff0c;并且严格准守冯诺依曼体系结构&#xff0c;在英特尔推出CPU之前的计算机所使用的处理器工作是非常麻烦的…

多核计算机是指有多个cpu,多核和多个CPU有什么区别?

多核和多个CPU有什么区别&#xff1f; 多核和多个CPU有什么区别&#xff1f;首先让我们了解以下两项: 什么是多核CPU&#xff1f;简单的理解是&#xff0c;我们将多个内核加载到一个程序包中&#xff0c;让用户了解这是一个处理器. 这样做的好处是&#xff0c;最初在单台计算机…

多核CPU、多CPU与多进程、多线程关系

文章目录 1 cpu架构和工作原理2 多核cpu和多cpu架构3 进程和线程4 多核、多CPU与多线程、多进程的对应关系5 总结 1 cpu架构和工作原理 计算机有5大基本组成部分&#xff0c;运算器&#xff0c;控制器&#xff0c;存储器&#xff0c;输入和输出。运算器和控制器封装到一起&…

多核与多处理器的区别

一、定义 多核&#xff1a;单块CPU上面能处理数据的芯片组的数量&#xff0c;比如&#xff0c;双核就是包括2个相对独立的CPU核心单元组&#xff0c;四核就包含4个相对独立的CPU核心单元组。 多处理器&#xff1a;主板上实际插入的cpu数量&#xff0c;一般有两个或者多个处理…

多核CPU和单核的区别~

昨天有同学问我多核cpu和单核的区别大不大&#xff0c;今天简单写一篇回复下吧。大家有其他问题也可以文末给我留言&#xff0c;我会尽量抽时间写文回复。 首先回顾下基本概念&#xff0c;cpu&#xff0c;就是中央处理器&#xff0c;包括运算器和控制器。cpu的主要功能就是“一…

多核处理器结构

文章目录 一、多核处理器的发展演化二、多核处理器的访存结构2.1 通用多核处理器的片上Cache结构2.2 存储一致性模型2.3 Cache一致性协议 三、多核处理器的互连结构3.1 片上总线3.2 交叉开关3.3 片上网络 四、多核处理器的同步机制4.1 原子操作4.2 锁的软件实现方法4.3 屏障软件…

关于 CPU 的多核和超线程技术

1. 关于 CPU 的多核和超线程技术 CPU 的物理个数由主板上的插槽数量决定&#xff0c;每个 CPU 可以有多核心&#xff0c;每核心可能会有多线程。 多核 CPU 的每核(每核都是一个小芯片)&#xff0c;在 OS 看来都是一个独立的 CPU。 对于超线程 CPU 来说&#xff0c;每核 CPU …

手机的开机流程分析(pmic角度)

【前言】 电源是手机soc必不可缺的部分之一&#xff0c;那么开机的过程是怎么样的呢&#xff0c;接下来我会从硬件角度分析。 【开机源】

RK3588 PMIC/Power电路 PCB 设计指南

以下为RK3588 电源各供电电路 PCB 设计指南。 1、VDD_LOGIC&#xff0c;VDD_GPU&#xff0c;VDD_NPU&#xff0c;VDD_CPU电源的 DC-DC 远端反馈设计。 100ohm反馈电阻需要靠近输出电容放置&#xff0c;电阻一端连接到 DC-DC 输出电容&#xff0c;另一端连接到PMIC 的VOUT 反馈脚…

linux电源管理配置,Exynos 4412 电源管理芯片PMIC 的配置及使用方法

开发板&#xff1a;迅为4412精英版。 uboot&#xff1a;uboot-2014-10。 PMIC&#xff1a;SAMSUNG S5M8767A 在移植新版u-boot的时候&#xff0c;上网搜电源管理芯片的使用方法资料&#xff0c;发现几乎没有&#xff0c;就算是datasheet也很难下载得到&#xff0c;不知是何原因…