sn0w revised this gist . 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