This repository has been archived on 2021-08-13. You can view files and clone it, but cannot push or open issues/pull-requests.
fookat-email-bridge/index.js

82 lines
2.1 KiB
JavaScript

require("dotenv").config();
var {driver} = require("@rocket.chat/sdk");
var MailInterface = require("./mailinterface");
var mint = new MailInterface({
mbox: "/var/mail/lamp",
smtp: {
host: "localhost",
port: 25,
ehlo: "uvias.com",
from: "lamp@uvias.com"
},
target: process.env.TARGET_EMAIL
});
var open = false;
(async function RCinit(){
await driver.connect();
await driver.login();
await driver.subscribeToMessages();
var receivedMessageIds = [];
await driver.reactToMessages(async function onMessage(e, m, mo){
if (m.rid != "RRs5zwrv6PqWwBzYr") return;
if (m.u._id == driver.userId) return;
if (!m.mentions && !m.channels) return;
if (receivedMessageIds.includes(m._id)) return;
else receivedMessageIds.push(m._id);
try {
if (open) {
await mint.send(`${m.u.username}: ${m.msg}`);
await driver.setReaction(":white_check_mark:", m._id);
} else {
await driver.setReaction(":no_entry_sign:", m._id);
}
} catch(e) {
console.error(e);
await driver.setReaction(":warning:", m._id);
}
});
})();
mint.on("mail", async mail => {
if (mail.from.text != process.env.TARGET_EMAIL) {
require('fs').appendFileSync("unknown_emails.txt", JSON.stringify(mail, null, 4) + '\n\n\n\n');
return;
};
var msg = mail.text || mail.html || (mail.attachments[0] && mail.attachments[0].content.toString());
if (msg.startsWith('/')) {
let args = msg.split(' ');
let cmd = args[0].substr(1);
switch(cmd) {
case "ping":
await mint.send("pong");
break;
case "open":
open = true;
await mint.send("ready"); //TODO send list of past msgs
break;
case "close":
open = false;
await mint.send("closed");
break;
case "eval":
let o;
try { o = await eval(args.slice(1).join(' ')) } catch(e) { o = e }
o = require("util").inspect(o);
mint.send(String(o));
break;
default:
mint.send("unknown cmd");
}
} else if (open) {
msg = msg.replace(new RegExp(process.env.TARGET_EMAIL.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'), 'g'), "[redacted]");
await driver.sendToRoom(msg, "RRs5zwrv6PqWwBzYr");
}
});