标签:with open text min reading names bsp 技术 src form
本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理
本文章来自腾讯云 作者:Python进阶者
想要学习Python?有问题得不到第一时间解决?来看看这里“1039649593”满足你的需求,资料都已经上传至文件中,可以自行下载!还有海量最新2020python学习资料。
点击查看
前言
这几天我的一个小伙伴问我能不能给 Ta 做一个配置灵活的微信群聊天机器人,之前了解过 itchat 库的使用,我就爽快的答应了,花了一个晚上,终于做出了雏形。
电脑上运行程序如下:
手机上的信息如下:
2、代码的流程
首先是加载相应的配置文件,确定要开启哪些群聊的自动回复,以及关键词回复信息。也正因如此,在程序执行过程中,这些信息是不能被动态改变的。
其中加载 keyword的代码如下:
1def load_keyword(self): 2 global keywords 3 with open( keyword.csv , r , encoding= utf-8 , newline= ) as f: 4 reader = csv.reader(f) 5 for i, line in enumerate(reader): 6 if i == 0: 7 continue 8 keywords[line[0]] = line[1]
把 keywords 设置为全局变量方便后面使用,避免传参调用,判断 i == 0 是为了去掉 csv 文件的第一行头部信息。
负责群发的主要代码块如下,代码注释较为清晰,不再赘述
1@itchat.msg_register(TEXT, isGroupChat=True) 2def group_text(msg): 3 global keywords 4 groups = itchat.get_chatrooms(update=True) 5 for group in groups: 6 # 群的 NickName 是群名称,UserName 是群id(以两个@开始) 7 # Python/Java 学习交流群 8 if group[ NickName ] in group_names: # 从群中找到指定的群聊 9 group_id = msg[ FromUserName ] 10 # 防止其他群消息的的干扰 11 if not group_id == group[ UserName ]: 12 break 13 # 准备回复的消息 14 keys = keywords.keys() 15 key = 16 for i in keys: 17 if i in msg[ Text ]: 18 key = i 19 break 20 if key == : 21 return 22 message = keywords.get(key) 23 # 在消息中找到 发送人的id 24 sender_id = msg[ ActualUserName ] 25 # 有时 group[ MemberList ] 为空,改变思路由群 id 获取群聊成员 26 # group_info = itchat.update_chatroom(msg[ ToUserName ], detailedMember=True) 27 # if len(group_info) == 0: 28 # toUserName 是自己在群聊发消息时,群 id 在消息里的 key 29 # FromUserName 是别人在群里发时,群 id 在消息里的 key 30 group_info = itchat.update_chatroom(group_id, detailedMember=True) 31 memberlist = group_info[ MemberList ] 32 for member in memberlist: 33 # 找到消息的发送者 34 if member[ UserName ] == sender_id: 35 # 如果有备注名,群聊显示的是备注名 36 to_user = member[ RemarkName ] 37 if len(to_user) == 0: 38 # 否则显示成员自己修改的在群里的昵称 39 to_user = member[ DisplayName ] 40 if len(to_user) == 0: 41 # 否则显示他微信号的昵称 42 to_user = member[ NickName ] 43 itchat.send_msg( @{} {} .format(to_user, message), group[ UserName ]) 44 wx.CallAfter(pub.sendMessage, "update", msg="回复群聊[{}]成员[{}]成功:[{}]".format(group[ NickName ],to_user,message))
负责定时群发的代码和上面的代码比较独立,在子线程开始的同时,开始执行定时群发的逻辑
1def run(self): 2 global t 3 t = threading.Timer(minutes * 60, self.auto_timer) 4 t.start() 5 self.load_keyword() 6 self.load_group() 7 itchat.auto_login(hotReload=True) 8 itchat.run()
1def auto_timer(self): 2 global auto_message 3 groups = itchat.get_chatrooms(update=True) 4 for group in groups: 5 if group[ NickName ] in group_names: 6 itchat.send_msg( {} .format(auto_message), group[ UserName ]) 7 wx.CallAfter(pub.sendMessage, "update", 8 msg="群聊[{}]定时消息:[{}]发送成功".format(group[ NickName ], auto_message)) 9 10 global t # 把 t 设置为全局变量 11 t = threading.Timer(minutes * 60, self.auto_timer) 12 t.start()
GUI 部分的代码由于篇幅限制,就不贴出来了。
用Python打造个性化DIY 群聊机器人,打发你那无处安放的时间。
标签:with open text min reading names bsp 技术 src form
原文地址:https://www.cnblogs.com/aa3935919/p/14307754.html