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 同时在IE和FireFox获取KeyCode的代码
Feb 07 Javascript
JavaScript 笔记二 Array和Date对象方法
May 22 Javascript
Javacript实现颜色梯度变化和渐变的效果代码
May 31 Javascript
js替换字符串的所有示例代码
Jul 23 Javascript
jQuery中Dom的基本操作小结
Jan 23 Javascript
JS上传图片前实现图片预览效果的方法
Mar 02 Javascript
详解javascript传统方法实现异步校验
Jan 22 Javascript
vue axios同步请求解决方案
Sep 29 Javascript
ui-router中使用ocLazyLoad和resolve的具体方法
Oct 18 Javascript
vue的toast弹窗组件实例详解
May 14 Javascript
JavaScript 继承 封装 多态实现及原理详解
Jul 29 Javascript
Element MessageBox弹框的具体使用
Jul 27 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&amp;&amp;mysql)五
2006/10/09 PHP
将时间以距今多久的形式表示,PHP,js双版本
2012/09/25 PHP
php解析html类库simple_html_dom(详细介绍)
2013/07/05 PHP
php将字符串转换成16进制的方法
2015/03/17 PHP
codeigniter实现get分页的方法
2015/07/10 PHP
源码分析 Laravel 重复执行同一个队列任务的原因
2017/12/25 PHP
javascript下判断一个元素是否存在的代码
2010/03/05 Javascript
javascript 获取网页标题代码实例
2014/01/22 Javascript
jQuery遍历之next()、nextAll()方法使用实例
2014/11/08 Javascript
JavaScript获取表单内所有元素值的方法
2015/04/02 Javascript
对JavaScript的全文搜索实现相关度评分的功能的方法
2015/06/24 Javascript
轻松学习jQuery插件EasyUI EasyUI创建菜单与按钮
2015/11/30 Javascript
JS遍历数组和对象的区别及递归遍历对象、数组、属性的方法详解
2016/06/14 Javascript
利用Angularjs和bootstrap实现购物车功能
2016/08/31 Javascript
基于Javascript实现文件实时加载进度的方法
2016/10/12 Javascript
jQuery实现鼠标响应式淘宝动画效果示例
2018/02/13 jQuery
基于vue1和vue2获取dom元素的方法
2018/03/17 Javascript
vue利用axios来完成数据的交互
2018/03/23 Javascript
原生js生成图片验证码
2020/10/11 Javascript
[05:49]DOTA2-DPC中国联赛 正赛 Elephant vs LBZS 选手采访
2021/03/11 DOTA
Python生成随机数的方法
2014/01/14 Python
python实现无证书加密解密实例
2014/10/27 Python
tensorflow实现简单的卷积网络
2018/05/24 Python
Python+Kepler.gl轻松制作酷炫路径动画的实现示例
2020/06/02 Python
Python爬虫headers处理及网络超时问题解决方案
2020/06/19 Python
python文件排序的方法总结
2020/09/13 Python
工程师必须了解的LRU缓存淘汰算法以及python实现过程
2020/10/15 Python
详解canvas drawImage()方法绘制图片不显示的问题
2018/10/08 HTML / CSS
Get The Label中文官网:英国运动时尚购物平台
2017/04/19 全球购物
Jones New York官网:美国女装品牌,受白领女性欢迎
2019/11/26 全球购物
医学生临床实习自我评价
2014/03/07 职场文书
机械专业求职信
2014/05/25 职场文书
学校总务处领导班子民主生活会对照检查材料思想汇报
2014/09/27 职场文书
工商局个人工作总结
2015/03/03 职场文书
幼儿园校车安全责任书
2015/05/08 职场文书
感恩教师主题班会
2015/08/12 职场文书