package client import ( "fmt" "strings" "git.kirsle.net/apps/barertc/pkg/messages" ) // SetUserVariables prepares RiveScript user variables before handling a message. // // Example: it will set the user's `name` to their WhoList nickname, and other such flags. // // User variables set include: // // * name (nickname or username) // * isAdmin (boolean operator status) // * messageID (BareRTC MessageID) // // Global variables (``) are also set here: // // * numUsersOnline (int): length of who list func (h *BotHandlers) SetUserVariables(msg messages.Message) { var ( username = msg.Username ) // Defaults var vars = map[string]string{ "name": username, "isAdmin": "false", "messageID": fmt.Sprint(msg.MessageID), } // Set global variables. h.rs.SetGlobal("numUsersOnline", fmt.Sprint(len(h.whoList))) // Are they on the Who List? if who, ok := h.GetUser(username); ok { if who.Nickname != "" { vars["name"] = who.Nickname } if who.Operator { vars["isAdmin"] = "true" } } if len(vars) > 0 { h.rs.SetUservars(username, vars) } } // GetUser looks up a username from the Who List. func (h *BotHandlers) GetUser(username string) (*messages.WhoList, bool) { h.whoMu.RLock() defer h.whoMu.RUnlock() for _, user := range h.whoList { if user.Username == username { return &user, true } } return nil, false } // NoReply checks if a bot's reply contains the noreply tag. func NoReply(message string) bool { return strings.Contains(message, "") || strings.TrimSpace(message) == "" }