转译问题

This commit is contained in:
Coloryr committed 2026-11-08 11:12:57 +08:00
1 parent c05ce40db3
commit 27859d41b8
8 files changed
+84 -45

No files matched your search

@@ -5,6 +5,7 @@ import com.coloryr.allmusic.server.core.command.ICommand;
import com.coloryr.allmusic.server.core.music.PlayMusic;
import com.coloryr.allmusic.server.core.objs.message.ARG;
import com.coloryr.allmusic.server.core.objs.music.SongInfoObj;
import com.coloryr.allmusic.server.core.utils.TextUtils;
import java.util.ArrayList;
import java.util.Collections;
@@ -20,8 +21,8 @@ public class CommandCancel implements ICommand {
return;
}
if (!id.getCall().equalsIgnoreCase(name)) {
AllMusic.side.sendMessage(sender, AllMusic.getMessage().cancel.err2.replace(ARG.musicName, id.getName())
.replace(ARG.musicAuthor, id.getAuthor()));
AllMusic.side.sendMessage(sender, AllMusic.getMessage().cancel.err2.replace(ARG.musicName, TextUtils.escapeVar(id.getName()))
.replace(ARG.musicAuthor, TextUtils.escapeVar(id.getAuthor())));
return;
}
PlayMusic.remove(id);
@@ -36,8 +37,8 @@ public class CommandCancel implements ICommand {
return;
}
if (!id.getCall().equalsIgnoreCase(name)) {
AllMusic.side.sendMessage(sender, AllMusic.getMessage().cancel.err2.replace(ARG.musicName, id.getName())
.replace(ARG.musicAuthor, id.getAuthor()));
AllMusic.side.sendMessage(sender, AllMusic.getMessage().cancel.err2.replace(ARG.musicName, TextUtils.escapeVar(id.getName()))
.replace(ARG.musicAuthor, TextUtils.escapeVar(id.getAuthor())));
return;
}
@@ -4,6 +4,7 @@ import com.coloryr.allmusic.server.core.AllMusic;
import com.coloryr.allmusic.server.core.command.ACommand;
import com.coloryr.allmusic.server.core.music.PlayMusic;
import com.coloryr.allmusic.server.core.objs.message.ARG;
import com.coloryr.allmusic.server.core.utils.TextUtils;
public class CommandList extends ACommand {
@Override
@@ -12,10 +13,10 @@ public class CommandList extends ACommand {
AllMusic.side.sendMessage(sender, AllMusic.getMessage().musicPlay.emptyPlayingMusic);
} else {
String info = AllMusic.getMessage().musicPlay.nowPlay;
info = info.replace(ARG.musicName, PlayMusic.nowPlayMusic.getName())
.replace(ARG.musicAuthor, PlayMusic.nowPlayMusic.getAuthor())
.replace(ARG.musicAl, PlayMusic.nowPlayMusic.getAl())
.replace(ARG.musicAlia, PlayMusic.nowPlayMusic.getAlia())
info = info.replace(ARG.musicName, TextUtils.escapeVar(PlayMusic.nowPlayMusic.getName()))
.replace(ARG.musicAuthor, TextUtils.escapeVar(PlayMusic.nowPlayMusic.getAuthor()))
.replace(ARG.musicAl, TextUtils.escapeVar(PlayMusic.nowPlayMusic.getAl()))
.replace(ARG.musicAlia, TextUtils.escapeVar(PlayMusic.nowPlayMusic.getAlia()))
.replace(ARG.player, PlayMusic.nowPlayMusic.getCall());
AllMusic.side.sendMessage(sender, info);
}
@@ -6,6 +6,7 @@ import com.coloryr.allmusic.server.core.objs.SearchMusicObj;
import com.coloryr.allmusic.server.core.objs.message.ARG;
import com.coloryr.allmusic.server.core.objs.music.PlayerAddMusicObj;
import com.coloryr.allmusic.server.core.objs.music.SearchPageObj;
import com.coloryr.allmusic.server.core.utils.TextUtils;
import java.util.HashMap;
import java.util.Map;
@@ -36,7 +37,7 @@ public class MusicSearch {
SearchPageObj search = api.search(obj.args);
if (search == null)
AllMusic.side.sendMessageTask(obj.sender, AllMusic.getMessage().search
.cantSearch.replace(ARG.name, obj.args[0]));
.cantSearch.replace(ARG.name, TextUtils.escapeVar(obj.args[0])));
else {
AllMusic.side.sendMessageTask(obj.sender, AllMusic.getMessage().search.res);
addSearch(obj.name, search);
@@ -81,9 +82,9 @@ public class MusicSearch {
item = search.getRes(a + search.getPage() * 10);
info = AllMusic.getMessage().page.choice;
info = info.replace(ARG.index, "" + (a + 1))
.replace(ARG.musicName, item.name)
.replace(ARG.musicAuthor, item.author)
.replace(ARG.musicAl, item.al);
.replace(ARG.musicName, TextUtils.escapeVar(item.name))
.replace(ARG.musicAuthor, TextUtils.escapeVar(item.author))
.replace(ARG.musicAl, TextUtils.escapeVar(item.al));
AllMusic.side.sendMessage(sender, AllMusic.side.miniMessage(info)
.append(AllMusic.side.clickRun(AllMusic.getMessage().click.clickRun, "/music select " + (a + 1))));
}
@@ -9,6 +9,7 @@ import com.coloryr.allmusic.server.core.objs.music.PlayerAddMusicObj;
import com.coloryr.allmusic.server.core.objs.music.SongInfoObj;
import com.coloryr.allmusic.server.core.saves.MusicListSave;
import com.coloryr.allmusic.server.core.utils.HudUtils;
import com.coloryr.allmusic.server.core.utils.TextUtils;
import java.util.*;
import java.util.concurrent.ConcurrentLinkedQueue;
@@ -314,18 +315,18 @@ public class PlayMusic {
if (!AllMusic.getConfig().muteAddMessage) {
if (AllMusic.getConfig().showInBar) {
String data = AllMusic.getMessage().musicPlay.addMusic
.replace(ARG.musicName, HudUtils.messageLimit(info.getName()))
.replace(ARG.musicAuthor, HudUtils.messageLimit(info.getAuthor()))
.replace(ARG.musicAl, HudUtils.messageLimit(info.getAl()))
.replace(ARG.musicAlia, HudUtils.messageLimit(info.getAlia()))
.replace(ARG.musicName, TextUtils.escapeVar(HudUtils.messageLimit(info.getName())))
.replace(ARG.musicAuthor, TextUtils.escapeVar(HudUtils.messageLimit(info.getAuthor())))
.replace(ARG.musicAl, TextUtils.escapeVar(HudUtils.messageLimit(info.getAl())))
.replace(ARG.musicAlia, TextUtils.escapeVar(HudUtils.messageLimit(info.getAlia())))
.replace(ARG.player, info.getCall());
AllMusic.side.sendBarInTask(data);
} else {
String data = AllMusic.getMessage().musicPlay.addMusic
.replace(ARG.musicName, info.getName())
.replace(ARG.musicAuthor, info.getAuthor())
.replace(ARG.musicAl, info.getAl())
.replace(ARG.musicAlia, info.getAlia())
.replace(ARG.musicName, TextUtils.escapeVar(info.getName()))
.replace(ARG.musicAuthor, TextUtils.escapeVar(info.getAuthor()))
.replace(ARG.musicAl, TextUtils.escapeVar(info.getAl()))
.replace(ARG.musicAlia, TextUtils.escapeVar(info.getAlia()))
.replace(ARG.player, info.getCall());
AllMusic.side.broadcastInTask(data);
}
@@ -415,10 +416,10 @@ public class PlayMusic {
info = playList.get(i);
a = AllMusic.getMessage().musicPlay.listMusic.item;
a = a.replace(ARG.index, String.valueOf(i + 1))
.replace(ARG.musicName, info.getName())
.replace(ARG.musicAuthor, info.getAuthor())
.replace(ARG.musicAl, info.getAl())
.replace(ARG.musicAlia, info.getAlia())
.replace(ARG.musicName, TextUtils.escapeVar(info.getName()))
.replace(ARG.musicAuthor, TextUtils.escapeVar(info.getAuthor()))
.replace(ARG.musicAl, TextUtils.escapeVar(info.getAl()))
.replace(ARG.musicAlia, TextUtils.escapeVar(info.getAlia()))
.replace(ARG.player, info.getCall());
list.append(a).append("\n");
}
@@ -6,6 +6,7 @@ import com.coloryr.allmusic.server.core.objs.message.ARG;
import com.coloryr.allmusic.server.core.objs.music.MusicObj;
import com.coloryr.allmusic.server.core.objs.music.SongInfoObj;
import com.coloryr.allmusic.server.core.utils.HudUtils;
import com.coloryr.allmusic.server.core.utils.TextUtils;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
@@ -206,8 +207,8 @@ public class PlayRuntime {
String data = AllMusic.getMessage().push.bq;
data = data.replace(ARG.player, vote.getVoteSender())
.replace(ARG.time, String.valueOf(AllMusic.getConfig().vote.voteTime))
.replace(ARG.musicName, music.getName())
.replace(ARG.musicAuthor, music.getAuthor())
.replace(ARG.musicName, TextUtils.escapeVar(music.getName()))
.replace(ARG.musicAuthor, TextUtils.escapeVar(music.getAuthor()))
.replace(ARG.countAll, String.valueOf(PlayRuntime.getMiniVote()));
AllMusic.side.broadcast(data);
if (AllMusic.getConfig().isShowClick()) {
@@ -278,18 +279,18 @@ public class PlayRuntime {
SongInfoObj music = PlayMusic.nowPlayMusic;
if (AllMusic.getConfig().showInBar) {
String info = AllMusic.getMessage().musicPlay.nowPlay
.replace(ARG.musicName, HudUtils.messageLimit(music.getName()))
.replace(ARG.musicAuthor, HudUtils.messageLimit(music.getAuthor()))
.replace(ARG.musicAl, HudUtils.messageLimit(music.getAl()))
.replace(ARG.musicAlia, HudUtils.messageLimit(music.getAlia()))
.replace(ARG.musicName, TextUtils.escapeVar(HudUtils.messageLimit(music.getName())))
.replace(ARG.musicAuthor, TextUtils.escapeVar(HudUtils.messageLimit(music.getAuthor())))
.replace(ARG.musicAl, TextUtils.escapeVar(HudUtils.messageLimit(music.getAl())))
.replace(ARG.musicAlia, TextUtils.escapeVar(HudUtils.messageLimit(music.getAlia())))
.replace(ARG.player, music.getCall());
AllMusic.side.sendBarInTask(info);
} else {
String info = AllMusic.getMessage().musicPlay.nowPlay
.replace(ARG.musicName, music.getName())
.replace(ARG.musicAuthor, music.getAuthor())
.replace(ARG.musicAl, music.getAl())
.replace(ARG.musicAlia, music.getAlia())
.replace(ARG.musicName, TextUtils.escapeVar(music.getName()))
.replace(ARG.musicAuthor, TextUtils.escapeVar(music.getAuthor()))
.replace(ARG.musicAl, TextUtils.escapeVar(music.getAl()))
.replace(ARG.musicAlia, TextUtils.escapeVar(music.getAlia()))
.replace(ARG.player, music.getCall());
AllMusic.side.broadcastInTask(info);
}
@@ -2,6 +2,7 @@ package com.coloryr.allmusic.server.core.objs.music;
import com.coloryr.allmusic.server.core.AllMusic;
import com.coloryr.allmusic.server.core.objs.message.ARG;
import com.coloryr.allmusic.server.core.utils.TextUtils;
public class SongInfoObj {
/**
@@ -134,10 +135,10 @@ public class SongInfoObj {
public String getInfo() {
String info = AllMusic.getMessage().musicPlay.musicInfo;
info = info.replace(ARG.musicName, name == null ? "" : name)
.replace(ARG.musicAuthor, author == null ? "" : author)
.replace(ARG.musicAl, al == null ? "" : al)
.replace(ARG.musicAlia, alia == null ? "" : alia)
info = info.replace(ARG.musicName, TextUtils.escapeVar(name == null ? "" : name))
.replace(ARG.musicAuthor, TextUtils.escapeVar(author == null ? "" : author))
.replace(ARG.musicAl, TextUtils.escapeVar(al == null ? "" : al))
.replace(ARG.musicAlia, TextUtils.escapeVar(alia == null ? "" : alia))
.replace(ARG.player, call == null ? "" : call);
return info;
}
@@ -137,10 +137,10 @@ public class HudUtils {
info = AllMusic.getMessage().hud.emptyMusic;
} else {
info = AllMusic.getMessage().hud.music
.replace(ARG.name, infoLimit(PlayMusic.nowPlayMusic.getName()))
.replace(ARG.musicAuthor, infoLimit(PlayMusic.nowPlayMusic.getAuthor()))
.replace(ARG.musicAlia, infoLimit(PlayMusic.nowPlayMusic.getAlia()))
.replace(ARG.musicAl, infoLimit(PlayMusic.nowPlayMusic.getAl()))
.replace(ARG.name, TextUtils.escapeVar(infoLimit(PlayMusic.nowPlayMusic.getName())))
.replace(ARG.musicAuthor, TextUtils.escapeVar(infoLimit(PlayMusic.nowPlayMusic.getAuthor())))
.replace(ARG.musicAlia, TextUtils.escapeVar(infoLimit(PlayMusic.nowPlayMusic.getAlia())))
.replace(ARG.musicAl, TextUtils.escapeVar(infoLimit(PlayMusic.nowPlayMusic.getAl())))
.replace(ARG.player, PlayMusic.nowPlayMusic.getCall());
}
@@ -168,11 +168,11 @@ public class HudUtils {
String lyric = obj.getLyric();
String tLyric = obj.getTlyric();
lyr = AllMusic.getMessage().hud.lyric
.replace(ARG.lyric, lyric == null ? "" : lyric);
.replace(ARG.lyric, TextUtils.escapeVar(lyric == null ? "" : lyric));
tran = AllMusic.getMessage().hud.tlyric
.replace(ARG.lyric, tLyric == null ? "" : tLyric);
.replace(ARG.lyric, TextUtils.escapeVar(tLyric == null ? "" : tLyric));
ktv = AllMusic.getMessage().hud.klyric
.replace(ARG.lyric, lyric == null ? "" : lyric);
.replace(ARG.lyric, TextUtils.escapeVar(lyric == null ? "" : lyric));
}
AllMusic.side.sendHudLyric(new MusicPack.LyricMusicPack(lyr, tran, ktv));
@@ -0,0 +1,33 @@
package com.coloryr.allmusic.server.core.utils;
/**
* 文本工具
*/
public class TextUtils {
/**
* 转义外部文本里的 &x,避免被旧版客户端当成颜色码
* <p>
* 只在 & 和后面的颜色码字符之间插入一个零宽空格(U+200B):
* 客户端匹配不到 &x,显示上还是原来的 &,新旧客户端都看不到多余字符
*
* @param text 原始文本(歌名、歌手、专辑、别名、歌词等)
* @return 处理后的文本
*/
public static String escapeVar(String text) {
if (text == null || text.indexOf('&') < 0) {
return text;
}
StringBuilder builder = new StringBuilder(text.length() + 8);
for (int i = 0; i < text.length(); i++) {
char c = text.charAt(i);
builder.append(c);
if (c == '&' && i + 1 < text.length()
&& "0123456789AaBbCcDdEeFfKkLlMmNnOoRr".indexOf(text.charAt(i + 1)) >= 0) {
builder.append('\u200B');
}
}
return builder.toString();
}
}