python-archieve-projects/WechatBot/chatflow/src/puppet-checker.ts

167 lines
4.4 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env -S node --no-warnings --loader ts-node/esm
/* eslint-disable @typescript-eslint/no-unnecessary-condition */
/* eslint-disable no-console */
/* eslint-disable eqeqeq */
/* eslint-disable camelcase */
/* eslint-disable sort-keys */
import 'dotenv/config.js'
import {
Contact,
// Room,
Message,
ScanStatus,
WechatyBuilder,
log,
// types,
} from 'wechaty'
import qrcodeTerminal from 'qrcode-terminal'
import WechatyVikaPlugin from './plugins/index.js'
import configs from './config.js'
import { VikaBot } from './plugins/vika.js'
let bot: any
let sysConfig: any
if (process.env['VIKA_SPACENAME']) {
configs.VIKA_SPACENAME = process.env['VIKA_SPACENAME']
}
if (process.env['VIKA_TOKEN']) {
configs.VIKA_TOKEN = process.env['VIKA_TOKEN']
}
const vikaConfig = {
spaceName: configs.VIKA_SPACENAME,
token: configs.VIKA_TOKEN,
}
// console.debug(vikaConfig)
const vika = new VikaBot(vikaConfig)
async function getConfig (vika: any) {
sysConfig = await vika.getConfig()
console.debug(sysConfig)
return sysConfig
}
async function main () {
const isReady = await vika.checkInit('主程序载入系统配置成功,等待插件初始化...')
if (!isReady) {
return
}
// 获取系统配置信息
await getConfig(vika)
const wechatyConfig: any = {
// 网页版微信
'wechaty-puppet-wechat': {
name: 'openai-qa-bot',
puppet: 'wechaty-puppet-wechat',
puppetOptions: {
uos: true,
},
},
// Windows桌面版微信
'wechaty-puppet-xp': {
name: 'openai-qa-bot',
puppet: 'wechaty-puppet-xp',
},
// pad-local
'wechaty-puppet-padlocal': {
name: 'openai-qa-bot',
puppet: 'wechaty-puppet-padlocal',
puppetOptions: {
token: sysConfig.puppetToken,
},
},
// wechaty-puppet-service
'wechaty-puppet-service': {
name: 'openai-qa-bot',
puppet: 'wechaty-puppet-service',
puppetOptions: {
token: sysConfig.puppetToken,
},
},
}
const ops = wechatyConfig[sysConfig.puppetName]
console.debug(ops)
bot = WechatyBuilder.build(ops)
async function onScan (qrcode: string, status: ScanStatus) {
console.debug(qrcode)
if (status === ScanStatus.Waiting || status === ScanStatus.Timeout) {
const qrcodeUrl = encodeURIComponent(qrcode)
const qrcodeImageUrl = [
'https://wechaty.js.org/qrcode/',
qrcodeUrl,
].join('')
log.info('StarterBot', 'onScan: %s(%s) - %s', ScanStatus[status], status, qrcodeImageUrl)
qrcodeTerminal.generate(qrcode, { small: true }) // show qrcode on console
} else {
log.info('StarterBot', 'onScan: %s(%s)', ScanStatus[status], status)
}
}
async function onLogin (user: Contact) {
log.info('StarterBot', '%s login', user.payload)
await user.say('上线:' + new Date().toLocaleString())
log.info(JSON.stringify(user.payload))
console.log('================================================\n\n登录启动成功程序准备就绪\n\n================================================\n')
}
function onLogout (user: Contact) {
log.info('StarterBot', '%s logout', user)
}
async function onMessage (message: Message) {
log.info('onMessage', JSON.stringify(message))
console.debug('onMessage', JSON.stringify(message))
}
async function roomJoin (room: { topic: () => any; id: any; say: (arg0: string, arg1: any) => any }, inviteeList: any[], inviter: any) {
const nameList = inviteeList.map(c => c.name()).join(',')
log.info(`Room ${await room.topic()} got new member ${nameList}, invited by ${inviter}`)
}
const missingConfiguration = []
for (const key in configs) {
if (!configs[key] && ![ 'imOpen', 'DIFF_REPLY_ONOFF' ].includes(key)) {
missingConfiguration.push(key)
}
}
if (missingConfiguration.length === 0) {
bot.use(
WechatyVikaPlugin(vika),
)
bot.on('scan', onScan)
bot.on('login', onLogin)
bot.on('logout', onLogout)
bot.on('message', onMessage)
bot.on('room-join', roomJoin)
bot.start()
.then(() => log.info('Starter Bot Started.'))
.catch((e: any) => log.error(JSON.stringify(e)))
} else {
log.error('\n======================================\n\n', `错误提示:\n缺少${missingConfiguration.join()}配置参数,请检查config.js文件\n\n======================================`)
log.info(configs)
}
}
void main()