fix(tts): correct Discord snowflake regex and getSource typo

- Mention/emoji regexes used [(0-9)]{18}; '(' and ')' inside a character
  class are literal so this matched the bracket chars themselves and
  hard-fixed the ID length to 18. Discord snowflakes are 17-20 digits
  (older 2015-2017 accounts are 17, 2024+ trend toward 19-20). Switch
  to \\d{17,20} and capture the ID for member lookup.
- Tighten emoji regex name segment from .* (greedy, eats across emojis)
  to [^:]+ so adjacent emojis no longer collapse into one match.
- Rename getSorce -> getSource.
This commit is contained in:
Claude Owner
2026-05-26 14:38:46 +09:00
parent 7b56d2e055
commit e22cb53ccf

View File

@@ -62,7 +62,7 @@ export class TTSClient {
}
text = this.textEditor(channel.guild, text);
const buf = await this.getSorce(text);
const buf = await this.getSource(text);
if (!buf) return;
const session = this.getSession(channel.guild, voiceChannel);
@@ -91,7 +91,7 @@ export class TTSClient {
}
private async getSorce(text: string): Promise<Buffer | null> {
private async getSource(text: string): Promise<Buffer | null> {
const parts = text.split(signature.regex);
const bufferList: Buffer[] = [];
@@ -119,11 +119,11 @@ export class TTSClient {
if (text.length === 0) return "파일";
return text
.replace(URL_RE, (u) => labelForUrl(u) ?? u)
.replace(/\<\@\!?[(0-9)]{18}\>/g, (t) => {
const member = guild.members.cache.get(t.replace(/[^0-9]/g,""));
.replace(/<@!?(\d{17,20})>/g, (_t, id: string) => {
const member = guild.members.cache.get(id);
return member?.nickname ?? member?.user.username ?? "유저";
})
.replace(/\<a?\:.*\:[(0-9)]{18}\>/g, () => {
.replace(/<a?:[^:]+:\d{17,20}>/g, () => {
return "이모티콘";
});
}