UNPKG

wechaty-face-carton

Version:
166 lines 6.26 kB
import { contactSay, roomSay, delay } from './util/index.js'; import { BotManage } from './service/multiReply.js'; import Qrterminal from 'qrcode-terminal'; let config = {}; let BotRes = ''; /** * 根据消息类型过滤私聊消息事件 * @param {*} that bot实例 * @param {*} msg 消息主体 */ async function dispatchFriendFilterByMsgType(that, msg) { try { const type = msg.type(); const contact = msg.talker(); // 发消息人 const name = await contact.name(); const isOfficial = contact.type() === that.Contact.Type.Official; const id = await contact.id; switch (type) { case that.Message.Type.Text: const content = msg.text(); if (!isOfficial) { console.log(`发消息人${name}:${content}`); if (content.trim()) { const multiReply = await BotRes.run(id, { type: 1, content }); let replys = multiReply.replys; let replyIndex = multiReply.replys_index; await delay(1000); await contactSay(that, contact, replys[replyIndex]); } } break; case that.Message.Type.Image: console.log(`发消息人${name}:发了一张图片`); if (!config.allowUser.length || config.allowUser.includes(name)) { const file = await msg.toFileBox(); const base = await file.toDataURL(); const multiReply = await BotRes.run(id, { type: 3, url: base }); let replys = multiReply.replys; let replyIndex = multiReply.replys_index; await delay(1000); await contactSay(that, contact, replys[replyIndex]); } else { console.log(`没有开启 ${name} 的人脸漫画化功能, 或者检查是否已经配置此人微信昵称`); } break; default: break; } } catch (error) { console.log('监听消息错误', error); } } /** * 根据消息类型过滤群消息事件 * @param {*} that bot实例 * @param {*} room room对象 * @param {*} msg 消息主体 */ async function dispatchRoomFilterByMsgType(that, room, msg) { const contact = msg.talker(); // 发消息人 const contactName = contact.name(); const roomName = await room.topic(); const type = msg.type(); const userName = await contact.name(); const userSelfName = that.currentUser?.name() || that.userSelf()?.name(); const id = await contact.id; switch (type) { case that.Message.Type.Text: let content = msg.text(); console.log(`群名: ${roomName} 发消息人: ${contactName} 内容: ${content}`); if (config.allowRoom.includes(roomName)) { const mentionSelf = content.includes(`@${userSelfName}`); if (mentionSelf) { content = content.replace(/@[^,,::\s@]+/g, '').trim(); if (content) { const multiReply = await BotRes.run(id, { type: 1, content }); let replys = multiReply.replys; let replyIndex = multiReply.replys_index; await delay(1000); await roomSay(that, room, contact, replys[replyIndex]); } } } break; case that.Message.Type.Image: console.log(`群名: ${roomName} 发消息人: ${contactName} 发了一张图片`); if (config.allowRoom.includes(roomName)) { console.log(`匹配到群:${roomName}的人脸漫画化功能已开启,正在生成中...`); const file = await msg.toFileBox(); const base = await file.toDataURL(); const multiReply = await BotRes.run(id, { type: 3, url: base }); let replys = multiReply.replys; let replyIndex = multiReply.replys_index; await delay(1000); await roomSay(that, room, contact, replys[replyIndex]); } else { console.log('没有开通此群人脸漫画化功能'); } break; default: break; } } /** * 消息事件监听 * @param {*} msg * @returns */ async function onMessage(msg) { try { if (!BotRes) { BotRes = new BotManage(config.maxuser, this, config); } const room = msg.room(); // 是否为群消息 const msgSelf = msg.self(); // 是否自己发给自己的消息 if (msgSelf) return; if (room) { dispatchRoomFilterByMsgType(this, room, msg); } else { dispatchFriendFilterByMsgType(this, msg); } } catch (e) { console.log('reply error', e); } } async function onLogin(user) { console.log(`漫画人像小助手${user}登录了`); } async function onLogout(user) { console.log(`漫画人像小助手${user}已登出`); } /** * 扫描登录,显示二维码 */ async function onScan(qrcode, status) { Qrterminal.generate(qrcode); console.log('扫描状态', status); const qrImgUrl = ['https://api.qrserver.com/v1/create-qr-code/?data=', encodeURIComponent(qrcode)].join(''); console.log(qrImgUrl); } export function WechatyFaceCartonPlugin({ secretId = '', secretKey = '', allowUser = [], allowRoom = [], quickModel = false, maxuser = 20, tipsword = '' }) { config = { maxuser, secretId, secretKey, allowUser, allowRoom, tipsword, }; return function (bot) { bot.on('message', onMessage); // 如果用户开启快速体验模式,帮助用户监听扫码事件,直接把二维码显示在控制台 if (quickModel) { bot.on('scan', onScan); bot.on('login', onLogin); bot.on('logout', onLogout); } }; } //# sourceMappingURL=index.js.map