@puke3615/node-red-contrib-wechat
Version:
一个支持微信的Node-Red插件
82 lines (71 loc) • 2.23 kB
JavaScript
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);
};