Spending lots of time on useless discord bots makes to make the pain go away
This commit is contained in:
63
lib/processor.go
Normal file
63
lib/processor.go
Normal file
@ -0,0 +1,63 @@
|
||||
package lib
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
"github.com/bwmarrin/discordgo"
|
||||
)
|
||||
|
||||
// Represents a function that processes a message
|
||||
type MessageProcessor func(s *discordgo.Session, m *discordgo.MessageCreate, ctx *ProcessContext) error
|
||||
|
||||
// Holds shared data between processors
|
||||
type ProcessContext struct {
|
||||
UserID int
|
||||
GuildID string
|
||||
DiscordUser *discordgo.User
|
||||
}
|
||||
|
||||
// Handles the registration and execution of message processors
|
||||
type MessageProcessorManager struct {
|
||||
processors []MessageProcessor
|
||||
}
|
||||
|
||||
// Creates a new MessageProcessorManager
|
||||
func NewMessageProcessorManager() *MessageProcessorManager {
|
||||
return &MessageProcessorManager{
|
||||
processors: make([]MessageProcessor, 0),
|
||||
}
|
||||
}
|
||||
|
||||
// Adds a new message processor to the manager
|
||||
func (pm *MessageProcessorManager) RegisterProcessor(processor MessageProcessor) {
|
||||
pm.processors = append(pm.processors, processor)
|
||||
}
|
||||
|
||||
// Runs all registered processors on a message
|
||||
func (pm *MessageProcessorManager) ProcessMessage(s *discordgo.Session, m *discordgo.MessageCreate) {
|
||||
if m.Author.Bot {
|
||||
return
|
||||
}
|
||||
|
||||
// Create processing context
|
||||
ctx := &ProcessContext{
|
||||
GuildID: m.GuildID,
|
||||
DiscordUser: m.Author,
|
||||
}
|
||||
|
||||
// Get or create user and guild profile together
|
||||
userID, err := GetOrCreateUserWithGuild(m.Author.ID, m.Author.Username, m.GuildID)
|
||||
if err != nil {
|
||||
ThrowWithError("MessageProcessor", fmt.Sprintf("failed to handle user and guild profile: %v", err))
|
||||
return
|
||||
}
|
||||
|
||||
ctx.UserID = userID
|
||||
|
||||
// Run each processor with the context
|
||||
for _, processor := range pm.processors {
|
||||
if err := processor(s, m, ctx); err != nil {
|
||||
ThrowWithError("MessageProcessor", err.Error())
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user