added autojoinroles without permissioncheck

This commit is contained in:
2024-03-04 14:37:14 +01:00
parent eb6a2dbc5c
commit 031d8ee81d
5 changed files with 69 additions and 33 deletions

View File

@@ -34,13 +34,18 @@ var autojoinroles_command Command = Command{
}, },
}, },
Interact: func(s *discordgo.Session, i *discordgo.InteractionCreate) { Interact: func(s *discordgo.Session, i *discordgo.InteractionCreate) {
var role string
option := i.ApplicationCommandData().Options[0].Name option := i.ApplicationCommandData().Options[0].Name
role := i.ApplicationCommandData().Options[0].Options[0].RoleValue(s, i.GuildID).ID
var content string var content string
if len(i.ApplicationCommandData().Options[0].Options) == 1 {
role = i.ApplicationCommandData().Options[0].Options[0].RoleValue(s, i.GuildID).ID
if setAutoJoinRole(i.GuildID, option, role) { if setAutoJoinRole(i.GuildID, option, role) {
content = "Setup auto join role for " + option + "s as <@&" + role + ">"
} else {
content = "Updated auto join role for " + option + "s as <@&" + role + ">" content = "Updated auto join role for " + option + "s as <@&" + role + ">"
} else {
content = "Setup auto join role for " + option + "s as <@&" + role + ">"
}
} else if setAutoJoinRole(i.GuildID, option, role) {
content = "Deleted auto join role for " + option + "s"
} }
s.InteractionRespond(i.Interaction, &discordgo.InteractionResponse{ s.InteractionRespond(i.Interaction, &discordgo.InteractionResponse{
Type: discordgo.InteractionResponseChannelMessageWithSource, Type: discordgo.InteractionResponseChannelMessageWithSource,
@@ -49,6 +54,6 @@ var autojoinroles_command Command = Command{
Flags: discordgo.MessageFlagsEphemeral, Flags: discordgo.MessageFlagsEphemeral,
}, },
}) })
purgeUnusedAutoJoinRoles(i.GuildID)
}, },
} }

View File

@@ -1,22 +0,0 @@
package main
import (
"github.com/bwmarrin/discordgo"
)
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 hasSticky(m.GuildID, m.ChannelID) {
s.ChannelMessageDelete(m.ChannelID, getStickyMessageID(m.GuildID, m.ChannelID))
stickyMessage, _ := s.ChannelMessageSendEmbed(m.ChannelID, &discordgo.MessageEmbed{
Type: discordgo.EmbedTypeArticle,
Footer: &discordgo.MessageEmbedFooter{
Text: "📌 Sticky message",
},
Color: hexToDecimal(color["primary"]),
Description: getStickyMessageContent(m.GuildID, m.ChannelID),
})
updateStickyMessageID(m.GuildID, m.ChannelID, stickyMessage.ID)
}
}
}

View File

@@ -2,6 +2,7 @@ package main
import ( import (
"fmt" "fmt"
"log"
"os" "os"
"slices" "slices"
"strings" "strings"
@@ -106,3 +107,27 @@ func removeOldCommandFromAllGuilds(s *discordgo.Session) {
} }
} }
} }
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 hasSticky(m.GuildID, m.ChannelID) {
s.ChannelMessageDelete(m.ChannelID, getStickyMessageID(m.GuildID, m.ChannelID))
stickyMessage, _ := s.ChannelMessageSendEmbed(m.ChannelID, &discordgo.MessageEmbed{
Type: discordgo.EmbedTypeArticle,
Footer: &discordgo.MessageEmbedFooter{
Text: "📌 Sticky message",
},
Color: hexToDecimal(color["primary"]),
Description: getStickyMessageContent(m.GuildID, m.ChannelID),
})
updateStickyMessageID(m.GuildID, m.ChannelID, stickyMessage.ID)
}
}
}
func guildMemberJoin(s *discordgo.Session, m *discordgo.GuildMemberAdd) {
err := s.GuildMemberRoleAdd(m.GuildID, m.User.ID, getAutoJoinRole(m.GuildID, m.User.Bot))
if err != nil {
log.Println(err)
}
}

View File

@@ -38,10 +38,11 @@ func main() {
} else { } else {
fmt.Println("Discord session created") fmt.Println("Discord session created")
} }
discord.Identify.Intents = discordgo.IntentsGuildMessages | discordgo.IntentsGuilds | discordgo.IntentMessageContent discord.Identify.Intents = discordgo.IntentsGuildMessages | discordgo.IntentsGuilds | discordgo.IntentMessageContent | discordgo.IntentGuildMembers
discord.AddHandler(ready) discord.AddHandler(ready)
discord.AddHandler(interactionCreate) discord.AddHandler(interactionCreate)
discord.AddHandler(messageCreate) discord.AddHandler(messageCreate)
discord.AddHandler(guildMemberJoin)
err = discord.Open() err = discord.Open()
if err != nil { if err != nil {
fmt.Println("error opening connection,", err) fmt.Println("error opening connection,", err)

View File

@@ -237,12 +237,17 @@ func getFormType(formManageID string) string {
} }
func setAutoJoinRole(guildID string, option string, roleID string) bool { func setAutoJoinRole(guildID string, option string, roleID string) bool {
var exists bool var role_exists bool
err := db.QueryRow("SELECT EXISTS (SELECT 1 FROM autojoinroles WHERE guild_id = $1)", guildID).Scan(&exists) var autojoinroles_exists bool
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) log.Println(err)
} }
if 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 {
log.Println(err)
}
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) log.Println(err)
@@ -253,5 +258,27 @@ func setAutoJoinRole(guildID string, option string, roleID string) bool {
log.Println(err) log.Println(err)
} }
} }
return exists return role_exists
}
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)
if err != nil {
log.Println(err)
}
}
func getAutoJoinRole(guildID string, isBot bool) string {
var isBotString string
var role string
if isBot {
isBotString = "bot"
} else {
isBotString = "user"
}
err := db.QueryRow("SELECT "+isBotString+"_role FROM autojoinroles WHERE guild_id = $1", guildID).Scan(&role)
if err != nil {
log.Println(err, guildID)
}
return role
} }