使用 Go 发送微信群消息

关注公众号【爱发白日梦的后端】分享技术干货、读书笔记、开源项目、实战经验、高效开发工具等,您的关注将是我的更新动力!

背景

最近的某个副业需要我写一个脚本(脚本内容就不说了),需要通知群成员,尽快地做出响应。所以去找一下 Go 是否有这样的类库。

在这个脚本里面,我只需要发送信息的能力即可。

openwechat

在寻找了一会之后发现 https://github.com/eatmoreapple/openwechat 这个库,这个库支持以下能力:

  • 消息回复、给指定对象(好友、群组)发送文本、图片、文件、emoji表情等消息
  • 热登陆(无需重复扫码登录)、自定义消息处理、文件下载、消息防撤回
  • 获取对象信息、设置好友备注、拉好友进群等

这很明显已经满足我的需求了,毕竟我的需求超简单的!

例子

那我们立刻使用项目中的 README.md 例子来测试一下。

package mainimport ("fmt""github.com/eatmoreapple/openwechat"
)func main() {bot := openwechat.DefaultBot(openwechat.Desktop) // 桌面模式// 注册消息处理函数bot.MessageHandler = func(msg *openwechat.Message) {if msg.IsText() && msg.Content == "ping" {msg.ReplyText("pong")}}// 注册登陆二维码回调bot.UUIDCallback = openwechat.PrintlnQrcodeUrl// 登陆if err := bot.Login(); err != nil {fmt.Println(err)return}// 获取登陆的用户self, err := bot.GetCurrentUser()if err != nil {fmt.Println(err)return}// 获取所有的好友friends, err := self.Friends()fmt.Println(friends, err)// 获取所有的群组groups, err := self.Groups()fmt.Println(groups, err)// 阻塞主goroutine, 直到发生异常或者用户主动退出bot.Block()
}

这段代码的内容比较简单:

  • 在浏览器中显示二维码
  • 用户扫码模拟微信登录
  • 获取扫码微信的信息
  • 获取用户所有的好友
  • 获取用户所有的群组

但是这里有两个问题需要注意:

  • 模式只能选择桌面模式,当我使用网页版模式的时候会报以下错误: login forbidden: try to login with desktop mode
    • 我猜测是因为微信那边已经不运营微信网页版了

  • 获取的不是所有的群聊
    • 从 issue 找到解答:需要将群聊保存到通讯录才行。

实现对特定群发送文本消息

因为作者封装得还算不错,发送文本消息非常简单,就一个函数的事情。

func main() {bot := openwechat.DefaultBot(openwechat.Desktop) // 桌面模式// 注册登陆二维码回调bot.UUIDCallback = openwechat.PrintlnQrcodeUrl// 登陆if err := bot.Login(); err != nil {fmt.Println(err)return}// 获取登陆的用户self, err := bot.GetCurrentUser()if err != nil {fmt.Println(err)return}// 获取所有的群组groups, err := self.Groups()for _, group := range groups {if group.NickName == "爱发白日梦的后端" {_, err = self.SendTextToGroup(group, "Hello!!!群里的朋友大家好呀!!!")if err != nil {panic(err)}}}// 阻塞主goroutine, 直到发生异常或者用户主动退出bot.Block()
}

核心的函数就是 SendTextToGroup 这个方法,直接调用即可发送群消息了。

效果如下:

在这里插入图片描述

总结

虽然我目前的需求已经被满足了,不过这个库里面的好多功能我都没有去用过,也没有在这里介绍,感兴趣的同学可以自行深入去了解。

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

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

相关文章

云原生业务全流程DevOps配置预研与实践

背景 我在一个二线城市(山东济南),相对与北上广深杭这些IT业发达的城市来说,济南IT业对于业内新技术的接受度是有点慢的,国内很多一线大厂早先几年前就开始实践使用的技术,我们这边也是近两年才开始慢慢兴…

如何计算模型的复杂度(参数量,FLOPs)

参考 如何计算神经网络模型的复杂度 深度学习卷积、全连接层、深度可分离层参数量和FLOPs计算公式 概念 Params:模型的参数量。(空间复杂度)FLOPs:FLoating point Operations,前向推理的计算量。(时间复…

C++函数分文件编写之VScode版

VScode实现函数的分文件编写 1.下载插件创建项目2.分文件编写内容3.修改主函数文件名 我在分享内容时经常用的软件是VScode,相信有些内存敏感或需要VScode便利性的小伙伴也是更愿意使用VScode。那么接下来我们就盘一盘怎样使用VScode实现分文件编写。 1.下载插件创建…

2024 Flutter 重大更新,Dart 宏(Macros)编程开始支持,JSON 序列化有救

说起宏编程可能大家并不陌生,但是这对于 Flutter 和 Dart 开发者来说它一直是一个「遗憾」,这个「遗憾」体现在编辑过程的代码修改支持上,其中最典型的莫过于 Dart 的 JSON 序列化。 举个例子,目前 Dart 语言的 JSON 序列化高度依…

来看看Tomcat和Web应用的目录结构

在前面两篇大致了解了Tomcat的架构和运行流程,以及Tomcat应用中的web.xml。 聊一聊Tomcat的架构和运行流程,尽量通俗易懂一点-CSDN博客 来吧,好好理解一下Tomcat下的web.xml-CSDN博客 那接下来,再看看Tomcat的目录,…

vue-3d-model

vue-3d-model - npm GitHub - hujiulong/vue-3d-model: 📷 vue.js 3D model viewer component 通过该插件降低Threejs的使用难度 vue项目加载三维模型,我把模型放在了服务器的tomcat里面,需要对tomcat的fbx项目文件夹设置跨域,如…

踩坑STM32CubeMX生成Makefile工程无法使用printf(“%f“)

过去一年偶有接触STM32开发时都是使用STM32CubeMX生成Makefile的工程,具体开发环境见配置Clion用于STM32开发(Makefile),但没想到今天在使用printf打印输出浮点数时无法正常输出,不仅printf无法使用,其他涉…

详解Skywalking 采集springboot 应用日志的方法(内附源码)

大家都知道Skywalking 的链路追踪功能非常强大,可以帮助用户深入了解应用程序中各个组件之间的依赖关系。在实际应用中,往往需要将链路追踪数据与日志数据结合起来进行综合分析。Skywalking 提供了 Trace Log 结合插件,可以帮助用户快速定位问…

c++ STL less 的视角

c less 函数在不同的地方感觉所起的作用是不一样的, 这中间原因是 less 的视角不一样, 下面尝试给出解释下, 方便记忆 1、 左右视角 符合 排序sort less(value, element) less 表示一种 “符合关系“, 表示sort 后…

关于Ubuntu下docker-mysql:ERROR 2002报错

报错场景: mysql容器创建好后登录mysql时即使密码正确也是报出下方提示: 原因是在创建mysql容器在创建时本地目录缺失, 先去自建一个目录,例如: /opt/my_sql 正确完整目录如下: docker run --namemys…

2024数学建模美赛F题思路代码分享

非法的野生动物贸易会对我们的环境产生负面影响,并威胁到全球的生物多样性。据估 计,它每年涉及高达265亿美元,被认为是全球第四大非法交易。[1]你将开发一个由数 据驱动的5年项目,旨在显著减少非法野生动物贸易。你的目标是说服一…

【misc | CTF】攻防世界 2017_Dating_in_Singapore

天命:这次终于碰到了算是真正的misc题目了 下载附件,打开是PDF,我一开始以为是flag隐写在PDF里面了 虽然也不奇怪,应该是可以的,毕竟PDF有xss漏洞也是可以的 言归正传,打开PDF 看着新加坡的日历&#xff…

ubuntu 上安装和配置Apache2+Subversion

目录 一、安装Apache2和SVN 二、Apache2设置 三、subversion配置 四、创建仓库和设置权限 五、仓库备份和恢复 系统环境 Ubuntu Linux (20.04) apache2 Subversion(1.13.0) 一、安装Apache2和SVN 通过命令在线安装apache2和subversion apt-get install apache2 libap…

2023-12蓝桥杯STEMA考试 C++ 中高级试卷解析

蓝桥杯STEMA考试 C++ 中高级试卷(12月) 一、选择题 第一题 定义字符串 string a = "Hello C++",下列选项可以获取到字符 C 的是(B)。 A、a[7] B、a[6] C、a[5] D、a[4] 第二题 下列选项中数值与其它项不同的是( C)。 A、 B、 C、 D、 第三题 定义变量 int i =…

【Springcloud篇】学习笔记十(十七章):Sentinel实现熔断与限流——Hystrix升级

第十七章_Sentinel实现熔断与限流 1.Sentinel介绍 1.1是什么 随着微服务的流行,服务和服务之间的稳定性变得越来越重要。 Sentinel 以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。 用来代替Hystrix Sentinel 具有…

Electron+Vue3+Vite的产品级模板项目

1. electron-vue3-template 基于Vue3 Electron TypeScript的客户端程序模板,使用Vite和Electron Forge构建和打包。 真正做到开箱即用,面向跨平台客户端设计,产品级的项目模板。 项目地址: https://github.com/winsoft666/el…

第5课 使用FFmpeg将rtmp流再转推到rtmp服务器

本课对应源文件下载链接: https://download.csdn.net/download/XiBuQiuChong/88801992 通过前面的学习,我们已经可以正常播放网络rtmp流及本地mp4文件。这节课,我们将在前面的基础上实现一个常用的转推功能:读取rtmp流或mp4文件并…

架构学习(二):原生scrapy如何接入scrapy-redis,初步入局分布式

原生scrapy如何接入scrapy-redis,实现初步入局分布式 前言scrpy-redis分布式碎语 实现流程扩展结束 前言 scrpy-redis分布式 下图是scrpy-redis官方提供的架构图,按我理解,与原生scrapy的差异主要是把名单队列服务器化,也是存储…

Modbus协议学习第七篇之libmodbus库API介绍(modbus_write_bits等)

写在前面 在第六篇中我们介绍了基于libmodbus库的演示代码,那本篇博客就详细介绍一下第六篇的代码中使用的基于该库的API函数。另各位读者,Modbus相关知识受众较少,如果觉得我的专栏文章有帮助,请一定点个赞,在此跪谢&…

自然语言处理(NLP)—— Dialogflow ES聊天机器人

1. 背景介绍 这个实验室的目标是让你了解并使用Google的Dialogflow服务。Dialogflow是一个可以让你创建聊天机器人的服务,这个过程不需要或者只需要很少的编程技能。 1.1 账号的创建 为了完成这个实验室,你需要在以下网站上创建账号&#xff1a…