修复猜成语出题消息线上不显示问题
This commit is contained in:
@@ -8,6 +8,17 @@ function csrf() {
|
|||||||
let currentRoundId = 0;
|
let currentRoundId = 0;
|
||||||
let currentRoomId = 0;
|
let currentRoomId = 0;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查找当前回合是否已经有对应的聊天室消息节点。
|
||||||
|
*/
|
||||||
|
function findIdiomRoundMessageNode(roundId) {
|
||||||
|
if (roundId <= 0) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
return document.querySelector(`[data-idiom-round-id="${roundId}"]`);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 为指定回合创建统一样式的答题按钮。
|
* 为指定回合创建统一样式的答题按钮。
|
||||||
*/
|
*/
|
||||||
@@ -127,8 +138,38 @@ function handleIdiomGameStarted(e) {
|
|||||||
currentRoundId = round_id;
|
currentRoundId = round_id;
|
||||||
currentRoomId = window.chatContext?.roomId || 0;
|
currentRoomId = window.chatContext?.roomId || 0;
|
||||||
|
|
||||||
// 追加一条聊天室消息(由 MessageSent 事件负责渲染,不重复添加)
|
// 线上如果 MessageSent 补消息没有到达,这里主动补一条公屏消息兜底;
|
||||||
// 这里只存储当前回合信息
|
// 本地或正常链路下若消息已存在,则只补挂答题按钮,避免重复渲染。
|
||||||
|
const existingMessageNode = findIdiomRoundMessageNode(round_id);
|
||||||
|
if (existingMessageNode) {
|
||||||
|
attachIdiomAnswerButton(existingMessageNode, {
|
||||||
|
from_user: "星海小博士",
|
||||||
|
content: message || `🧩 猜成语时间!${hint}`,
|
||||||
|
idiom_game_round_id: round_id,
|
||||||
|
idiom_reward_gold: reward_gold,
|
||||||
|
idiom_reward_exp: reward_exp,
|
||||||
|
});
|
||||||
|
console.log(`猜成语开始:${hint},奖励 ${reward_gold}金/${reward_exp}经验`);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const now = new Date();
|
||||||
|
const timeStr = `${now.getFullYear()}-${String(now.getMonth() + 1).padStart(2, "0")}-${String(now.getDate()).padStart(2, "0")} ${String(now.getHours()).padStart(2, "0")}:${String(now.getMinutes()).padStart(2, "0")}:${String(now.getSeconds()).padStart(2, "0")}`;
|
||||||
|
window.appendMessage?.({
|
||||||
|
id: `idiom-start-live-${round_id}`,
|
||||||
|
room_id: currentRoomId || window.chatContext?.roomId || 0,
|
||||||
|
from_user: "星海小博士",
|
||||||
|
to_user: "大家",
|
||||||
|
content: message || `🧩 猜成语时间!${hint}`,
|
||||||
|
is_secret: false,
|
||||||
|
font_color: "#7c3aed",
|
||||||
|
action: "",
|
||||||
|
idiom_game_round_id: round_id,
|
||||||
|
idiom_reward_gold: reward_gold,
|
||||||
|
idiom_reward_exp: reward_exp,
|
||||||
|
sent_at: timeStr,
|
||||||
|
});
|
||||||
|
|
||||||
console.log(`猜成语开始:${hint},奖励 ${reward_gold}金/${reward_exp}经验`);
|
console.log(`猜成语开始:${hint},奖励 ${reward_gold}金/${reward_exp}经验`);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -121,6 +121,23 @@ export function appendMessage(msg, renderBatch = null) {
|
|||||||
|
|
||||||
state.trackMaxMsgId(msg.id || 0);
|
state.trackMaxMsgId(msg.id || 0);
|
||||||
|
|
||||||
|
const idiomRoundId = Number.parseInt(
|
||||||
|
String(msg.idiom_game_round_id || msg.idom_game_round_id || "0"),
|
||||||
|
10,
|
||||||
|
);
|
||||||
|
const isIdiomStartMessage = idiomRoundId > 0
|
||||||
|
&& msg.from_user === "星海小博士"
|
||||||
|
&& !msg.action
|
||||||
|
&& String(msg.content || "").includes("猜成语时间");
|
||||||
|
|
||||||
|
if (isIdiomStartMessage) {
|
||||||
|
const existingIdiomNode = document.querySelector(`[data-idiom-round-id="${idiomRoundId}"]`);
|
||||||
|
if (existingIdiomNode) {
|
||||||
|
attachIdiomAnswerButton(existingIdiomNode, msg);
|
||||||
|
return existingIdiomNode;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
const isMe = msg.from_user === window.chatContext?.username;
|
const isMe = msg.from_user === window.chatContext?.username;
|
||||||
const fontColor = msg.font_color || "#000000";
|
const fontColor = msg.font_color || "#000000";
|
||||||
const blockRuleKey = resolveBlockedSystemSenderKey(msg);
|
const blockRuleKey = resolveBlockedSystemSenderKey(msg);
|
||||||
@@ -131,6 +148,9 @@ export function appendMessage(msg, renderBatch = null) {
|
|||||||
if (msg?.from_user) {
|
if (msg?.from_user) {
|
||||||
div.dataset.fromUser = msg.from_user;
|
div.dataset.fromUser = msg.from_user;
|
||||||
}
|
}
|
||||||
|
if (idiomRoundId > 0) {
|
||||||
|
div.dataset.idiomRoundId = String(idiomRoundId);
|
||||||
|
}
|
||||||
if (blockRuleKey) {
|
if (blockRuleKey) {
|
||||||
div.dataset.blockKey = blockRuleKey;
|
div.dataset.blockKey = blockRuleKey;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user