From e4c92920e627b7ad17f51637f52ca36e8468341f Mon Sep 17 00:00:00 2001 From: ilotterytea Date: Tue, 14 Oct 2025 16:46:58 +0500 Subject: feat: join channels in goroutine --- internal/channel.go | 59 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 internal/channel.go (limited to 'internal/channel.go') diff --git a/internal/channel.go b/internal/channel.go new file mode 100644 index 0000000..c6100c5 --- /dev/null +++ b/internal/channel.go @@ -0,0 +1,59 @@ +package stats + +import ( + "log" + "slices" + "time" + + "github.com/gempir/go-twitch-irc" +) + +type Channel struct { + id string + name string +} + +func NewChannel(id string, name string) Channel { + c := Channel{ + id: id, + name: name, + } + + return c +} + +func (c *Channel) HandleMessageEvent(sender twitch.User, message twitch.Message, db *DatabaseConnection) { +} + +func JoinChannels(channels *[]Channel, client *twitch.Client, db *DatabaseConnection) { + for { + cc, _ := db.Query("SELECT alias_id, alias_name FROM channels WHERE opted_out_at IS NULL") + + for _, c := range cc { + if slices.ContainsFunc(*channels, func(c2 Channel) bool { + return c2.name == c["alias_name"] + }) { + continue + } + + log.Printf("Joining #%s...\n", c["alias_name"]) + client.Join(c["alias_name"]) + *channels = append(*channels, NewChannel(c["alias_id"], c["alias_name"])) + } + + for _, c := range *channels { + if !slices.ContainsFunc(cc, func(x map[string]string) bool { + return x["alias_name"] == c.name + }) { + log.Printf("Parting #%s...\n", c.name) + client.Depart(c.name) + + *channels = slices.DeleteFunc(*channels, func(c2 Channel) bool { + return c2.name == c.name + }) + } + } + + time.Sleep(5 * time.Second) + } +} -- cgit v1.2.3