77 lines
1.9 KiB
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)
|
|
}
|
|
|
|
}
|