package main import ( "slices" "time" ) type User struct { Model Handle string // Handle/Nickname for User Name string // Can be in any format (including left blank!) PrimKey string // User's Public SSH Key Email string // User's Email Address (Used for account recovery, and push notifications) Flags []string // Flags are words to define certain things ('adult', 'new', 'sysop', and more) } func (u *User) HasFlag(flag string) bool { return slices.Contains(u.Flags, flag) } func (u *User) AddFlag(flag string) { if u.HasFlag(flag) { return } u.Flags = append(u.Flags, flag) } func (u *User) RemoveFlag(flag string) { if !u.HasFlag(flag) { return } var flags []string = make([]string, 0, len(u.Flags)-1) for _, f := range u.Flags { if f != flag { flags = append(flags, f) } } u.Flags = flags } func (u *User) ClearFlags() { u.Flags = []string{} } func (u *User) LastOn() time.Duration { return time.Since(u.UpdatedAt).Round(time.Second) } func (u *User) Joined() time.Duration { return time.Since(u.CreatedAt).Round(time.Second) }