/** * Wechaty - https://github.com/wechaty/wechaty * * @copyright 2021 Wechaty Contributors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * */ import type * as PUPPET from 'wechaty-puppet' import { PuppetXp, } from '../src/mod.js' import qrcodeTerminal from 'qrcode-terminal' /** * * 1. Declare your Bot! * */ const puppet = new PuppetXp() /** * * 2. Register event handlers for Bot * */ puppet .on('logout', onLogout) .on('login', onLogin) .on('scan', onScan) .on('error', onError) .on('message', onMessage) /** * * 3. Start the bot! * */ puppet.start() .catch(async e => { console.error('Bot start() fail:', e) await puppet.stop() process.exit(-1) }) /** * * 4. You are all set. ;-] * */ /** * * 5. Define Event Handler Functions for: * `scan`, `login`, `logout`, `error`, and `message` * */ function onScan (payload: PUPPET.payloads.EventScan) { if (payload.qrcode) { const qrcodeImageUrl = [ 'https://wechaty.js.org/qrcode/', encodeURIComponent(payload.qrcode), ].join('') console.info('onScan: %s(%s) - %s', payload.status, qrcodeImageUrl) qrcodeTerminal.generate(payload.qrcode, { small: true }) // show qrcode on console console.info(`[${payload.status}] ${payload.qrcode}\nScan QR Code above to log in: `) } else { console.info(`[${payload.status}]`) } } function onLogin (payload: PUPPET.payloads.EventLogin) { console.info(`${payload.contactId} login`) } function onLogout (payload: PUPPET.payloads.EventLogout) { console.info(`${payload.contactId} logouted`) } function onError (payload: PUPPET.payloads.EventError) { console.error('Bot error:', payload.data) /* if (bot.logonoff()) { bot.say('Wechaty error: ' + e.message).catch(console.error) } */ } /** * * 6. The most important handler is for: * dealing with Messages. * */ async function onMessage ({ messageId, }: PUPPET.payloads.EventMessage) { const { talkerId, roomId, text, } = await puppet.messagePayload(messageId) if (/ding/i.test(text || '')) { await puppet.messageSendText(roomId! || talkerId!, 'dong') } } /** * * 7. Output the Welcome Message * */ const welcome = ` Puppet Version: ${puppet.version()} Please wait... I'm trying to login in... ` console.info(welcome)