From 29d20905400ac0efa0b367bc6187b08cc83c4c3c Mon Sep 17 00:00:00 2001
From: knotteye <knotteye@airmail.cc>
Date: Sat, 27 Jun 2020 03:23:04 -0500
Subject: [PATCH] Add working IRC integration

---
 install/config.example.yml |  1 +
 src/chat.ts                | 36 ++++++++++++++++++++++++++++++++++--
 2 files changed, 35 insertions(+), 2 deletions(-)

diff --git a/install/config.example.yml b/install/config.example.yml
index f47e9f2..7366345 100644
--- a/install/config.example.yml
+++ b/install/config.example.yml
@@ -35,6 +35,7 @@ chat:
     tls: false
     nickname: 'SatyrChat'
     username: 'SatyrChat'
+    realname: 'Satyr Chat Integration Bot'
     sasl: false
     password:
 
diff --git a/src/chat.ts b/src/chat.ts
index 9d4f309..af69e19 100644
--- a/src/chat.ts
+++ b/src/chat.ts
@@ -27,7 +27,26 @@ async function init() {
 		discordClient.login(config['chat']['discord']['token']);
 	}
 	if(config['chat']['irc']['enabled']){
-
+		ircClient = new irc.Client(config['chat']['irc']['server'], config['chat']['irc']['nickname'], {
+			userName: config['chat']['irc']['username'],
+			realName: config['chat']['irc']['realname'],
+			port: config['chat']['irc']['port'],
+			secure: config['chat']['irc']['tls'],
+			sasl: config['chat']['irc']['sasl'],
+			password: config['chat']['irc']['password'],
+		});
+		ircClient.addListener('error', (message) => {
+			console.log('IRC Client Error: ', message);
+		});
+		ircClient.once('registered', () => {
+			console.log("IRC Client Ready");
+		});
+		ircClient.on('message', (from, to, msg) => {
+			var lu = getUsr(to, 'irc');
+			for(var i=0;i<lu.length;i++){
+				sendAll(lu[i], [from, msg], "irc")
+			}
+		});
 	}
 	if(config['chat']['xmpp']['enabled']){
 		
@@ -50,6 +69,7 @@ async function updateInteg() {
 	if(liveUsers.length === 1) {
 		chatIntegration = await db.query('SELECT * FROM chat_integration WHERE username='+db.raw.escape(liveUsers[0]['username']));
 		console.log('updated ci');
+		updateIRCChan();
 		return;
 	}
 	var qs: string;
@@ -61,6 +81,7 @@ async function updateInteg() {
 	chatIntegration = await db.query('SELECT * FROM chat_integration WHERE username='+qs);
 	console.log('updated integrations');
 	console.log(chatIntegration);
+	updateIRCChan();
 }
 
 async function sendAll(user: string, msg: Array<string>, src: string) {
@@ -72,7 +93,7 @@ async function sendAll(user: string, msg: Array<string>, src: string) {
 
 	if(user === null) return;
 
-	//if(src !== "irc") sendIRC();
+	if(src !== "irc") sendIRC(getCh(user, "irc"), '['+src.toUpperCase()+']'+msg[0]+': '+msg[1]);
 	//if(src !== "twitch") sendTwitch();
 	if(src !== "discord") sendDiscord(getCh(user, "discord"), '['+src.toUpperCase()+']'+msg[0]+': '+msg[1]);
 	//if(src !== "xmpp") sendXMPP();
@@ -82,6 +103,7 @@ async function sendAll(user: string, msg: Array<string>, src: string) {
 async function sendIRC(channel: string, msg: string) {
 	if(!config['chat']['irc']['enabled']) return;
 	if(channel === null) return;
+	ircClient.say(channel, msg);
 }
 
 async function sendDiscord(channel: string, msg: string) {
@@ -123,4 +145,14 @@ function getUsr(channel: string, ctype: string): Array<string>{
 	return list;
 }
 
+async function updateIRCChan() {
+	var clist: Array<string> = [];
+	for(var i=0;i<chatIntegration.length;i++){
+		if(chatIntegration[i]['irc'].trim() !== "" && chatIntegration[i]['irc'] !== null) clist.push(chatIntegration[i]['irc']);
+	}
+	for(var i=0;i<clist.length;i++){
+		ircClient.join(clist[i]);
+	}
+}
+
 export { init, sendAll };
\ No newline at end of file