package irc import ( "fmt" "slices" "git.chromaticdragon.app/pyrex/minimal-irc-server/v2/src/transport" ) type User struct { clientId transport.ClientId hostString *string sourceString *string nick *Nick username *string realName *string hasReceivedAuthHandshakeReply bool channels []canonicalChannelName } func (user *User) recomputeSourceString() { nick := "unknown" if user.nick != nil { nick = (*user.nick).Value } hstr := fmt.Sprintf("clients/%d", user.clientId) sstr := fmt.Sprintf("%s!%s", nick, hstr) user.hostString = &hstr user.sourceString = &sstr } func (user *User) GetClientId() transport.ClientId { return user.clientId } func (user *User) GetHostString() string { return *user.hostString } func (user *User) GetSourceString() string { return *user.sourceString } func (user *User) GetNick() *Nick { return user.nick } func (user *User) SetNick(newNick *Nick) error { return Perform(NickChangeAction{User: user, OldNick: user.nick, NewNick: newNick}) } func (user *User) GetUsername() *string { return user.username } func (user *User) SetUsername(username *string) { user.username = username } func (user *User) GetRealName() *string { return user.realName } func (user *User) SetRealName(realName *string) { user.realName = realName } func (user *User) GetHasReceivedAuthHandshakeReply() bool { return user.hasReceivedAuthHandshakeReply } func (user *User) SetHasReceivedAuthHandshakeReply(value bool) { user.hasReceivedAuthHandshakeReply = value } func (user *User) IsInChannel(channelName ChannelName) bool { return slices.ContainsFunc(user.channels, func(existingChannel canonicalChannelName) bool { return channelName.canonical == existingChannel }) } func (user *User) GetChannels() []canonicalChannelName { return user.channels } func (user *User) Join(channelName ChannelName) error { return Perform(JoinAction{User: user, ChannelName: channelName}) } func (user *User) Part(channelName ChannelName, reason *string) error { return Perform(PartAction{User: user, ChannelName: channelName, Reason: reason}) }