Mercurial > public > pacobot
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 } |