From cfa7c5ab133662761b329788937d2aed9854f2a5 Mon Sep 17 00:00:00 2001 From: knotteye Date: Sat, 17 Oct 2020 20:17:24 -0500 Subject: [PATCH] Implement XMPP mirror --- src/chat.ts | 49 ++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 46 insertions(+), 3 deletions(-) diff --git a/src/chat.ts b/src/chat.ts index 647b6db..9b2206e 100644 --- a/src/chat.ts +++ b/src/chat.ts @@ -4,9 +4,11 @@ import {io} from "./http"; import * as irc from "irc"; import * as discord from "discord.js"; import * as twitch from "dank-twitch-irc"; +import * as xmpp from "simple-xmpp"; +const sleep = ms => new Promise(resolve => setTimeout(resolve, ms)); var ircClient; -var xmppClient; +var xmppIgnore: Array = []; var twitchClient; var twitchArr: Array = []; var discordClient; @@ -51,7 +53,24 @@ async function init() { }); } if(config['chat']['xmpp']['enabled']){ - + xmpp.on('online', (data) => { + console.log("XMPP Client Ready"); + }); + xmpp.on('groupchat', function(conference, from, message, stamp) { + if(xmppIgnore.findIndex((e) => { return e === conference }) !== -1) return false; + if(from === config['chat']['xmpp']['nickname']) return false; + console.log(from+'\n'+conference+'\n'+message+'\n'+stamp); + var lu = getUsr(conference, "xmpp"); + for(var i=0;i, src: string) { @@ -126,7 +148,7 @@ async function sendAll(user: string, msg: Array, src: string) { if(src !== "irc") sendIRC(getCh(user, "irc"), '['+src.toUpperCase()+']'+msg[0]+': '+msg[1]); if(src !== "twitch") sendTwitch(getCh(user, "twitch"), '['+src.toUpperCase()+']'+msg[0]+': '+msg[1]); if(src !== "discord") sendDiscord(getCh(user, "discord"), '['+src.toUpperCase()+']'+msg[0]+': '+msg[1]); - //if(src !== "xmpp") sendXMPP(); + if(src !== "xmpp") sendXMPP(getCh(user, "xmpp"), '['+src.toUpperCase()+']'+msg[0]+': '+msg[1]); if(src !== "web") sendWeb(user, ['['+src.toUpperCase()+']'+msg[0], msg[1]]); } @@ -146,6 +168,7 @@ async function sendDiscord(channel: string, msg: string) { async function sendXMPP(channel: string, msg: string) { if(!config['chat']['xmpp']['enabled']) return; if(channel === null) return; + xmpp.send(channel, msg, true); } async function sendTwitch(channel: string, msg: string) { @@ -252,4 +275,24 @@ async function normalizeDiscordMsg(msg): Promise{ return nmsg; } +function xmppJoin(room: string): void{ + var stanza = new xmpp.Element('presence', {"to": room+'/'+config['chat']['xmpp']['nickname']}).c('x', { xmlns: 'http://jabber.org/protocol/muc' }).c('history', { maxstanzas: 0, seconds: 1}); + xmpp.conn.send(stanza); + xmppIgnore = xmppIgnore.concat([room]); + xmpp.join(room+'/'+config['chat']['xmpp']['nickname']); + sleep(4000).then(() => { + xmppIgnore = xmppIgnore.filter((item) => { + return item !== room; + }); + }); +} + +function updateXmppChan(): void{ + //simple-xmpp will ignore duplicate joins by itself so we can join repeatedly + for(var i=0;i