birdbot/discord/message.go

77 lines
1.9 KiB
Go

package discord
import (
"log"
"github.com/bwmarrin/discordgo"
"github.com/yeslayla/birdbot/core"
"github.com/yeslayla/birdbot/persistence"
)
const WebhookName = "BirdBot"
// RefreshWebhookState refreshes the state of all webhooks
func (discord *Discord) RefreshWebhookState() {
channels, err := discord.session.GuildChannels(discord.guildID)
if err != nil {
log.Printf("Error getting channels: %s", err)
return
}
for _, channel := range channels {
webhookData, err := discord.db.GetDiscordWebhook(channel.ID)
if err != nil {
log.Printf("Error getting webhook from DB: %s", err)
return
}
if webhookData == nil {
continue
}
_, err = discord.session.WebhookEdit(webhookData.ID, WebhookName, discord.GetAvatarBase64(NewUser(discord.session.State.User)), channel.ID)
if err != nil {
log.Printf("Error updating webhook: %s", err)
}
}
}
// WebhookSendMessage sends a message to a channel using a webhook
func (discord *Discord) WebhookSendMessage(channel *core.Channel, displayName string, message string) {
webhookData, err := discord.db.GetDiscordWebhook(channel.ID)
if err != nil {
log.Printf("Error getting webhook from DB: %s", err)
return
}
if webhookData == nil {
webhookAvatar := discord.GetAvatarBase64(NewUser(discord.session.State.User))
webhook, err := discord.session.WebhookCreate(channel.ID, WebhookName, webhookAvatar)
if err != nil {
log.Printf("Error creating webhook: %s", err)
return
}
webhookData = &persistence.DBDiscordWebhook{
ID: webhook.ID,
Token: webhook.Token,
}
if err := discord.db.SetDiscordWebhook(channel.ID, webhookData); err != nil {
log.Fatalf("Error failed to store webhook in DB: %s", err)
return
}
}
if _, err = discord.session.WebhookExecute(webhookData.ID, webhookData.Token, false, &discordgo.WebhookParams{
Content: message,
Username: displayName,
}); err != nil {
log.Printf("Failed to send message over webhook: %s", err)
}
}