fixed some rare boot looping
This commit is contained in:
@@ -12,7 +12,7 @@
|
|||||||
- `/cat` - Fetches a random cat picture.
|
- `/cat` - Fetches a random cat picture.
|
||||||
- `/dadjoke` - Retrieves a random dad joke.
|
- `/dadjoke` - Retrieves a random dad joke.
|
||||||
- `/ask` - Receive a gif response to your query, akin to an 8-ball.
|
- `/ask` - Receive a gif response to your query, akin to an 8-ball.
|
||||||
- `/ping` - Displays the bot's current ping.
|
- `/ping` - Displays the app's current ping.
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
|
46
cmd_pluginmanage.go
Normal file
46
cmd_pluginmanage.go
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/disgoorg/disgo/discord"
|
||||||
|
"github.com/disgoorg/disgo/events"
|
||||||
|
"github.com/disgoorg/json"
|
||||||
|
"github.com/sirupsen/logrus"
|
||||||
|
"github.com/vaporvee/acecore/custom"
|
||||||
|
"github.com/vaporvee/acecore/shared"
|
||||||
|
)
|
||||||
|
|
||||||
|
var cmd_pluginmanage shared.Command = shared.Command{
|
||||||
|
Definition: discord.SlashCommandCreate{
|
||||||
|
Name: "plugin",
|
||||||
|
Description: "Manage the plugins for this bot.",
|
||||||
|
DefaultMemberPermissions: json.NewNullablePtr(discord.PermissionAdministrator),
|
||||||
|
Options: []discord.ApplicationCommandOption{
|
||||||
|
&discord.ApplicationCommandOptionSubCommand{
|
||||||
|
Name: "list",
|
||||||
|
Description: "List all installed plugins for this bot.",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
Interact: func(e *events.ApplicationCommandInteractionCreate) {
|
||||||
|
app, err := e.Client().Rest().GetCurrentApplication()
|
||||||
|
if err != nil {
|
||||||
|
logrus.Error(err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if app.Owner.ID == e.User().ID {
|
||||||
|
switch *e.SlashCommandInteractionData().SubCommandName {
|
||||||
|
case "list":
|
||||||
|
var fields []discord.EmbedField
|
||||||
|
for _, name := range pluginNames {
|
||||||
|
fields = append(fields, discord.EmbedField{Name: name})
|
||||||
|
}
|
||||||
|
e.CreateMessage(discord.NewMessageCreateBuilder().
|
||||||
|
SetEmbeds(discord.NewEmbedBuilder().
|
||||||
|
SetTitle("Plugins").SetDescription("These are the currently installed plugins for this bot.").SetFields(fields...).SetColor(custom.GetColor("primary")).
|
||||||
|
Build()).SetEphemeral(true).Build())
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
e.CreateMessage(discord.NewMessageCreateBuilder().SetContent("You are not the owner of this bot.").SetEphemeral(true).Build())
|
||||||
|
}
|
||||||
|
},
|
||||||
|
}
|
@@ -1,4 +1,6 @@
|
|||||||
BOT_TOKEN="<Your bot token>"
|
BOT_TOKEN="<Your bot token>"
|
||||||
|
OWNER_GUILD="<Your bot manage guild id>"
|
||||||
|
OWNER_USER="<Your user id>"
|
||||||
DB_USER="postgres"
|
DB_USER="postgres"
|
||||||
DB_PASSWORD="<Your db password>"
|
DB_PASSWORD="<Your db password>"
|
||||||
DB_SERVER="localhost"
|
DB_SERVER="localhost"
|
||||||
|
2
go.mod
2
go.mod
@@ -3,7 +3,7 @@ module github.com/vaporvee/acecore
|
|||||||
go 1.22.1
|
go 1.22.1
|
||||||
|
|
||||||
require (
|
require (
|
||||||
github.com/disgoorg/disgo v0.18.2
|
github.com/disgoorg/disgo v0.18.7
|
||||||
github.com/disgoorg/json v1.1.0
|
github.com/disgoorg/json v1.1.0
|
||||||
github.com/disgoorg/snowflake/v2 v2.0.1
|
github.com/disgoorg/snowflake/v2 v2.0.1
|
||||||
github.com/google/uuid v1.6.0
|
github.com/google/uuid v1.6.0
|
||||||
|
2
go.sum
2
go.sum
@@ -3,6 +3,8 @@ github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c
|
|||||||
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||||
github.com/disgoorg/disgo v0.18.2 h1:pZCvaFamfHcnXrj0XA73qtVofP0R8dYEyQfPNgv8dLE=
|
github.com/disgoorg/disgo v0.18.2 h1:pZCvaFamfHcnXrj0XA73qtVofP0R8dYEyQfPNgv8dLE=
|
||||||
github.com/disgoorg/disgo v0.18.2/go.mod h1:gkl6DBdbKUvmOOJayWPSvS52KPN/8uJGJ2f13gCEB1o=
|
github.com/disgoorg/disgo v0.18.2/go.mod h1:gkl6DBdbKUvmOOJayWPSvS52KPN/8uJGJ2f13gCEB1o=
|
||||||
|
github.com/disgoorg/disgo v0.18.7 h1:Xg5eiOdSo+wR3CDMIPh9Vmykdkwk/rdcs00vhr2U6m0=
|
||||||
|
github.com/disgoorg/disgo v0.18.7/go.mod h1:gkl6DBdbKUvmOOJayWPSvS52KPN/8uJGJ2f13gCEB1o=
|
||||||
github.com/disgoorg/json v1.1.0 h1:7xigHvomlVA9PQw9bMGO02PHGJJPqvX5AnwlYg/Tnys=
|
github.com/disgoorg/json v1.1.0 h1:7xigHvomlVA9PQw9bMGO02PHGJJPqvX5AnwlYg/Tnys=
|
||||||
github.com/disgoorg/json v1.1.0/go.mod h1:BHDwdde0rpQFDVsRLKhma6Y7fTbQKub/zdGO5O9NqqA=
|
github.com/disgoorg/json v1.1.0/go.mod h1:BHDwdde0rpQFDVsRLKhma6Y7fTbQKub/zdGO5O9NqqA=
|
||||||
github.com/disgoorg/snowflake/v2 v2.0.1 h1:CuUxGLwggUxEswZOmZ+mZ5i0xSumQdXW9tXW7uGqe+0=
|
github.com/disgoorg/snowflake/v2 v2.0.1 h1:CuUxGLwggUxEswZOmZ+mZ5i0xSumQdXW9tXW7uGqe+0=
|
||||||
|
61
handlers.go
61
handlers.go
@@ -1,52 +1,16 @@
|
|||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
|
||||||
"os"
|
|
||||||
"slices"
|
"slices"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/disgoorg/disgo/bot"
|
|
||||||
"github.com/disgoorg/disgo/discord"
|
|
||||||
"github.com/disgoorg/disgo/events"
|
"github.com/disgoorg/disgo/events"
|
||||||
"github.com/sirupsen/logrus"
|
|
||||||
|
|
||||||
"github.com/vaporvee/acecore/shared"
|
"github.com/vaporvee/acecore/shared"
|
||||||
)
|
)
|
||||||
|
|
||||||
var commands []shared.Command
|
var commands []shared.Command
|
||||||
|
|
||||||
func ready(e *events.Ready) {
|
|
||||||
logrus.Info("Starting up...")
|
|
||||||
removeOldCommandFromAllGuilds(e.Client())
|
|
||||||
var existingCommandNames []string
|
|
||||||
existingCommands, err := e.Client().Rest().GetGlobalCommands(e.Client().ApplicationID(), false)
|
|
||||||
if err != nil {
|
|
||||||
logrus.Errorf("error fetching existing global commands: %v", err)
|
|
||||||
} else {
|
|
||||||
for _, existingCommand := range existingCommands {
|
|
||||||
existingCommandNames = append(existingCommandNames, existingCommand.Name())
|
|
||||||
}
|
|
||||||
}
|
|
||||||
globalCommands := []discord.ApplicationCommandCreate{}
|
|
||||||
for _, command := range commands {
|
|
||||||
if !slices.Contains(existingCommandNames, command.Definition.CommandName()) || slices.Contains(os.Args, "--update-all") || slices.Contains(os.Args, "--clean") {
|
|
||||||
globalCommands = append(globalCommands, command.Definition)
|
|
||||||
logrus.Infof("Appending command \"%s\"", command.Definition.CommandName())
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if len(globalCommands) > 0 {
|
|
||||||
logrus.Infof("Attempting to add global commands %s", fmt.Sprint(globalCommands))
|
|
||||||
_, err = e.Client().Rest().SetGlobalCommands(e.Client().ApplicationID(), globalCommands)
|
|
||||||
if err != nil {
|
|
||||||
logrus.Errorf("error creating global commands '%s'", err)
|
|
||||||
} else {
|
|
||||||
logrus.Infof("Added global commands sucessfully!")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
logrus.Info("Successfully started the Bot!")
|
|
||||||
}
|
|
||||||
|
|
||||||
func applicationCommandInteractionCreate(e *events.ApplicationCommandInteractionCreate) {
|
func applicationCommandInteractionCreate(e *events.ApplicationCommandInteractionCreate) {
|
||||||
for _, command := range commands {
|
for _, command := range commands {
|
||||||
if command.Interact != nil && e.Data.CommandName() == command.Definition.CommandName() {
|
if command.Interact != nil && e.Data.CommandName() == command.Definition.CommandName() {
|
||||||
@@ -106,28 +70,3 @@ func modalSubmitInteractionCreate(e *events.ModalSubmitInteractionCreate) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func removeOldCommandFromAllGuilds(c bot.Client) {
|
|
||||||
app, err := c.Rest().GetCurrentApplication()
|
|
||||||
if err != nil {
|
|
||||||
logrus.Error(err)
|
|
||||||
}
|
|
||||||
globalCommands, err := c.Rest().GetGlobalCommands(app.Bot.ID, false)
|
|
||||||
if err != nil {
|
|
||||||
logrus.Errorf("error fetching existing global commands: %v", err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
var commandNames []string
|
|
||||||
for _, command := range commands {
|
|
||||||
commandNames = append(commandNames, command.Definition.CommandName())
|
|
||||||
}
|
|
||||||
for _, existingCommand := range globalCommands {
|
|
||||||
if !slices.Contains(commandNames, existingCommand.Name()) {
|
|
||||||
logrus.Infof("Deleting command '%s'", existingCommand.Name())
|
|
||||||
err := c.Rest().DeleteGlobalCommand(c.ApplicationID(), existingCommand.ID())
|
|
||||||
if err != nil {
|
|
||||||
logrus.Errorf("error deleting command %s: %v", existingCommand.Name(), err)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
65
main.go
65
main.go
@@ -11,6 +11,7 @@ import (
|
|||||||
"path/filepath"
|
"path/filepath"
|
||||||
"plugin"
|
"plugin"
|
||||||
"runtime"
|
"runtime"
|
||||||
|
"slices"
|
||||||
"strconv"
|
"strconv"
|
||||||
"syscall"
|
"syscall"
|
||||||
"time"
|
"time"
|
||||||
@@ -19,6 +20,7 @@ import (
|
|||||||
|
|
||||||
"github.com/disgoorg/disgo"
|
"github.com/disgoorg/disgo"
|
||||||
"github.com/disgoorg/disgo/bot"
|
"github.com/disgoorg/disgo/bot"
|
||||||
|
"github.com/disgoorg/disgo/discord"
|
||||||
"github.com/disgoorg/disgo/gateway"
|
"github.com/disgoorg/disgo/gateway"
|
||||||
"github.com/joho/godotenv"
|
"github.com/joho/godotenv"
|
||||||
"github.com/sirupsen/logrus"
|
"github.com/sirupsen/logrus"
|
||||||
@@ -31,7 +33,7 @@ var (
|
|||||||
db *sql.DB
|
db *sql.DB
|
||||||
)
|
)
|
||||||
|
|
||||||
var listeners []func()
|
var pluginNames []string
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
logrusInitFile()
|
logrusInitFile()
|
||||||
@@ -47,7 +49,6 @@ func main() {
|
|||||||
logrus.Warn(err)
|
logrus.Warn(err)
|
||||||
}
|
}
|
||||||
shared.BotConfigs = append(shared.BotConfigs,
|
shared.BotConfigs = append(shared.BotConfigs,
|
||||||
bot.WithEventListenerFunc(ready),
|
|
||||||
bot.WithEventListenerFunc(applicationCommandInteractionCreate),
|
bot.WithEventListenerFunc(applicationCommandInteractionCreate),
|
||||||
bot.WithEventListenerFunc(autocompleteInteractionCreate),
|
bot.WithEventListenerFunc(autocompleteInteractionCreate),
|
||||||
bot.WithEventListenerFunc(componentInteractionCreate),
|
bot.WithEventListenerFunc(componentInteractionCreate),
|
||||||
@@ -80,6 +81,7 @@ func main() {
|
|||||||
logrus.Error(err)
|
logrus.Error(err)
|
||||||
}
|
}
|
||||||
logrus.Infof("Bot is now running as '%s'!", app.Bot.Username)
|
logrus.Infof("Bot is now running as '%s'!", app.Bot.Username)
|
||||||
|
registerCommands(client)
|
||||||
go web.HostRoutes(app.Bot.ID.String())
|
go web.HostRoutes(app.Bot.ID.String())
|
||||||
|
|
||||||
sc := make(chan os.Signal, 1)
|
sc := make(chan os.Signal, 1)
|
||||||
@@ -88,6 +90,62 @@ func main() {
|
|||||||
logrus.Info("Shutting down...")
|
logrus.Info("Shutting down...")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func registerCommands(c bot.Client) {
|
||||||
|
logrus.Info("Starting up...")
|
||||||
|
removeOldCommandFromAllGuilds(c)
|
||||||
|
var existingCommandNames []string
|
||||||
|
existingCommands, err := c.Rest().GetGlobalCommands(c.ApplicationID(), false)
|
||||||
|
if err != nil {
|
||||||
|
logrus.Errorf("error fetching existing global commands: %v", err)
|
||||||
|
} else {
|
||||||
|
for _, existingCommand := range existingCommands {
|
||||||
|
existingCommandNames = append(existingCommandNames, existingCommand.Name())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
globalCommands := []discord.ApplicationCommandCreate{}
|
||||||
|
for _, command := range commands {
|
||||||
|
if !slices.Contains(existingCommandNames, command.Definition.CommandName()) || slices.Contains(os.Args, "--update-all") || slices.Contains(os.Args, "--clean") {
|
||||||
|
globalCommands = append(globalCommands, command.Definition)
|
||||||
|
logrus.Infof("Appending command \"%s\"", command.Definition.CommandName())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if len(globalCommands) > 0 {
|
||||||
|
logrus.Infof("Attempting to add global commands %s", fmt.Sprint(globalCommands))
|
||||||
|
_, err = c.Rest().SetGlobalCommands(c.ApplicationID(), globalCommands)
|
||||||
|
if err != nil {
|
||||||
|
logrus.Errorf("error creating global commands '%s'", err)
|
||||||
|
} else {
|
||||||
|
logrus.Infof("Added global commands sucessfully!")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
logrus.Info("Successfully started the Bot!")
|
||||||
|
}
|
||||||
|
|
||||||
|
func removeOldCommandFromAllGuilds(c bot.Client) {
|
||||||
|
app, err := c.Rest().GetCurrentApplication()
|
||||||
|
if err != nil {
|
||||||
|
logrus.Error(err)
|
||||||
|
}
|
||||||
|
globalCommands, err := c.Rest().GetGlobalCommands(app.Bot.ID, false)
|
||||||
|
if err != nil {
|
||||||
|
logrus.Errorf("error fetching existing global commands: %v", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
var commandNames []string
|
||||||
|
for _, command := range commands {
|
||||||
|
commandNames = append(commandNames, command.Definition.CommandName())
|
||||||
|
}
|
||||||
|
for _, existingCommand := range globalCommands {
|
||||||
|
if !slices.Contains(commandNames, existingCommand.Name()) {
|
||||||
|
logrus.Infof("Deleting command '%s'", existingCommand.Name())
|
||||||
|
err := c.Rest().DeleteGlobalCommand(c.ApplicationID(), existingCommand.ID())
|
||||||
|
if err != nil {
|
||||||
|
logrus.Errorf("error deleting command %s: %v", existingCommand.Name(), err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func logrusInitFile() {
|
func logrusInitFile() {
|
||||||
logrus.SetLevel(logrus.DebugLevel)
|
logrus.SetLevel(logrus.DebugLevel)
|
||||||
logrus.SetFormatter(&logrus.JSONFormatter{})
|
logrus.SetFormatter(&logrus.JSONFormatter{})
|
||||||
@@ -153,6 +211,9 @@ func loadPlugins(directory string) error {
|
|||||||
plugin := *pluginPtr
|
plugin := *pluginPtr
|
||||||
if plugin.Name == "" {
|
if plugin.Name == "" {
|
||||||
logrus.Warn("Plugin is unnamed")
|
logrus.Warn("Plugin is unnamed")
|
||||||
|
pluginNames = append(pluginNames, "UNNAMED PLUGIN")
|
||||||
|
} else {
|
||||||
|
pluginNames = append(pluginNames, plugin.Name)
|
||||||
}
|
}
|
||||||
if plugin.Commands != nil {
|
if plugin.Commands != nil {
|
||||||
commands = append(commands, plugin.Commands...)
|
commands = append(commands, plugin.Commands...)
|
||||||
|
Reference in New Issue
Block a user