mirror of
https://github.com/cwinfo/matterbridge.git
synced 2024-11-22 11:40:27 +00:00
Rejoin channel when kicked (irc). Closes #146
This commit is contained in:
parent
eee0036c7f
commit
b469c8ddbd
@ -10,8 +10,9 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
EVENT_JOIN_LEAVE = "join_leave"
|
EVENT_JOIN_LEAVE = "join_leave"
|
||||||
EVENT_FAILURE = "failure"
|
EVENT_FAILURE = "failure"
|
||||||
|
EVENT_REJOIN_CHANNELS = "rejoin_channels"
|
||||||
)
|
)
|
||||||
|
|
||||||
type Message struct {
|
type Message struct {
|
||||||
|
@ -167,14 +167,19 @@ func (b *Birc) handleNewConnection(event *irc.Event) {
|
|||||||
i.AddCallback("JOIN", b.handleJoinPart)
|
i.AddCallback("JOIN", b.handleJoinPart)
|
||||||
i.AddCallback("PART", b.handleJoinPart)
|
i.AddCallback("PART", b.handleJoinPart)
|
||||||
i.AddCallback("QUIT", b.handleJoinPart)
|
i.AddCallback("QUIT", b.handleJoinPart)
|
||||||
|
i.AddCallback("KICK", b.handleJoinPart)
|
||||||
i.AddCallback("*", b.handleOther)
|
i.AddCallback("*", b.handleOther)
|
||||||
// we are now fully connected
|
// we are now fully connected
|
||||||
b.connected <- struct{}{}
|
b.connected <- struct{}{}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (b *Birc) handleJoinPart(event *irc.Event) {
|
func (b *Birc) handleJoinPart(event *irc.Event) {
|
||||||
flog.Debugf("Sending JOIN_LEAVE event from %s to gateway", b.Account)
|
|
||||||
channel := event.Arguments[0]
|
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.Code == "QUIT" {
|
||||||
if event.Nick == b.Nick && strings.Contains(event.Raw, "Ping timeout") {
|
if event.Nick == b.Nick && strings.Contains(event.Raw, "Ping timeout") {
|
||||||
flog.Infof("%s reconnecting ..", b.Account)
|
flog.Infof("%s reconnecting ..", b.Account)
|
||||||
@ -182,6 +187,7 @@ func (b *Birc) handleJoinPart(event *irc.Event) {
|
|||||||
return
|
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}
|
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)
|
flog.Debugf("handle %#v", event)
|
||||||
}
|
}
|
||||||
|
@ -103,6 +103,15 @@ func (gw *Gateway) handleReceive() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if msg.Event == config.EVENT_REJOIN_CHANNELS {
|
||||||
|
for _, br := range gw.Bridges {
|
||||||
|
if msg.Account == br.Account {
|
||||||
|
br.Joined = make(map[string]bool)
|
||||||
|
br.JoinChannels()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
continue
|
||||||
|
}
|
||||||
if !gw.ignoreMessage(&msg) {
|
if !gw.ignoreMessage(&msg) {
|
||||||
msg.Timestamp = time.Now()
|
msg.Timestamp = time.Now()
|
||||||
for _, br := range gw.Bridges {
|
for _, br := range gw.Bridges {
|
||||||
|
Loading…
Reference in New Issue
Block a user