Member.status exists (shared/wire.ts:620) but NickList draws no presence dot and splits Online/Offline only on m.away (NickList.tsx:194-195) - idle and DND look online. Offline members are 50% opacity (app.css:1887).
No avatars (Member has no avatarUrl where services provide one).
Clicking a member inserts a mention (NickList.tsx:642); the profile is only in the right-click menu (520). Discord/Slack/Element open a profile popout on click.
Group DMs never show the member list (App.tsx:137-138 and Popout.tsx:71 require kind === 'channel'), so NickList's "Remove from group" (146-149, 271-285) is unreachable.
Fix: avatar + presence dot per row; group by status; click opens the profile card, mention moves to the menu and Shift+click; show the list for group DMs. Daemon: carry member avatars where the service has them.
Part of the v1.0 UI pass.
- `Member.status` exists (`shared/wire.ts:620`) but `NickList` draws no presence dot and splits Online/Offline only on `m.away` (NickList.tsx:194-195) - idle and DND look online. Offline members are 50% opacity (app.css:1887).
- No avatars (Member has no avatarUrl where services provide one).
- Clicking a member inserts a mention (NickList.tsx:642); the profile is only in the right-click menu (520). Discord/Slack/Element open a profile popout on click.
- Group DMs never show the member list (App.tsx:137-138 and Popout.tsx:71 require `kind === 'channel'`), so NickList's "Remove from group" (146-149, 271-285) is unreachable.
**Fix:** avatar + presence dot per row; group by status; click opens the profile card, mention moves to the menu and Shift+click; show the list for group DMs. Daemon: carry member avatars where the service has them.
_Part of the v1.0 UI pass._
Salastil
added this to the v1.0 milestone 2026-10-07 20:43:04 -04:00
Before (left) and after (right) - the Discord-shaped test guild's member list, with people online, idle, on do-not-disturb and offline:
A face and a status dot on every member where the service reports presence (Discord, Matrix): online green, idle amber, do-not-disturb red, offline a hollow ring - the same dots as everywhere else (#277). IRC, Sneedchat and Kick keep their plain lists of names; a column of initials there would be decoration.
Clicking a member opens their profile, as in Discord, Slack and Element. Shift+click, or Mention in the right-click menu, mentions them (a click used to insert a mention).
Nobilis now sends each Discord member's picture (avatarUrl on the member), from the avatar hash the member list already carries; members with none show their initial.
The split into Online and Offline already used each person's real status (only offline counts as away); idle and do-not-disturb sit with the people online and say so with their dot.
Not done: showing the member list for group DMs (it is gated to channels, and I have no way here to see whether the daemon fills a roster for them); and the picture could not be checked against a live Discord server (receive-only account), only against staged data and the existing member-window code, which has unit tests.
Finished: [c912ed3](https://git.salastil.com/Salastil/moho/commit/c912ed35227ed027b0a892d6c5a7227ad5f7f09d).
Before (left) and after (right) - the Discord-shaped test guild's member list, with people online, idle, on do-not-disturb and offline:

- **A face and a status dot on every member** where the service reports presence (Discord, Matrix): online green, idle amber, do-not-disturb red, offline a hollow ring - the same dots as everywhere else (#277). IRC, Sneedchat and Kick keep their plain lists of names; a column of initials there would be decoration.
- **Clicking a member opens their profile**, as in Discord, Slack and Element. **Shift+click**, or *Mention* in the right-click menu, mentions them (a click used to insert a mention).
- **Nobilis now sends each Discord member's picture** (`avatarUrl` on the member), from the avatar hash the member list already carries; members with none show their initial.
- The split into Online and Offline already used each person's real status (only *offline* counts as away); idle and do-not-disturb sit with the people online and say so with their dot.
Not done: showing the member list for **group DMs** (it is gated to channels, and I have no way here to see whether the daemon fills a roster for them); and the picture could not be checked against a live Discord server (receive-only account), only against staged data and the existing member-window code, which has unit tests.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Member.statusexists (shared/wire.ts:620) butNickListdraws no presence dot and splits Online/Offline only onm.away(NickList.tsx:194-195) - idle and DND look online. Offline members are 50% opacity (app.css:1887).kind === 'channel'), so NickList's "Remove from group" (146-149, 271-285) is unreachable.Fix: avatar + presence dot per row; group by status; click opens the profile card, mention moves to the menu and Shift+click; show the list for group DMs. Daemon: carry member avatars where the service has them.
Part of the v1.0 UI pass.
Finished: c912ed3.
Before (left) and after (right) - the Discord-shaped test guild's member list, with people online, idle, on do-not-disturb and offline:
avatarUrlon the member), from the avatar hash the member list already carries; members with none show their initial.Not done: showing the member list for group DMs (it is gated to channels, and I have no way here to see whether the daemon fills a roster for them); and the picture could not be checked against a live Discord server (receive-only account), only against staged data and the existing member-window code, which has unit tests.