package chat import "context" // ChannelDatabase defines database operations for chat channels type ChannelDatabase interface { // LoadWorldChannels retrieves all persistent world channels from database LoadWorldChannels(ctx context.Context) ([]ChatChannelData, error) // SaveChannel persists a channel to database (world channels only) SaveChannel(ctx context.Context, channel ChatChannelData) error // DeleteChannel removes a channel from database DeleteChannel(ctx context.Context, channelName string) error } // ClientManager handles client communication for chat system type ClientManager interface { // SendChannelList sends available channels to a client SendChannelList(characterID int32, channels []ChannelInfo) error // SendChannelMessage delivers a message to a client SendChannelMessage(characterID int32, message ChannelMessage) error // SendChannelUpdate notifies client of channel membership changes SendChannelUpdate(characterID int32, channelName string, action int, characterName string) error // SendChannelUserList sends who list to client SendChannelUserList(characterID int32, channelName string, members []ChannelMember) error // IsClientConnected checks if a character is currently online IsClientConnected(characterID int32) bool } // PlayerManager provides player information for chat system type PlayerManager interface { // GetPlayerInfo retrieves basic player information GetPlayerInfo(characterID int32) (PlayerInfo, error) // ValidatePlayer checks if player meets channel requirements ValidatePlayer(characterID int32, levelReq, raceReq, classReq int32) bool // GetPlayerLanguages returns languages known by player GetPlayerLanguages(characterID int32) ([]int32, error) } // LanguageProcessor handles multilingual chat processing type LanguageProcessor interface { // ProcessMessage processes a message for language comprehension ProcessMessage(senderID, receiverID int32, message string, languageID int32) (string, error) // CanUnderstand checks if receiver can understand sender's language CanUnderstand(senderID, receiverID int32, languageID int32) bool // GetDefaultLanguage returns the default language for a character GetDefaultLanguage(characterID int32) int32 } // PlayerInfo contains basic player information needed for chat type PlayerInfo struct { CharacterID int32 CharacterName string Level int32 Race int32 Class int32 IsOnline bool } // ChatAware interface for entities that can participate in chat type ChatAware interface { GetCharacterID() int32 GetCharacterName() string GetLevel() int32 GetRace() int32 GetClass() int32 } // EntityChatAdapter adapts entities to work with chat system type EntityChatAdapter struct { entity interface { GetID() int32 // Add other entity methods as needed } playerManager PlayerManager } // GetCharacterID returns the character ID from the adapted entity func (a *EntityChatAdapter) GetCharacterID() int32 { return a.entity.GetID() } // GetCharacterName returns the character name from player manager func (a *EntityChatAdapter) GetCharacterName() string { if info, err := a.playerManager.GetPlayerInfo(a.entity.GetID()); err == nil { return info.CharacterName } return "" } // GetLevel returns the character level from player manager func (a *EntityChatAdapter) GetLevel() int32 { if info, err := a.playerManager.GetPlayerInfo(a.entity.GetID()); err == nil { return info.Level } return 0 } // GetRace returns the character race from player manager func (a *EntityChatAdapter) GetRace() int32 { if info, err := a.playerManager.GetPlayerInfo(a.entity.GetID()); err == nil { return info.Race } return 0 } // GetClass returns the character class from player manager func (a *EntityChatAdapter) GetClass() int32 { if info, err := a.playerManager.GetPlayerInfo(a.entity.GetID()); err == nil { return info.Class } return 0 }