aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFuwn <[email protected]>2021-07-05 20:39:35 -0700
committerFuwn <[email protected]>2021-07-05 20:39:35 -0700
commitf108736bebae3dee42c0526e6a6d860455c422ae (patch)
tree85de064e4a8955797168f05bf8eba5143add6989
parentdocs(utilities): add stackoverflow link to signal handler (diff)
downloadmunch-f108736bebae3dee42c0526e6a6d860455c422ae.tar.xz
munch-f108736bebae3dee42c0526e6a6d860455c422ae.zip
feat(discord): rewrite in discordgo and migrate to application commands
-rw-r--r--config.example.yml6
-rw-r--r--go.mod2
-rw-r--r--go.sum8
-rw-r--r--pkg/discord/bot.go24
-rw-r--r--pkg/discord/commands.go48
-rw-r--r--pkg/discord/discord.go19
-rw-r--r--pkg/discord/handler.go18
7 files changed, 102 insertions, 23 deletions
diff --git a/config.example.yml b/config.example.yml
index c8b2831..dafa248 100644
--- a/config.example.yml
+++ b/config.example.yml
@@ -12,5 +12,9 @@ worlds:
discord:
enable: true
- token: SoMetOKen22
+
+ account:
+ token: SoMetOKen22
+ app_id: 861756414082678794
+
prefix: m~
diff --git a/go.mod b/go.mod
index bfaf189..95746c7 100644
--- a/go.mod
+++ b/go.mod
@@ -3,6 +3,6 @@ module github.com/Whirlsplash/munch
go 1.16
require (
- github.com/diamondburned/arikawa/v2 v2.1.0
+ github.com/bwmarrin/discordgo v0.23.3-0.20210627161652-421e14965030
github.com/spf13/viper v1.8.1
)
diff --git a/go.sum b/go.sum
index 1628de7..97a1cf7 100644
--- a/go.sum
+++ b/go.sum
@@ -45,6 +45,10 @@ github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmV
github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8=
github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs=
github.com/bketelsen/crypt v0.0.4/go.mod h1:aI6NrJ0pMGgvZKL1iVgXLnfIFJtfV+bKCoqOes/6LfM=
+github.com/bwmarrin/discordgo v0.23.2 h1:BzrtTktixGHIu9Tt7dEE6diysEF9HWnXeHuoJEt2fH4=
+github.com/bwmarrin/discordgo v0.23.2/go.mod h1:c1WtWUGN6nREDmzIpyTp/iD3VYt4Fpx+bVyfBG7JE+M=
+github.com/bwmarrin/discordgo v0.23.3-0.20210627161652-421e14965030 h1:JgAlPJlCqsrUqXcClndnvF6LOjV528hpU/l5YzN++PA=
+github.com/bwmarrin/discordgo v0.23.3-0.20210627161652-421e14965030/go.mod h1:NJZpH+1AfhIcyQsPeuBKsUtYrRnjkyu0kIVMCHkZtRY=
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI=
github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI=
@@ -148,6 +152,7 @@ github.com/gorilla/schema v1.1.0 h1:CamqUDOFUBqzrvxuz2vEwo8+SUdwsluFh7IlzJh30LY=
github.com/gorilla/schema v1.1.0/go.mod h1:kgLaKoK1FELgZqMAVxx/5cbj0kT+57qxUrAlIO2eleU=
github.com/gorilla/schema v1.2.0 h1:YufUaxZYCKGFuAq3c96BOhjgd5nmXiOY9NGzF247Tsc=
github.com/gorilla/schema v1.2.0/go.mod h1:kgLaKoK1FELgZqMAVxx/5cbj0kT+57qxUrAlIO2eleU=
+github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ=
github.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc=
github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
@@ -266,6 +271,7 @@ go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/
go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU=
go.uber.org/zap v1.17.0/go.mod h1:MXVU+bhUf/A7Xi2HNOnopQOrmycQ5Ih87HtOu4q5SSo=
golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
+golang.org/x/crypto v0.0.0-20181030102418-4d3f4d9ffa16/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
@@ -276,6 +282,8 @@ golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9 h1:psW17arqaxU48Z5kZ0CQnk
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20201016220609-9e8e0b390897 h1:pLI5jrR7OSLijeIDcmRxNmw2api+jEfxLoykJVice/E=
golang.org/x/crypto v0.0.0-20201016220609-9e8e0b390897/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
+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/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
diff --git a/pkg/discord/bot.go b/pkg/discord/bot.go
new file mode 100644
index 0000000..d6cd6ff
--- /dev/null
+++ b/pkg/discord/bot.go
@@ -0,0 +1,24 @@
+package discord
+
+import (
+ "github.com/bwmarrin/discordgo"
+ "github.com/spf13/viper"
+ "log"
+)
+
+var s *discordgo.Session
+
+func SetupBot() {
+ var err error
+ s, err = discordgo.New("Bot " + viper.GetString("discord.account.token"))
+ if err != nil {
+ log.Fatalln("Unable to start Munch:", err)
+ }
+
+ SetupHandler()
+
+ if err := s.Open(); err != nil {
+ log.Fatalln("Unable to connect to Discord gateway:", err)
+ }
+ defer s.Close()
+}
diff --git a/pkg/discord/commands.go b/pkg/discord/commands.go
index 3883db6..d306668 100644
--- a/pkg/discord/commands.go
+++ b/pkg/discord/commands.go
@@ -4,14 +4,50 @@
package discord
import (
- "github.com/diamondburned/arikawa/v2/bot"
- "github.com/diamondburned/arikawa/v2/gateway"
+ "github.com/bwmarrin/discordgo"
+ "log"
)
-type Bot struct {
- Ctx *bot.Context
+var (
+ commands = []*discordgo.ApplicationCommand{
+ {
+ Name: "ping",
+ Description: "Pong!",
+ },
+ }
+ commandHandlers = map[string]func(s *discordgo.Session, i *discordgo.InteractionCreate){
+ "ping": func(s *discordgo.Session, i *discordgo.InteractionCreate) {
+ s.InteractionRespond(i.Interaction, &discordgo.InteractionResponse{
+ Type: discordgo.InteractionResponseChannelMessageWithSource,
+ Data: &discordgo.InteractionResponseData{
+ Content: "Pong!",
+ },
+ })
+ },
+ }
+)
+
+func CleanupCommands() {
+ cmds, err := s.ApplicationCommands(s.State.User.ID, "")
+ if err != nil {
+ log.Panicln("Unable to obtain applications commands:", err)
+ }
+
+ for _, e := range cmds {
+ if err := s.ApplicationCommandDelete(s.State.User.ID, "", e.ID); err != nil {
+ log.Panicf("Cannot delete command '%v': %v", e.Name, err)
+ } else {
+ log.Printf("Deleted command '%v'", e.Name)
+ }
+ }
}
-func (bot *Bot) Ping(*gateway.MessageCreateEvent) (string, error) {
- return "Pong!", nil
+func SetupCommands() {
+ for _, v := range commands {
+ if _, err := s.ApplicationCommandCreate(s.State.User.ID, "", v); err != nil {
+ log.Panicf("Cannot create command '%v': %v", v.Name, err)
+ } else {
+ log.Printf("Created command '%v'", v.Name)
+ }
+ }
}
diff --git a/pkg/discord/discord.go b/pkg/discord/discord.go
index 27d2498..504ea60 100644
--- a/pkg/discord/discord.go
+++ b/pkg/discord/discord.go
@@ -3,21 +3,10 @@
package discord
-import (
- "github.com/diamondburned/arikawa/v2/bot"
- "github.com/spf13/viper"
-)
-
func Do() {
- commands := &Bot{}
-
- bot.Run(
- viper.GetString("discord.token"),
- commands,
- func(ctx *bot.Context) error {
- ctx.HasPrefix = bot.NewPrefix(viper.GetString("discord.prefix"))
+ SetupBot()
+ CleanupCommands()
+ SetupCommands()
- return nil
- },
- )
+ select {}
}
diff --git a/pkg/discord/handler.go b/pkg/discord/handler.go
new file mode 100644
index 0000000..f14388e
--- /dev/null
+++ b/pkg/discord/handler.go
@@ -0,0 +1,18 @@
+package discord
+
+import (
+ "github.com/bwmarrin/discordgo"
+ "log"
+)
+
+func SetupHandler() {
+ s.AddHandler(func(s *discordgo.Session, r *discordgo.Ready) {
+ log.Println(r.User.Username, "is live!")
+ })
+
+ s.AddHandler(func(s *discordgo.Session, i *discordgo.InteractionCreate) {
+ if h, ok := commandHandlers[i.ApplicationCommandData().Name]; ok {
+ h(s, i)
+ }
+ })
+}