96 lines
2.1 KiB
Go
96 lines
2.1 KiB
Go
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})
|
|
}
|