node打造微信個(gè)人號(hào)機(jī)器人的方法示例
現(xiàn)在,日常生活已經(jīng)離不開微信,本文將會(huì)拋磚引玉演示如何使用 wechaty 操作微信個(gè)人號(hào)做一些有意思的東西,可以實(shí)現(xiàn)自動(dòng)通過好友請(qǐng)求、關(guān)鍵詞回復(fù)、自動(dòng)拉群等功能。大大提高了社群運(yùn)營(yíng)的效率。
wechaty( https://chatie.io/wechaty/)是一款開源的微信個(gè)人號(hào)SDK,進(jìn)行了一系列的封裝,提供簡(jiǎn)單好用的接口,然后開發(fā)者可以在其之上進(jìn)行微信機(jī)器人的開發(fā)。你可以用它來做很多事:
1)管理和維護(hù)好友; 2)快速有序地處理聊天信息 3)微信群管理 4)實(shí)現(xiàn)自動(dòng)回復(fù) 5)……
一、快速上手
wechaty 項(xiàng)目主頁(yè)寫著 6行代碼創(chuàng)建一個(gè)微信機(jī)器人,那么我們就來試一試。 注意: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行代碼實(shí)現(xiàn)了登錄微信個(gè)人號(hào)并打印出所收到的消息。
wechaty 可以通過Docker和NPM兩種方式運(yùn)行,本文使用npm方式
node bot.js 啟動(dòng)這個(gè)個(gè)人號(hào)機(jī)器人,這時(shí)命令行會(huì)打印出一個(gè)鏈接,我們將它在瀏覽器中打開可以看到這是個(gè)二維碼,掃碼即可登錄(注:2017年年底隨著微信逐步關(guān)停微信網(wǎng)頁(yè)版登錄支持,之后后注冊(cè)的微信號(hào)不支持網(wǎng)頁(yè)微信的登錄。老夫花了105RMB買了個(gè)號(hào)來用,心疼我的錢包3秒鐘)
User Contact<劉星> logined // 掃碼登錄 Message: Message<JavaScript之禪> // 接收微信消息
機(jī)器人體驗(yàn)在文末。 示例代碼地址: Github
二、自動(dòng)通過好友請(qǐng)求
通過前面的示例代碼,可以發(fā)現(xiàn)這個(gè)庫(kù)的簡(jiǎn)潔強(qiáng)大了吧。接著我們來實(shí)現(xiàn)第一個(gè)小功能:自動(dòng)通過好友請(qǐng)求
//··· .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') } }) //···
這里我們通過監(jiān)聽 friend 事件??梢垣@取到誰發(fā)了什么好友請(qǐng)求。這里我們驗(yàn)證了添加好友時(shí)的請(qǐng)求,在收到好友請(qǐng)求內(nèi)容為【 JS 】或者【JavaScript】時(shí) 就會(huì)自動(dòng)通過好友請(qǐng)求了。
每次都復(fù)制鏈接到瀏覽器打開二維碼在掃碼一點(diǎn)兒都不方酷也不方便在服務(wù)器上使用。這時(shí)我們可以用 qrcode-terminal 這個(gè)包 直接在命令行中打印出二維碼。
//··· const QrcodeTerminal = require('qrcode-terminal') //··· .on('scan', (url, code) => { let loginUrl = url.replace('qrcode', 'l') QrcodeTerminal.generate(loginUrl) console.log(url) }) //···
再運(yùn)行 node bot.js 命令行將直接打印出二維碼,方便了很多。
三、自動(dòng)回復(fù)
現(xiàn)在來實(shí)現(xiàn)第二個(gè)小功能:關(guān)鍵詞自動(dòng)回復(fù)。
//··· .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}`) } // 不處理自己發(fā)的消息 if (message.self()) { return } if (/JavaScript|Js|js/.test(content)) { message.say('關(guān)注公眾號(hào) JavaScript之禪') } }) //···
在上面 我們監(jiān)聽 message 來做消息處理。message 可以接收到所有的消息,我們可以判斷是不是群聊消息、根據(jù)消息回復(fù)相應(yīng)內(nèi)容。如發(fā)送【 js 】將會(huì)收到設(shè)置好的消息,實(shí)現(xiàn)自動(dòng)回復(fù)。
四、自動(dòng)拉群
前面說到了消息關(guān)鍵詞自動(dòng)回復(fù),把消息處理和群管理結(jié)合起來,我們就可以實(shí)現(xiàn)根據(jù)關(guān)鍵字自動(dòng)拉群了
//··· .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('關(guān)注公眾號(hào) JavaScript之禪沒?') } // 自動(dòng)拉群 if (/加群/.test(content)) { let keyroom = await Room.find({ topic: 'test' }) if (keyroom) { await keyroom.add(contact) await keyroom.say('歡迎新朋友!', contact) } } }) //···
上面的代碼通過 Room 來操作群聊。 此時(shí)回復(fù) 【加群】即可被自動(dòng)拉入群中。當(dāng)然了,我們還可以做得更多如使用 Room.del 來講某個(gè)群?jiǎn)T踢出去。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
PHPStorm中如何對(duì)nodejs項(xiàng)目進(jìn)行單元測(cè)試詳解
這篇文章主要給大家介紹了關(guān)于PHPStorm中如何對(duì)nodejs項(xiàng)目進(jìn)行單元測(cè)試的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-02-02npm?install總是卡住不動(dòng)問題的解決辦法
在我們安裝完Node.js之后,需要使用npm命令來安裝一些工具,下面這篇文章主要給大家介紹了關(guān)于npm?install總是卡住不動(dòng)問題的解決辦法,需要的朋友可以參考下2022-05-05nodejs基礎(chǔ)之buffer緩沖區(qū)用法分析
這篇文章主要介紹了nodejs基礎(chǔ)之buffer緩沖區(qū)用法,結(jié)合實(shí)例形式分析了buffer緩沖區(qū)的概念、功能、創(chuàng)建、讀寫等相關(guān)操作技巧,需要的朋友可以參考下2018-12-12node.js實(shí)現(xiàn)多圖片上傳實(shí)例
這篇文章主要介紹了node.js實(shí)現(xiàn)多圖片上傳實(shí)例,包括路由、控制器和視圖的源碼,重點(diǎn)在圖片上傳處理程序,需要的朋友可以參考下2014-06-06node 標(biāo)準(zhǔn)輸入流和輸出流代碼實(shí)例
這篇文章主要介紹了node 標(biāo)準(zhǔn)輸入流和輸出流代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-09-09微信小程序在線客服自動(dòng)回復(fù)功能(基于node)
這篇文章主要介紹了微信小程序在線客服自動(dòng)回復(fù)功能(基于node),由于小程序嵌套webview時(shí)需要校驗(yàn)域名,因此跳轉(zhuǎn)到第三方應(yīng)用市場(chǎng)和Appstroe無法實(shí)現(xiàn)導(dǎo)流。那怎么辦呢,需要的朋友可以參考下2019-07-07Node.js使用第三方插件nodemailer實(shí)現(xiàn)郵件發(fā)送示例
這篇文章主要為大家介紹了Node.js使用第三方插件nodemailer實(shí)現(xiàn)郵件發(fā)送示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-11-11