2 Commits
Author SHA1 Message Date
gisle 293102c1c6 add more logging and update irc code.
continuous-integration/drone/push Build is passing
2020-07-20 21:14:49 +02:00
gisle de04d6069b simply and hopefully fix channel leave/join
continuous-integration/drone/push Build is passing
2020-07-20 20:40:55 +02:00
4 changed files with 43 additions and 36 deletions
+1 -1
View File
@@ -4,5 +4,5 @@ go 1.13
require ( require (
github.com/dgrijalva/jwt-go v3.2.0+incompatible github.com/dgrijalva/jwt-go v3.2.0+incompatible
github.com/gissleh/irc v0.0.0-20200720173331-512ba5aa6fca github.com/gissleh/irc v0.0.0-20200720191144-af5dc31ff33d
) )
+2
View File
@@ -2,3 +2,5 @@ github.com/dgrijalva/jwt-go v3.2.0+incompatible h1:7qlOGliEKZXTDg6OTjfoBKDXWrumC
github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ=
github.com/gissleh/irc v0.0.0-20200720173331-512ba5aa6fca h1:vTL3kM7PkVnTy77i2/ewaC0VDmSEF7sAOMDTNIs6rKY= github.com/gissleh/irc v0.0.0-20200720173331-512ba5aa6fca h1:vTL3kM7PkVnTy77i2/ewaC0VDmSEF7sAOMDTNIs6rKY=
github.com/gissleh/irc v0.0.0-20200720173331-512ba5aa6fca/go.mod h1:h2/fPlbnb11gFpitk0HGxYLgK+bCKGh55QSYNo36X8M= github.com/gissleh/irc v0.0.0-20200720173331-512ba5aa6fca/go.mod h1:h2/fPlbnb11gFpitk0HGxYLgK+bCKGh55QSYNo36X8M=
github.com/gissleh/irc v0.0.0-20200720191144-af5dc31ff33d h1:PbjXoijU290Y6qTD/LM9yyFTWgX8iJtPMQ4Adwsn954=
github.com/gissleh/irc v0.0.0-20200720191144-af5dc31ff33d/go.mod h1:h2/fPlbnb11gFpitk0HGxYLgK+bCKGh55QSYNo36X8M=
+23 -32
View File
@@ -6,9 +6,8 @@ import (
"strings" "strings"
"time" "time"
"github.com/gissleh/irc"
"git.aiterp.net/rpdata/logbot3/internal/models"
"git.aiterp.net/rpdata/logbot3/internal/models/channels" "git.aiterp.net/rpdata/logbot3/internal/models/channels"
"github.com/gissleh/irc"
) )
var botKey = "git.aiterp.net/rpdata/logbot.Bot.key" var botKey = "git.aiterp.net/rpdata/logbot.Bot.key"
@@ -118,45 +117,37 @@ func (bot *Bot) runCommands(commands []string, target irc.Target, replacers map[
func (bot *Bot) loop() { func (bot *Bot) loop() {
bot.loopCtx, bot.loopCancel = context.WithCancel(bot.ctx) bot.loopCtx, bot.loopCancel = context.WithCancel(bot.ctx)
channelChanges, err := channels.SubscribeLogged(bot.ctx) ticker := time.NewTicker(time.Second * 10)
if err != nil { defer ticker.Stop()
log.Println("Failed to get channel changes:", err)
return
}
for { for {
select { select {
case channel := <-channelChanges: case <-ticker.C:
{ {
channels := []models.Channel{channel} loggedChannels, err := channels.ListLogged(bot.ctx)
deadline := time.After(time.Second * 1) if err != nil {
buffering := true log.Println("Failed to list logged channels:", err)
for buffering { continue
select {
case channel := <-channelChanges:
channels = append(channels, channel)
case <-deadline:
buffering = false
} }
loggedMap := make(map[string]bool)
for _, channel := range loggedChannels {
loggedMap[channel.Name] = true
}
clientMap := make(map[string]bool)
for _, channel := range bot.client.Channels() {
clientMap[channel.Name()] = true
} }
decisions := make(map[string]bool) joins := make([]string, 0, len(loggedMap))
for _, channel := range channels { parts := make([]string, 0, len(clientMap))
decisions[channel.Name] = channel.Logged for key := range loggedMap {
if !clientMap[key] {
joins = append(joins, key)
} }
joins := make([]string, 0, len(decisions))
parts := make([]string, 0, len(decisions))
for channelName, logged := range decisions {
if logged {
if bot.client.Channel(channelName) != nil {
continue
} }
joins = append(joins, channelName) for key := range clientMap {
} else { if !loggedMap[key] {
if bot.client.Channel(channelName) == nil { parts = append(parts, key)
continue
}
parts = append(parts, channelName)
} }
} }
+15 -1
View File
@@ -31,7 +31,17 @@ func handler(event *irc.Event, client *irc.Client) {
bot.stopLoop() bot.stopLoop()
conf := config.Get().Server conf := config.Get().Server
go bot.Connect(conf.Address, conf.SSL, 0) go bot.Connect(conf.Address, conf.SSL, 100)
}
// Log Connections
case "client.connecting":
{
log.Println("Client is connecting...")
}
case "client.connect":
{
log.Println("Client connected!")
} }
// Log joins and leaves // Log joins and leaves
@@ -133,6 +143,10 @@ func handler(event *irc.Event, client *irc.Client) {
} }
} }
if event.Kind() == "error" {
log.Printf("Client Error (%s) %s\n", event.Verb(), event.Text)
}
// Always log error numerics. // Always log error numerics.
if len(event.Verb()) == 3 && event.Verb()[0] == '4' || event.Verb()[0] == '9' { if len(event.Verb()) == 3 && event.Verb()[0] == '4' || event.Verb()[0] == '9' {
log.Printf("(%s) %s %s\n", event.Verb(), strings.Join(event.Args, " "), event.Text) log.Printf("(%s) %s %s\n", event.Verb(), strings.Join(event.Args, " "), event.Text)