Files
wechat-bot-ai/src/platforms/wechat/bot.js
2026-06-09 14:50:53 +08:00

76 lines
2.2 KiB
JavaScript

import { WechatyBuilder, ScanStatus, log } from 'wechaty'
import qrTerminal from 'qrcode-terminal'
import { defaultMessage } from '../../wechaty/sendMessage.js'
import { captureWechatMessage } from './messageStore.js'
import { getWechatRuntimeConfig } from '../../config/env.js'
function onScan(qrcode, status) {
if (status === ScanStatus.Waiting || status === ScanStatus.Timeout) {
qrTerminal.generate(qrcode, { small: true })
const qrcodeImageUrl = ['https://api.qrserver.com/v1/create-qr-code/?data=', encodeURIComponent(qrcode)].join('')
console.log('onScan:', qrcodeImageUrl, ScanStatus[status], status)
} else {
log.info('onScan: %s(%s)', ScanStatus[status], status)
}
}
function onLogin(user) {
console.log(`${user} has logged in`)
const date = new Date()
console.log(`Current time:${date}`)
console.log('Automatic robot chat mode has been activated')
}
function onLogout(user) {
console.log(`${user} has logged out`)
}
async function onFriendShip(friendship) {
const friendShipRe = /chatgpt|chat/
if (friendship.type() === 2 && friendShipRe.test(friendship.hello())) {
await friendship.accept()
}
}
export function createWechatBot(options = {}) {
const config = getWechatRuntimeConfig()
const chromeBin = process.env.CHROME_BIN ? { endpoint: process.env.CHROME_BIN } : {}
const serviceType = options.serviceType || ''
const bot = WechatyBuilder.build({
name: 'WechatEveryDay',
puppet: 'wechaty-puppet-wechat4u',
puppetOptions: {
uos: true,
...chromeBin,
},
})
bot.on('scan', onScan)
bot.on('login', onLogin)
bot.on('logout', onLogout)
bot.on('friendship', onFriendShip)
bot.on('message', async (message) => {
await captureWechatMessage(message, bot, {
dataDir: config.dataDir,
storeMessages: config.storeMessages,
})
await defaultMessage(message, bot, serviceType)
})
bot.on('error', (error) => {
console.error('bot error handle: ', error)
})
return bot
}
export function startWechatBot(options = {}) {
const bot = createWechatBot(options)
bot
.start()
.then(() => console.log('Start to log in wechat...'))
.catch((error) => console.error('botStart error: ', error))
return bot
}