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 相关文章推荐
javascript的console.log()用法小结
May 31 Javascript
JavaScript实现的一个日期格式化函数分享
Dec 06 Javascript
JS实现仿QQ聊天窗口抖动特效
May 10 Javascript
JavaScript检测字符串中是否含有html标签实现方法
Jul 01 Javascript
jQuery实现大转盘抽奖活动仿QQ音乐代码分享
Aug 21 Javascript
javascript中Date对象的使用总结
Nov 21 Javascript
AngularJS执行流程详解
Feb 17 Javascript
在 Linux/Unix 中不重启 Vim 而重新加载 .vimrc 文件的流程
Mar 21 Javascript
node结合swig渲染摸板的方法
Apr 11 Javascript
详解javascript 正则表达式之分组与前瞻匹配
May 30 Javascript
jQuery实现轮播图效果
Nov 26 jQuery
京东优选小程序的实现代码示例
Feb 25 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
ecshop后台编辑器替换成ueditor编辑器
2015/03/03 PHP
php定义一个参数带有默认值的函数实例分析
2015/03/16 PHP
PHP错误机制知识汇总
2016/03/24 PHP
PHP微信开发之查询城市天气
2016/06/23 PHP
PHP 7安装使用体验之性能大提升,兼容性强,扩展支持不够(升级PHP要谨慎)
2017/07/27 PHP
PHP弱类型语言中类型判断操作实例详解
2017/08/10 PHP
PHP+mysql实现的三级联动菜单功能示例
2019/02/15 PHP
Yii框架的布局文件实例分析
2019/09/04 PHP
javascript:以前写的xmlhttp池,代码
2008/05/18 Javascript
js+css在交互上的应用
2010/07/18 Javascript
Javascript图像处理—虚拟边缘介绍及使用方法
2012/12/27 Javascript
用RadioButten或CheckBox实现div的显示与隐藏
2013/09/21 Javascript
ext combobox动态加载数据库数据(附前后台)
2014/06/17 Javascript
jQuery EasyUI 入门必看
2016/06/03 Javascript
JavaScript必知必会(二) null 和undefined
2016/06/08 Javascript
深入理解JavaScript中的并行处理
2016/09/22 Javascript
jQuery插件echarts实现的多柱子柱状图效果示例【附demo源码下载】
2017/03/04 Javascript
微信小程序实现瀑布流布局与无限加载的方法详解
2017/05/12 Javascript
详解vue数据渲染出现闪烁问题
2017/06/29 Javascript
详解基于webpack2.x的vue2.x的多页面站点
2017/08/21 Javascript
js实现敏感词过滤算法及实现逻辑
2018/07/24 Javascript
小程序实现多选框功能
2018/10/30 Javascript
基于JS实现简单滑块拼图游戏
2019/10/12 Javascript
如何利用Node.js与JSON搭建简单的动态服务器
2020/06/16 Javascript
Vue自定义组件双向绑定实现原理及方法详解
2020/09/03 Javascript
nuxt 路由、过渡特效、中间件的实现代码
2020/11/06 Javascript
python3访问sina首页中文的处理方法
2014/02/24 Python
python实现电脑自动关机
2018/06/20 Python
django+xadmin+djcelery实现后台管理定时任务
2018/08/14 Python
python中entry用法讲解
2020/12/04 Python
pandas 数据类型转换的实现
2020/12/29 Python
日本一家专门经营各种箱包的大型网站:Traveler Store
2016/08/03 全球购物
英国高级百货公司:Harvey Nichols
2017/01/29 全球购物
世界上最大的专业美容用品零售商:Sally Beauty
2017/07/02 全球购物
岗位职责定义及内容
2013/11/08 职场文书
pytorch 如何使用amp进行混合精度训练
2021/05/24 Python