added sticky command back with disgo

This commit is contained in:
2024-04-07 18:00:08 +02:00
parent 9e613d5adc
commit 01ac1ec363
3 changed files with 59 additions and 53 deletions

View File

@@ -1,103 +1,106 @@
package main package main
/*
import ( import (
"github.com/bwmarrin/discordgo" "github.com/disgoorg/disgo/discord"
"github.com/disgoorg/disgo/events"
"github.com/disgoorg/json"
"github.com/disgoorg/snowflake/v2"
"github.com/sirupsen/logrus" "github.com/sirupsen/logrus"
) )
var cmd_sticky Command = Command{ var cmd_sticky Command = Command{
Definition: discordgo.ApplicationCommand{ Definition: discord.SlashCommandCreate{
Name: "sticky", Name: "sticky",
Description: "Stick or unstick messages to the bottom of the current channel", Description: "Stick or unstick messages to the bottom of the current channel",
DefaultMemberPermissions: int64Ptr(discordgo.PermissionManageMessages), DefaultMemberPermissions: json.NewNullablePtr(discord.PermissionManageMessages),
Options: []*discordgo.ApplicationCommandOption{ Options: []discord.ApplicationCommandOption{
{ &discord.ApplicationCommandOptionString{
Type: discordgo.ApplicationCommandOptionString,
Name: "message", Name: "message",
Description: "The message you want to stick to the bottom of this channel", Description: "The message you want to stick to the bottom of this channel",
Required: false, Required: false,
}, },
}, },
}, },
Interact: func(s *discordgo.Session, i *discordgo.InteractionCreate) { Interact: func(e *events.ApplicationCommandInteractionCreate) {
if len(i.ApplicationCommandData().Options) == 0 { if len(e.SlashCommandInteractionData().Options) == 0 {
if hasSticky(i.GuildID, i.ChannelID) { if hasSticky(e.GuildID().String(), e.Channel().ID().String()) {
err := s.ChannelMessageDelete(i.ChannelID, getStickyMessageID(i.GuildID, i.ChannelID)) err := e.Client().Rest().DeleteMessage(e.Channel().ID(), snowflake.MustParse(getStickyMessageID(e.GuildID().String(), e.Channel().ID().String())))
if err != nil { if err != nil {
logrus.Error(err) logrus.Error(err)
} }
removeSticky(i.GuildID, i.ChannelID) removeSticky(e.GuildID().String(), e.Channel().ID().String())
err = respond(i.Interaction, "The sticky message was removed from this channel!", true) err = e.CreateMessage(discord.NewMessageCreateBuilder().
SetContent("The sticky message was removed from this channel!").SetEphemeral(true).
Build())
if err != nil { if err != nil {
logrus.Error(err) logrus.Error(err)
} }
} else { } else {
err := respond(i.Interaction, "This channel has no sticky message!", true) err := e.CreateMessage(discord.NewMessageCreateBuilder().
SetContent("This channel has no sticky message!").SetEphemeral(true).
Build())
if err != nil { if err != nil {
logrus.Error(err) logrus.Error(err)
} }
} }
} else { } else {
inputStickyMessage(i) inputStickyMessage(e)
} }
}, },
} }
var context_sticky Command = Command{ var context_sticky Command = Command{
Definition: discordgo.ApplicationCommand{ Definition: discord.MessageCommandCreate{
Name: "Stick to channel", Name: "Stick to channel",
Type: discordgo.MessageApplicationCommand, DefaultMemberPermissions: json.NewNullablePtr(discord.PermissionManageMessages),
DefaultMemberPermissions: int64Ptr(discordgo.PermissionManageMessages),
}, },
Interact: func(s *discordgo.Session, i *discordgo.InteractionCreate) { Interact: func(e *events.ApplicationCommandInteractionCreate) {
inputStickyMessage(i) inputStickyMessage(e)
}, },
} }
func inputStickyMessage(i *discordgo.InteractionCreate) { func inputStickyMessage(e *events.ApplicationCommandInteractionCreate) {
var messageText string var messageText string
if len(i.ApplicationCommandData().Options) == 0 { if e.ApplicationCommandInteraction.Data.Type() == discord.ApplicationCommandTypeMessage {
messageText = i.ApplicationCommandData().Resolved.Messages[i.ApplicationCommandData().TargetID].Content //TODO add more data then just content messageText = e.MessageCommandInteractionData().TargetMessage().Content //TODO add more data then just content
} else { } else {
messageText = i.ApplicationCommandData().Options[0].StringValue() messageText = e.SlashCommandInteractionData().String("message")
} }
if messageText == "" { if messageText == "" {
err := respond(i.Interaction, "Can't add empty sticky messages!", true) err := e.CreateMessage(discord.NewMessageCreateBuilder().
SetContent("Can't add empty sticky messages!").SetEphemeral(true).
Build())
if err != nil { if err != nil {
logrus.Error(err) logrus.Error(err)
} }
} else { } else {
message, err := bot.ChannelMessageSendEmbed(i.ChannelID, &discordgo.MessageEmbed{ message, err := e.Client().Rest().CreateMessage(e.Channel().ID(), discord.MessageCreate{Embeds: []discord.Embed{
Type: discordgo.EmbedTypeArticle, {Description: messageText, Footer: &discord.EmbedFooter{Text: "📌 Sticky message"}, Color: hexToDecimal(color["primary"])}}})
Footer: &discordgo.MessageEmbedFooter{
Text: "📌 Sticky message",
},
Color: hexToDecimal(color["primary"]),
Description: messageText,
})
if err != nil { if err != nil {
logrus.Error(err) logrus.Error(err)
} }
if hasSticky(i.GuildID, i.ChannelID) { if hasSticky(e.GuildID().String(), e.Channel().ID().String()) {
err = bot.ChannelMessageDelete(i.ChannelID, getStickyMessageID(i.GuildID, i.ChannelID)) err = e.Client().Rest().DeleteMessage(e.Channel().ID(), snowflake.MustParse(getStickyMessageID(e.GuildID().String(), e.Channel().ID().String())))
if err != nil { if err != nil {
logrus.Error(err, getStickyMessageID(i.GuildID, i.ChannelID)) logrus.Error(err, getStickyMessageID(e.GuildID().String(), e.Channel().ID().String()))
} }
removeSticky(i.GuildID, i.ChannelID) removeSticky(e.GuildID().String(), e.Channel().ID().String())
addSticky(i.GuildID, i.ChannelID, messageText, message.ID) addSticky(e.GuildID().String(), e.Channel().ID().String(), messageText, message.ID.String())
err = respond(i.Interaction, "Sticky message in this channel was updated!", true) err = e.CreateMessage(discord.NewMessageCreateBuilder().
SetContent("Sticky message in this channel was updated!").SetEphemeral(true).
Build())
if err != nil { if err != nil {
logrus.Error(err) logrus.Error(err)
} }
} else { } else {
addSticky(i.GuildID, i.ChannelID, messageText, message.ID) addSticky(e.GuildID().String(), e.Channel().ID().String(), messageText, message.ID.String())
err := respond(i.Interaction, "Message sticked to the channel!", true) err := e.CreateMessage(discord.NewMessageCreateBuilder().
SetContent("Message sticked to the channel!").SetEphemeral(true).
Build())
if err != nil { if err != nil {
logrus.Error(err) logrus.Error(err)
} }
} }
} }
} }
*/

View File

@@ -26,7 +26,7 @@ type Command struct {
AllowDM bool AllowDM bool
} }
var commands []Command = []Command{cmd_tag, cmd_tag_short, context_tag /*, cmd_form, cmd_ticket_form, cmd_dadjoke, cmd_ping, cmd_ask, cmd_sticky, cmd_cat, cmd_autojoinroles, cmd_autopublish, context_sticky, cmd_userinfo*/} var commands []Command = []Command{cmd_tag, cmd_tag_short, context_tag, cmd_sticky, context_sticky /*, cmd_form, cmd_ticket_form, cmd_dadjoke, cmd_ping, cmd_ask, cmd_cat, cmd_autojoinroles, cmd_autopublish, cmd_userinfo*/}
func ready(e *events.Ready) { func ready(e *events.Ready) {
logrus.Info("Starting up...") logrus.Info("Starting up...")
@@ -196,15 +196,18 @@ func messageCreate(e *events.MessageCreate) {
updateStickyMessageID(e.Message.GuildID.String(), e.Message.ChannelID.String(), stickyMessage.ID.String()) updateStickyMessageID(e.Message.GuildID.String(), e.Message.ChannelID.String(), stickyMessage.ID.String())
} }
} }
channel, _ := e.Channel() /*
if channel.Type() == discord.ChannelTypeGuildNews { channel, _ := e.Channel()
if isAutopublishEnabled(e.GuildID.String(), e.ChannelID.String()) {
_, err := e.Client().Rest().CrosspostMessage(e.ChannelID, e.MessageID) if channel.Type() == discord.ChannelTypeGuildNews {
if err != nil { if isAutopublishEnabled(e.GuildID.String(), e.ChannelID.String()) {
logrus.Error(err) _, err := e.Client().Rest().CrosspostMessage(e.ChannelID, e.MessageID)
} if err != nil {
} logrus.Error(err)
} }
}
}
*/
} }
func messageDelete(e *events.MessageDelete) { //TODO: also clear on bot start when message doesn't exist func messageDelete(e *events.MessageDelete) { //TODO: also clear on bot start when message doesn't exist

View File

@@ -48,8 +48,8 @@ func main() {
bot.WithEventListenerFunc(autocompleteInteractionCreate), bot.WithEventListenerFunc(autocompleteInteractionCreate),
bot.WithEventListenerFunc(componentInteractionCreate), bot.WithEventListenerFunc(componentInteractionCreate),
bot.WithEventListenerFunc(modalSubmitInteractionCreate), bot.WithEventListenerFunc(modalSubmitInteractionCreate),
bot.WithEventListenerFunc(messageCreate),
/* /*
bot.WithEventListenerFunc(messageCreate),
bot.WithEventListenerFunc(messageDelete), bot.WithEventListenerFunc(messageDelete),
bot.WithEventListenerFunc(guildMemberJoin), bot.WithEventListenerFunc(guildMemberJoin),
*/ */