package chat import ( "sync" ) type User struct { Username string Identify string Chans map[string]*Channel CurrentChan *Channel Events chan any mu sync.RWMutex } func (u *User) JoinChan(channel *Channel) { u.mu.Lock() defer u.mu.Unlock() if _, ok := u.Chans[channel.Name]; ok { return } u.Chans[channel.Name] = channel u.CurrentChan = channel channel.Join(u) } func (u *User) NUsername() string { username := u.Username identify := u.Identify shortIdentify := identify[max(0, len(identify)-5):] return username[:min(len(username), 10)] + " (" + shortIdentify + ")" }