Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions changelog.d/904-guest-sees-host-bots.fixed.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
A group joined through an invite link now lists the host's Bots instead of only your own: the join notice carries the host room's Bot roster, the Members card shows each Bot by name and owner, and a message keeps the Bot that wrote it. A Bot the host has not connected to Bot Social shows as "Not connected", and a host Bot this side cannot confirm yet shows as "Unconfirmed" rather than as a friend's Bot.
9 changes: 7 additions & 2 deletions core/client.js
Original file line number Diff line number Diff line change
Expand Up @@ -190,6 +190,8 @@ var ZH = {
Retry: "重试",
Approve: "批准",
"Friend's Bot": "好友的 Bot",
"Unconfirmed": "未确认",
"Not connected": "未接入",
"Expand": "展开",
"Collapse": "收起",
"Setting up your Main Bot…": "正在设置你的主 Bot…",
Expand Down Expand Up @@ -12574,9 +12576,12 @@ function GroupSettingsForm({ room: room2, roster, actions, run, onDeleted }) {
{ className: "bt-gs-who" },
(0, import_react30.createElement)(BotAvatar, { bot: lookBotForRemote(person, roster), size: 26, badge: false, live: false }),
(0, import_react30.createElement)("span", { className: "bt-row-title", title: person.handle || void 0 }, person.label || remoteBotTitle(person)),
room2.origin === "face-to-face" ? null : (0, import_react30.createElement)("span", { className: "bt-tag" }, t("Friend's Bot"))
// #904: a host's roster entry is not a friend's Bot, and one this home cannot confirm is
// labelled as such; a Bot with no Bot Social identity can never be written to at all.
room2.origin === "face-to-face" ? null : (0, import_react30.createElement)("span", { className: "bt-tag" }, person.unconnected ? t("Not connected") : room2.origin === "inbound-share" && person.verified === false ? t("Unconfirmed") : t("Friend's Bot"))
),
room2.origin === "face-to-face" || members.length + remotes.length <= 2 ? null : (0, import_react30.createElement)("button", { type: "button", className: "bt-x", "aria-label": t("Remove {name} from the group", { name: remoteBotTitle(person) }), title: t("Remove from group"), onClick: () => update({ removeParticipants: [{ kind: "bot", id: person.handle || person.id, remote: true }] }) }, "×")
// A guest's mirror is not theirs to edit: the host's membership is changed on the host side.
room2.origin === "face-to-face" || room2.origin === "inbound-share" || members.length + remotes.length <= 2 ? null : (0, import_react30.createElement)("button", { type: "button", className: "bt-x", "aria-label": t("Remove {name} from the group", { name: remoteBotTitle(person) }), title: t("Remove from group"), onClick: () => update({ removeParticipants: [{ kind: "bot", id: person.handle || person.id, remote: true }] }) }, "×")
)),
room2.origin === "face-to-face" ? null : adding ? [
...outsidePeople.map((person) => (0, import_react30.createElement)(
Expand Down
10 changes: 8 additions & 2 deletions core/src/client/group-settings.js
Original file line number Diff line number Diff line change
Expand Up @@ -186,8 +186,14 @@ export function GroupSettingsForm({ room, roster, actions, run, onDeleted }) {
h('span', { className: 'bt-gs-who' },
h(BotAvatar, { bot: lookBotForRemote(person, roster), size: 26, badge: false, live: false }),
h('span', { className: 'bt-row-title', title: person.handle || undefined }, person.label || remoteBotTitle(person)),
room.origin === 'face-to-face' ? null : h('span', { className: 'bt-tag' }, t('Friend\'s Bot'))),
room.origin === 'face-to-face' || members.length + remotes.length <= 2
// #904: a host's roster entry is not a friend's Bot, and one this home cannot confirm is
// labelled as such; a Bot with no Bot Social identity can never be written to at all.
room.origin === 'face-to-face' ? null
: h('span', { className: 'bt-tag' }, person.unconnected ? t('Not connected')
: room.origin === 'inbound-share' && person.verified === false ? t('Unconfirmed')
: t('Friend\'s Bot'))),
// A guest's mirror is not theirs to edit: the host's membership is changed on the host side.
room.origin === 'face-to-face' || room.origin === 'inbound-share' || members.length + remotes.length <= 2
? null
: h('button', { type: 'button', className: 'bt-x', 'aria-label': t('Remove {name} from the group', { name: remoteBotTitle(person) }), title: t('Remove from group'), onClick: () => update({ removeParticipants: [{ kind: 'bot', id: person.handle || person.id, remote: true }] }) }, '×'))),
room.origin === 'face-to-face' ? null : adding
Expand Down
2 changes: 2 additions & 0 deletions core/src/client/i18n.js
Original file line number Diff line number Diff line change
Expand Up @@ -154,6 +154,8 @@ const ZH = {
Retry: '重试',
Approve: '批准',
"Friend's Bot": '好友的 Bot',
'Unconfirmed': '未确认',
'Not connected': '未接入',
'Expand': '展开',
'Collapse': '收起',
'Setting up your Main Bot…': '正在设置你的主 Bot…',
Expand Down
Loading
Loading