Golang -- openwechat微信发送消息、自动回复

开篇

马上就要到农历新年了,不妨写一段代码准时为好友们送上祝福。
Demo 使用开源项目 openwechat ,实现获取好友列表、为好友发送消息、图片或文件,接收来自好友或群组的消息并设置自动回复等功能。
openwechat Github地址
openwechat 文档地址

代码结构

在这里插入图片描述

项目入口

代码很简单,就是调用一下微信的启动方法即可

启动微信

package bootstrapimport ("os"wechat "wechatbot/handler""wechatbot/task""github.com/eatmoreapple/openwechat"log "github.com/sirupsen/logrus"
)func StartWebChat() {//清除旧的token文件os.Remove("token.json")//初始化桌面微信bot := openwechat.DefaultBot(openwechat.Desktop)//设置微信消息处理模块,自动回复bot.MessageHandler = wechat.Handler//显示登陆二维码bot.UUIDCallback = openwechat.PrintlnQrcodeUrlreloadStorage := openwechat.NewJsonFileHotReloadStorage("token.json")err := bot.HotLogin(reloadStorage)if err != nil {if err = bot.Login(); err != nil {log.Fatal(err)return}}// 获取登陆用户信息self, err := bot.GetCurrentUser()if err != nil {log.Fatal(err)return}// 获取好友列表friends, err := self.Friends()if err != nil {log.Fatal(err)return} else {// 初始化定时任务 nytask := task.NewYearMessageDomain{Content:   "零时的钟声响彻天涯,新年的列车准时出发.它驮去难忘的岁月,迎来了又一轮火红的年华.祝你新年快乐,鹏程万里!",Imguris:   []string{"E:\\新年快乐.jpg"},Receivers: []string{"xxxxx1","xxxxx2"},Blacklist: []string{"xxxxx3"},Friends:   friends}nytask.InitTask()}//阻塞进程 等待桌面微信退出err = bot.Block()if err != nil {log.Fatal(err)return}
}

微信消息处理模块

在启动微信时,我们设置了微信消息处理函数
在这里插入图片描述
我们查看这个 MessageHandler 可以发现其实是一个自定义的 func 类型,接收 Message 指针类型并做处理
在这里插入图片描述
所以 我们需要创建的 wechat.Handler 必须是和 MessageHandler 具有相同参数和返回值的方法。

package wechatimport ("strings""github.com/eatmoreapple/openwechat"log "github.com/sirupsen/logrus"
)func Handler(msg *openwechat.Message) {err := handle(msg)if err != nil {log.Errorf("handle error: %s\n", err.Error())return}
}func handle(msg *openwechat.Message) error {if !msg.IsText() {//只处理回复文本消息return nil}return ReplyText(msg)
}func ReplyText(msg *openwechat.Message) error {sender, err := msg.Sender()if err == nil {if sender.IsFriend() { //判断如果是好友发来的消息,则处理msgContent := msg.Content//如果好友发来了新年好 或者 新年快乐,回复新年好if strings.Contains(msgContent, "新年") && (strings.Contains(msgContent, "好") || strings.Contains(msgContent, "快乐")) {msg.ReplyText("新年好呀")}}} else {log.Fatal(err)}return nil
}

定时任务

定时任务使用的是 robfig/cron 的框架,
robfig/cron 文档地址

创建一个 NewYearMessageDomain 结构体,里面包含以下属性:
1、要发送的文本消息
2、要发送的图片地址
3、设置的接收人列表,可以为空就会发送给所有好友
4、设置的黑名单列表
5、openwechat 好友信息列表

package taskimport ("fmt""os""time""github.com/eatmoreapple/openwechat""github.com/robfig/cron/v3"
)type NewYearMessageDomain struct {Content   string             //文本消息Imguris   []string           //图片地址Receivers []string           //接收人Blacklist []string           //黑名单Friends   openwechat.Friends //好友列表
}// 判断切片中是否存在某个元素
func (nymd *NewYearMessageDomain) find(slice []string, val string) bool {for i := range slice {if slice[i] == val {return true}}return false
}//初始化定时任务的方法
func (nymd *NewYearMessageDomain) InitTask() {//设置定时任务crontab := cron.New(cron.WithSeconds()) //精确到秒//定义定时器调用的任务函数task := func() {for i := range nymd.Friends {friend := nymd.Friends[i]//好友在黑名单里 不发送消息if nymd.find(nymd.Blacklist, friend.NickName) {continue}//如果设置了发送好友列表 则判断是否在列表中,否则直接发送if (len(nymd.Receivers) > 0 && nymd.find(nymd.Receivers, friend.NickName)) || len(nymd.Receivers) == 0 {if len(nymd.Content) > 0 {//发送祝福语friend.SendText(nymd.Content)}if len(nymd.Imguris) > 0 {//设置了图片路径 发送图片for i := range nymd.Imguris {fileInfos, err := os.Open(nymd.Imguris[i])defer fileInfos.Close()if err == nil {time.Sleep(time.Millisecond * 50) //频繁发送可能会被微信限制friend.SendImage(fileInfos)} else {fmt.Println(err)}}}}}}//设置cron表达式  指定时间spec := "0 0 0 21 1 2023"// 添加定时任务crontab.AddFunc(spec, task)// 启动定时器crontab.Start()
}

效果

启动程序后会弹出二维码,手机微信扫描之后登录桌面微信。
在这里插入图片描述
自动发送消息。
在这里插入图片描述
自动回复的功能。
在这里插入图片描述

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

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

相关文章

话题通讯自定义msg

前言 在ROS通信协议中,ROS中通过std_msgs封装了一些原生的数据类型,比如:String,Int32,Char,Bool,Int64,Empty 但是这些数据一般只包含一个data字段,结构的单一意味着功能上的局限性,当传输一些复杂的数据…

微信关键字自动回复功能实现

具体实现过程请加入QQ群进行讨论获取 一、微信API解读 微信自动回复可以分为三种,一种是首次关注的欢迎语,一种是关键字自动回复,还有就是无法识别的回复。这三种模式在实现上是完全一样的,只是基于的事件不同而已。要想实现自动回…

Python实现微信自动回复信息的功能(根据不同信息回复对应的信息),手把手搭建加代码分析

目录 一.效果展示 二.前言介绍 三.进入正题 1.需要用到的包 2.下面进入到代码的部分 2.1导入所需要用到的包 2.2定义微信窗口控件 2.3调用寻找微信控件的方法 2.3绑定窗口的会话列表控件并读取数据 2.4使用while True:死循环监听信息 2.5获取最新的信息 2.6进入循…

微信开发之自动回复图文消息

最近开始做公司的微信项目,深切的感受到了微信的不同,做微信是需要从头开始好好学的,在此记录一下学习微信的过程,也希望以后能根据这些文章迅速掌握微信开发的知识。少踩坑,,(laravel框架&…

微信公众号开发—自定义菜单、被动回复消息

自定义菜单 自定义菜单需要我们以POST的方式去请求接口,并且需要携带按钮信息(格式为json)。 由于自定义菜单较为简单,这里使用微信官方提供的接口测试工具对按钮增加接口进行测试: 通过appid和secret获取access_token。生成按钮数据(JSON)…

msg文件自定义消息话题

以LVI-SAM为例,cloud_info.msg就是LVI-SAM自定义的消息类型;通常,都是利用msg文件,生成.h文件,然后cpp文件添加.h就可以正常使用自定义消息了; 自定义msg消息步骤 Step1:创建并编写msg文件&am…

微信公众号自定义回复(关键词回复:文本消息、图文消息)

要回复客户发到微信公共号的消息,首先要获取用户发来的消息, 接收地址就是微信公众号基本配置里写的服务器地址所在的文件地址; $postStr $GLOBALS["HTTP_RAW_POST_DATA"]; //微信返回的信息。包含用户所发的消息 $postObj si…

微信开发 (自动回复图片,自定义菜单)

微信是一个高大上的东西,恩,没错 首先输入网址mp.weixin.qq.com进入微信公众平台 注册账号和密码(注意的是这里的账号和密码不是微信的账号密码) 进入之后点击左侧开发/开发者工具 在右侧点击进入公众平台测试账号&#xff08…

大众CEO提前“毕业”,马斯克:软件是通向未来的关键

过去,软件是汽车的一部分,而如今,软件决定了汽车的价值。 近日,知名传统汽车厂商大众CEO赫伯特迪斯 (Herbert Diess) 提前卸任新闻引发人们热议,其好友特斯拉CEO马斯克发推表示:“软件是通向未来的关键。”…

“AI 不会取代程序员,而是其增长的加速器!”

ChatGPT 热潮下,关于 AI 是否会取代程序员的讨论不绝于耳,而本文作者认为:AI 反而会推动更多开发者的出现。 原文链接:https://interconnect.substack.com/p/ai-will-create-more-developers-not 未经允许,禁止转载&am…

谷歌终于也坐不住了 。。。

来源于51CTO技术栈 整理 | 言征 刚过去的一周,我们刚经历了三场对话式AI的大事:OpenAI的GPT-4,微软Office 365“核弹式”升级,百度的中文语言大模型“文心一言”,谷歌终于坐不住了,21日,谷歌首席…

我对 ChatGPT 进行多方位了解后的报告,超级全面,建议想了解的朋友看看(截至 2023.5.17)

优质介绍视频: GPT4前端【AI编程新纪元】 【渐构】万字科普GPT4为何会颠覆现有工作流;为何你要关注微软Copilot、文心一言等大模型 此文章不定期更新(一周应该会更新一次) 最近一次更新:2023.5.17 23:00(…

获取钉钉企业部门用户信息

获取钉钉企业用户信息 有一个需求,需要获取本公司钉钉里面所有部门的员工信息,查阅钉钉官方文档后整理出了以下步骤: 1.登录钉钉企业管理员账号,创建一个应用 因为是公司内部使用区别第三方,所以选择企业内部开发 点击创建应用,填写基本信息 服务器IP写公网IP(可直接百度本机…

企业数字化转型|钉钉小程序开发权威指南

书籍发布:《钉钉小程序开发权威指南》书籍正式预售 钉钉技术团队聚力撰写,本书细致全面地介绍钉钉小程序技术原理及开发要点, 详细介绍从成为一名钉钉开发者到小程序应用上架的每一步流程。助力企业实现组织数字化和业务数字化。 购买渠道 …

钉钉E应用架构详解

E应用框架详解: App:指的是E应用。 Page:页面,一个app有多个page。 App的生命周期: 当用户点击应用,进去onLaunch(启动应用)->onShow,当用户点返回按钮时,不会销毁当前页面(保活状态)&…

Python结合钉钉实时自动监控股票行情,上班炒股再也不怕老板发现

最近全球股市开始回暖,之前清仓的股民现在又陆续开始建仓。股市交易时间,一般也是上班时间,频繁的查看股票软件不仅会影响工作效率,也容易被老板以为工作不饱和。所以,我们就借助python的强大功能,把提前设…

【钉钉-场景化能力包】应用内发DING消息

客户痛点 面对不同类型的中小型企业,人员较多,找人非常困难,管理子公司的时候,协调的问题就更多,企业使用常规的个人聊天软件,消息发送后,不能准确判断消息是否已读,导致沟通管理效…

DingTalk「开发者说」如何开发钉钉高价值应用三部曲

一、钉钉是什么? 钉钉是企业应用数字化的操作系统 简单来说,钉钉是企业应用数字化的操作系统,就如同PC上的windows操作系统一样,我们可以在上面安装各种应用比如office、WPS,用于企业的各种实际应用。 钉钉自带原生…

数据分析:扩展企业微信、钉钉、飞书等告警通知渠道

本章节主要讲述如何扩展告警的通知渠道,以便将告警发送到第三方应用中 企业微信 实现目标 ●在鸿鹄中创建的告警被触发后,将告警通知发送至指定的企业微信群聊 配置步骤 1、打开“企业微信”,点击告警群右上角的“...”按钮 2、点击“群机器人…

Meta 开源 ImageBind 新模型,超越 GPT-4,对齐文本、音频等 6 种模态!

整理 | 屠敏 出品 | CSDN(ID:CSDNnews) 据外媒报道,上周四,Google、微软、OpenAI 几家公司的 CEO 受邀去白宫,共论关于人工智能发展的一些重要问题。然而,让人有些想不通的是,深耕 A…