fix bot DMs vanishing from Direct under lazy member-loading and hide invite in bot control rooms
This commit is contained in:
parent
a4429d9c31
commit
9c3287165f
2 changed files with 19 additions and 12 deletions
|
|
@ -37,18 +37,25 @@ export const isBotControlRoom = (mx: MatrixClient, room: Room, preset: BotPreset
|
||||||
if (!ACTIVE_MEMBERSHIPS.has(myMembership)) return false;
|
if (!ACTIVE_MEMBERSHIPS.has(myMembership)) return false;
|
||||||
|
|
||||||
const botMember = room.getMember(preset.mxid);
|
const botMember = room.getMember(preset.mxid);
|
||||||
if (!botMember) return false;
|
if (
|
||||||
|
!botMember ||
|
||||||
|
botMember.membership === undefined ||
|
||||||
|
!ACTIVE_MEMBERSHIPS.has(botMember.membership)
|
||||||
|
) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
const allowedMembers = new Set([myUserId, preset.mxid]);
|
// A control DM is exactly the two of us, nobody else. Decide that from the room
|
||||||
const activeMembers = room
|
// SUMMARY counts — NOT room.getMembers(): under Matrix lazy member-loading
|
||||||
.getMembers()
|
// getMembers() returns only the members synced so far (heroes + recent senders
|
||||||
.filter(
|
// + me), so a larger group whose loaded subset happens to be {me, bot} gets
|
||||||
(member) => member.membership !== undefined && ACTIVE_MEMBERSHIPS.has(member.membership)
|
// misclassified as the control DM. That bites a chat which began as a 1:1 with
|
||||||
);
|
// the bot (and still carries the sticky m.direct tag) but later gained people:
|
||||||
|
// it would wrongly drop out of the Direct tab (useDirectRooms excludes control
|
||||||
return (
|
// DMs) and resurface only as a bot DM. getJoinedMemberCount()/
|
||||||
activeMembers.length > 0 && activeMembers.every((member) => allowedMembers.has(member.userId))
|
// getInvitedMemberCount() come from the sync summary and stay accurate without
|
||||||
);
|
// loading every member — the same source useAutoDirectSync trusts for its 1:1 test.
|
||||||
|
return room.getJoinedMemberCount() + room.getInvitedMemberCount() === 2;
|
||||||
};
|
};
|
||||||
|
|
||||||
export const isCatalogBotControlRoom = (
|
export const isCatalogBotControlRoom = (
|
||||||
|
|
|
||||||
|
|
@ -288,7 +288,7 @@ const RoomMenu = forwardRef<HTMLDivElement, RoomMenuProps>(
|
||||||
{t('Room.pinned_messages')}
|
{t('Room.pinned_messages')}
|
||||||
</Text>
|
</Text>
|
||||||
</MenuItem>
|
</MenuItem>
|
||||||
{canInvite && (
|
{canInvite && !botControlRoom && (
|
||||||
<MenuItem
|
<MenuItem
|
||||||
onClick={handleInvite}
|
onClick={handleInvite}
|
||||||
variant="Primary"
|
variant="Primary"
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue