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中如何把字符串转化为对象、数组示例代码
Jul 17 Javascript
浏览器兼容console对象的简要解决方案分享
Oct 24 Javascript
javascript实现锁定网页、密码解锁效果(类似系统屏幕保护效果)
Aug 15 Javascript
jQuery选择器全集详解
Nov 24 Javascript
完美解决JS文件页面加载时的阻塞问题
Dec 18 Javascript
小程序实现自定义导航栏适配完美版
Apr 02 Javascript
浅谈发布订阅模式与观察者模式
Apr 09 Javascript
个人小程序接入支付解决方案
May 23 Javascript
解决layer.confirm快速点击会重复触发事件的问题
Sep 23 Javascript
AngularJS动态生成select下拉框的方法实例
Nov 17 Javascript
Vue指令实现OutClick的示例
Nov 16 Javascript
vue基于Echarts的拖拽数据可视化功能实现
Dec 04 Vue.js
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字符串的编码问题的详细介绍
2013/04/27 PHP
PHP中常用的输出函数总结
2014/09/22 PHP
php安全配置记录和常见错误梳理(总结)
2017/03/28 PHP
关于 Laravel Redis 多个进程同时取队列问题详解
2017/12/25 PHP
YII框架http缓存操作示例
2019/04/29 PHP
Thinkphp框架+Layui实现图片/文件上传功能分析
2020/02/07 PHP
基于jquery的direction图片渐变动画效果
2010/05/24 Javascript
JS添加删除一组文本框并对输入信息加以验证判断其正确性
2013/04/11 Javascript
根据表格中的某一列进行排序的javascript代码
2013/11/29 Javascript
Jquery 过滤器(first,last,not,even,odd)的使用
2014/01/22 Javascript
JQuery获取表格数据示例代码
2014/05/26 Javascript
jquery 3D 标签云示例代码
2014/06/12 Javascript
Jquery 实现checkbox全选方法
2015/01/28 Javascript
indexedDB bootstrap angularjs之 MVC DOMO (应用示例)
2016/06/20 Javascript
Javascript 5种方法实现过滤删除前后所有空格
2016/06/22 Javascript
在微信、支付宝、百度钱包实现点击返回按钮关闭当前页面和窗口的方法
2016/08/05 Javascript
jquery attr()设置和获取属性值实例教程
2016/09/25 Javascript
vue-cli整合vuex的时候,修改actions和mutations,实现热部署的方法
2018/09/19 Javascript
Layer.js实现表格溢出内容省略号显示,悬停显示全部的方法
2019/09/16 Javascript
你知道JavaScript Symbol类型怎么用吗
2020/01/08 Javascript
详解Django框架中用户的登录和退出的实现
2015/07/23 Python
python 数据清洗之数据合并、转换、过滤、排序
2017/02/12 Python
Python获取指定字符前面的所有字符方法
2018/05/02 Python
python按比例随机切分数据的实现
2019/07/11 Python
使用python-cv2实现视频的分解与合成的示例代码
2020/10/26 Python
python使用smtplib模块发送邮件
2020/12/17 Python
python 使用xlsxwriter循环向excel中插入数据和图片的操作
2021/01/01 Python
CSS实现进度条和订单进度条的示例
2020/11/05 HTML / CSS
Debenhams爱尔兰:英国知名的百货公司
2017/01/02 全球购物
《画家乡》教学反思
2014/04/22 职场文书
学校元旦晚会开场白
2014/12/14 职场文书
综治目标管理责任书
2015/05/11 职场文书
运动会观后感
2015/06/09 职场文书
关于Python中*args和**kwargs的深入理解
2021/08/07 Python
TypeScript中条件类型精读与实践记录
2021/10/05 Javascript
Python多线程实用方法以及共享变量资源竞争问题
2022/04/12 Python