feat(ui): BOTS section in member list
Members API appends server bots (is_bot). Sidebar groups ONLINE / OFFLINE / BOTS. Bots get green BOT badge, no kick menu or profile. Mentions and DMs skip bots.
This commit is contained in:
@@ -35,6 +35,8 @@ type memberResponse struct {
|
||||
Avatar string `json:"avatar"`
|
||||
Status string `json:"status"`
|
||||
StatusText string `json:"status_text"`
|
||||
IsBot bool `json:"is_bot,omitempty"`
|
||||
BotType string `json:"bot_type,omitempty"`
|
||||
}
|
||||
|
||||
func (h *MemberHandler) ListMembers(w http.ResponseWriter, r *http.Request) {
|
||||
@@ -82,6 +84,28 @@ func (h *MemberHandler) ListMembers(w http.ResponseWriter, r *http.Request) {
|
||||
members = append(members, m)
|
||||
}
|
||||
|
||||
// Bots added to this server (separate BOTS section in the member list).
|
||||
botRows, err := h.db.QueryContext(r.Context(), `
|
||||
SELECT b.id, b.name, COALESCE(b.avatar, ''), COALESCE(b.bot_type, '')
|
||||
FROM bot_servers bs
|
||||
JOIN bots b ON b.id = bs.bot_id
|
||||
WHERE bs.server_id = $1
|
||||
ORDER BY b.name
|
||||
`, serverID)
|
||||
if err == nil {
|
||||
defer botRows.Close()
|
||||
for botRows.Next() {
|
||||
var m memberResponse
|
||||
if err := botRows.Scan(&m.ID, &m.Username, &m.Avatar, &m.BotType); err != nil {
|
||||
continue
|
||||
}
|
||||
m.DisplayName = m.Username
|
||||
m.Status = "online" // ponytail: no bot presence yet; always show online
|
||||
m.IsBot = true
|
||||
members = append(members, m)
|
||||
}
|
||||
}
|
||||
|
||||
w.Header().Set("Content-Type", "application/json")
|
||||
json.NewEncoder(w).Encode(members)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user