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