Last active 1742989531 Unlisted

sn0w's Avatar sn0w revised this gist 1742989531. Go to revision

1 file changed, 80 insertions

cqql.go(file created)

@@ -0,0 +1,80 @@
1 + package main
2 +
3 + import (
4 + "errors"
5 + "fmt"
6 + "image"
7 + "image/png"
8 + "net/http"
9 + "os"
10 + "time"
11 + )
12 +
13 + func 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 +
33 + func 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 + }
Newer Older