Python 打造微信群聊天机器人(带操作界面)

前言

这几天我的一个小伙伴问我能不能给 Ta 做一个配置灵活的微信群聊天机器人,之前了解过 itchat 库的使用,我就爽快的答应了,花了一个晚上,终于做出了雏形。

电脑上运行程序如下:

在这里插入图片描述

手机上的信息如下:

在这里插入图片描述

其实基于 itchat 的微信机器人早已经烂大街了,但大多数过于简单,相比较而言,我的这个程序有下面几大鲜明的特色:

1、支持打开/关闭指定群聊的自动回复,只需用记事本打开 group.csv 文件,填写想要打开自动回复群聊名称即可,每次输完一个群聊名称,必须换行。

2、支持自定义设置关键词回复,只需用记事本打开 keyword.csv 文件,按照***{关键词,回复}***的格式添加即可,而不需要在代码中做任何修改。输完一个键值对,同样也需要换行,注意输入的是英文逗号。

3、支持定时群发消息,而且时间、消息可以在程序运行中动态修改。

4、有较为良好的 GUI 界面,其中色彩搭配参考了微信的简约设计。

DIY 玩法

1、面向商户

作为商户,维护群的时候可能有这样的需求,定时发送消息。比如回复 xxx 可获得 yyy,同时在keyword.csv 文件中事先写好。这样,可以让群成员各取所需,你又不需要打字、复制粘贴,还可以同时处理多个群,省心还高效。

2、面向普通个人

定时向男女朋友,父母亲人发送晚安祝福消息等。

3、部署至阿里云服务器

有个缺陷就是如果想一直自动群发消息的话,你的电脑就必须一直开着,但是部署至云服务器可以解决这个问题。部署流程可以参考我之前的文章,同时给出阿里云服务器优惠购买传送门。

代码的详细设计

1、代码的架构

由于引入了 GUIGUI代码块和负责群发消息的代码块一样,都是阻塞型的,为此,程序就必须引入多线程机制,其中 GUI 界面是主线程,负责群发消息的代码块运行在子线程,线程间的通信我用的是 wxPython 内置的 wx.lib.pubsub 模块,一旦子线程执行了相应的动作,就通过 wx.CallAfter(pub.sendMessage) 接口发送消息给通知 GUI 线程,从而保证 GUI 能够及时刷新并不至于卡顿。

在这里插入图片描述

2、代码的流程

首先是加载相应的配置文件,确定要开启哪些群聊的自动回复,以及关键词回复信息。也正因如此,在程序执行过程中,这些信息是不能被动态改变的。

其中加载 keyword的代码如下:

def load_keyword(self):global keywordswith open('keyword.csv', 'r', encoding='utf-8', newline='') as f:reader = csv.reader(f)for i, line in enumerate(reader):if i == 0:continuekeywords[line[0]] = line[1]

keywords 设置为全局变量方便后面使用,避免传参调用,判断 i == 0 是为了去掉 csv 文件的第一行头部信息。

负责群发的主要代码块如下,代码注释较为清晰,不再赘述

@itchat.msg_register(TEXT, isGroupChat=True)
def group_text(msg):global keywordsgroups = itchat.get_chatrooms(update=True)for group in groups:# 群的 NickName 是群名称,UserName 是群id(以两个@开始)# Python/Java 学习交流群if group['NickName'] in group_names:  # 从群中找到指定的群聊group_id = msg['FromUserName']# 防止其他群消息的的干扰if not group_id == group['UserName']:break# 准备回复的消息keys = keywords.keys()key = ''for i in keys:if i in msg['Text']:key = ibreakif key == '':returnmessage = keywords.get(key)# 在消息中找到 发送人的idsender_id = msg['ActualUserName']# 有时 group['MemberList'] 为空,改变思路由群 id 获取群聊成员# group_info = itchat.update_chatroom(msg['ToUserName'], detailedMember=True)# if len(group_info) == 0:# toUserName 是自己在群聊发消息时,群 id 在消息里的 key# FromUserName 是别人在群里发时,群 id 在消息里的 keygroup_info = itchat.update_chatroom(group_id, detailedMember=True)memberlist = group_info['MemberList']for member in memberlist:# 找到消息的发送者if member['UserName'] == sender_id:# 如果有备注名,群聊显示的是备注名to_user = member['RemarkName']if len(to_user) == 0:# 否则显示成员自己修改的在群里的昵称to_user = member['DisplayName']if len(to_user) == 0:# 否则显示他微信号的昵称to_user = member['NickName']itchat.send_msg('@{}\n{}'.format(to_user, message), group['UserName'])wx.CallAfter(pub.sendMessage, "update", msg="回复群聊[{}]成员[{}]成功:[{}]".format(group['NickName'],to_user,message))

负责定时群发的代码和上面的代码比较独立,在子线程开始的同时,开始执行定时群发的逻辑

def run(self):global tt = threading.Timer(minutes * 60, self.auto_timer)t.start()self.load_keyword()self.load_group()itchat.auto_login(hotReload=True)itchat.run()

其中主要的函数是 threading.Timer(minutes * 60, self.auto_timer),它的意思是在负责执行群发的线程里,再开一个线程,这个线程间隔minutes * 60 秒后去执行回调函数 self.auto_timer,但是这样只能触发一次,没办法一直轮询,解决办法是在回调函数里面再去执行 threading.Timer(minutes * 60, self.auto_timer),有点儿类似于递归调用,和递归不同的是,调用是没有终止条件的,但并不会产生内存溢出,因为定时器的存在,时间一到一触发回调函数,这个线程的生命就到此为止了,因此在整个程序运行期间,活跃线程的数目仅仅只是个位数:

def auto_timer(self):global auto_messagegroups = itchat.get_chatrooms(update=True)for group in groups:if group['NickName'] in group_names:itchat.send_msg('{}'.format(auto_message), group['UserName'])wx.CallAfter(pub.sendMessage, "update",msg="群聊[{}]定时消息:[{}]发送成功".format(group['NickName'], auto_message))global t  # 把 t 设置为全局变量t = threading.Timer(minutes * 60, self.auto_timer)t.start()

GUI 部分的代码由于篇幅限制,就不贴出来了。

如何体验

关注公众号月小水长,后台回复微信群机器人即可获得

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

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

相关文章

企业微信群机器人应用

现在很多企业都在使用企业微信进行工作交流,自从企业微信推出群机器人之后,使用企业微信的小伙伴一般都会用机器人来推送定时消息或者提醒等,这样能够为企业工作群的管理提升效率,能很好的帮助企业运营管理工作群,同样…

微信群机器人(仿真企业微信群机器人)

使用过企业微信的朋友应该应该用过企业微信群机器人,它是企业微信的原生功能,你在企业微信群中新建一个机器人,随后就可以获得这个群机器人的web挂钩,调用这个web挂钩并加上消息参数就可以让这个机器人在群内发送消息,…

为何ChatGPT一出现让巨头们都坐不住?

近几个月来,ChatGPT都是当仁不让的舆论话题。 上一次AI在全球范围内引起轰动,还是谷歌的AI机器人AlphaGO下棋战胜围棋世界冠军的时候。 ChatGPT的出现,让国内外几乎所有的科技巨头都坐立不安。 2月1日,谷歌母公司Alphabet首席执…

科技云报道:为何ChatGPT一出现让巨头们都坐不住?

科技云报道原创。 近几个月来,ChatGPT都是当仁不让的舆论话题。 上一次AI在全球范围内引起轰动,还是谷歌的AI机器人AlphaGO下棋战胜围棋世界冠军的时候。 ChatGPT的出现,让国内外几乎所有的科技巨头都坐立不安。 2月1日,谷歌…

产品体验文档模板——ChatGPT案例

今天和大家免费分享产品体验文档模板——ChatGPT案例,包括基本信息、产品信息、市场分析、用户分析、用户分析、产品分析、产品总结多个模块内容 【文档下载】 【文档预览】

【CV】计算机视觉领域的 GAN 模型综述论文笔记

论文名称:Generative Adversarial Networks in Computer Vision: A Survey and Taxonomy 论文下载:https://dl.acm.org/doi/abs/10.1145/3439723 论文年份:ACM Computing Surveys 2021 论文被引:173(2022/04/12&#x…

计算机视觉领域论文投稿

文章目录 工程技术大类(中科院一区)计算机科学大类(中科院一区)综合性期刊大类(中科院一区) 中科院分区期刊查询方式:《2020年中国科学院文献情报中心期刊分区表升级版(试行&#xf…

论文投稿指南——计算机视觉 (Computer Vision) 顶会归纳

深度学习Tricks,第一时间送达 目录 (一)计算机视觉顶会 (1)ICCV:International Conference on Computer Vision (2)CVPR:International Confere…

学习新技术,争做新青年:请ChatGPT帮我写一篇计算机视觉分类算法论文

文章目录 学习新技术,争做新青年:你不会还不用 ChatGPT 吧?学习新技术请告诉我最好的图像分类模型是哪个请推荐最新的分类模型是哪个请详细介绍一下 Swin Transformer请给出Swin Transformer的论文链接请帮我分析一下Swin Transformer 的创新…

巴比特 | 元宇宙每日必读:从自研硬件领域撤退后,腾讯被传或将在国内独家代理Meta旗下VR产品Quest...

‌ 摘要:近日,据路透社报道,三位知情人士称,腾讯控股正在与脸书母公司Meta Platforms Inc(Nasdaq:META)就在中国销售Meta Quest系列虚拟现实头显进行谈判。路透社援引消息人士称,腾讯…

阿里减持商汤股票;金山办公将推出WPS AI;华为发布问界M5智驾版;东软集团2022年归母净利同比降129.23%丨每日大事件...

‍ ‍数据智能产业创新服务媒体 ——聚焦数智 改变商业 企业动态 百家云推出人工智能生成内容(AIGC)解决方案 4月17日,音视频SaaS上市公司百家云宣布,公司将正式推出应用于多个垂直行业及场景的人工智能生成内容及视频解决方案。…

chatgpt赋能python:可以用手机写Python吗?

可以用手机写Python吗? 随着移动设备的普及,很多人已经开始抛弃传统的电脑或笔记本电脑而选择使用手机进行各种操作。因此,许多人开始疑惑:是否可以用手机编写Python代码?答案是肯定的。 Python编程平台 使用手机编…

程序员的工作周报该怎么写?

大多数公司都有写周报的要求,为什么要写周报?很多流于形式的周报,会让员工感到厌烦。特别是程序员,你让他写代码可以,写这种篇幅稍微大点的文字,简直要了他的命。 周报作为一种文字载体,是下级向…

如何写出高质量的年终总结?

见字如面,我是军哥! 我掐指一算,各位到了要写年终总结的时候了,因为不大部分平时写文字的机会不多,一般都是提笔难,还有读者在读者群里问这个话题,所以我必须给安排一下。 首先说说,…

年终报告撰写小技巧,你学会了吗?

年年岁岁花相似,岁岁年年人不同。 临近年底,又到了一年一度的年终报告时段了。同事间见面最让人头疼的问候,莫过于,“你的年终报告写了吗?” 有的人东拼西凑、应付了事,汇报内容乏善可陈,领导…

如何做好高端的总结汇报PPT呢?

在工作中为了下一步更好的开展工作,回顾重要的工作内容及工作成功,用PPT幻灯片形式展现出来,能用图片不用文字,能用图表不用文字,让你的PPT演示更有说服力及清晰表达工作重点及成果。PC端搜索OVO图库网站可以解决总结、…

又到了年终总结的时候了,数据分析的年度工作计划,你知道该怎么写吗?

2020年已经结束了,一年的工作总结和下一年的工作计划该怎么写。作为数据分析师,如何制定自己下一年的工作计划,到底数据分析工作计划该咋写? 1 、工作计划常见坑点 如果让其他部门写工作计划,大概率是以下画风&#xf…

分享一个适合做年终总结软件

2021年已经进入倒计时啦,再过50几天就到2020年了,相信今年大家不管是在工作还是学习中都取得了不少的收获,下面就来跟大家分享一个做年终总结的方法。 今天要和大家聊一聊个人非常喜欢的一款思维导图软件——MindManager了,它在学…

黑马ChatGPT全通关原视频

黑马威武!有需要下面阿里云盘分享 ChatGPT全通关 密钥:6qv3 阿里云盘分享

创新方案|时尚品牌企业应用生成式AI的6大机会领域

探讨生成式人工智能(Generative AI)在时尚产业中的应用,以及它对设计、生产和销售过程的影响。通过使用生成式AI技术,时尚品牌可以更快地设计和生产出更加个性化和符合潮流趋势的产品,同时减少浪费和成本。文章还介绍了…