103 lines
3.0 KiB
Go
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,
|
|
})
|
|
}
|