From 12b36c51ad7e7255cf7b98427ff5d301ef0b8f58 Mon Sep 17 00:00:00 2001
From: mcmlxxix <>
Date: Wed, 27 Oct 2010 18:20:56 +0000
Subject: [PATCH] fixed KICK server_command. Bot will now auto-rejoin channels
 from which it has been kicked.

---
 exec/load/ircbot_commands.js | 29 ++++++++++++++++++++++++++++-
 1 file changed, 28 insertions(+), 1 deletion(-)

diff --git a/exec/load/ircbot_commands.js b/exec/load/ircbot_commands.js
index c6a6dae2b9..c28899c2f6 100644
--- a/exec/load/ircbot_commands.js
+++ b/exec/load/ircbot_commands.js
@@ -303,6 +303,10 @@ Bot_Commands["MODE"].command = function (target,onick,ouh,srv,lvl,cmd) {
 	} else {
 		while(cmd[0] && cmd[0][0] == "#" || cmd[0][0] == "&") {
 			var chan_str=cmd.shift();
+			if(!srv.channel[chan_str.toUpperCase()]) {
+				srv.o(target,"I am not in channel: " + chan_str.toLowerCase(),"NOTICE");
+				return;
+			}
 			channels.push(chan_str.toUpperCase());
 		}
 	}
@@ -567,7 +571,30 @@ Server_Commands["PART"] = function (srv,cmd,onick,ouh)	{
 		if(chan_count==0) delete srv.users[onick.toUpperCase()];
 	}
 }
-Server_Commands["QUIT"]=Server_Commands["KICK"]=Server_Commands["PART"];
+Server_Commands["QUIT"]=Server_Commands["PART"];
+
+Server_Commands["KICK"] = function (srv,cmd,onick,ouh)	{
+	if (cmd[0][0] == ":")
+		cmd[0] = cmd[0].slice(1);
+		
+	var chan_name=cmd.shift();
+	var kicked=cmd.shift();
+	var chan = srv.channel[chan_name.toUpperCase()];
+	
+	if ((kicked == srv.curnick) && chan && chan.is_joined) {
+		chan.is_joined = false;
+		return;
+	}
+	// Someone else parting.
+	if(srv.users[kicked.toUpperCase()]) {
+		delete srv.users[kicked.toUpperCase()].channels[chan_name.toUpperCase()];
+		var chan_count=0;
+		for(var c in srv.users[kicked.toUpperCase()].channels) {
+			chan_count++;
+		}
+		if(chan_count==0) delete srv.users[kicked.toUpperCase()];
+	}
+}
 
 Server_Commands["PRIVMSG"] = function (srv,cmd,onick,ouh)	{ 
 	if(srv.users[onick.toUpperCase()]) srv.users[onick.toUpperCase()].last_spoke=time();
-- 
GitLab