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/1021-join-and-start-are-two-entries.changed.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
The new-chat menu offers joining and starting as two rows, so one label no longer names both: **Join by number or link** carries the number and the invite link, and **Start a face-to-face room** opens the same screen under its own name without the link and scan fields, because those are ways into a group that already exists ([#1021](https://github.com/ThinkFlowLab/FlyBot/issues/1021)).
8 changes: 6 additions & 2 deletions core/client.js
Original file line number Diff line number Diff line change
Expand Up @@ -55,14 +55,18 @@ var ZH = {
"Chat with several of your Bots": "和你的几个 Bot 一起聊",
"Face-to-face room": "面对面房间",
"Meet people nearby with a 6-digit number": "用同一组 6 位数字和身边的人见面",
// #892: one entry for both ways in, a number entered together or a group's invite link, and its dialog.
"Join or create by number or link": "面对面建群或用链接加入",
// #892: the entries and the dialog named both ways in. #1021: the picker offers them as two rows,
// so the label that named a create path and a join path at once is gone.
"Join by number or link": "用号码或链接加入",
"Start a face-to-face room": "面对面建群",
// #1053: a fresh 6-digit code offers to start the room. The hint still covers a number whose room already opened (#999).
"Start a new room with {code}": "用 {code} 开一个新房间",
"No one is waiting under this number. If someone already opened the room, the number no longer works — ask them for an invite link.": "这个号码下还没有人在等。如果已经有人开过这个房间,号码就不再有效——向他们要一条邀请链接。",
"Start a new room": "开一个新房间",
"Enter a number, or paste a group invite link": "输入数字面对面建群,或粘贴邀请链接加入",
"Pick your Bots. Enter the same 6-digit number as everyone nearby to build a room together, or paste a group invite link or scan its QR code to join that group.": "选好你的 Bot。和身边的人输入同一组 6 位数字一起建群,或粘贴群邀请链接、扫描二维码加入那个群。",
"Pick the number everyone nearby types": "定一个大家都输入的号码",
"Pick your Bots and choose a 6-digit number. Everyone nearby types the same number to build the room together.": "选好你的 Bot,再定一组 6 位数字。身边的人输入同一个号码,就能一起把这个群建起来。",
"Or paste a group invite link (https://…/r/…)": "或粘贴群邀请链接(https://…/r/…)",
// #1044: a turn that died before writing anything still says so where the chat is.
"Could not run: {error}": "这一轮没能跑起来:{error}",
Expand Down
8 changes: 6 additions & 2 deletions core/src/client/i18n.js
Original file line number Diff line number Diff line change
Expand Up @@ -18,14 +18,18 @@ const ZH = {
'Chat with several of your Bots': '和你的几个 Bot 一起聊',
'Face-to-face room': '面对面房间',
'Meet people nearby with a 6-digit number': '用同一组 6 位数字和身边的人见面',
// #892: one entry for both ways in, a number entered together or a group's invite link, and its dialog.
'Join or create by number or link': '面对面建群或用链接加入',
// #892: the entries and the dialog named both ways in. #1021: the picker offers them as two rows,
// so the label that named a create path and a join path at once is gone.
'Join by number or link': '用号码或链接加入',
'Start a face-to-face room': '面对面建群',
// #1053: a fresh 6-digit code offers to start the room. The hint still covers a number whose room already opened (#999).
'Start a new room with {code}': '用 {code} 开一个新房间',
'No one is waiting under this number. If someone already opened the room, the number no longer works — ask them for an invite link.': '这个号码下还没有人在等。如果已经有人开过这个房间,号码就不再有效——向他们要一条邀请链接。',
'Start a new room': '开一个新房间',
'Enter a number, or paste a group invite link': '输入数字面对面建群,或粘贴邀请链接加入',
'Pick your Bots. Enter the same 6-digit number as everyone nearby to build a room together, or paste a group invite link or scan its QR code to join that group.': '选好你的 Bot。和身边的人输入同一组 6 位数字一起建群,或粘贴群邀请链接、扫描二维码加入那个群。',
'Pick the number everyone nearby types': '定一个大家都输入的号码',
'Pick your Bots and choose a 6-digit number. Everyone nearby types the same number to build the room together.': '选好你的 Bot,再定一组 6 位数字。身边的人输入同一个号码,就能一起把这个群建起来。',
'Or paste a group invite link (https://…/r/…)': '或粘贴群邀请链接(https://…/r/…)',
// #1044: a turn that died before writing anything still says so where the chat is.
'Could not run: {error}': '这一轮没能跑起来:{error}',
Expand Down
2 changes: 1 addition & 1 deletion docs/subsystems/core-client.md
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ Add a new invariant under the heading it belongs to (or a new heading), not at t

### Held-send approval card

A `flybot.session.dock` component also gets the host translator `t`, so a plugin's card can read in the interface language (the social hold card's *Held for your approval: contains …* line, #371; its words are in `i18n.js`). The face-room create prompt (*Start a new room with {code}*, and the hint under it, #1053) is in that same map, so a zh UI reads it in Chinese.
A `flybot.session.dock` component also gets the host translator `t`, so a plugin's card can read in the interface language (the social hold card's *Held for your approval: contains …* line, #371; its words are in `i18n.js`). The face-room create prompt (*Start a new room with {code}*, and the hint under it, #1053) is in that same map, so a zh UI reads it in Chinese. So are the social picker's two face-room rows and the screen they open (#1021): **Join by number or link** (用号码或链接加入) and **Start a face-to-face room** (面对面建群), the start row's hint, and its own about line, all four used through `t()` — so both rows and both dialog titles read Chinese, and the single key #892 wrote for one combined row (*Join or create by number or link*) is gone.

The overlay (`flybot-slots.js` `FlyBotApprovals`) is the fallback, not a second copy (#260): an approval whose policy a `flybot.session.dock` entry declares (`policy`, e.g. social) is drawn by that dock in its chat, which reports the ids it shows through `claim(ids)`; the overlay skips claimed ids. A docked approval no open chat shows becomes a small pointer (`Sender → Recipient`, `Waiting for approval`, **Review** opens the chat via `actions.openSession`) after 1.2 s, so moving between chats never flashes it; the chat that is open never gets a pointer for its own approvals (each `FlyBotSessionDock` reports its chat through `chatOpened`, #271). An approval's chat is its room, else the chat whose turn a held reply answers (`meta.replyIn`, #418), else the friend's chat it is addressed to, else the Bot that wrote it; the pointer's Review opens that one (#278). The claims live in `approval-claims.js` so a chat cell can claim without the slot components. Any other policy's approval is a card in the overlay, with the same two lines as the dock's card (`Waiting for approval` / `Not sent`, then `Sender → Recipient`; the policy's long reason is the tooltip) and Approve / Reject (Retry for a failed send `canRetry()` allows, #968). Approve / Reject is drawn only for a status `isApprovalWaiting()` calls waiting (`pending`, `pending_approval`), the same rule the held-reply card asks (#734); a settled status gets no button the host would refuse, and a failed send keeps Retry only while `canRetry()` allows it (#968). The recipient is the person who gets it (#418, #498): the host's `recipientName`, else the owner of the friend's chat (`friendBotOwner`), else as the host named it, so a card reads `Chief → SelfB1233`, never two Bot names. `senderName` / `targetName` are resolved server-side and a delegated marker follows a relayed send (`hop > 0`). The decision itself is owner-bound in the host (#52); see [core-host](core-host.md).

Expand Down
2 changes: 1 addition & 1 deletion docs/subsystems/plugin-runtime.md
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ FlyBot's plugin API surface on top of the patched core: host hooks, client slots
- Social registers a second `flybot.session.dock` entry, `social-room-end` (`FaceRoomStatus`, order 40): the plain ended-room line for a left/closed face room (#191).
- Social registers `flybot.settings.page` (`SocialServerSettings`, label **Bot Social**): the server address, its status and the switch form (#337). The host side is `social/server` (a read) and `social/server-check` / `social/server-set` (writes: blocked on a read-only host and, like every plugin write, while the team has more than one member).
- Social also registers `flybot.account.header` (`MyHandle`): my own Bot Social handle plus Copy at the top of the account menu (#181), hidden while not connected.
- Social registers two `flybot.new-chat.action` rows (Join or create by number or link, Add friend). Each `run` closes the picker. Copying an invite and seeing your own handle happen inside the Add friend panel (#181). Still not team mode.
- Social registers three `flybot.new-chat.action` rows (Join by number or link, Start a face-to-face room, Add friend; the two face rows pass which one opened the screen, #1021). Each `run` closes the picker. Copying an invite and seeing your own handle happen inside the Add friend panel (#181). Still not team mode.
- A friend's Bot opens **Bot settings** through core `remote-bot-settings` (`openSettings('bots', id)`): a compact sheet (`data-flybot=remote-bot-sheet`) with `FlyBotDetails` from slot `flybot.bot.details`, not the local Bot editor. The sheet stacks above its scrim like the host settings overlay (#166).
- In an own Bot's settings the host frames `flybot.bot.details` in its titled **Sharing** card (`FlyBotDetails({ wrap })`), so an entry draws no title of its own; the friend's-Bot sheet and the details drawer draw the entries without a frame (#406).

Expand Down
Loading
Loading