8
|
1 package bot
|
|
2
|
|
3 import (
|
|
4 "fmt"
|
|
5 "log"
|
|
6 "os"
|
|
7 "strconv"
|
|
8 "time"
|
|
9 )
|
|
10
|
|
11 var quitTimer chan bool
|
|
12
|
|
13 func HandleCmd(cmd []string) {
|
|
14 cmdReceived := cmd[0]
|
|
15 log.Printf("bot: %s command received", cmdReceived)
|
|
16
|
|
17 switch cmdReceived {
|
|
18 case "timer":
|
|
19 seconds, err := strconv.Atoi(cmd[1])
|
|
20
|
|
21 if err != nil {
|
|
22 log.Fatal("err: invalid command arguments")
|
|
23 }
|
|
24
|
|
25 if quitTimer != nil {
|
|
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 }
|
|
88 }
|