summaryrefslogtreecommitdiff
path: root/internal/channel.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/channel.go')
-rw-r--r--internal/channel.go59
1 files changed, 59 insertions, 0 deletions
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)
+ }
+}