Feat: 优化动作语句语法,情绪型加着/地,动作型加了,使聊天发言更自然流畅
This commit is contained in:
@@ -219,6 +219,69 @@
|
||||
|
||||
// 系统用户名列表(不可被选为聊天对象)
|
||||
const systemUsers = ['钓鱼播报', '星海小博士', '系统传音', '系统公告', 'AI小班长', '送花播报', '系统'];
|
||||
|
||||
// 动作文字映射表:情绪型(着/地,放"对"之前)和动作型(了,替换"对X说")
|
||||
const actionTextMap = {
|
||||
'微笑': {
|
||||
type: 'emotion',
|
||||
word: '微笑着'
|
||||
},
|
||||
'大笑': {
|
||||
type: 'emotion',
|
||||
word: '大笑着'
|
||||
},
|
||||
'愤怒': {
|
||||
type: 'emotion',
|
||||
word: '愤怒地'
|
||||
},
|
||||
'哭泣': {
|
||||
type: 'emotion',
|
||||
word: '哭泣着'
|
||||
},
|
||||
'害羞': {
|
||||
type: 'emotion',
|
||||
word: '害羞地'
|
||||
},
|
||||
'鄙视': {
|
||||
type: 'emotion',
|
||||
word: '鄙视地'
|
||||
},
|
||||
'得意': {
|
||||
type: 'emotion',
|
||||
word: '得意地'
|
||||
},
|
||||
'疑惑': {
|
||||
type: 'emotion',
|
||||
word: '疑惑地'
|
||||
},
|
||||
'同情': {
|
||||
type: 'emotion',
|
||||
word: '同情地'
|
||||
},
|
||||
'无奈': {
|
||||
type: 'emotion',
|
||||
word: '无奈地'
|
||||
},
|
||||
'拳打': {
|
||||
type: 'verb',
|
||||
word: '拳打了'
|
||||
},
|
||||
'飞吻': {
|
||||
type: 'verb',
|
||||
word: '飞吻了'
|
||||
},
|
||||
'偷看': {
|
||||
type: 'verb',
|
||||
word: '偷看了'
|
||||
},
|
||||
};
|
||||
// 生成自然语序的动作串:情绪型=[人][着/地]对[目标][verb]:;动作型=[人][了][目标],[verb]:
|
||||
const buildActionStr = (action, fromHtml, toHtml, verb = '说') => {
|
||||
const info = actionTextMap[action];
|
||||
if (!info) return `${fromHtml}对${toHtml}${action}${verb}:`;
|
||||
if (info.type === 'emotion') return `${fromHtml}${info.word}对${toHtml}${verb}:`;
|
||||
return `${fromHtml}${info.word}${toHtml},${verb}:`;
|
||||
};
|
||||
// 用户名(单击切换发言对象,双击查看资料;系统用户仅显示文本)
|
||||
const clickableUser = (uName, color) => {
|
||||
if (systemUsers.includes(uName)) {
|
||||
@@ -273,20 +336,29 @@
|
||||
html =
|
||||
`<span style="color:#16a34a;font-weight:bold;">📢 系统:</span><span style="color:#15803d;">${msg.content}</span>`;
|
||||
} else {
|
||||
// 普通悄悄话样式(原版:紫色斜体)
|
||||
html =
|
||||
`<span class="msg-secret">${headImg}${clickableUser(msg.from_user, '#cc00cc')}对${clickableUser(msg.to_user, '#cc00cc')}`;
|
||||
if (msg.action) html += `${msg.action}`;
|
||||
html += `悄悄说:${msg.content}</span>`;
|
||||
// 普通悄悄话样式(原版:紫色斜体,使用自然语序动作)
|
||||
const fromHtml = clickableUser(msg.from_user, '#cc00cc');
|
||||
const toHtml = clickableUser(msg.to_user, '#cc00cc');
|
||||
const verbStr = msg.action ?
|
||||
buildActionStr(msg.action, fromHtml, toHtml, '悄悄说') :
|
||||
`${fromHtml}对${toHtml}悄悄说:`;
|
||||
html = `<span class="msg-secret">${headImg}${verbStr}${msg.content}</span>`;
|
||||
}
|
||||
} else if (msg.to_user && msg.to_user !== '大家') {
|
||||
html = `${headImg}${clickableUser(msg.from_user, '#000099')}对${clickableUser(msg.to_user, '#000099')}`;
|
||||
if (msg.action) html += `${msg.action}`;
|
||||
html += `说:<span class="msg-content" style="color: ${fontColor}">${msg.content}</span>`;
|
||||
// 对特定对象说话
|
||||
const fromHtml = clickableUser(msg.from_user, '#000099');
|
||||
const toHtml = clickableUser(msg.to_user, '#000099');
|
||||
const verbStr = msg.action ?
|
||||
buildActionStr(msg.action, fromHtml, toHtml) :
|
||||
`${fromHtml}对${toHtml}说:`;
|
||||
html = `${headImg}${verbStr}<span class="msg-content" style="color: ${fontColor}">${msg.content}</span>`;
|
||||
} else {
|
||||
html = `${headImg}${clickableUser(msg.from_user, '#000099')}对大家`;
|
||||
if (msg.action) html += `${msg.action}`;
|
||||
html += `说:<span class="msg-content" style="color: ${fontColor}">${msg.content}</span>`;
|
||||
// 对大家说话
|
||||
const fromHtml = clickableUser(msg.from_user, '#000099');
|
||||
const verbStr = msg.action ?
|
||||
buildActionStr(msg.action, fromHtml, '大家') :
|
||||
`${fromHtml}对大家说:`;
|
||||
html = `${headImg}${verbStr}<span class="msg-content" style="color: ${fontColor}">${msg.content}</span>`;
|
||||
}
|
||||
|
||||
if (!timeStrOverride) {
|
||||
|
||||
Reference in New Issue
Block a user