From b469c8ddbda62ceecbd10883e4af1fbfe5d54898 Mon Sep 17 00:00:00 2001
From: Wim <wim@42.be>
Date: Sat, 8 Apr 2017 00:42:37 +0200
Subject: Rejoin channel when kicked (irc). Closes #146

---
 bridge/irc/irc.go | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

(limited to 'bridge/irc')

diff --git a/bridge/irc/irc.go b/bridge/irc/irc.go
index b1041f2a..8f72f0f7 100644
--- a/bridge/irc/irc.go
+++ b/bridge/irc/irc.go
@@ -167,14 +167,19 @@ func (b *Birc) handleNewConnection(event *irc.Event) {
 	i.AddCallback("JOIN", b.handleJoinPart)
 	i.AddCallback("PART", b.handleJoinPart)
 	i.AddCallback("QUIT", b.handleJoinPart)
+	i.AddCallback("KICK", b.handleJoinPart)
 	i.AddCallback("*", b.handleOther)
 	// we are now fully connected
 	b.connected <- struct{}{}
 }
 
 func (b *Birc) handleJoinPart(event *irc.Event) {
-	flog.Debugf("Sending JOIN_LEAVE event from %s to gateway", b.Account)
 	channel := event.Arguments[0]
+	if event.Code == "KICK" {
+		flog.Infof("Got kicked from %s by %s", channel, event.Nick)
+		b.Remote <- config.Message{Username: "system", Text: "rejoin", Channel: channel, Account: b.Account, Event: config.EVENT_REJOIN_CHANNELS}
+		return
+	}
 	if event.Code == "QUIT" {
 		if event.Nick == b.Nick && strings.Contains(event.Raw, "Ping timeout") {
 			flog.Infof("%s reconnecting ..", b.Account)
@@ -182,6 +187,7 @@ func (b *Birc) handleJoinPart(event *irc.Event) {
 			return
 		}
 	}
+	flog.Debugf("Sending JOIN_LEAVE event from %s to gateway", b.Account)
 	b.Remote <- config.Message{Username: "system", Text: event.Nick + " " + strings.ToLower(event.Code) + "s", Channel: channel, Account: b.Account, Event: config.EVENT_JOIN_LEAVE}
 	flog.Debugf("handle %#v", event)
 }
-- 
cgit v1.2.3