UNPKG

@puke3615/node-red-contrib-wechat

Version:

一个支持微信的Node-Red插件

82 lines (71 loc) 2.23 kB
const ScanStatus = [ 'Unknown', 'Cancel', 'Waiting', 'Scanned', 'Confirmed', 'Timeout', ]; function onScan(node, qrcode, status) { const statusValue = ScanStatus[status]; if (statusValue in ['Waiting', 'Timeout']) { node.log(`请扫码登录: ${status}\nhttps://wechaty.js.org/qrcode/${encodeURIComponent(qrcode)}`); } else { node.info('扫码状态', statusValue); } } function onLogin(node, user) { node.log(`用户 ${user} 已登录`); } function onMessage(node, message) { try { const messageType = message.type(); // MessageType.Text if (messageType !== 7) { node.log(`跳过消息类型: ${messageType}`) return; } node.log(`收到消息: ${message}`); const text = message.text(); const talkerPayload = message.talker().payload; const sender = talkerPayload.alias || talkerPayload.name; const roomPayload = message.room()?.payload; const room = roomPayload ? (roomPayload.alias || roomPayload.topic) : ''; const msg = { sender, text, room, payload: message.toString(), }; node.send(msg); node.log(`发送消息: ${JSON.stringify(msg)}`) } catch (e) { node.error('出错了', e); } } function setup(node) { node.log('准备启动微信'); const {WechatyBuilder} = require('wechaty'); async function main() { const wechaty = WechatyBuilder.build({ name: '007c9b34-c4fa-45c5-baa0-fcc6e1e70e30' }) wechaty .on('scan', (qrcode, status) => onScan(node, qrcode, status)) .on('login', user => onLogin(node, user)) .on('message', message => onMessage(node, message)); await wechaty.start() } main() .catch(console.error) } module.exports = function (RED) { function invoke(config) { RED.nodes.createNode(this, config); const node = this; node.on('input', function (msg) { msg.payload = msg.payload.toLowerCase(); node.send(msg); }); setup(node); } RED.nodes.registerType("wc-listen", invoke); };