diff --git a/connectors/discord/discord.go b/connectors/discord/discord.go index 950c1c9..cddc4b6 100644 --- a/connectors/discord/discord.go +++ b/connectors/discord/discord.go @@ -429,3 +429,19 @@ func (d *Discord) Nick(nick string) error { guildID := d.config.Get("discord.guildid", "") return d.client.GuildMemberNickname(guildID, "@me", nick) } + +func (d *Discord) Topic(channelID string) (string, error) { + channel, err := d.client.Channel(channelID) + if err != nil { + return "", err + } + return channel.Topic, nil +} + +func (d *Discord) SetTopic(channelID, topic string) error { + ce := &discordgo.ChannelEdit{ + Topic: topic, + } + _, err := d.client.ChannelEditComplex(channelID, ce) + return err +} diff --git a/main.go b/main.go index fab30ce..ef7c5b0 100644 --- a/main.go +++ b/main.go @@ -4,6 +4,7 @@ package main import ( "flag" + "github.com/velour/catbase/plugins/topic" "io" "math/rand" "os" @@ -173,6 +174,7 @@ func main() { b.AddPlugin(quotegame.New(b)) b.AddPlugin(emojy.New(b)) b.AddPlugin(cowboy.New(b)) + b.AddPlugin(topic.New(b)) // catches anything left, will always return true b.AddPlugin(fact.New(b)) diff --git a/plugins/topic/topic.go b/plugins/topic/topic.go new file mode 100644 index 0000000..0bcd5c8 --- /dev/null +++ b/plugins/topic/topic.go @@ -0,0 +1,60 @@ +package topic + +import ( + "fmt" + "github.com/rs/zerolog/log" + "github.com/velour/catbase/bot" + "github.com/velour/catbase/config" + "github.com/velour/catbase/connectors/discord" + "regexp" +) + +type Topic struct { + b bot.Bot + c *config.Config +} + +func New(b bot.Bot) *Topic { + t := &Topic{ + b: b, + c: b.Config(), + } + t.register() + return t +} + +func (p *Topic) register() { + p.b.RegisterRegexCmd(p, bot.Message, regexp.MustCompile(`(?i)^topic (?P.+)$`), func(r bot.Request) bool { + switch conn := r.Conn.(type) { + case *discord.Discord: + err := conn.SetTopic(r.Msg.Channel, r.Values["topic"]) + if err != nil { + log.Error().Err(err).Msg("couldn't set topic") + return false + } + topic, err := conn.Topic(r.Msg.Channel) + if err != nil { + log.Error().Err(err).Msg("couldn't get topic") + return false + } + p.b.Send(conn, bot.Message, r.Msg.Channel, fmt.Sprintf("Topic: %s", topic)) + return true + + } + return false + }) + p.b.RegisterRegexCmd(p, bot.Message, regexp.MustCompile(`(?i)^topic$`), func(r bot.Request) bool { + switch conn := r.Conn.(type) { + case *discord.Discord: + topic, err := conn.Topic(r.Msg.Channel) + if err != nil { + log.Error().Err(err).Msg("couldn't get topic") + return false + } + p.b.Send(conn, bot.Message, r.Msg.Channel, fmt.Sprintf("Topic: %s", topic)) + return true + + } + return false + }) +}