implement bot
This commit is contained in:
parent
40408f54ec
commit
1beb950e13
8
go.mod
8
go.mod
@ -2,4 +2,10 @@ module mazesolver
|
|||||||
|
|
||||||
go 1.23.5
|
go 1.23.5
|
||||||
|
|
||||||
require golang.org/x/image v0.23.0 // indirect
|
require (
|
||||||
|
github.com/bwmarrin/discordgo v0.28.1 // indirect
|
||||||
|
github.com/gorilla/websocket v1.4.2 // indirect
|
||||||
|
golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b // indirect
|
||||||
|
golang.org/x/image v0.23.0 // indirect
|
||||||
|
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68 // indirect
|
||||||
|
)
|
||||||
|
12
go.sum
12
go.sum
@ -1,2 +1,14 @@
|
|||||||
|
github.com/bwmarrin/discordgo v0.28.1 h1:gXsuo2GBO7NbR6uqmrrBDplPUx2T3nzu775q/Rd1aG4=
|
||||||
|
github.com/bwmarrin/discordgo v0.28.1/go.mod h1:NJZpH+1AfhIcyQsPeuBKsUtYrRnjkyu0kIVMCHkZtRY=
|
||||||
|
github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc=
|
||||||
|
github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
|
||||||
|
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/image v0.23.0 h1:HseQ7c2OpPKTPVzNjG5fwJsOTCiiwS4QdsYi5XU6H68=
|
golang.org/x/image v0.23.0 h1:HseQ7c2OpPKTPVzNjG5fwJsOTCiiwS4QdsYi5XU6H68=
|
||||||
golang.org/x/image v0.23.0/go.mod h1:wJJBTdLfCCf3tiHa1fNxpZmUI4mmoZvwMCPP0ddoNKY=
|
golang.org/x/image v0.23.0/go.mod h1:wJJBTdLfCCf3tiHa1fNxpZmUI4mmoZvwMCPP0ddoNKY=
|
||||||
|
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
|
||||||
|
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68 h1:nxC68pudNYkKU6jWhgrqdreuFiOQWj1Fs7T3VrH4Pjw=
|
||||||
|
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
|
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=
|
||||||
|
121
internal/bot/bot.go
Normal file
121
internal/bot/bot.go
Normal file
@ -0,0 +1,121 @@
|
|||||||
|
package bot
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"log"
|
||||||
|
getMaze "mazesolver/internal/getmaze"
|
||||||
|
"mazesolver/internal/outputmaze"
|
||||||
|
"mazesolver/internal/solvemaze"
|
||||||
|
"os"
|
||||||
|
"os/signal"
|
||||||
|
|
||||||
|
"github.com/bwmarrin/discordgo"
|
||||||
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
appId = "1335044960898252830"
|
||||||
|
guildId = ""
|
||||||
|
)
|
||||||
|
|
||||||
|
func Run(BotToken string) {
|
||||||
|
discord, err := discordgo.New(("Bot " + BotToken))
|
||||||
|
if err != nil { fmt.Println("Bot 1"); log.Fatal(err) }
|
||||||
|
|
||||||
|
_, err = discord.ApplicationCommandBulkOverwrite(appId, guildId, []*discordgo.ApplicationCommand {
|
||||||
|
{
|
||||||
|
Name: "solve-maze",
|
||||||
|
Description: "solve one of tilley's mazes",
|
||||||
|
Options: []*discordgo.ApplicationCommandOption {
|
||||||
|
{
|
||||||
|
Type: discordgo.ApplicationCommandOptionString,
|
||||||
|
Name: "image-link",
|
||||||
|
Description: "link to maze image",
|
||||||
|
Required: true,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
)
|
||||||
|
if err != nil { fmt.Println("Bot 2"); log.Fatal(err) }
|
||||||
|
|
||||||
|
discord.AddHandler(func (
|
||||||
|
s *discordgo.Session,
|
||||||
|
i *discordgo.InteractionCreate,
|
||||||
|
) {
|
||||||
|
if i.Type == discordgo.InteractionApplicationCommand {
|
||||||
|
data := i.ApplicationCommandData()
|
||||||
|
responseData := ""
|
||||||
|
if i.Interaction.Member.User.ID == s.State.User.ID { return; }
|
||||||
|
|
||||||
|
switch data.Name {
|
||||||
|
case "solve-maze":
|
||||||
|
maze, err := getMaze.GetMaze(i.ApplicationCommandData().Options[0].Value.(string))
|
||||||
|
if err != nil {
|
||||||
|
responseData = "You must provide an image! Select the maze, click \"open in browser\", and copy the link of the image"
|
||||||
|
} else {
|
||||||
|
if (len(maze) < 1) {
|
||||||
|
responseData = "You must provide an image! Select the maze, click \"open in browser\", and copy the link of the image"
|
||||||
|
} else {
|
||||||
|
points := solvemaze.FindPath(maze)
|
||||||
|
if (len(points) < 1) {
|
||||||
|
responseData = "You must provide an image! Select the maze, click \"open in browser\", and copy the link of the image"
|
||||||
|
} else {
|
||||||
|
outputmaze.EditMaze(points, "/tmp/maze.png", "/tmp/outputmaze.png")
|
||||||
|
}}}}
|
||||||
|
|
||||||
|
if responseData != "" {
|
||||||
|
err = s.InteractionRespond(
|
||||||
|
i.Interaction,
|
||||||
|
&discordgo.InteractionResponse{
|
||||||
|
Type: discordgo.InteractionResponseChannelMessageWithSource,
|
||||||
|
Data: &discordgo.InteractionResponseData{
|
||||||
|
Flags: 1 << 6,
|
||||||
|
Content: responseData,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
)
|
||||||
|
}
|
||||||
|
fileName := "/tmp/outputmaze.png"
|
||||||
|
f, err := os.Open(fileName)
|
||||||
|
defer f.Close()
|
||||||
|
err = s.InteractionRespond(
|
||||||
|
i.Interaction,
|
||||||
|
&discordgo.InteractionResponse{
|
||||||
|
Type: discordgo.InteractionResponseChannelMessageWithSource,
|
||||||
|
Data: &discordgo.InteractionResponseData{
|
||||||
|
Files: []*discordgo.File{
|
||||||
|
&discordgo.File{
|
||||||
|
Name: fileName,
|
||||||
|
Reader: f,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
discord.AddHandler( func(
|
||||||
|
s *discordgo.Session,
|
||||||
|
m *discordgo.MessageCreate,
|
||||||
|
) {
|
||||||
|
listOfGuilds := discord.State.Guilds
|
||||||
|
for _, v := range listOfGuilds {
|
||||||
|
fmt.Println(v.Name)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
err = discord.Open()
|
||||||
|
if err != nil { log.Fatal(err) }
|
||||||
|
|
||||||
|
stop := make (chan os.Signal, 1)
|
||||||
|
signal.Notify(stop, os.Interrupt)
|
||||||
|
log.Println("Press Ctrl+C to Exit")
|
||||||
|
<-stop
|
||||||
|
|
||||||
|
err = discord.Close()
|
||||||
|
if err != nil { log.Fatal(err) }
|
||||||
|
}
|
@ -5,6 +5,8 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"image/color"
|
"image/color"
|
||||||
"image/png"
|
"image/png"
|
||||||
|
"io"
|
||||||
|
"net/http"
|
||||||
"os"
|
"os"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -27,13 +29,33 @@ type Maze [][]Point
|
|||||||
func GetMaze(imagepath string) (Maze, error) {
|
func GetMaze(imagepath string) (Maze, error) {
|
||||||
returnMaze := *new(Maze)
|
returnMaze := *new(Maze)
|
||||||
|
|
||||||
imagereader, err := os.Open(imagepath)
|
res, err := http.Get(imagepath)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return *new(Maze), err
|
return returnMaze, err
|
||||||
|
}
|
||||||
|
|
||||||
|
data, err := io.ReadAll(res.Body)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
return returnMaze, err
|
||||||
|
}
|
||||||
|
|
||||||
|
defer res.Body.Close()
|
||||||
|
|
||||||
|
err = os.WriteFile("/tmp/maze.png", data, 0755)
|
||||||
|
if err != nil {
|
||||||
|
return returnMaze, err
|
||||||
|
}
|
||||||
|
|
||||||
|
imagereader, err := os.Open("/tmp/maze.png")
|
||||||
|
if err != nil {
|
||||||
|
return returnMaze, err
|
||||||
}
|
}
|
||||||
|
|
||||||
image, err := png.Decode(imagereader)
|
image, err := png.Decode(imagereader)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
fmt.Println("Here")
|
||||||
return *new(Maze), err
|
return *new(Maze), err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,29 +1,18 @@
|
|||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"flag"
|
||||||
"log"
|
"mazesolver/internal/bot"
|
||||||
getMaze "mazesolver/internal/getmaze"
|
|
||||||
"mazesolver/internal/outputmaze"
|
|
||||||
"mazesolver/internal/solvemaze"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
func main() {
|
var BotToken string
|
||||||
path := "/tmp/maze.png"
|
|
||||||
maze, err := getMaze.GetMaze(path)
|
|
||||||
if err != nil {
|
|
||||||
log.Fatal(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
p := solvemaze.FindPath(maze)
|
func init() {
|
||||||
if err != nil {
|
flag.StringVar(&BotToken, "bottoken", "", "discord bot token")
|
||||||
log.Fatal(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
newpath := "/tmp/outputmaze.png"
|
flag.Parse()
|
||||||
_, err = outputmaze.EditMaze(p, path, newpath)
|
}
|
||||||
if err != nil {
|
|
||||||
log.Fatal(err)
|
func main() {
|
||||||
}
|
bot.Run(BotToken)
|
||||||
fmt.Println(newpath)
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user