From 2c4cd0c705b21edef6957146e9aa272d1e2cd6a7 Mon Sep 17 00:00:00 2001 From: Filip Strajnar Date: Mon, 10 Jun 2024 21:51:37 +0200 Subject: [PATCH] First working version. --- .gitignore | 2 + go.mod | 17 +++++++++ go.sum | 22 +++++++++++ main.go | 108 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 149 insertions(+) create mode 100644 .gitignore create mode 100644 go.mod create mode 100644 go.sum create mode 100644 main.go diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..15b8421 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +config.json +screenshot.png \ No newline at end of file diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..402dfe1 --- /dev/null +++ b/go.mod @@ -0,0 +1,17 @@ +module goscreenshot + +go 1.21.10 + +require ( + github.com/bwmarrin/discordgo v0.28.1 + github.com/kbinani/screenshot v0.0.0-20230812210009-b87d31814237 +) + +require ( + github.com/gen2brain/shm v0.0.0-20230802011745-f2460f5984f7 // indirect + github.com/gorilla/websocket v1.4.2 // indirect + github.com/jezek/xgb v1.1.0 // indirect + github.com/lxn/win v0.0.0-20210218163916-a377121e959e // indirect + golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b // indirect + golang.org/x/sys v0.11.0 // indirect +) diff --git a/go.sum b/go.sum new file mode 100644 index 0000000..62ae46b --- /dev/null +++ b/go.sum @@ -0,0 +1,22 @@ +github.com/bwmarrin/discordgo v0.28.1 h1:gXsuo2GBO7NbR6uqmrrBDplPUx2T3nzu775q/Rd1aG4= +github.com/bwmarrin/discordgo v0.28.1/go.mod h1:NJZpH+1AfhIcyQsPeuBKsUtYrRnjkyu0kIVMCHkZtRY= +github.com/gen2brain/shm v0.0.0-20230802011745-f2460f5984f7 h1:VLEKvjGJYAMCXw0/32r9io61tEXnMWDRxMk+peyRVFc= +github.com/gen2brain/shm v0.0.0-20230802011745-f2460f5984f7/go.mod h1:uF6rMu/1nvu+5DpiRLwusA6xB8zlkNoGzKn8lmYONUo= +github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc= +github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= +github.com/jezek/xgb v1.1.0 h1:wnpxJzP1+rkbGclEkmwpVFQWpuE2PUGNUzP8SbfFobk= +github.com/jezek/xgb v1.1.0/go.mod h1:nrhwO0FX/enq75I7Y7G8iN1ubpSGZEiA3v9e9GyRFlk= +github.com/kbinani/screenshot v0.0.0-20230812210009-b87d31814237 h1:YOp8St+CM/AQ9Vp4XYm4272E77MptJDHkwypQHIRl9Q= +github.com/kbinani/screenshot v0.0.0-20230812210009-b87d31814237/go.mod h1:e7qQlOY68wOz4b82D7n+DdaptZAi+SHW0+yKiWZzEYE= +github.com/lxn/win v0.0.0-20210218163916-a377121e959e h1:H+t6A/QJMbhCSEH5rAuRxh+CtW96g0Or0Fxa9IKr4uc= +github.com/lxn/win v0.0.0-20210218163916-a377121e959e/go.mod h1:KxxjdtRkfNoYDCUP5ryK7XJJNTnpC8atvtmTheChOtk= +golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b h1:7mWr3k41Qtv8XlltBkDkl8LoP3mpSgBW8BUoxtEdbXg= +golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= +golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/sys v0.0.0-20201018230417-eeed37f84f13/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.11.0 h1:eG7RXZHdqOJ1i+0lgLgCpSXAp6M3LYlAo6osgSi0xOM= +golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= diff --git a/main.go b/main.go new file mode 100644 index 0000000..32008e4 --- /dev/null +++ b/main.go @@ -0,0 +1,108 @@ +package main + +import ( + "encoding/json" + "image/png" + "os" + "time" + + "github.com/bwmarrin/discordgo" + "github.com/kbinani/screenshot" +) + +const screenshot_path = "screenshot.png" +const config_path = "config.json" + +func GetConfig() (string, string, error) { + configFile, err := os.ReadFile(config_path) + + if err != nil { + panic(err) + } + + isValid := json.Valid(configFile) + + if !isValid { + println("Configuration in config.json is not valid JSON.") + panic(isValid) + } + + var config map[string]interface{} + + json.Unmarshal(configFile, &config) + + token := config["token"].(string) + channelId := config["channelId"].(string) + + return token, channelId, nil +} + +func SendScreenshots(discord *discordgo.Session, channelId string, sleepDuration time.Duration) { + for { + new_image, err := screenshot.CaptureDisplay(0) + + if err != nil { + panic(err) + } + + file, err := os.Create(screenshot_path) + + if err != nil { + panic(err) + } + + err = png.Encode(file, new_image) + + if err != nil { + panic(err) + } + + err = file.Close() + + if err != nil { + panic(err) + } + + file, err = os.Open(screenshot_path) + + if err != nil { + panic(err) + } + + _, err = discord.ChannelFileSend(channelId, screenshot_path, file) + + if err != nil { + panic(err) + } + + err = file.Close() + + if err != nil { + panic(err) + } + + time.Sleep(sleepDuration) + } +} + +func main() { + token, channelId, err := GetConfig() + + if err != nil { + panic(err) + } + + discord, err := discordgo.New("Bot " + token) + + if err != nil { + panic(err) + } + + sleepDuration, err := time.ParseDuration("3s") + + if err != nil { + panic(err) + } + + SendScreenshots(discord, channelId, sleepDuration) +}