comparison bot/bot.go @ 10:5c124578fed2

fix timer bug
author Dennis C. M. <dennis@denniscm.com>
date Sat, 15 Mar 2025 17:03:53 +0000
parents e9df3bb010f4
children
comparison
equal deleted inserted replaced
9:228ab74e8321 10:5c124578fed2
1 package bot 1 package bot
2 2
3 import ( 3 import (
4 "fmt"
5 "log" 4 "log"
6 "os"
7 "strconv" 5 "strconv"
8 "time"
9 ) 6 )
10
11 var quitTimer chan bool
12 7
13 func HandleCmd(cmd []string) { 8 func HandleCmd(cmd []string) {
14 cmdReceived := cmd[0] 9 cmdReceived := cmd[0]
15 log.Printf("bot: %s command received", cmdReceived) 10 log.Printf("bot: %s command received", cmdReceived)
16 11
17 switch cmdReceived { 12 switch cmdReceived {
18 case "timer": 13 case "timer":
19 seconds, err := strconv.Atoi(cmd[1]) 14 seconds, err := strconv.Atoi(cmd[1])
20 15
21 if err != nil { 16 if err != nil {
22 log.Fatal("err: invalid command arguments") 17 log.Fatal("bot: invalid command arguments")
23 } 18 }
24 19
25 if quitTimer != nil { 20 startTimer(seconds)
26 quitTimer <- true
27
28 }
29
30 quitTimer = make(chan bool)
31
32 go func() {
33 filename := "F:/Media/Twitch/Bot/timer.txt"
34
35 file, err := os.Create(filename)
36
37 if err != nil {
38 log.Fatal(err)
39 }
40
41 defer file.Close()
42
43 countdown := time.Duration(seconds) * time.Second
44 ticker := time.NewTicker(time.Second)
45 defer ticker.Stop()
46
47 log.Printf("bot: timer started with duration %d seconds", seconds)
48
49 for countdown > 0 {
50 select {
51 case <-ticker.C:
52 totalSeconds := int(countdown.Seconds())
53 minutes := totalSeconds / 60
54 seconds := totalSeconds % 60
55 countdownMsg := fmt.Sprintf("%02d:%02d", minutes, seconds)
56
57 file.Seek(0, 0)
58 _, err = file.WriteString("")
59
60 if err != nil {
61 log.Fatal(err)
62 }
63
64 _, err = file.WriteString(countdownMsg)
65
66 if err != nil {
67 log.Fatal(err)
68 }
69
70 log.Printf("bot: timer updated to %s", countdownMsg)
71
72 countdown -= time.Second
73 case <-quitTimer:
74 file.Seek(0, 0)
75 _, err = file.WriteString("")
76
77 if err != nil {
78 log.Fatal(err)
79 }
80
81 log.Println("bot: timer stopped")
82
83 return
84 }
85 }
86 }()
87 } 21 }
88 } 22 }