Last active 1742989531 Unlisted

cqql.go Raw
1package main
2
3import (
4 "errors"
5 "fmt"
6 "image"
7 "image/png"
8 "net/http"
9 "os"
10 "time"
11)
12
13func main() {
14 f, err := os.Open("img.png")
15 if err != nil {
16 panic(err)
17 }
18
19 img, err := png.Decode(f)
20 if err != nil {
21 panic(err)
22 }
23
24 for {
25 <-time.After(5 * time.Second)
26
27 if err := draw(img); err != nil {
28 fmt.Println(err)
29 }
30 }
31}
32
33func draw(img image.Image) error {
34 req, err := http.NewRequest("GET", "https://cqql.site/chaosbtn", nil)
35 if err != nil {
36 return err
37 }
38
39 res, err := http.DefaultClient.Do(req)
40 if err != nil {
41 return err
42 }
43 defer res.Body.Close()
44
45 if res.StatusCode != 200 {
46 return errors.New("could not fetch current button state")
47 }
48
49 currentState, err := png.Decode(res.Body)
50 if err != nil {
51 return err
52 }
53
54 for x := 0; x < 88; x++ {
55 for y := 0; y < 31; y++ {
56 r, g, b, _ := img.At(x, y).RGBA()
57 curR, curG, curB, _ := currentState.At(x, y).RGBA()
58
59 if r == curR && g == curG && b == curB {
60 fmt.Printf("skip [%02d,%02d]\n", x, y)
61 continue
62 }
63
64 uri := fmt.Sprintf("https://cqql.site/chaosbtn/draw?x=%d&y=%d&r=%d&g=%d&b=%d", x, y, r/257, g/257, b/257)
65 fmt.Printf("send [%02d,%02d] [%03d %03d %03d]\n", x, y, r/257, g/257, b/257)
66
67 req, err := http.NewRequest("GET", uri, nil)
68 if err != nil {
69 return err
70 }
71
72 _, err = http.DefaultClient.Do(req)
73 if err != nil {
74 return err
75 }
76 }
77 }
78
79 return nil
80}
81