From 247eb61c20a60a65a7fffe40ef2364cfbdc4c331 Mon Sep 17 00:00:00 2001 From: Kesuaheli Date: Tue, 7 Jan 2025 20:21:01 +0100 Subject: [PATCH] feat(announcement): added announcement admin command --- data/lang/de.yaml | 5 +++ data/lang/en.yaml | 5 +++ modules/announcement/announcementbase.go | 15 +++++++ modules/announcement/chatCommand.go | 51 ++++++++++++++++++++++++ modules/announcement/component.go | 43 ++++++++++++++++++++ 5 files changed, 119 insertions(+) create mode 100644 modules/announcement/announcementbase.go create mode 100644 modules/announcement/chatCommand.go create mode 100644 modules/announcement/component.go diff --git a/data/lang/de.yaml b/data/lang/de.yaml index 8acb7e4..dab568c 100644 --- a/data/lang/de.yaml +++ b/data/lang/de.yaml @@ -10,6 +10,11 @@ discord.command: msg.button.delete: Schließen msg.error.not_author: Das ist die Nachricht von %s. Du kannst das nicht verwenden! + announcement: + base: ankündigungen + base.description: Admin Commands für Ankündigungen + display: Ankündigungen + birthday: base: geburtstag base.description: Verschiedene Einstellungen für den Geburtstagsbot diff --git a/data/lang/en.yaml b/data/lang/en.yaml index 1fd687b..62663b5 100644 --- a/data/lang/en.yaml +++ b/data/lang/en.yaml @@ -172,6 +172,11 @@ discord.command: msg.teams.title: Teams msg.teams.team: Team %d + announcement: + base: announcement + base.description: Admin commands for announcements + display: Announcements + secretsanta: base: Secret Santa display: Secret Santa diff --git a/modules/announcement/announcementbase.go b/modules/announcement/announcementbase.go new file mode 100644 index 0000000..ed7a1e7 --- /dev/null +++ b/modules/announcement/announcementbase.go @@ -0,0 +1,15 @@ +package announcement + +import ( + "github.com/bwmarrin/discordgo" + "github.com/cake4everyone/cake4everybot/logger" + "github.com/cake4everyone/cake4everybot/util" +) + +var log = logger.New("Announcement") + +type announcementBase struct { + util.InteractionUtil + member *discordgo.Member + user *discordgo.User +} diff --git a/modules/announcement/chatCommand.go b/modules/announcement/chatCommand.go new file mode 100644 index 0000000..5532f3f --- /dev/null +++ b/modules/announcement/chatCommand.go @@ -0,0 +1,51 @@ +package announcement + +import ( + "github.com/bwmarrin/discordgo" + "github.com/cake4everyone/cake4everybot/data/lang" + "github.com/cake4everyone/cake4everybot/util" +) + +// The Chat (slash) command of the announcement package. +type Chat struct { + announcementBase + ID string +} + +const ( + // Prefix for translation key, i.e.: + // key := tp+"base" // => announcement + tp = "discord.command.announcement." +) + +// AppCmd (ApplicationCommand) returns the definition of the chat command +func (cmd Chat) AppCmd() *discordgo.ApplicationCommand { + return &discordgo.ApplicationCommand{ + Name: lang.GetDefault(tp + "base"), + NameLocalizations: util.TranslateLocalization(tp + "base"), + Description: lang.GetDefault(tp + "base.description"), + DescriptionLocalizations: util.TranslateLocalization(tp + "base.description"), + } +} + +// Handle handles the functionality of a command +func (cmd Chat) Handle(s *discordgo.Session, i *discordgo.InteractionCreate) { + cmd.InteractionUtil = util.InteractionUtil{Session: s, Interaction: i} + cmd.member = i.Member + cmd.user = i.User + if i.Member != nil { + cmd.user = i.Member.User + } else if i.User != nil { + cmd.member = &discordgo.Member{User: i.User} + } +} + +// SetID sets the registered command ID for internal uses after uploading to discord +func (cmd *Chat) SetID(id string) { + cmd.ID = id +} + +// GetID gets the registered command ID +func (cmd Chat) GetID() string { + return cmd.ID +} diff --git a/modules/announcement/component.go b/modules/announcement/component.go new file mode 100644 index 0000000..95c33bd --- /dev/null +++ b/modules/announcement/component.go @@ -0,0 +1,43 @@ +package announcement + +import ( + "strings" + + "github.com/bwmarrin/discordgo" + "github.com/cake4everyone/cake4everybot/util" +) + +// The Component of the announcement package. +type Component struct { + announcementBase + data discordgo.MessageComponentInteractionData +} + +// Handle handles the functionality of a component. +func (c Component) Handle(s *discordgo.Session, i *discordgo.InteractionCreate) { + c.InteractionUtil = util.InteractionUtil{Session: s, Interaction: i} + c.member = i.Member + c.user = i.User + if i.Member != nil { + c.user = i.Member.User + } else if i.User != nil { + c.member = &discordgo.Member{User: i.User} + } + //lint:ignore SA4005 currently not used but will be when implementing the component // TODO: remove when implementing the component + c.data = i.MessageComponentData() + + ids := strings.Split(c.data.CustomID, ".") + // pop the first level identifier + util.ShiftL(ids) + + switch util.ShiftL(ids) { + default: + log.Printf("Unknown component interaction ID: %s", c.data.CustomID) + } + +} + +// ID returns the custom ID of the modal to identify the module +func (c Component) ID() string { + return "announcement" +}