node打造微信个人号机器人的方法示例


Posted in Javascript onApril 26, 2018

现在,日常生活已经离不开微信,本文将会抛砖引玉演示如何使用 wechaty 操作微信个人号做一些有意思的东西,可以实现自动通过好友请求、关键词回复、自动拉群等功能。大大提高了社群运营的效率。

wechaty( https://chatie.io/wechaty/)是一款开源的微信个人号SDK,进行了一系列的封装,提供简单好用的接口,然后开发者可以在其之上进行微信机器人的开发。你可以用它来做很多事:

1)管理和维护好友; 2)快速有序地处理聊天信息 3)微信群管理 4)实现自动回复 5)……

一、快速上手

wechaty 项目主页写着 6行代码创建一个微信机器人,那么我们就来试一试。 注意:Node.js version >= 8.5

The World's Shortest ChatBot Code: 6 lines of JavaScript

const { Wechaty } = require('wechaty')

Wechaty.instance() // Singleton
.on('scan', (url, code) => console.log(`Scan QR Code to login: $[code]\n${url}`))
.on('login', user => console.log(`User ${user} logined`))
.on('message', message => console.log(`Message: ${message}`))
.start()

这6行代码实现了登录微信个人号并打印出所收到的消息。

wechaty 可以通过Docker和NPM两种方式运行,本文使用npm方式

node bot.js 启动这个个人号机器人,这时命令行会打印出一个链接,我们将它在浏览器中打开可以看到这是个二维码,扫码即可登录(注:2017年年底随着微信逐步关停微信网页版登录支持,之后后注册的微信号不支持网页微信的登录。老夫花了105RMB买了个号来用,心疼我的钱包3秒钟)

User Contact<刘星> logined // 扫码登录
Message: Message<JavaScript之禅> // 接收微信消息

机器人体验在文末。 示例代码地址: Github

二、自动通过好友请求

通过前面的示例代码,可以发现这个库的简洁强大了吧。接着我们来实现第一个小功能:自动通过好友请求

//···
.on('friend', async (contact, request) => {
if (request) {
if (/JavaScript|JS/i.test(request.hello)) {
logMsg = 'accepted because verify messsage is "JS之禅"'
request.accept()
} else {
logMsg = 'not auto accepted, because verify message is: ' + request.hello
}
} else {
logMsg = 'friend ship confirmed with ' + contact.get('name')
}
})
//···

这里我们通过监听 friend 事件。可以获取到谁发了什么好友请求。这里我们验证了添加好友时的请求,在收到好友请求内容为【 JS 】或者【JavaScript】时 就会自动通过好友请求了。

每次都复制链接到浏览器打开二维码在扫码一点儿都不方酷也不方便在服务器上使用。这时我们可以用 qrcode-terminal 这个包 直接在命令行中打印出二维码。

//···
const QrcodeTerminal = require('qrcode-terminal')
//···
.on('scan', (url, code) => {
let loginUrl = url.replace('qrcode', 'l')
QrcodeTerminal.generate(loginUrl)
console.log(url)
})
//···

再运行 node bot.js 命令行将直接打印出二维码,方便了很多。

三、自动回复

现在来实现第二个小功能:关键词自动回复。

//···
.on('message', async (message) => {
const contact = message.from()
const content = message.content()
const room = message.room()
if (room) {
console.log(`Room: ${room.topic()} Contact: ${contact.name()} Content: ${content}`)
} else {
console.log(`Contact: ${contact.name()} Content: ${content}`)
}

// 不处理自己发的消息
if (message.self()) {
return
}

if (/JavaScript|Js|js/.test(content)) {
message.say('关注公众号 JavaScript之禅')
}
})
//···

在上面 我们监听 message 来做消息处理。message 可以接收到所有的消息,我们可以判断是不是群聊消息、根据消息回复相应内容。如发送【 js 】将会收到设置好的消息,实现自动回复。

四、自动拉群

前面说到了消息关键词自动回复,把消息处理和群管理结合起来,我们就可以实现根据关键字自动拉群了

//···
.on('message', async (message) => {
const contact = message.from()
const content = message.content()
const room = message.room()
if (room) {
console.log(`Room: ${room.topic()} Contact: ${contact.name()} Content: ${content}`)
} else {
console.log(`Contact: ${contact.name()} Content: ${content}`)
}

if (message.self()) {
return
}


if (/JavaScript|Js|js/.test(content)) {
message.say('关注公众号 JavaScript之禅没?')
}
// 自动拉群
if (/加群/.test(content)) {
let keyroom = await Room.find({ topic: 'test' })
if (keyroom) {
await keyroom.add(contact)
await keyroom.say('欢迎新朋友!', contact)
}
}
})
//···

上面的代码通过 Room 来操作群聊。 此时回复 【加群】即可被自动拉入群中。当然了,我们还可以做得更多如使用 Room.del 来讲某个群员踢出去。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
最佳JS代码编写的14条技巧
Jan 09 Javascript
jquery按回车提交数据的代码示例
Nov 05 Javascript
jquery动态添加元素事件失效问题解决方法
May 23 Javascript
自己封装的javascript事件队列函数版
Jun 12 Javascript
PHP+mysql+Highcharts生成饼状图
May 04 Javascript
javascript创建动态表单的方法
Jul 25 Javascript
js阻止浏览器默认行为的简单实例
May 15 Javascript
Angular懒加载机制刷新后无法回退的快速解决方法
Aug 30 Javascript
AngularJS 在同一个界面启动多个ng-app应用模块详解
Dec 20 Javascript
如何通过setTimeout理解JS运行机制详解
Mar 23 Javascript
Vue+Element实现表格编辑、删除、以及新增行的最优方法
May 28 Javascript
vue+element项目中过滤输入框特殊字符小结
Aug 07 Javascript
Vue 使用中的小技巧
Apr 26 #Javascript
基于Vue实现拖拽功能
Jul 29 #Javascript
vuex操作state对象的实例代码
Apr 25 #Javascript
微信小程序商品详情页的底部弹出框效果
Nov 16 #Javascript
你点的 ES6一些小技巧,请查收
Apr 25 #Javascript
vue 组件使用中的一些细节点
Apr 25 #Javascript
Vue中使用vue-i18插件实现多语言切换功能
Apr 25 #Javascript
You might like
PHP 正则表达式常用函数
2014/08/17 PHP
使用PHPCMS搭建wap手机网站
2015/09/20 PHP
laravel 框架配置404等异常页面
2019/01/07 PHP
js函数般调用正则
2008/04/08 Javascript
JS获取dom 对象 ajax操作 读写cookie函数
2009/11/18 Javascript
jquery插件corner实现圆角边框的方法
2015/03/09 Javascript
浅谈vue的踩坑路
2017/08/31 Javascript
vue webpack开发访问后台接口全局配置的方法
2018/09/18 Javascript
vue使用代理解决请求跨域问题详解
2019/07/24 Javascript
vue+element项目中过滤输入框特殊字符小结
2019/08/07 Javascript
layui实现二维码弹窗、并下载到本地的方法
2019/09/25 Javascript
[36:09]Secret vs VG 2019国际邀请赛淘汰赛 败者组 BO3 第一场 8.24
2019/09/10 DOTA
python发送邮件的实例代码(支持html、图片、附件)
2013/03/04 Python
使用SAE部署Python运行环境的教程
2015/05/05 Python
python检查序列seq是否含有aset中项的方法
2015/06/30 Python
Python实现螺旋矩阵的填充算法示例
2017/12/28 Python
python定时关机小脚本
2018/06/20 Python
用Python读取几十万行文本数据
2018/12/24 Python
Python设计模式之抽象工厂模式原理与用法详解
2019/01/15 Python
在keras里面实现计算f1-score的代码
2020/06/15 Python
python用700行代码实现http客户端
2021/01/14 Python
python爬取豆瓣电影排行榜(requests)的示例代码
2021/02/18 Python
5分钟让你掌握css3阴影、倒影、渐变小技巧(小编推荐)
2016/08/15 HTML / CSS
基于Html5实现的react拖拽排序组件示例
2018/08/13 HTML / CSS
英国计算机产品零售商:Novatech(定制个人电脑、笔记本电脑、工作站和服务器)
2018/01/28 全球购物
《列夫托尔斯泰》教学反思
2014/02/10 职场文书
会计专业大学生职业生涯规划书
2014/02/11 职场文书
促销活动总结报告
2014/04/26 职场文书
先进党员事迹材料
2014/12/24 职场文书
西湖英语导游词
2015/02/06 职场文书
项目投资意向书范本
2015/05/09 职场文书
学生党支部工作总结2015
2015/05/26 职场文书
《穷人》教学反思
2016/02/19 职场文书
创业计划书之韩国烧烤店
2019/09/19 职场文书
pytorch中的model.eval()和BN层的使用
2021/05/22 Python
ubuntu安装jupyter并设置远程访问的实现
2022/03/31 Python