First working version.

This commit is contained in:
Filip Strajnar 2024-06-10 21:51:37 +02:00
commit 2c4cd0c705
4 changed files with 149 additions and 0 deletions

2
.gitignore vendored Normal file
View file

@ -0,0 +1,2 @@
config.json
screenshot.png

17
go.mod Normal file
View file

@ -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
)

22
go.sum Normal file
View file

@ -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=

108
main.go Normal file
View file

@ -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)
}