Mercurial > public > pacobot
diff bot/bot.go @ 8:e9df3bb010f4
fix issues
author | Dennis C. M. <dennis@denniscm.com> |
---|---|
date | Thu, 13 Mar 2025 17:41:42 +0000 |
parents | |
children | 5c124578fed2 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/bot/bot.go Thu Mar 13 17:41:42 2025 +0000 @@ -0,0 +1,88 @@ +package bot + +import ( + "fmt" + "log" + "os" + "strconv" + "time" +) + +var quitTimer chan bool + +func HandleCmd(cmd []string) { + cmdReceived := cmd[0] + log.Printf("bot: %s command received", cmdReceived) + + switch cmdReceived { + case "timer": + seconds, err := strconv.Atoi(cmd[1]) + + if err != nil { + log.Fatal("err: invalid command arguments") + } + + if quitTimer != nil { + quitTimer <- true + + } + + quitTimer = make(chan bool) + + go func() { + filename := "F:/Media/Twitch/Bot/timer.txt" + + file, err := os.Create(filename) + + if err != nil { + log.Fatal(err) + } + + defer file.Close() + + countdown := time.Duration(seconds) * time.Second + ticker := time.NewTicker(time.Second) + defer ticker.Stop() + + log.Printf("bot: timer started with duration %d seconds", seconds) + + for countdown > 0 { + select { + case <-ticker.C: + totalSeconds := int(countdown.Seconds()) + minutes := totalSeconds / 60 + seconds := totalSeconds % 60 + countdownMsg := fmt.Sprintf("%02d:%02d", minutes, seconds) + + file.Seek(0, 0) + _, err = file.WriteString("") + + if err != nil { + log.Fatal(err) + } + + _, err = file.WriteString(countdownMsg) + + if err != nil { + log.Fatal(err) + } + + log.Printf("bot: timer updated to %s", countdownMsg) + + countdown -= time.Second + case <-quitTimer: + file.Seek(0, 0) + _, err = file.WriteString("") + + if err != nil { + log.Fatal(err) + } + + log.Println("bot: timer stopped") + + return + } + } + }() + } +}