From 8b39cf4fa91a55fde6a6677a703a3b1b76d7be31 Mon Sep 17 00:00:00 2001 From: Orion Date: Mon, 4 May 2026 14:50:24 +0800 Subject: [PATCH] =?UTF-8?q?fix(core):=20=F0=9F=A9=B9=20=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=E9=AA=8C=E8=AF=81=E9=80=BB=E8=BE=91=E5=B9=B6=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E5=BC=82=E5=B8=B8=E9=85=8D=E7=BD=AE=E6=8F=90=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 优化 Telegram Bot 的验证逻辑判断流程,当验证功能由于配置问题不可用时,向用户发送明确的错误提示信息,提升系统的健壮性。 - 调整了 isQAOn 和 isCaptchaOn 的条件分支逻辑 - 增加配置异常时的兜底消息回复 - 确保验证流程在异常状态下能正确引导用户联系管理员 --- telegram/tg-bot.js | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/telegram/tg-bot.js b/telegram/tg-bot.js index f967b24..de8054a 100644 --- a/telegram/tg-bot.js +++ b/telegram/tg-bot.js @@ -522,13 +522,18 @@ async function sendStart(id, msg, env) { parse_mode: "HTML", reply_markup: { inline_keyboard: [[{ text: "点击进行验证", web_app: { url: `${url}/verify?user_id=${encodeURIComponent(id)}&nonce=${encodeURIComponent(nonce)}` } }]] } }); - } else if (!isCaptchaOn && isQAOn) { + } else if (isQAOn) { await updUser(id, { user_state: "pending_verification" }, env); return api(env.BOT_TOKEN, "sendMessage", { chat_id: id, text: "❓ 安全提问\n请回答:\n" + await getCfg('verif_q', env), parse_mode: "HTML" }); + } else if (isCaptchaOn || isQAOn) { + return api(env.BOT_TOKEN, "sendMessage", { + chat_id: id, + text: "⚠️ 验证功能暂时不可用,请联系管理员检查配置" + }); } } @@ -723,7 +728,7 @@ async function relayToTopic(msg, u, env) { if (e.message && (e.message.includes("thread") || e.message.includes("not found") || e.message.includes("Bad Request"))) { await updUser(uid, { topic_id: null }, env); u.topic_id = null; return relayToTopic(msg, u, env); } else { - api(env.BOT_TOKEN, "sendMessage", { chat_id: uid, text: "❌ 发送失败,系统异常" }); + await api(env.BOT_TOKEN, "sendMessage", { chat_id: uid, text: "❌ 发送失败,系统异常" }); } } } @@ -809,7 +814,7 @@ async function handleBackup(msg, meta, env) { if (!bid) return; try { const header = `📨 备份 ${meta.name} (${meta.userId})`; - if (msg.text) await api(env.BOT_TOKEN, "sendMessage", { chat_id: bid, text: header + "\n" + msg.text, parse_mode: "HTML" }); + if (msg.text) await api(env.BOT_TOKEN, "sendMessage", { chat_id: bid, text: header + "\n" + escape(msg.text), parse_mode: "HTML" }); else { await api(env.BOT_TOKEN, "sendMessage", { chat_id: bid, text: header, parse_mode: "HTML" }); await api(env.BOT_TOKEN, "copyMessage", { chat_id: bid, from_chat_id: msg.chat.id, message_id: msg.message_id }); @@ -840,7 +845,7 @@ async function handleAdminReply(msg, env) { } } await updUser(targetUid, { user_info: u.user_info }, env); - await setCfg(`admin_state:${msg.from.id}`, "", env); + await deleteCfg(`admin_state:${msg.from.id}`, env); return api(env.BOT_TOKEN, "sendMessage", { chat_id: msg.chat.id, message_thread_id: msg.message_thread_id, text: `✅ 备注已更新` }); } } @@ -862,7 +867,7 @@ async function handleAdminReply(msg, env) { [uid, sent.message_id.toString(), storeText, msg.date || Math.floor(Date.now() / 1000), msg.message_id.toString()]); } // 此处为管理员端给用户下发消息的主逻辑。根据之前的版本,管理员侧发送成功后的回执代码也已经去除 - } catch (e) { api(env.BOT_TOKEN, "sendMessage", { chat_id: msg.chat.id, message_thread_id: msg.message_thread_id, text: "❌ 内部投递失败" }); } + } catch (e) { await api(env.BOT_TOKEN, "sendMessage", { chat_id: msg.chat.id, message_thread_id: msg.message_thread_id, text: "❌ 内部投递失败" }); } } async function handleEdit(msg, env) { @@ -982,7 +987,7 @@ async function handleCallback(cb, env) { return api(env.BOT_TOKEN, "answerCallbackQuery", { callback_query_id: cb.id, text: "无操作权限", show_alert: true }); } await api(env.BOT_TOKEN, "answerCallbackQuery", { callback_query_id: cb.id }); - if (act === 'pin_card') api(env.BOT_TOKEN, "pinChatMessage", { chat_id: msg.chat.id, message_id: msg.message_id, message_thread_id: msg.message_thread_id }); + if (act === 'pin_card') await api(env.BOT_TOKEN, "pinChatMessage", { chat_id: msg.chat.id, message_id: msg.message_id, message_thread_id: msg.message_thread_id }); else if (['block','unblock'].includes(act)) { const isB = act === 'block'; const uid = p1; const u = await getUser(uid, env); const bid = await getCfg('blocked_topic_id', env); await updUser(uid, { is_blocked: isB, block_count: 0 }, env); @@ -991,8 +996,8 @@ async function handleCallback(cb, env) { api(env.BOT_TOKEN, "editMessageReplyMarkup", { chat_id: env.ADMIN_GROUP_ID, message_id: u.user_info.card_msg_id, reply_markup: getBtns(uid, isB, u.user_info.username) }).catch(()=>{}); } await manageBlacklist(env, u, { id: uid, username: u.user_info.username, first_name: u.user_info.name }, isB); - if (!isB && msg.message_thread_id && bid && msg.message_thread_id.toString() === bid) api(env.BOT_TOKEN, "answerCallbackQuery", { callback_query_id: cb.id, text: "✅ 已解除屏蔽" }); - else api(env.BOT_TOKEN, "sendMessage", { chat_id: msg.chat.id, message_thread_id: msg.message_thread_id, text: isB ? "❌ 已屏蔽" : "✅ 已解封" }); + if (!isB && msg.message_thread_id && bid && msg.message_thread_id.toString() === bid) await api(env.BOT_TOKEN, "answerCallbackQuery", { callback_query_id: cb.id, text: "✅ 已解除屏蔽" }); + else await api(env.BOT_TOKEN, "sendMessage", { chat_id: msg.chat.id, message_thread_id: msg.message_thread_id, text: isB ? "❌ 已屏蔽" : "✅ 已解封" }); } } } @@ -1079,7 +1084,7 @@ async function handleAdminInput(id, msg, state, env) { const displayVal = (val.startsWith('{') && k === 'welcome_msg') ? "[媒体配置组合]" : val.substring(0,100); await api(env.BOT_TOKEN, "sendMessage", { chat_id: id, text: `✅ ${k} 规则已写入:\n${displayVal}` }); await handleAdminConfig(id, null, 'menu', null, null, env); - } catch (e) { api(env.BOT_TOKEN, "sendMessage", { chat_id: id, text: `❌ 指令提交受阻: ${e.message}` }); } + } catch (e) { await api(env.BOT_TOKEN, "sendMessage", { chat_id: id, text: `❌ 指令提交受阻: ${e.message}` }); } } // --- 10. 工具函数池 (Pure Functions) ---