Files
2026-05-10 18:07:51 +02:00

103 lines
3.0 KiB
Go

package logger
import (
"fmt"
"log/slog"
"github.com/bwmarrin/discordgo"
"github.com/leolionad58/ticketbot/internal/config"
"github.com/leolionad58/ticketbot/internal/db"
)
type DiscordLogger struct {
Session *discordgo.Session
Config *config.Provider
}
func NewDiscordLogger(s *discordgo.Session, cfg *config.Provider) *DiscordLogger {
return &DiscordLogger{Session: s, Config: cfg}
}
func (l *DiscordLogger) send(embed *discordgo.MessageEmbed) {
cfg := l.Config.Get()
if cfg.Bot.LogsChannel == "" {
return
}
l.sendTo(cfg.Bot.LogsChannel, embed)
}
func (l *DiscordLogger) sendTo(channelID string, embed *discordgo.MessageEmbed) {
if channelID == "" {
return
}
if _, err := l.Session.ChannelMessageSendEmbed(channelID, embed); err != nil {
slog.Error("discord log: send", "err", err)
}
}
func (l *DiscordLogger) logChannel(ticket *db.Ticket) string {
if ticket.LogChannelID != "" {
return ticket.LogChannelID
}
return l.Config.Get().Bot.LogsChannel
}
func (l *DiscordLogger) LogTicketOpened(ticket *db.Ticket, userID string) {
l.sendTo(l.logChannel(ticket), &discordgo.MessageEmbed{
Title: "Ticket ouvert",
Color: 0x57f287,
Fields: []*discordgo.MessageEmbedField{
{Name: "Type", Value: ticket.Type, Inline: true},
{Name: "Utilisateur", Value: fmt.Sprintf("<@%s>", userID), Inline: true},
{Name: "Channel", Value: fmt.Sprintf("<#%s>", ticket.ChannelID), Inline: true},
{Name: "Numéro", Value: fmt.Sprintf("%04d", ticket.TicketNumber), Inline: true},
},
})
}
func (l *DiscordLogger) LogTicketClaimed(ticket *db.Ticket, staffID string) {
l.sendTo(l.logChannel(ticket), &discordgo.MessageEmbed{
Title: "Ticket claim",
Color: 0xfee75c,
Fields: []*discordgo.MessageEmbedField{
{Name: "Staff", Value: fmt.Sprintf("<@%s>", staffID), Inline: true},
{Name: "Ticket", Value: fmt.Sprintf("<#%s>", ticket.ChannelID), Inline: true},
},
})
}
func (l *DiscordLogger) LogTicketClosed(ticket *db.Ticket, staffID, reason, transcriptPath string) {
l.sendTo(l.logChannel(ticket), &discordgo.MessageEmbed{
Title: "Ticket fermé",
Color: 0xed4245,
Fields: []*discordgo.MessageEmbedField{
{Name: "Staff", Value: fmt.Sprintf("<@%s>", staffID), Inline: true},
{Name: "Ticket", Value: fmt.Sprintf("%s-%04d", ticket.Type, ticket.TicketNumber), Inline: true},
{Name: "Raison", Value: reason},
},
})
}
func (l *DiscordLogger) LogConvocationOpened(staffID, targetID, reason, channelID string) {
l.send(&discordgo.MessageEmbed{
Title: "Convocation ouverte",
Color: 0x5865f2,
Fields: []*discordgo.MessageEmbedField{
{Name: "Staff", Value: fmt.Sprintf("<@%s>", staffID), Inline: true},
{Name: "Utilisateur", Value: fmt.Sprintf("<@%s>", targetID), Inline: true},
{Name: "Raison", Value: reason},
{Name: "Channel", Value: fmt.Sprintf("<#%s>", channelID), Inline: true},
},
})
}
func (l *DiscordLogger) LogError(msg string, fields ...any) {
slog.Error(msg, fields...)
content := msg
l.send(&discordgo.MessageEmbed{
Title: "Erreur critique",
Description: content,
Color: 0xff0000,
})
}