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 相关文章推荐
Track Image Loading效果代码分析
Aug 13 Javascript
javascript获取设置div的高度和宽度兼容任何浏览器
Sep 22 Javascript
JavaScript实现从数组中选出和等于固定值的n个数
Sep 03 Javascript
JavaScript 学习笔记之操作符(续)
Jan 14 Javascript
JavaScript设置body高度为浏览器高度的方法
Feb 09 Javascript
深入理解JavaScript系列(28):设计模式之工厂模式详解
Mar 03 Javascript
轻松玩转BootstrapTable(后端使用SpringMVC+Hibernate)
Sep 06 Javascript
深入理解 webpack 文件打包机制(小结)
Jan 08 Javascript
vue+axios 前端实现登录拦截的两种方式(路由拦截、http拦截)
Oct 24 Javascript
了解在JavaScript中将值转换为字符串的5种方法
Jun 06 Javascript
vue3.0搭配.net core实现文件上传组件
Oct 29 Javascript
Echarts.js无法引入问题解决方案
Oct 30 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中Array2xml类实现数组转化成XML实例
2014/12/08 PHP
Yii学习总结之数据访问对象 (DAO)
2015/02/22 PHP
详解WordPress开发中过滤属性以及Sql语句的函数使用
2015/12/25 PHP
php版微信小店API二次开发及使用示例
2016/11/12 PHP
线路分流自动跳转代码;希望对大家有用!
2006/12/02 Javascript
基于jquery实现的类似百度搜索的输入框自动完成功能
2011/08/23 Javascript
JavaScript window.document的属性、方法和事件小结
2012/10/24 Javascript
Javascript代码在页面加载时的执行顺序介绍
2013/05/03 Javascript
jQuery - css() 方法示例详解
2014/01/16 Javascript
jQuery实现分隔条左右拖动功能
2015/11/21 Javascript
如何使用AngularJs打造权限管理系统【简易型】
2016/05/09 Javascript
Nodejs全局安装和本地安装的不同之处
2016/07/04 NodeJs
jQuery实现公告新闻自动滚屏效果实例代码
2016/07/14 Javascript
js正则表达式注册页面表单验证
2016/10/11 Javascript
vue2笔记 — vue-router路由懒加载的实现
2017/03/03 Javascript
Vue中v-show添加表达式的问题(判断是否显示)
2018/03/26 Javascript
详解微信小程序开发之formId使用(模板消息)
2019/08/27 Javascript
Node.js API详解之 console模块用法详解
2020/05/12 Javascript
[01:05:56]Liquid vs VP Supermajor决赛 BO 第二场 6.10
2018/07/04 DOTA
python网络编程之UDP通信实例(含服务器端、客户端、UDP广播例子)
2014/04/25 Python
Python中的random()方法的使用介绍
2015/05/15 Python
python正则分析nginx的访问日志
2017/01/17 Python
python中的二维列表实例详解
2018/06/19 Python
python基础学习之如何对元组各个元素进行命名详解
2018/07/12 Python
pyqt 实现为长内容添加滑轮 scrollArea
2019/06/19 Python
python装饰器代替set get方法实例
2019/12/19 Python
python 数据库查询返回list或tuple实例
2020/05/15 Python
python实现ping命令小程序
2020/12/28 Python
什么是网络协议
2016/04/07 面试题
主题酒店策划书
2014/01/28 职场文书
自荐信的基本格式
2014/02/22 职场文书
机关副主任个人四风问题整改措施
2014/09/26 职场文书
关于拾金不昧的感谢信
2015/01/21 职场文书
保护环境建议书作文300字
2015/09/14 职场文书
部门主管竞聘书
2015/09/15 职场文书
2016公司新年问候语
2015/11/11 职场文书