// GetPrompt will render the terminal prompt string based on the user. func GetPrompt(user *message.User) string { name := user.Name() if user.Config.Theme != nil { name = user.Config.Theme.ColorName(user) } return fmt.Sprintf("[%s] ", name) }
// Member returns a corresponding Member object to a User if the Member is // present in this room. func (r *Room) Member(u *message.User) (*Member, bool) { m, ok := r.MemberById(u.Id()) if !ok { return nil, false } // Check that it's the same user if m.User != u { return nil, false } return m, true }
// AutoCompleteFunction returns a callback for terminal autocompletion func (h *Host) AutoCompleteFunction(u *message.User) func(line string, pos int, key rune) (newLine string, newPos int, ok bool) { return func(line string, pos int, key rune) (newLine string, newPos int, ok bool) { if key != 9 { return } if line == "" || strings.HasSuffix(line[:pos], " ") { // Don't autocomplete spaces. return } fields := strings.Fields(line[:pos]) isFirst := len(fields) < 2 partial := fields[len(fields)-1] posPartial := pos - len(partial) var completed string if isFirst && strings.HasPrefix(partial, "/") { // Command completed = h.completeCommand(partial) if completed == "/reply" { replyTo := u.ReplyTo() if replyTo != nil { completed = "/msg " + replyTo.Name() } } } else { // Name completed = h.completeName(partial) if completed == "" { return } if isFirst { completed += ":" } } completed += " " // Reposition the cursor newLine = strings.Replace(line[posPartial:], partial, completed, 1) newLine = line[:posPartial] + newLine newPos = pos + (len(completed) - len(partial)) ok = true return } }
// Join the room as a user, will announce. func (r *Room) Join(u *message.User) (*Member, error) { if r.closed { return nil, ErrRoomClosed } if u.Id() == "" { return nil, ErrInvalidName } member := Member{u, false} err := r.members.Add(&member) if err != nil { return nil, err } r.History(u) s := fmt.Sprintf("%s joined. (Connected: %d)", u.Name(), r.members.Len()) r.Send(message.NewAnnounceMsg(s)) return &member, nil }
// History feeds the room's recent message history to the user's handler. func (r *Room) History(u *message.User) { for _, m := range r.history.Get(historyLen) { u.Send(m) } }