refactor: 控制台输入框不再区分聊天与指令,只留一个入口
聊天和指令本来就是同一个东西:以 / 开头按游戏指令发送,否则按公屏消息发送。 服务端 /api/bots/:id/chat 一直就是这么分流的,前端多一个模式下拉框纯属多余。 - 删掉「公屏聊天 / 游戏指令」下拉框与重复的「快捷公屏消息」输入框 - 只保留:一个输入框 + 快捷发送按钮 + 移动测试按钮 - 接口返回新增 kind 字段(chat / command)说明实际走的是哪条路 - Toast 区分「消息已发送」与「指令已发送:/xxx」 - 快捷发送补上 /u restore confirm(配合定时消息常用) - 空内容提示从「消息为空」改为「内容为空」(不再只针对聊天) 测试 325 -> 326,全部通过。
这个提交包含在:
+11
-26
@@ -709,8 +709,8 @@ function renderStatus(status) {
|
||||
|
||||
const canOperate = bot.canOperate === true;
|
||||
$('consoleHint').textContent = canOperate
|
||||
? '登录验证通过:可以直接向该机器人发送指令或公屏消息。'
|
||||
: '该机器人尚未通过游戏内登录验证,发送指令 / 消息会被拒绝。';
|
||||
? '以 / 开头按游戏指令发送,否则按公屏消息发送。'
|
||||
: '该机器人尚未通过游戏内登录验证,发送会被拒绝(服务器要求验证时会自动放行,用于发验证码)。';
|
||||
$('consoleHint').style.color = canOperate ? 'var(--muted)' : 'var(--yellow)';
|
||||
|
||||
// ===== 任务卡片 =====
|
||||
@@ -1990,13 +1990,9 @@ function bindEvents() {
|
||||
$('cmdInput').addEventListener('keydown', (e) => {
|
||||
if (e.key === 'Enter') sendConsole();
|
||||
});
|
||||
$('btnQuickChat').addEventListener('click', sendQuickChat);
|
||||
$('quickChatInput').addEventListener('keydown', (e) => {
|
||||
if (e.key === 'Enter') sendQuickChat();
|
||||
});
|
||||
// 快捷发送:把预设内容填进唯一的输入框并立即发送
|
||||
for (const btn of document.querySelectorAll('[data-cmd]')) {
|
||||
btn.addEventListener('click', () => {
|
||||
$('sendMode').value = 'command';
|
||||
$('cmdInput').value = btn.dataset.cmd;
|
||||
sendConsole();
|
||||
});
|
||||
@@ -2028,33 +2024,22 @@ function bindEvents() {
|
||||
});
|
||||
$('btnLogout').addEventListener('click', doLogout);
|
||||
|
||||
/**
|
||||
* 发送控制台内容。
|
||||
*
|
||||
* 聊天和指令不区分模式:**以 `/` 开头按游戏指令发送,否则按公屏消息发送** ——
|
||||
* 服务端 `/api/bots/:id/chat` 就是这么分流的,前端不需要多一个下拉框。
|
||||
*/
|
||||
async function sendConsole() {
|
||||
const text = $('cmdInput').value.trim();
|
||||
if (!text || !selectedBotId) return;
|
||||
const mode = $('sendMode').value;
|
||||
const path = mode === 'command'
|
||||
? `/api/bots/${encodeURIComponent(selectedBotId)}/command`
|
||||
: `/api/bots/${encodeURIComponent(selectedBotId)}/chat`;
|
||||
const body = mode === 'command' ? { command: text } : { message: text };
|
||||
try {
|
||||
await api(path, { method: 'POST', body: JSON.stringify(body) });
|
||||
$('cmdInput').value = '';
|
||||
toast('已发送');
|
||||
} catch (err) {
|
||||
toast('发送失败:' + err.message, true);
|
||||
}
|
||||
}
|
||||
|
||||
async function sendQuickChat() {
|
||||
const text = $('quickChatInput').value.trim();
|
||||
if (!text || !selectedBotId) return;
|
||||
try {
|
||||
await api(`/api/bots/${encodeURIComponent(selectedBotId)}/chat`, {
|
||||
method: 'POST',
|
||||
body: JSON.stringify({ message: text })
|
||||
});
|
||||
$('quickChatInput').value = '';
|
||||
toast('公屏消息已发送');
|
||||
$('cmdInput').value = '';
|
||||
toast(text.startsWith('/') ? '指令已发送:' + text : '消息已发送');
|
||||
} catch (err) {
|
||||
toast('发送失败:' + err.message, true);
|
||||
}
|
||||
|
||||
在新工单中引用
屏蔽一个用户