some fixes and added logging
This commit is contained in:
10
cmd_ask.go
10
cmd_ask.go
@@ -1,6 +1,9 @@
|
|||||||
package main
|
package main
|
||||||
|
|
||||||
import "github.com/bwmarrin/discordgo"
|
import (
|
||||||
|
"github.com/bwmarrin/discordgo"
|
||||||
|
"github.com/sirupsen/logrus"
|
||||||
|
)
|
||||||
|
|
||||||
var cmd_ask Command = Command{
|
var cmd_ask Command = Command{
|
||||||
Definition: discordgo.ApplicationCommand{
|
Definition: discordgo.ApplicationCommand{
|
||||||
@@ -16,11 +19,14 @@ var cmd_ask Command = Command{
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
Interact: func(s *discordgo.Session, i *discordgo.InteractionCreate) {
|
Interact: func(s *discordgo.Session, i *discordgo.InteractionCreate) {
|
||||||
respondEmbed(i.Interaction, discordgo.MessageEmbed{
|
err := respondEmbed(i.Interaction, discordgo.MessageEmbed{
|
||||||
Type: discordgo.EmbedTypeImage,
|
Type: discordgo.EmbedTypeImage,
|
||||||
Color: hexToDecimal(color["primary"]),
|
Color: hexToDecimal(color["primary"]),
|
||||||
Image: &discordgo.MessageEmbedImage{
|
Image: &discordgo.MessageEmbedImage{
|
||||||
URL: simpleGetFromAPI("image", "https://yesno.wtf/api").(string),
|
URL: simpleGetFromAPI("image", "https://yesno.wtf/api").(string),
|
||||||
}}, false)
|
}}, false)
|
||||||
|
if err != nil {
|
||||||
|
logrus.Error("Failed to respond with embed: ", err)
|
||||||
|
}
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
@@ -1,6 +1,9 @@
|
|||||||
package main
|
package main
|
||||||
|
|
||||||
import "github.com/bwmarrin/discordgo"
|
import (
|
||||||
|
"github.com/bwmarrin/discordgo"
|
||||||
|
"github.com/sirupsen/logrus"
|
||||||
|
)
|
||||||
|
|
||||||
var cmd_autojoinroles Command = Command{
|
var cmd_autojoinroles Command = Command{
|
||||||
Definition: discordgo.ApplicationCommand{
|
Definition: discordgo.ApplicationCommand{
|
||||||
@@ -40,7 +43,10 @@ var cmd_autojoinroles Command = Command{
|
|||||||
if len(i.ApplicationCommandData().Options[0].Options) == 1 {
|
if len(i.ApplicationCommandData().Options[0].Options) == 1 {
|
||||||
var givenRole *discordgo.Role = i.ApplicationCommandData().Options[0].Options[0].RoleValue(s, i.GuildID)
|
var givenRole *discordgo.Role = i.ApplicationCommandData().Options[0].Options[0].RoleValue(s, i.GuildID)
|
||||||
role = givenRole.ID
|
role = givenRole.ID
|
||||||
botrole, _ := getHighestRole(i.GuildID)
|
botrole, err := getHighestRole(i.GuildID)
|
||||||
|
if err != nil {
|
||||||
|
logrus.Error(err)
|
||||||
|
}
|
||||||
if givenRole.Position >= botrole.Position {
|
if givenRole.Position >= botrole.Position {
|
||||||
content = "<@&" + role + "> is not below the Bot's current highest role(<@&" + botrole.ID + ">). That makes it unable to manage it."
|
content = "<@&" + role + "> is not below the Bot's current highest role(<@&" + botrole.ID + ">). That makes it unable to manage it."
|
||||||
} else {
|
} else {
|
||||||
@@ -53,7 +59,10 @@ var cmd_autojoinroles Command = Command{
|
|||||||
} else if setAutoJoinRole(i.GuildID, option, role) {
|
} else if setAutoJoinRole(i.GuildID, option, role) {
|
||||||
content = "Deleted auto join role for " + option + "s"
|
content = "Deleted auto join role for " + option + "s"
|
||||||
}
|
}
|
||||||
respond(i.Interaction, content, true)
|
err := respond(i.Interaction, content, true)
|
||||||
|
if err != nil {
|
||||||
|
logrus.Error(err)
|
||||||
|
}
|
||||||
purgeUnusedAutoJoinRoles(i.GuildID)
|
purgeUnusedAutoJoinRoles(i.GuildID)
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
@@ -1,6 +1,9 @@
|
|||||||
package main
|
package main
|
||||||
|
|
||||||
import "github.com/bwmarrin/discordgo"
|
import (
|
||||||
|
"github.com/bwmarrin/discordgo"
|
||||||
|
"github.com/sirupsen/logrus"
|
||||||
|
)
|
||||||
|
|
||||||
var cmd_autopublish Command = Command{
|
var cmd_autopublish Command = Command{
|
||||||
Definition: discordgo.ApplicationCommand{
|
Definition: discordgo.ApplicationCommand{
|
||||||
@@ -11,12 +14,21 @@ var cmd_autopublish Command = Command{
|
|||||||
channel, _ := s.State.Channel(i.ChannelID)
|
channel, _ := s.State.Channel(i.ChannelID)
|
||||||
if channel.Type == discordgo.ChannelTypeGuildNews {
|
if channel.Type == discordgo.ChannelTypeGuildNews {
|
||||||
if toggleAutoPublish(i.GuildID, i.ChannelID) {
|
if toggleAutoPublish(i.GuildID, i.ChannelID) {
|
||||||
respond(i.Interaction, "Autopublishing is now disabled on <#"+i.ChannelID+">", true)
|
err := respond(i.Interaction, "Autopublishing is now disabled on <#"+i.ChannelID+">", true)
|
||||||
} else {
|
if err != nil {
|
||||||
respond(i.Interaction, "Autopublishing is now enabled on <#"+i.ChannelID+">", true)
|
logrus.Error(err)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
respond(i.Interaction, "This is not an announcement channel!", true)
|
err := respond(i.Interaction, "Autopublishing is now enabled on <#"+i.ChannelID+">", true)
|
||||||
|
if err != nil {
|
||||||
|
logrus.Error(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
err := respond(i.Interaction, "This is not an announcement channel!", true)
|
||||||
|
if err != nil {
|
||||||
|
logrus.Error(err)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
@@ -6,6 +6,7 @@ import (
|
|||||||
"net/http"
|
"net/http"
|
||||||
|
|
||||||
"github.com/bwmarrin/discordgo"
|
"github.com/bwmarrin/discordgo"
|
||||||
|
"github.com/sirupsen/logrus"
|
||||||
)
|
)
|
||||||
|
|
||||||
var cmd_cat Command = Command{
|
var cmd_cat Command = Command{
|
||||||
@@ -16,12 +17,17 @@ var cmd_cat Command = Command{
|
|||||||
Interact: func(s *discordgo.Session, i *discordgo.InteractionCreate) {
|
Interact: func(s *discordgo.Session, i *discordgo.InteractionCreate) {
|
||||||
cat, err := GetCatImageURL()
|
cat, err := GetCatImageURL()
|
||||||
if err == nil {
|
if err == nil {
|
||||||
respondEmbed(i.Interaction, discordgo.MessageEmbed{
|
err := respondEmbed(i.Interaction, discordgo.MessageEmbed{
|
||||||
Type: discordgo.EmbedTypeImage,
|
Type: discordgo.EmbedTypeImage,
|
||||||
Color: hexToDecimal(color["primary"]),
|
Color: hexToDecimal(color["primary"]),
|
||||||
Image: &discordgo.MessageEmbedImage{
|
Image: &discordgo.MessageEmbedImage{
|
||||||
URL: cat,
|
URL: cat,
|
||||||
}}, false)
|
}}, false)
|
||||||
|
if err != nil {
|
||||||
|
logrus.Error(err)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
logrus.Error(err)
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
@@ -2,6 +2,7 @@ package main
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/bwmarrin/discordgo"
|
"github.com/bwmarrin/discordgo"
|
||||||
|
"github.com/sirupsen/logrus"
|
||||||
)
|
)
|
||||||
|
|
||||||
var cmd_dadjoke Command = Command{
|
var cmd_dadjoke Command = Command{
|
||||||
@@ -10,6 +11,9 @@ var cmd_dadjoke Command = Command{
|
|||||||
Description: "Gives you a random joke that is as bad as your dad would tell them",
|
Description: "Gives you a random joke that is as bad as your dad would tell them",
|
||||||
},
|
},
|
||||||
Interact: func(s *discordgo.Session, i *discordgo.InteractionCreate) {
|
Interact: func(s *discordgo.Session, i *discordgo.InteractionCreate) {
|
||||||
respond(i.Interaction, simpleGetFromAPI("joke", "https://icanhazdadjoke.com/").(string), false)
|
err := respond(i.Interaction, simpleGetFromAPI("joke", "https://icanhazdadjoke.com/").(string), false)
|
||||||
|
if err != nil {
|
||||||
|
logrus.Error(err)
|
||||||
|
}
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
41
cmd_form.go
41
cmd_form.go
@@ -2,12 +2,12 @@ package main
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
"log"
|
|
||||||
"os"
|
"os"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/bwmarrin/discordgo"
|
"github.com/bwmarrin/discordgo"
|
||||||
"github.com/google/uuid"
|
"github.com/google/uuid"
|
||||||
|
"github.com/sirupsen/logrus"
|
||||||
)
|
)
|
||||||
|
|
||||||
var fileData []byte
|
var fileData []byte
|
||||||
@@ -79,7 +79,7 @@ var cmd_form Command = Command{
|
|||||||
case "help":
|
case "help":
|
||||||
fileData, _ = os.ReadFile("./form_templates/form_demo.json")
|
fileData, _ = os.ReadFile("./form_templates/form_demo.json")
|
||||||
fileReader := bytes.NewReader(fileData)
|
fileReader := bytes.NewReader(fileData)
|
||||||
s.InteractionRespond(i.Interaction, &discordgo.InteractionResponse{
|
err := s.InteractionRespond(i.Interaction, &discordgo.InteractionResponse{
|
||||||
Type: discordgo.InteractionResponseChannelMessageWithSource,
|
Type: discordgo.InteractionResponseChannelMessageWithSource,
|
||||||
Data: &discordgo.InteractionResponseData{
|
Data: &discordgo.InteractionResponseData{
|
||||||
Content: "NOT SUPPORTED YET!(use `/form add` instead)\n\nGet the example file edit it (make sure to have a unique \"form_type\") and submit it via `/form create`.\nOr use the demo button to get an idea of how the example would look like.",
|
Content: "NOT SUPPORTED YET!(use `/form add` instead)\n\nGet the example file edit it (make sure to have a unique \"form_type\") and submit it via `/form create`.\nOr use the demo button to get an idea of how the example would look like.",
|
||||||
@@ -107,13 +107,18 @@ var cmd_form Command = Command{
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
if err != nil {
|
||||||
|
logrus.Error(err)
|
||||||
|
}
|
||||||
case "custom":
|
case "custom":
|
||||||
respond(i.Interaction, "Feature not available yet use `/form add` instead", true)
|
err := respond(i.Interaction, "Feature not available yet use `/form add` instead", true)
|
||||||
|
if err != nil {
|
||||||
|
logrus.Error(err)
|
||||||
|
}
|
||||||
case "add":
|
case "add":
|
||||||
var title, formID, overwriteTitle, acceptChannelID string
|
var title, formID, overwriteTitle, acceptChannelID string
|
||||||
var modsCanComment bool
|
var modsCanComment bool
|
||||||
options := i.ApplicationCommandData().Options[0]
|
options := i.ApplicationCommandData().Options[0]
|
||||||
|
|
||||||
for _, opt := range options.Options {
|
for _, opt := range options.Options {
|
||||||
switch opt.Name {
|
switch opt.Name {
|
||||||
case "type":
|
case "type":
|
||||||
@@ -140,7 +145,6 @@ var cmd_form Command = Command{
|
|||||||
title = val
|
title = val
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var exists bool = true
|
var exists bool = true
|
||||||
var formManageID uuid.UUID = uuid.New()
|
var formManageID uuid.UUID = uuid.New()
|
||||||
for exists {
|
for exists {
|
||||||
@@ -148,7 +152,7 @@ var cmd_form Command = Command{
|
|||||||
exists = getFormManageIdExists(formManageID)
|
exists = getFormManageIdExists(formManageID)
|
||||||
}
|
}
|
||||||
|
|
||||||
message, _ := s.ChannelMessageSendComplex(i.ChannelID, &discordgo.MessageSend{
|
message, err := s.ChannelMessageSendComplex(i.ChannelID, &discordgo.MessageSend{
|
||||||
Embed: &discordgo.MessageEmbed{
|
Embed: &discordgo.MessageEmbed{
|
||||||
Color: hexToDecimal(color["primary"]),
|
Color: hexToDecimal(color["primary"]),
|
||||||
Title: title,
|
Title: title,
|
||||||
@@ -171,8 +175,14 @@ var cmd_form Command = Command{
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
if err != nil {
|
||||||
|
logrus.Error(err)
|
||||||
|
}
|
||||||
addFormButton(i.GuildID, i.ChannelID, message.ID, formManageID.String(), formID, options.Options[0].ChannelValue(s).ID, overwriteTitle, acceptChannelID, modsCanComment)
|
addFormButton(i.GuildID, i.ChannelID, message.ID, formManageID.String(), formID, options.Options[0].ChannelValue(s).ID, overwriteTitle, acceptChannelID, modsCanComment)
|
||||||
respond(i.Interaction, "Successfully added form button!", true)
|
err = respond(i.Interaction, "Successfully added form button!", true)
|
||||||
|
if err != nil {
|
||||||
|
logrus.Error(err)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
ComponentInteract: func(s *discordgo.Session, i *discordgo.InteractionCreate) {
|
ComponentInteract: func(s *discordgo.Session, i *discordgo.InteractionCreate) {
|
||||||
@@ -219,12 +229,18 @@ var cmd_form Command = Command{
|
|||||||
},
|
},
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Println(err)
|
logrus.Error(err)
|
||||||
} else {
|
} else {
|
||||||
respond(i.Interaction, "Submited!", true)
|
err = respond(i.Interaction, "Submited!", true)
|
||||||
|
if err != nil {
|
||||||
|
logrus.Error(err)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
respond(i.Interaction, "The form data would be send to a specified channel. 🤲", true)
|
err := respond(i.Interaction, "The form data would be send to a specified channel. 🤲", true)
|
||||||
|
if err != nil {
|
||||||
|
logrus.Error(err)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -243,12 +259,15 @@ var cmd_form Command = Command{
|
|||||||
Value: "template_general",
|
Value: "template_general",
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
s.InteractionRespond(i.Interaction, &discordgo.InteractionResponse{
|
err := s.InteractionRespond(i.Interaction, &discordgo.InteractionResponse{
|
||||||
Type: discordgo.InteractionApplicationCommandAutocompleteResult,
|
Type: discordgo.InteractionApplicationCommandAutocompleteResult,
|
||||||
Data: &discordgo.InteractionResponseData{
|
Data: &discordgo.InteractionResponseData{
|
||||||
Choices: choices,
|
Choices: choices,
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
if err != nil {
|
||||||
|
logrus.Error(err)
|
||||||
|
}
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -6,6 +6,7 @@ import (
|
|||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/bwmarrin/discordgo"
|
"github.com/bwmarrin/discordgo"
|
||||||
|
"github.com/sirupsen/logrus"
|
||||||
)
|
)
|
||||||
|
|
||||||
var cmd_ping Command = Command{
|
var cmd_ping Command = Command{
|
||||||
@@ -22,7 +23,7 @@ var cmd_ping Command = Command{
|
|||||||
|
|
||||||
resp, err := client.Get("https://discord.com/api/v9/gateway/bot")
|
resp, err := client.Get("https://discord.com/api/v9/gateway/bot")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Println("Error:", err)
|
logrus.Error(err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
defer resp.Body.Close()
|
defer resp.Body.Close()
|
||||||
@@ -36,10 +37,13 @@ var cmd_ping Command = Command{
|
|||||||
} else {
|
} else {
|
||||||
ping_color = "red"
|
ping_color = "red"
|
||||||
}
|
}
|
||||||
respondEmbed(i.Interaction, discordgo.MessageEmbed{
|
err = respondEmbed(i.Interaction, discordgo.MessageEmbed{
|
||||||
Title: s.State.User.Username + " ping",
|
Title: s.State.User.Username + " ping",
|
||||||
Description: fmt.Sprintf("# %.2fms", ping.Seconds()*1000),
|
Description: fmt.Sprintf("# %.2fms", ping.Seconds()*1000),
|
||||||
Type: discordgo.EmbedTypeArticle,
|
Type: discordgo.EmbedTypeArticle,
|
||||||
Color: hexToDecimal(color[ping_color])}, true)
|
Color: hexToDecimal(color[ping_color])}, true)
|
||||||
|
if err != nil {
|
||||||
|
logrus.Error(err)
|
||||||
|
}
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
@@ -1,9 +1,8 @@
|
|||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"log"
|
|
||||||
|
|
||||||
"github.com/bwmarrin/discordgo"
|
"github.com/bwmarrin/discordgo"
|
||||||
|
"github.com/sirupsen/logrus"
|
||||||
)
|
)
|
||||||
|
|
||||||
var cmd_sticky Command = Command{
|
var cmd_sticky Command = Command{
|
||||||
@@ -27,7 +26,7 @@ var cmd_sticky Command = Command{
|
|||||||
Interact: func(s *discordgo.Session, i *discordgo.InteractionCreate) {
|
Interact: func(s *discordgo.Session, i *discordgo.InteractionCreate) {
|
||||||
switch i.ApplicationCommandData().Options[0].Name {
|
switch i.ApplicationCommandData().Options[0].Name {
|
||||||
case "add":
|
case "add":
|
||||||
s.InteractionRespond(i.Interaction, &discordgo.InteractionResponse{
|
err := s.InteractionRespond(i.Interaction, &discordgo.InteractionResponse{
|
||||||
Type: discordgo.InteractionResponseModal,
|
Type: discordgo.InteractionResponseModal,
|
||||||
Data: &discordgo.InteractionResponseData{
|
Data: &discordgo.InteractionResponseData{
|
||||||
CustomID: "sticky_modal",
|
CustomID: "sticky_modal",
|
||||||
@@ -49,13 +48,25 @@ var cmd_sticky Command = Command{
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
if err != nil {
|
||||||
|
logrus.Error(err)
|
||||||
|
}
|
||||||
case "remove":
|
case "remove":
|
||||||
if hasSticky(i.GuildID, i.ChannelID) {
|
if hasSticky(i.GuildID, i.ChannelID) {
|
||||||
s.ChannelMessageDelete(i.ChannelID, getStickyMessageID(i.GuildID, i.ChannelID))
|
err := s.ChannelMessageDelete(i.ChannelID, getStickyMessageID(i.GuildID, i.ChannelID))
|
||||||
|
if err != nil {
|
||||||
|
logrus.Error(err)
|
||||||
|
}
|
||||||
removeSticky(i.GuildID, i.ChannelID)
|
removeSticky(i.GuildID, i.ChannelID)
|
||||||
respond(i.Interaction, "The sticky message was removed from this channel!", true)
|
err = respond(i.Interaction, "The sticky message was removed from this channel!", true)
|
||||||
|
if err != nil {
|
||||||
|
logrus.Error(err)
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
respond(i.Interaction, "This channel has no sticky message!", true)
|
err := respond(i.Interaction, "This channel has no sticky message!", true)
|
||||||
|
if err != nil {
|
||||||
|
logrus.Error(err)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -71,12 +82,18 @@ var cmd_sticky Command = Command{
|
|||||||
Description: text,
|
Description: text,
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Println(err)
|
logrus.Error(err)
|
||||||
}
|
}
|
||||||
if addSticky(i.GuildID, i.ChannelID, text, message.ID) {
|
if addSticky(i.GuildID, i.ChannelID, text, message.ID) {
|
||||||
respond(i.Interaction, "Sticky message in this channel was updated!", true)
|
err := respond(i.Interaction, "Sticky message in this channel was updated!", true)
|
||||||
|
if err != nil {
|
||||||
|
logrus.Error(err)
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
respond(i.Interaction, "Message sticked to the channel!", true)
|
err := respond(i.Interaction, "Message sticked to the channel!", true)
|
||||||
|
if err != nil {
|
||||||
|
logrus.Error(err)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
42
cmd_tag.go
42
cmd_tag.go
@@ -1,9 +1,8 @@
|
|||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"log"
|
|
||||||
|
|
||||||
"github.com/bwmarrin/discordgo"
|
"github.com/bwmarrin/discordgo"
|
||||||
|
"github.com/sirupsen/logrus"
|
||||||
)
|
)
|
||||||
|
|
||||||
var cmd_tag Command = Command{
|
var cmd_tag Command = Command{
|
||||||
@@ -50,9 +49,9 @@ var cmd_tag Command = Command{
|
|||||||
Interact: func(s *discordgo.Session, i *discordgo.InteractionCreate) {
|
Interact: func(s *discordgo.Session, i *discordgo.InteractionCreate) {
|
||||||
switch i.ApplicationCommandData().Options[0].Name {
|
switch i.ApplicationCommandData().Options[0].Name {
|
||||||
case "get":
|
case "get":
|
||||||
GetTagCommand(s, i, i.ApplicationCommandData().Options[0].Options[0])
|
GetTagCommand(i, i.ApplicationCommandData().Options[0].Options[0])
|
||||||
case "add":
|
case "add":
|
||||||
s.InteractionRespond(i.Interaction, &discordgo.InteractionResponse{
|
err := s.InteractionRespond(i.Interaction, &discordgo.InteractionResponse{
|
||||||
Type: discordgo.InteractionResponseModal,
|
Type: discordgo.InteractionResponseModal,
|
||||||
Data: &discordgo.InteractionResponseData{
|
Data: &discordgo.InteractionResponseData{
|
||||||
CustomID: "tag_add_modal" + i.Interaction.Member.User.ID,
|
CustomID: "tag_add_modal" + i.Interaction.Member.User.ID,
|
||||||
@@ -86,9 +85,15 @@ var cmd_tag Command = Command{
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
if err != nil {
|
||||||
|
logrus.Error(err)
|
||||||
|
}
|
||||||
case "remove":
|
case "remove":
|
||||||
removeTag(i.GuildID, i.ApplicationCommandData().Options[0].Options[0].StringValue())
|
removeTag(i.GuildID, i.ApplicationCommandData().Options[0].Options[0].StringValue())
|
||||||
respond(i.Interaction, "Tag removed!", true)
|
err := respond(i.Interaction, "Tag removed!", true)
|
||||||
|
if err != nil {
|
||||||
|
logrus.Error(err)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
ModalIDs: []string{"tag_add_modal"},
|
ModalIDs: []string{"tag_add_modal"},
|
||||||
@@ -96,10 +101,13 @@ var cmd_tag Command = Command{
|
|||||||
tagName := i.ModalSubmitData().Components[0].(*discordgo.ActionsRow).Components[0].(*discordgo.TextInput).Value
|
tagName := i.ModalSubmitData().Components[0].(*discordgo.ActionsRow).Components[0].(*discordgo.TextInput).Value
|
||||||
tagContent := i.ModalSubmitData().Components[1].(*discordgo.ActionsRow).Components[0].(*discordgo.TextInput).Value
|
tagContent := i.ModalSubmitData().Components[1].(*discordgo.ActionsRow).Components[0].(*discordgo.TextInput).Value
|
||||||
addTag(i.GuildID, tagName, tagContent)
|
addTag(i.GuildID, tagName, tagContent)
|
||||||
respond(i.Interaction, "Tag \""+tagName+"\" added!", true)
|
err := respond(i.Interaction, "Tag \""+tagName+"\" added!", true)
|
||||||
|
if err != nil {
|
||||||
|
logrus.Error(err)
|
||||||
|
}
|
||||||
},
|
},
|
||||||
Autocomplete: func(s *discordgo.Session, i *discordgo.InteractionCreate) {
|
Autocomplete: func(s *discordgo.Session, i *discordgo.InteractionCreate) {
|
||||||
AutocompleteTag(s, i)
|
AutocompleteTag(i)
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -118,31 +126,37 @@ var cmd_tag_short Command = Command{
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
Interact: func(s *discordgo.Session, i *discordgo.InteractionCreate) {
|
Interact: func(s *discordgo.Session, i *discordgo.InteractionCreate) {
|
||||||
GetTagCommand(s, i, i.ApplicationCommandData().Options[0])
|
GetTagCommand(i, i.ApplicationCommandData().Options[0])
|
||||||
},
|
},
|
||||||
Autocomplete: func(s *discordgo.Session, i *discordgo.InteractionCreate) {
|
Autocomplete: func(s *discordgo.Session, i *discordgo.InteractionCreate) {
|
||||||
AutocompleteTag(s, i)
|
AutocompleteTag(i)
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
func GetTagCommand(s *discordgo.Session, i *discordgo.InteractionCreate, option *discordgo.ApplicationCommandInteractionDataOption) {
|
func GetTagCommand(i *discordgo.InteractionCreate, option *discordgo.ApplicationCommandInteractionDataOption) {
|
||||||
respond(i.Interaction, getTagContent(i.GuildID, option.Value.(string)), false)
|
err := respond(i.Interaction, getTagContent(i.GuildID, option.Value.(string)), false)
|
||||||
|
if err != nil {
|
||||||
|
logrus.Error(err)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func AutocompleteTag(s *discordgo.Session, i *discordgo.InteractionCreate) {
|
func AutocompleteTag(i *discordgo.InteractionCreate) {
|
||||||
s.InteractionRespond(i.Interaction, &discordgo.InteractionResponse{
|
err := bot.InteractionRespond(i.Interaction, &discordgo.InteractionResponse{
|
||||||
Type: discordgo.InteractionApplicationCommandAutocompleteResult,
|
Type: discordgo.InteractionApplicationCommandAutocompleteResult,
|
||||||
Data: &discordgo.InteractionResponseData{
|
Data: &discordgo.InteractionResponseData{
|
||||||
Choices: generateTagChoices(i.GuildID),
|
Choices: generateTagChoices(i.GuildID),
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
if err != nil {
|
||||||
|
logrus.Error(err)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func generateTagChoices(guildID string) []*discordgo.ApplicationCommandOptionChoice {
|
func generateTagChoices(guildID string) []*discordgo.ApplicationCommandOptionChoice {
|
||||||
choices := []*discordgo.ApplicationCommandOptionChoice{}
|
choices := []*discordgo.ApplicationCommandOptionChoice{}
|
||||||
IDs, err := getTagIDs(guildID)
|
IDs, err := getTagIDs(guildID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Println("Error getting tag keys:", err)
|
logrus.Error(err)
|
||||||
return choices
|
return choices
|
||||||
}
|
}
|
||||||
for _, id := range IDs {
|
for _, id := range IDs {
|
||||||
|
@@ -1,33 +0,0 @@
|
|||||||
package main
|
|
||||||
|
|
||||||
import (
|
|
||||||
"encoding/json"
|
|
||||||
"io"
|
|
||||||
"log"
|
|
||||||
"net/http"
|
|
||||||
)
|
|
||||||
|
|
||||||
func simpleGetFromAPI(key string, url string) interface{} {
|
|
||||||
client := &http.Client{}
|
|
||||||
req, err := http.NewRequest("GET", url, nil)
|
|
||||||
if err != nil {
|
|
||||||
log.Println("Error creating request:", err)
|
|
||||||
}
|
|
||||||
req.Header.Set("Accept", "application/json")
|
|
||||||
resp, err := client.Do(req)
|
|
||||||
if err != nil {
|
|
||||||
log.Println("Error making request:", err)
|
|
||||||
}
|
|
||||||
defer resp.Body.Close()
|
|
||||||
body, err := io.ReadAll(resp.Body)
|
|
||||||
if err != nil {
|
|
||||||
log.Println("Error reading response body:", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
var result map[string]interface{}
|
|
||||||
err = json.Unmarshal(body, &result)
|
|
||||||
if err != nil {
|
|
||||||
log.Println("Error decoding JSON:", err)
|
|
||||||
}
|
|
||||||
return result[key]
|
|
||||||
}
|
|
3
go.mod
3
go.mod
@@ -11,6 +11,7 @@ require (
|
|||||||
|
|
||||||
require (
|
require (
|
||||||
github.com/gorilla/websocket v1.4.2 // indirect
|
github.com/gorilla/websocket v1.4.2 // indirect
|
||||||
|
github.com/sirupsen/logrus v1.9.3 // indirect
|
||||||
golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b // indirect
|
golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b // indirect
|
||||||
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68 // indirect
|
golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8 // indirect
|
||||||
)
|
)
|
||||||
|
11
go.sum
11
go.sum
@@ -1,5 +1,7 @@
|
|||||||
github.com/bwmarrin/discordgo v0.27.1 h1:ib9AIc/dom1E/fSIulrBwnez0CToJE113ZGt4HoliGY=
|
github.com/bwmarrin/discordgo v0.27.1 h1:ib9AIc/dom1E/fSIulrBwnez0CToJE113ZGt4HoliGY=
|
||||||
github.com/bwmarrin/discordgo v0.27.1/go.mod h1:NJZpH+1AfhIcyQsPeuBKsUtYrRnjkyu0kIVMCHkZtRY=
|
github.com/bwmarrin/discordgo v0.27.1/go.mod h1:NJZpH+1AfhIcyQsPeuBKsUtYrRnjkyu0kIVMCHkZtRY=
|
||||||
|
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||||
|
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||||
github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
|
github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
|
||||||
github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
||||||
github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc=
|
github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc=
|
||||||
@@ -8,11 +10,20 @@ github.com/joho/godotenv v1.5.1 h1:7eLL/+HRGLY0ldzfGMeQkb7vMd0as4CfYvUVzLqw0N0=
|
|||||||
github.com/joho/godotenv v1.5.1/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4=
|
github.com/joho/godotenv v1.5.1/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4=
|
||||||
github.com/lib/pq v1.10.9 h1:YXG7RB+JIjhP29X+OtkiDnYaXQwpS4JEWq7dtCCRUEw=
|
github.com/lib/pq v1.10.9 h1:YXG7RB+JIjhP29X+OtkiDnYaXQwpS4JEWq7dtCCRUEw=
|
||||||
github.com/lib/pq v1.10.9/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=
|
github.com/lib/pq v1.10.9/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=
|
||||||
|
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
||||||
|
github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ=
|
||||||
|
github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ=
|
||||||
|
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
||||||
|
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
||||||
golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b h1:7mWr3k41Qtv8XlltBkDkl8LoP3mpSgBW8BUoxtEdbXg=
|
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/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/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 h1:nxC68pudNYkKU6jWhgrqdreuFiOQWj1Fs7T3VrH4Pjw=
|
||||||
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
|
golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8 h1:0A+M6Uqn+Eje4kHMK80dtF3JCXC4ykBgQG4Fe06QRhQ=
|
||||||
|
golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
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/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||||
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||||
|
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||||
|
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||||
|
33
handlers.go
33
handlers.go
@@ -1,13 +1,12 @@
|
|||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
|
||||||
"log"
|
|
||||||
"os"
|
"os"
|
||||||
"slices"
|
"slices"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/bwmarrin/discordgo"
|
"github.com/bwmarrin/discordgo"
|
||||||
|
"github.com/sirupsen/logrus"
|
||||||
)
|
)
|
||||||
|
|
||||||
type Command struct {
|
type Command struct {
|
||||||
@@ -25,7 +24,7 @@ type Command struct {
|
|||||||
var commands []Command = []Command{cmd_form, cmd_tag, cmd_tag_short, cmd_dadjoke, cmd_ping, cmd_ask, cmd_sticky, cmd_cat, cmd_autojoinroles, cmd_autopublish}
|
var commands []Command = []Command{cmd_form, cmd_tag, cmd_tag_short, cmd_dadjoke, cmd_ping, cmd_ask, cmd_sticky, cmd_cat, cmd_autojoinroles, cmd_autopublish}
|
||||||
|
|
||||||
func ready(s *discordgo.Session, event *discordgo.Ready) {
|
func ready(s *discordgo.Session, event *discordgo.Ready) {
|
||||||
fmt.Print("\nStarting up...")
|
logrus.Info("\nStarting up...")
|
||||||
findAndDeleteUnusedMessages()
|
findAndDeleteUnusedMessages()
|
||||||
removeOldCommandFromAllGuilds(s)
|
removeOldCommandFromAllGuilds(s)
|
||||||
var existingCommandNames []string
|
var existingCommandNames []string
|
||||||
@@ -35,28 +34,28 @@ func ready(s *discordgo.Session, event *discordgo.Ready) {
|
|||||||
existingCommandNames = append(existingCommandNames, existingCommand.Name)
|
existingCommandNames = append(existingCommandNames, existingCommand.Name)
|
||||||
}
|
}
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Printf("error fetching existing commands for guild %s: %v\n", guild.Name, err)
|
logrus.Errorf("error fetching existing commands for guild %s: %v\n", guild.Name, err)
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
for _, command := range commands {
|
for _, command := range commands {
|
||||||
if !slices.Contains(existingCommandNames, command.Definition.Name) || slices.Contains(os.Args, "--update="+command.Definition.Name) {
|
if !slices.Contains(existingCommandNames, command.Definition.Name) || slices.Contains(os.Args, "--update="+command.Definition.Name) {
|
||||||
cmd, err := s.ApplicationCommandCreate(s.State.User.ID, guild.ID, &command.Definition)
|
cmd, err := s.ApplicationCommandCreate(s.State.User.ID, guild.ID, &command.Definition)
|
||||||
fmt.Printf("\nAdded command \"%s\"", cmd.Name)
|
logrus.Infof("\nAdded command \"%s\"", cmd.Name)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Println("error creating command,", err)
|
logrus.Error("error creating command,", err)
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
fmt.Print("\nSuccessfully started the Bot!")
|
logrus.Info("\nSuccessfully started the Bot!")
|
||||||
}
|
}
|
||||||
|
|
||||||
func guildCreate(s *discordgo.Session, event *discordgo.GuildCreate) {
|
func guildCreate(s *discordgo.Session, event *discordgo.GuildCreate) {
|
||||||
for _, command := range commands {
|
for _, command := range commands {
|
||||||
_, err := s.ApplicationCommandCreate(s.State.User.ID, event.Guild.ID, &command.Definition)
|
_, err := s.ApplicationCommandCreate(s.State.User.ID, event.Guild.ID, &command.Definition)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Printf("error creating command for guild %s: %v\n", event.Guild.Name, err)
|
logrus.Errorf("error creating command for guild %s: %v\n", event.Guild.Name, err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -107,7 +106,7 @@ func removeOldCommandFromAllGuilds(s *discordgo.Session) {
|
|||||||
for _, guild := range s.State.Guilds {
|
for _, guild := range s.State.Guilds {
|
||||||
existingCommands, err := s.ApplicationCommands(s.State.User.ID, guild.ID)
|
existingCommands, err := s.ApplicationCommands(s.State.User.ID, guild.ID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Printf("error fetching existing commands for guild %s: %v\n", guild.Name, err)
|
logrus.Errorf("error fetching existing commands for guild %s: %v\n", guild.Name, err)
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
var commandIDs []string
|
var commandIDs []string
|
||||||
@@ -116,10 +115,10 @@ func removeOldCommandFromAllGuilds(s *discordgo.Session) {
|
|||||||
}
|
}
|
||||||
for _, existingCommand := range existingCommands {
|
for _, existingCommand := range existingCommands {
|
||||||
if !slices.Contains(commandIDs, existingCommand.Name) {
|
if !slices.Contains(commandIDs, existingCommand.Name) {
|
||||||
fmt.Printf("\nDeleting command \"%s\"", existingCommand.Name)
|
logrus.Infof("\nDeleting command \"%s\"", existingCommand.Name)
|
||||||
err := s.ApplicationCommandDelete(s.State.User.ID, guild.ID, existingCommand.ID)
|
err := s.ApplicationCommandDelete(s.State.User.ID, guild.ID, existingCommand.ID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Printf("error deleting command %s for guild %s: %v\n", existingCommand.Name, guild.Name, err)
|
logrus.Errorf("error deleting command %s for guild %s: %v\n", existingCommand.Name, guild.Name, err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -129,7 +128,7 @@ func removeOldCommandFromAllGuilds(s *discordgo.Session) {
|
|||||||
func messageCreate(s *discordgo.Session, m *discordgo.MessageCreate) {
|
func messageCreate(s *discordgo.Session, m *discordgo.MessageCreate) {
|
||||||
if len(m.Embeds) == 0 || m.Embeds[0].Footer == nil || m.Embeds[0].Footer.Text != "📌 Sticky message" {
|
if len(m.Embeds) == 0 || m.Embeds[0].Footer == nil || m.Embeds[0].Footer.Text != "📌 Sticky message" {
|
||||||
if hasSticky(m.GuildID, m.ChannelID) {
|
if hasSticky(m.GuildID, m.ChannelID) {
|
||||||
s.ChannelMessageDelete(m.ChannelID, getStickyMessageID(m.GuildID, m.ChannelID))
|
err := s.ChannelMessageDelete(m.ChannelID, getStickyMessageID(m.GuildID, m.ChannelID))
|
||||||
stickyMessage, _ := s.ChannelMessageSendEmbed(m.ChannelID, &discordgo.MessageEmbed{
|
stickyMessage, _ := s.ChannelMessageSendEmbed(m.ChannelID, &discordgo.MessageEmbed{
|
||||||
Type: discordgo.EmbedTypeArticle,
|
Type: discordgo.EmbedTypeArticle,
|
||||||
Footer: &discordgo.MessageEmbedFooter{
|
Footer: &discordgo.MessageEmbedFooter{
|
||||||
@@ -138,13 +137,19 @@ func messageCreate(s *discordgo.Session, m *discordgo.MessageCreate) {
|
|||||||
Color: hexToDecimal(color["primary"]),
|
Color: hexToDecimal(color["primary"]),
|
||||||
Description: getStickyMessageContent(m.GuildID, m.ChannelID),
|
Description: getStickyMessageContent(m.GuildID, m.ChannelID),
|
||||||
})
|
})
|
||||||
|
if err != nil {
|
||||||
|
logrus.Error(err)
|
||||||
|
}
|
||||||
updateStickyMessageID(m.GuildID, m.ChannelID, stickyMessage.ID)
|
updateStickyMessageID(m.GuildID, m.ChannelID, stickyMessage.ID)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
channel, _ := s.Channel(m.ChannelID)
|
channel, _ := s.Channel(m.ChannelID)
|
||||||
if channel.Type == discordgo.ChannelTypeGuildNews {
|
if channel.Type == discordgo.ChannelTypeGuildNews {
|
||||||
if isAutopublishEnabled(m.GuildID, m.ChannelID) {
|
if isAutopublishEnabled(m.GuildID, m.ChannelID) {
|
||||||
s.ChannelMessageCrosspost(m.ChannelID, m.ID)
|
_, err := s.ChannelMessageCrosspost(m.ChannelID, m.ID)
|
||||||
|
if err != nil {
|
||||||
|
logrus.Error(err)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -156,6 +161,6 @@ func messageDelete(s *discordgo.Session, m *discordgo.MessageDelete) { //TODO: a
|
|||||||
func guildMemberJoin(s *discordgo.Session, m *discordgo.GuildMemberAdd) {
|
func guildMemberJoin(s *discordgo.Session, m *discordgo.GuildMemberAdd) {
|
||||||
err := s.GuildMemberRoleAdd(m.GuildID, m.User.ID, getAutoJoinRole(m.GuildID, m.User.Bot))
|
err := s.GuildMemberRoleAdd(m.GuildID, m.User.ID, getAutoJoinRole(m.GuildID, m.User.Bot))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Println(err)
|
logrus.Error(err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
5
logs/bot.1710629569.log
Normal file
5
logs/bot.1710629569.log
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
{"file":"/home/vaporvee/acecore/main.go:40","func":"main.main","level":"info","msg":"Discord session created","time":"2024-03-16T23:52:49+01:00"}
|
||||||
|
{"file":"/home/vaporvee/acecore/main.go:54","func":"main.main","level":"info","msg":"\nBot is now running as \"acecore [DEV]\"!","time":"2024-03-16T23:52:49+01:00"}
|
||||||
|
{"file":"/home/vaporvee/acecore/handlers.go:27","func":"main.ready","level":"info","msg":"\nStarting up...","time":"2024-03-16T23:52:49+01:00"}
|
||||||
|
{"file":"/home/vaporvee/acecore/handlers.go:51","func":"main.ready","level":"info","msg":"\nSuccessfully started the Bot!","time":"2024-03-16T23:52:50+01:00"}
|
||||||
|
{"file":"/home/vaporvee/acecore/main.go:58","func":"main.main","level":"info","msg":"\nShutting down...","time":"2024-03-16T23:53:10+01:00"}
|
46
main.go
46
main.go
@@ -1,11 +1,12 @@
|
|||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"io"
|
||||||
"log"
|
|
||||||
"os"
|
"os"
|
||||||
"os/signal"
|
"os/signal"
|
||||||
|
"strconv"
|
||||||
"syscall"
|
"syscall"
|
||||||
|
"time"
|
||||||
|
|
||||||
"database/sql"
|
"database/sql"
|
||||||
"net/url"
|
"net/url"
|
||||||
@@ -13,6 +14,7 @@ import (
|
|||||||
"github.com/bwmarrin/discordgo"
|
"github.com/bwmarrin/discordgo"
|
||||||
"github.com/joho/godotenv"
|
"github.com/joho/godotenv"
|
||||||
_ "github.com/lib/pq"
|
_ "github.com/lib/pq"
|
||||||
|
"github.com/sirupsen/logrus"
|
||||||
)
|
)
|
||||||
|
|
||||||
//TODO: add more error handlings
|
//TODO: add more error handlings
|
||||||
@@ -21,21 +23,21 @@ var db *sql.DB
|
|||||||
var bot *discordgo.Session
|
var bot *discordgo.Session
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
godotenv.Load()
|
logrusInitFile()
|
||||||
|
|
||||||
var err error
|
var err error
|
||||||
|
godotenv.Load()
|
||||||
connStr := "postgresql://" + os.Getenv("DB_USER") + ":" + url.QueryEscape(os.Getenv("DB_PASSWORD")) + "@" + os.Getenv("DB_SERVER") + ":" + string(os.Getenv("DB_PORT")) + "/" + os.Getenv("DB_NAME") + "?sslmode=disable&application_name=Discord Bot"
|
connStr := "postgresql://" + os.Getenv("DB_USER") + ":" + url.QueryEscape(os.Getenv("DB_PASSWORD")) + "@" + os.Getenv("DB_SERVER") + ":" + string(os.Getenv("DB_PORT")) + "/" + os.Getenv("DB_NAME") + "?sslmode=disable&application_name=Discord Bot"
|
||||||
db, err = sql.Open("postgres", connStr)
|
db, err = sql.Open("postgres", connStr)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatal(err)
|
logrus.Fatal(err)
|
||||||
}
|
}
|
||||||
initTables()
|
initTables()
|
||||||
bot, err = discordgo.New("Bot " + os.Getenv("BOT_TOKEN"))
|
bot, err = discordgo.New("Bot " + os.Getenv("BOT_TOKEN"))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Println("error creating Discord session,", err)
|
logrus.Fatal("error creating Discord session,", err)
|
||||||
return
|
return
|
||||||
} else {
|
} else {
|
||||||
fmt.Println("Discord session created")
|
logrus.Info("Discord session created")
|
||||||
}
|
}
|
||||||
bot.Identify.Intents = discordgo.IntentsGuildMessages | discordgo.IntentsGuilds | discordgo.IntentMessageContent | discordgo.IntentGuildMembers
|
bot.Identify.Intents = discordgo.IntentsGuildMessages | discordgo.IntentsGuilds | discordgo.IntentMessageContent | discordgo.IntentGuildMembers
|
||||||
bot.AddHandler(ready)
|
bot.AddHandler(ready)
|
||||||
@@ -46,13 +48,37 @@ func main() {
|
|||||||
bot.AddHandler(guildMemberJoin)
|
bot.AddHandler(guildMemberJoin)
|
||||||
err = bot.Open()
|
err = bot.Open()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Println("error opening connection,", err)
|
logrus.Error("error opening connection,", err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
fmt.Printf("\nBot is now running as \"%s\"!", bot.State.User.Username)
|
logrus.Infof("\nBot is now running as \"%s\"!", bot.State.User.Username)
|
||||||
sc := make(chan os.Signal, 1)
|
sc := make(chan os.Signal, 1)
|
||||||
signal.Notify(sc, syscall.SIGINT, syscall.SIGTERM, os.Interrupt)
|
signal.Notify(sc, syscall.SIGINT, syscall.SIGTERM, os.Interrupt)
|
||||||
<-sc
|
<-sc
|
||||||
fmt.Println("\nShutting down...")
|
logrus.Info("\nShutting down...")
|
||||||
bot.Close()
|
bot.Close()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func logrusInitFile() {
|
||||||
|
logrus.SetLevel(logrus.DebugLevel)
|
||||||
|
logrus.SetFormatter(&logrus.JSONFormatter{})
|
||||||
|
logrus.SetReportCaller(true)
|
||||||
|
timestamp := time.Now().Unix()
|
||||||
|
|
||||||
|
var file_name string = "logs/bot." + strconv.FormatInt(timestamp, 10) + ".log"
|
||||||
|
if _, err := os.Stat("logs"); os.IsNotExist(err) {
|
||||||
|
err := os.Mkdir("logs", 0755)
|
||||||
|
if err != nil {
|
||||||
|
logrus.Error(err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
log, err := os.OpenFile(file_name, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644)
|
||||||
|
if err != nil {
|
||||||
|
logrus.Error(err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
mw := io.MultiWriter(os.Stdout, log)
|
||||||
|
logrus.SetOutput(mw)
|
||||||
|
}
|
||||||
|
@@ -4,6 +4,7 @@ import (
|
|||||||
"log"
|
"log"
|
||||||
|
|
||||||
"github.com/google/uuid"
|
"github.com/google/uuid"
|
||||||
|
"github.com/sirupsen/logrus"
|
||||||
)
|
)
|
||||||
|
|
||||||
func initTables() {
|
func initTables() {
|
||||||
@@ -74,12 +75,12 @@ func addTag(guildID, tagName, tagContent string) bool {
|
|||||||
id = uuid.New()
|
id = uuid.New()
|
||||||
err := db.QueryRow("SELECT EXISTS (SELECT 1 FROM tags WHERE guild_id = $1 AND tag_id = $2)", guildID, id).Scan(&exists)
|
err := db.QueryRow("SELECT EXISTS (SELECT 1 FROM tags WHERE guild_id = $1 AND tag_id = $2)", guildID, id).Scan(&exists)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Println(err)
|
logrus.Error(err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
_, err := db.Exec("INSERT INTO tags (guild_id, tag_name, tag_content, tag_id) VALUES ($1, $2, $3, $4)", guildID, tagName, tagContent, id)
|
_, err := db.Exec("INSERT INTO tags (guild_id, tag_name, tag_content, tag_id) VALUES ($1, $2, $3, $4)", guildID, tagName, tagContent, id)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Println(err)
|
logrus.Error(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
return exists
|
return exists
|
||||||
@@ -88,12 +89,12 @@ func removeTag(guildID string, tagID string) {
|
|||||||
var exists bool
|
var exists bool
|
||||||
err := db.QueryRow("SELECT EXISTS (SELECT 1 FROM tags WHERE guild_id = $1 AND tag_id = $2)", guildID, tagID).Scan(&exists)
|
err := db.QueryRow("SELECT EXISTS (SELECT 1 FROM tags WHERE guild_id = $1 AND tag_id = $2)", guildID, tagID).Scan(&exists)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Println(err)
|
logrus.Error(err)
|
||||||
}
|
}
|
||||||
if exists {
|
if exists {
|
||||||
_, err = db.Exec("DELETE FROM tags WHERE guild_id = $1 AND tag_id = $2", guildID, tagID)
|
_, err = db.Exec("DELETE FROM tags WHERE guild_id = $1 AND tag_id = $2", guildID, tagID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Println(err)
|
logrus.Error(err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -135,12 +136,12 @@ func addSticky(guildID string, channelID string, messageContent string, messageI
|
|||||||
if exists {
|
if exists {
|
||||||
_, err := db.Exec("UPDATE sticky SET message_content = $1 WHERE guild_id = $2 AND channel_id = $3", messageContent, guildID, channelID)
|
_, err := db.Exec("UPDATE sticky SET message_content = $1 WHERE guild_id = $2 AND channel_id = $3", messageContent, guildID, channelID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Println(err)
|
logrus.Error(err)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
_, err := db.Exec("INSERT INTO sticky (guild_id, channel_id, message_id, message_content) VALUES ($1, $2, $3, $4)", guildID, channelID, messageID, messageContent)
|
_, err := db.Exec("INSERT INTO sticky (guild_id, channel_id, message_id, message_content) VALUES ($1, $2, $3, $4)", guildID, channelID, messageID, messageContent)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Println(err)
|
logrus.Error(err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return exists
|
return exists
|
||||||
@@ -150,7 +151,7 @@ func hasSticky(guildID string, channelID string) bool {
|
|||||||
var exists bool
|
var exists bool
|
||||||
err := db.QueryRow("SELECT EXISTS (SELECT 1 FROM sticky WHERE guild_id = $1 AND channel_id = $2)", guildID, channelID).Scan(&exists)
|
err := db.QueryRow("SELECT EXISTS (SELECT 1 FROM sticky WHERE guild_id = $1 AND channel_id = $2)", guildID, channelID).Scan(&exists)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Println(err)
|
logrus.Error(err)
|
||||||
}
|
}
|
||||||
return exists
|
return exists
|
||||||
}
|
}
|
||||||
@@ -161,7 +162,7 @@ func getStickyMessageID(guildID string, channelID string) string {
|
|||||||
if exists {
|
if exists {
|
||||||
err := db.QueryRow("SELECT message_id FROM sticky WHERE guild_id = $1 AND channel_id = $2", guildID, channelID).Scan(&messageID)
|
err := db.QueryRow("SELECT message_id FROM sticky WHERE guild_id = $1 AND channel_id = $2", guildID, channelID).Scan(&messageID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Println(err)
|
logrus.Error(err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return messageID
|
return messageID
|
||||||
@@ -172,7 +173,7 @@ func getStickyMessageContent(guildID string, channelID string) string {
|
|||||||
if exists {
|
if exists {
|
||||||
err := db.QueryRow("SELECT message_content FROM sticky WHERE guild_id = $1 AND channel_id = $2", guildID, channelID).Scan(&messageID)
|
err := db.QueryRow("SELECT message_content FROM sticky WHERE guild_id = $1 AND channel_id = $2", guildID, channelID).Scan(&messageID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Println(err)
|
logrus.Error(err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return messageID
|
return messageID
|
||||||
@@ -183,7 +184,7 @@ func updateStickyMessageID(guildID string, channelID string, messageID string) {
|
|||||||
if exists {
|
if exists {
|
||||||
_, err := db.Exec("UPDATE sticky SET message_id = $1 WHERE guild_id = $2 AND channel_id = $3", messageID, guildID, channelID)
|
_, err := db.Exec("UPDATE sticky SET message_id = $1 WHERE guild_id = $2 AND channel_id = $3", messageID, guildID, channelID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Println(err)
|
logrus.Error(err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -191,7 +192,7 @@ func updateStickyMessageID(guildID string, channelID string, messageID string) {
|
|||||||
func removeSticky(guildID string, channelID string) {
|
func removeSticky(guildID string, channelID string) {
|
||||||
_, err := db.Exec("DELETE FROM sticky WHERE guild_id = $1 AND channel_id = $2", guildID, channelID)
|
_, err := db.Exec("DELETE FROM sticky WHERE guild_id = $1 AND channel_id = $2", guildID, channelID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Println(err)
|
logrus.Error(err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -199,7 +200,7 @@ func getFormManageIdExists(id uuid.UUID) bool {
|
|||||||
var exists bool
|
var exists bool
|
||||||
err := db.QueryRow("SELECT EXISTS (SELECT 1 FROM form_manage WHERE form_manage_id = $1)", id).Scan(&exists)
|
err := db.QueryRow("SELECT EXISTS (SELECT 1 FROM form_manage WHERE form_manage_id = $1)", id).Scan(&exists)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Println(err)
|
logrus.Error(err)
|
||||||
}
|
}
|
||||||
return exists
|
return exists
|
||||||
}
|
}
|
||||||
@@ -207,7 +208,7 @@ func getFormManageIdExists(id uuid.UUID) bool {
|
|||||||
func addFormButton(guildID string, channelID string, messageID string, formManageID string, formType string, resultChannelID string, overwriteTitle string, acceptChannelID string, modsCanComment bool) {
|
func addFormButton(guildID string, channelID string, messageID string, formManageID string, formType string, resultChannelID string, overwriteTitle string, acceptChannelID string, modsCanComment bool) {
|
||||||
_, err := db.Exec("INSERT INTO form_manage (guild_id, form_manage_id, channel_id, message_id, form_type, result_channel_id, overwrite_title, accept_channel_id, mods_can_comment) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9)", guildID, formManageID, channelID, messageID, formType, resultChannelID, overwriteTitle, acceptChannelID, modsCanComment)
|
_, err := db.Exec("INSERT INTO form_manage (guild_id, form_manage_id, channel_id, message_id, form_type, result_channel_id, overwrite_title, accept_channel_id, mods_can_comment) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9)", guildID, formManageID, channelID, messageID, formType, resultChannelID, overwriteTitle, acceptChannelID, modsCanComment)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Println(err)
|
logrus.Error(err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -218,7 +219,7 @@ func getFormManageIDs() []string {
|
|||||||
var IDs []string
|
var IDs []string
|
||||||
rows, err := db.Query("SELECT form_manage_id FROM form_manage")
|
rows, err := db.Query("SELECT form_manage_id FROM form_manage")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Println(err)
|
logrus.Error(err)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
defer rows.Close()
|
defer rows.Close()
|
||||||
@@ -226,14 +227,14 @@ func getFormManageIDs() []string {
|
|||||||
for rows.Next() {
|
for rows.Next() {
|
||||||
var id string
|
var id string
|
||||||
if err := rows.Scan(&id); err != nil {
|
if err := rows.Scan(&id); err != nil {
|
||||||
log.Println(err)
|
logrus.Error(err)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
IDs = append(IDs, id)
|
IDs = append(IDs, id)
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := rows.Err(); err != nil {
|
if err := rows.Err(); err != nil {
|
||||||
log.Println(err)
|
logrus.Error(err)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
return IDs
|
return IDs
|
||||||
@@ -243,7 +244,7 @@ func getFormType(formManageID string) string {
|
|||||||
var formType string
|
var formType string
|
||||||
err := db.QueryRow("SELECT form_type FROM form_manage WHERE form_manage_id = $1", formManageID).Scan(&formType)
|
err := db.QueryRow("SELECT form_type FROM form_manage WHERE form_manage_id = $1", formManageID).Scan(&formType)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Println(err)
|
logrus.Error(err)
|
||||||
}
|
}
|
||||||
return formType
|
return formType
|
||||||
}
|
}
|
||||||
@@ -252,19 +253,19 @@ func getFormResultValues(formManageID string) FormResult {
|
|||||||
var result FormResult
|
var result FormResult
|
||||||
err := db.QueryRow("SELECT overwrite_title FROM form_manage WHERE form_manage_id = $1", formManageID).Scan(&result.OverwriteTitle)
|
err := db.QueryRow("SELECT overwrite_title FROM form_manage WHERE form_manage_id = $1", formManageID).Scan(&result.OverwriteTitle)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Println(err)
|
logrus.Error(err)
|
||||||
}
|
}
|
||||||
err = db.QueryRow("SELECT result_channel_id FROM form_manage WHERE form_manage_id = $1", formManageID).Scan(&result.ResultChannelID)
|
err = db.QueryRow("SELECT result_channel_id FROM form_manage WHERE form_manage_id = $1", formManageID).Scan(&result.ResultChannelID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Println(err)
|
logrus.Error(err)
|
||||||
}
|
}
|
||||||
err = db.QueryRow("SELECT accept_channel_id FROM form_manage WHERE form_manage_id = $1", formManageID).Scan(&result.AcceptChannelID)
|
err = db.QueryRow("SELECT accept_channel_id FROM form_manage WHERE form_manage_id = $1", formManageID).Scan(&result.AcceptChannelID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Println(err)
|
logrus.Error(err)
|
||||||
}
|
}
|
||||||
err = db.QueryRow("SELECT mods_can_comment FROM form_manage WHERE form_manage_id = $1", formManageID).Scan(&result.ModsCanComment)
|
err = db.QueryRow("SELECT mods_can_comment FROM form_manage WHERE form_manage_id = $1", formManageID).Scan(&result.ModsCanComment)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Println(err)
|
logrus.Error(err)
|
||||||
}
|
}
|
||||||
return result
|
return result
|
||||||
}
|
}
|
||||||
@@ -273,7 +274,7 @@ func getFormOverwriteTitle(formManageID string) string {
|
|||||||
var overwriteTitle string
|
var overwriteTitle string
|
||||||
err := db.QueryRow("SELECT overwrite_title FROM form_manage WHERE form_manage_id = $1", formManageID).Scan(&overwriteTitle)
|
err := db.QueryRow("SELECT overwrite_title FROM form_manage WHERE form_manage_id = $1", formManageID).Scan(&overwriteTitle)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Println(err)
|
logrus.Error(err)
|
||||||
}
|
}
|
||||||
return overwriteTitle
|
return overwriteTitle
|
||||||
}
|
}
|
||||||
@@ -283,21 +284,21 @@ func setAutoJoinRole(guildID string, option string, roleID string) bool {
|
|||||||
var autojoinroles_exists bool
|
var autojoinroles_exists bool
|
||||||
err := db.QueryRow("SELECT EXISTS (SELECT 1 FROM autojoinroles WHERE guild_id = $1)", guildID).Scan(&autojoinroles_exists)
|
err := db.QueryRow("SELECT EXISTS (SELECT 1 FROM autojoinroles WHERE guild_id = $1)", guildID).Scan(&autojoinroles_exists)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Println(err)
|
logrus.Error(err)
|
||||||
}
|
}
|
||||||
err = db.QueryRow("SELECT EXISTS (SELECT 1 FROM autojoinroles WHERE guild_id = $1 AND "+option+"_role IS NOT NULL AND "+option+"_role != '')", guildID).Scan(&role_exists)
|
err = db.QueryRow("SELECT EXISTS (SELECT 1 FROM autojoinroles WHERE guild_id = $1 AND "+option+"_role IS NOT NULL AND "+option+"_role != '')", guildID).Scan(&role_exists)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Println(err)
|
logrus.Error(err)
|
||||||
}
|
}
|
||||||
if autojoinroles_exists {
|
if autojoinroles_exists {
|
||||||
_, err = db.Exec("UPDATE autojoinroles SET "+option+"_role = $1 WHERE guild_id = $2", roleID, guildID)
|
_, err = db.Exec("UPDATE autojoinroles SET "+option+"_role = $1 WHERE guild_id = $2", roleID, guildID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Println(err)
|
logrus.Error(err)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
_, err = db.Exec("INSERT INTO autojoinroles (guild_id, "+option+"_role) VALUES ($1, $2)", guildID, roleID)
|
_, err = db.Exec("INSERT INTO autojoinroles (guild_id, "+option+"_role) VALUES ($1, $2)", guildID, roleID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Println(err)
|
logrus.Error(err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return role_exists
|
return role_exists
|
||||||
@@ -306,7 +307,7 @@ func setAutoJoinRole(guildID string, option string, roleID string) bool {
|
|||||||
func purgeUnusedAutoJoinRoles(guildID string) {
|
func purgeUnusedAutoJoinRoles(guildID string) {
|
||||||
_, err := db.Exec("DELETE FROM autojoinroles WHERE guild_id = $1 AND user_role = '' OR user_role IS NULL AND bot_role = '' OR bot_role IS NULL", guildID)
|
_, err := db.Exec("DELETE FROM autojoinroles WHERE guild_id = $1 AND user_role = '' OR user_role IS NULL AND bot_role = '' OR bot_role IS NULL", guildID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Println(err)
|
logrus.Error(err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -320,7 +321,7 @@ func getAutoJoinRole(guildID string, isBot bool) string {
|
|||||||
}
|
}
|
||||||
err := db.QueryRow("SELECT "+isBotString+"_role FROM autojoinroles WHERE guild_id = $1", guildID).Scan(&role)
|
err := db.QueryRow("SELECT "+isBotString+"_role FROM autojoinroles WHERE guild_id = $1", guildID).Scan(&role)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Println(err, guildID)
|
logrus.Error(err, guildID)
|
||||||
}
|
}
|
||||||
return role
|
return role
|
||||||
}
|
}
|
||||||
@@ -329,17 +330,17 @@ func toggleAutoPublish(guildID string, newsChannelID string) bool {
|
|||||||
var exists bool
|
var exists bool
|
||||||
err := db.QueryRow("SELECT EXISTS (SELECT 1 FROM autopublish WHERE guild_id = $1 AND news_channel_id = $2)", guildID, newsChannelID).Scan(&exists)
|
err := db.QueryRow("SELECT EXISTS (SELECT 1 FROM autopublish WHERE guild_id = $1 AND news_channel_id = $2)", guildID, newsChannelID).Scan(&exists)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Print(err)
|
logrus.Error(err)
|
||||||
}
|
}
|
||||||
if exists {
|
if exists {
|
||||||
_, err := db.Exec("DELETE FROM autopublish WHERE guild_id = $1 AND news_channel_id = $2", guildID, newsChannelID)
|
_, err := db.Exec("DELETE FROM autopublish WHERE guild_id = $1 AND news_channel_id = $2", guildID, newsChannelID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Print(err)
|
logrus.Error(err)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
_, err := db.Exec("INSERT INTO autopublish (guild_id, news_channel_id) VALUES ($1, $2)", guildID, newsChannelID)
|
_, err := db.Exec("INSERT INTO autopublish (guild_id, news_channel_id) VALUES ($1, $2)", guildID, newsChannelID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Print(err)
|
logrus.Error(err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return exists
|
return exists
|
||||||
@@ -349,7 +350,7 @@ func isAutopublishEnabled(guildID string, newsChannelID string) bool {
|
|||||||
var enabled bool
|
var enabled bool
|
||||||
err := db.QueryRow("SELECT EXISTS (SELECT 1 FROM autopublish WHERE guild_id = $1 AND news_channel_id = $2)", guildID, newsChannelID).Scan(&enabled)
|
err := db.QueryRow("SELECT EXISTS (SELECT 1 FROM autopublish WHERE guild_id = $1 AND news_channel_id = $2)", guildID, newsChannelID).Scan(&enabled)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Print(err)
|
logrus.Error(err)
|
||||||
}
|
}
|
||||||
return enabled
|
return enabled
|
||||||
}
|
}
|
||||||
@@ -357,7 +358,7 @@ func isAutopublishEnabled(guildID string, newsChannelID string) bool {
|
|||||||
func tryDeleteUnusedMessage(messageID string) {
|
func tryDeleteUnusedMessage(messageID string) {
|
||||||
_, err := db.Exec("DELETE FROM form_manage WHERE message_id = $1", messageID)
|
_, err := db.Exec("DELETE FROM form_manage WHERE message_id = $1", messageID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Println(err)
|
logrus.Error(err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -365,20 +366,20 @@ func getAllSavedMessages() []MessageIDs {
|
|||||||
var savedMessages []MessageIDs
|
var savedMessages []MessageIDs
|
||||||
rows, err := db.Query("SELECT message_id, channel_id FROM form_manage")
|
rows, err := db.Query("SELECT message_id, channel_id FROM form_manage")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Print(err)
|
logrus.Error(err)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
defer rows.Close()
|
defer rows.Close()
|
||||||
for rows.Next() {
|
for rows.Next() {
|
||||||
var messageID, channelID string
|
var messageID, channelID string
|
||||||
if err := rows.Scan(&messageID, &channelID); err != nil {
|
if err := rows.Scan(&messageID, &channelID); err != nil {
|
||||||
log.Print(err)
|
logrus.Error(err)
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
savedMessages = append(savedMessages, MessageIDs{ID: messageID, ChannelID: channelID})
|
savedMessages = append(savedMessages, MessageIDs{ID: messageID, ChannelID: channelID})
|
||||||
}
|
}
|
||||||
if err := rows.Err(); err != nil {
|
if err := rows.Err(); err != nil {
|
||||||
log.Print(err)
|
logrus.Error(err)
|
||||||
}
|
}
|
||||||
return savedMessages
|
return savedMessages
|
||||||
}
|
}
|
||||||
|
77
tool.go
77
tool.go
@@ -1,14 +1,16 @@
|
|||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"embed"
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"fmt"
|
"fmt"
|
||||||
"log"
|
"io"
|
||||||
"os"
|
"net/http"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/bwmarrin/discordgo"
|
"github.com/bwmarrin/discordgo"
|
||||||
|
"github.com/sirupsen/logrus"
|
||||||
)
|
)
|
||||||
|
|
||||||
type ModalJsonField struct {
|
type ModalJsonField struct {
|
||||||
@@ -58,7 +60,9 @@ func jsonStringShowModal(interaction *discordgo.Interaction, manageID string, fo
|
|||||||
if overwrite[0] != "" {
|
if overwrite[0] != "" {
|
||||||
modal.Title = overwrite[0]
|
modal.Title = overwrite[0]
|
||||||
}
|
}
|
||||||
err := bot.InteractionRespond(interaction, &discordgo.InteractionResponse{
|
var err error
|
||||||
|
if components != nil {
|
||||||
|
err = bot.InteractionRespond(interaction, &discordgo.InteractionResponse{
|
||||||
Type: discordgo.InteractionResponseModal,
|
Type: discordgo.InteractionResponseModal,
|
||||||
Data: &discordgo.InteractionResponseData{
|
Data: &discordgo.InteractionResponseData{
|
||||||
CustomID: manageID + ":" + interaction.Member.User.ID,
|
CustomID: manageID + ":" + interaction.Member.User.ID,
|
||||||
@@ -66,25 +70,37 @@ func jsonStringShowModal(interaction *discordgo.Interaction, manageID string, fo
|
|||||||
Components: components,
|
Components: components,
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
}
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Print(err)
|
logrus.Error(err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Why does the golang compiler care about commands??
|
||||||
|
//
|
||||||
|
//go:embed form_templates/*.json
|
||||||
|
var formTemplates embed.FS
|
||||||
|
|
||||||
func getModalByFormID(formID string) ModalJson {
|
func getModalByFormID(formID string) ModalJson {
|
||||||
var modal ModalJson
|
var modal ModalJson
|
||||||
//TODO: add custom forms
|
entries, err := formTemplates.ReadDir("form_templates")
|
||||||
entries, err := os.ReadDir("./form_templates")
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Print(err)
|
logrus.Error(err)
|
||||||
|
return modal
|
||||||
}
|
}
|
||||||
for _, entry := range entries {
|
for _, entry := range entries {
|
||||||
if strings.HasPrefix(entry.Name(), formID) {
|
if strings.HasPrefix(entry.Name(), formID) {
|
||||||
json_file, err := os.ReadFile("./form_templates/" + entry.Name())
|
jsonFile, err := formTemplates.ReadFile("form_templates/" + entry.Name())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Print(err)
|
logrus.Error(err)
|
||||||
|
continue
|
||||||
}
|
}
|
||||||
json.Unmarshal(json_file, &modal)
|
err = json.Unmarshal(jsonFile, &modal)
|
||||||
|
if err != nil {
|
||||||
|
logrus.Error(err)
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return modal
|
return modal
|
||||||
@@ -128,26 +144,55 @@ func hexToDecimal(hexColor string) int {
|
|||||||
return int(decimal)
|
return int(decimal)
|
||||||
}
|
}
|
||||||
|
|
||||||
func respond(interaction *discordgo.Interaction, content string, ephemeral bool) {
|
func simpleGetFromAPI(key string, url string) interface{} {
|
||||||
|
client := &http.Client{}
|
||||||
|
req, err := http.NewRequest("GET", url, nil)
|
||||||
|
if err != nil {
|
||||||
|
logrus.Error("Error creating request:", err)
|
||||||
|
}
|
||||||
|
req.Header.Set("Accept", "application/json")
|
||||||
|
resp, err := client.Do(req)
|
||||||
|
if err != nil {
|
||||||
|
logrus.Error("Error making request:", err)
|
||||||
|
}
|
||||||
|
defer resp.Body.Close()
|
||||||
|
body, err := io.ReadAll(resp.Body)
|
||||||
|
if err != nil {
|
||||||
|
logrus.Error("Error reading response body:", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
var result map[string]interface{}
|
||||||
|
err = json.Unmarshal(body, &result)
|
||||||
|
if err != nil {
|
||||||
|
logrus.Error("Error decoding JSON:", err)
|
||||||
|
}
|
||||||
|
return result[key]
|
||||||
|
}
|
||||||
|
|
||||||
|
func respond(interaction *discordgo.Interaction, content string, ephemeral bool) error {
|
||||||
var flag discordgo.MessageFlags
|
var flag discordgo.MessageFlags
|
||||||
if ephemeral {
|
if ephemeral {
|
||||||
flag = discordgo.MessageFlagsEphemeral
|
flag = discordgo.MessageFlagsEphemeral
|
||||||
}
|
}
|
||||||
bot.InteractionRespond(interaction, &discordgo.InteractionResponse{
|
err := bot.InteractionRespond(interaction, &discordgo.InteractionResponse{
|
||||||
Type: discordgo.InteractionResponseChannelMessageWithSource,
|
Type: discordgo.InteractionResponseChannelMessageWithSource,
|
||||||
Data: &discordgo.InteractionResponseData{
|
Data: &discordgo.InteractionResponseData{
|
||||||
Content: content,
|
Content: content,
|
||||||
Flags: flag,
|
Flags: flag,
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func respondEmbed(interaction *discordgo.Interaction, embed discordgo.MessageEmbed, ephemeral bool) {
|
func respondEmbed(interaction *discordgo.Interaction, embed discordgo.MessageEmbed, ephemeral bool) error {
|
||||||
var flag discordgo.MessageFlags
|
var flag discordgo.MessageFlags
|
||||||
if ephemeral {
|
if ephemeral {
|
||||||
flag = discordgo.MessageFlagsEphemeral
|
flag = discordgo.MessageFlagsEphemeral
|
||||||
}
|
}
|
||||||
bot.InteractionRespond(interaction, &discordgo.InteractionResponse{
|
err := bot.InteractionRespond(interaction, &discordgo.InteractionResponse{
|
||||||
Type: discordgo.InteractionResponseChannelMessageWithSource,
|
Type: discordgo.InteractionResponseChannelMessageWithSource,
|
||||||
Data: &discordgo.InteractionResponseData{
|
Data: &discordgo.InteractionResponseData{
|
||||||
Flags: flag,
|
Flags: flag,
|
||||||
@@ -156,6 +201,10 @@ func respondEmbed(interaction *discordgo.Interaction, embed discordgo.MessageEmb
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func findAndDeleteUnusedMessages() {
|
func findAndDeleteUnusedMessages() {
|
||||||
|
Reference in New Issue
Block a user