From 6d21c3decabcc9a7496cee92b2e7e702bc8aa6e7 Mon Sep 17 00:00:00 2001 From: neru Date: Thu, 15 Jan 2026 14:36:33 -0300 Subject: [PATCH] style: run format:apply --- src/commands.ts | 5 +- src/modules/audioStreams.ts | 4 +- src/modules/tts-modes/tiktok.ts | 186 ++++++++++----------- src/modules/tts-modes/tiktok_voices.json | 196 +++++++++++------------ 4 files changed, 197 insertions(+), 194 deletions(-) diff --git a/src/commands.ts b/src/commands.ts index 336827a..7dabe95 100644 --- a/src/commands.ts +++ b/src/commands.ts @@ -255,7 +255,10 @@ export class CommandManager { if (command.requiresAdmin) { const member = interaction.member as GuildMember; - if (!member.permissions.has(PermissionFlagsBits.Administrator) && member.id != config.owner_id) { + if ( + !member.permissions.has(PermissionFlagsBits.Administrator) && + member.id != config.owner_id + ) { await interaction.reply({ content: "You don't have the permissions required to execute this command.", diff --git a/src/modules/audioStreams.ts b/src/modules/audioStreams.ts index 64b18c6..271d043 100644 --- a/src/modules/audioStreams.ts +++ b/src/modules/audioStreams.ts @@ -135,7 +135,8 @@ export class MixedStream { }); transcoder.on('end', () => { - const durationMs = (totalBytes / 192000) * 1000 * (1 + DURATION_MARGIN_PCT); + const durationMs = + (totalBytes / 192000) * 1000 * (1 + DURATION_MARGIN_PCT); setTimeout(() => { source.unpipe(transcoder); @@ -153,7 +154,6 @@ export class MixedStream { }); source.pipe(transcoder).pipe(mixerInput); - }); } diff --git a/src/modules/tts-modes/tiktok.ts b/src/modules/tts-modes/tiktok.ts index e964497..e145d9c 100644 --- a/src/modules/tts-modes/tiktok.ts +++ b/src/modules/tts-modes/tiktok.ts @@ -1,118 +1,118 @@ -import { config } from "../../utils/config"; -import { TTSModule, TTSResponse } from "../tts" +import { config } from '../../utils/config'; +import { TTSModule, TTSResponse } from '../tts'; import * as https from 'https'; import * as zlib from 'zlib'; import TIKTOK_TTS_VOICES from './tiktok_voices.json'; -const TIKTOK_TTS_ENDPOINT = 'https://api16-normal-v6.tiktokv.com/media/api/text/speech/invoke' +const TIKTOK_TTS_ENDPOINT = + 'https://api16-normal-v6.tiktokv.com/media/api/text/speech/invoke'; class TikTokTTS implements TTSModule { - public name: string = 'TikTok'; - public defaultVoice: string = 'en_us_001'; + public name: string = 'TikTok'; + public defaultVoice: string = 'en_us_001'; - async getVoices(): Promise | undefined> { - return TIKTOK_TTS_VOICES.voices; - } + async getVoices(): Promise | undefined> { + return TIKTOK_TTS_VOICES.voices; + } - async generate(voice: string, text: string): Promise { - const reqText = encodeURIComponent(text); - const path = `/?text_speaker=${voice}&req_text=${reqText}&speaker_map_type=0&aid=1233`; + async generate(voice: string, text: string): Promise { + const reqText = encodeURIComponent(text); + const path = `/?text_speaker=${voice}&req_text=${reqText}&speaker_map_type=0&aid=1233`; - const endpoint = new URL(TIKTOK_TTS_ENDPOINT); + const endpoint = new URL(TIKTOK_TTS_ENDPOINT); - const options: https.RequestOptions = { - hostname: endpoint.hostname, - path: endpoint.pathname + path, - method: 'POST', - headers: { - 'User-Agent': 'com.zhiliaoapp.musically/2022600030 (Linux; U; Android 7.1.2; es_ES; SM-G988N; Build/NRD90M;tt-ok/3.12.13.1)', - 'Cookie': `sessionid=${config.tiktok_session_id}`, - 'Accept-Encoding': 'gzip,deflate,compress', - 'Content-Type': 'application/x-www-form-urlencoded' - } - } + const options: https.RequestOptions = { + hostname: endpoint.hostname, + path: endpoint.pathname + path, + method: 'POST', + headers: { + 'User-Agent': + 'com.zhiliaoapp.musically/2022600030 (Linux; U; Android 7.1.2; es_ES; SM-G988N; Build/NRD90M;tt-ok/3.12.13.1)', + Cookie: `sessionid=${config.tiktok_session_id}`, + 'Accept-Encoding': 'gzip,deflate,compress', + 'Content-Type': 'application/x-www-form-urlencoded' + } + }; - return new Promise((resolve) => { - const req = https.request(options, (res) => { - const chunks: Buffer[] = []; + return new Promise((resolve) => { + const req = https.request(options, (res) => { + const chunks: Buffer[] = []; - const encoding = res.headers['content-encoding']; + const encoding = res.headers['content-encoding']; - res.on('data', (chunk) => chunks.push(chunk)); - res.on('end', () => { - try { - const buffer = Buffer.concat(chunks); + res.on('data', (chunk) => chunks.push(chunk)); + res.on('end', () => { + try { + const buffer = Buffer.concat(chunks); - // Handle decompression if needed - const decompressBuffer = (buf: Buffer): Promise => { - return new Promise((decompressResolve, decompressReject) => { - if (encoding === 'gzip' || encoding === 'deflate') { - zlib.unzip(buf, (err: any, decompressed: Buffer | PromiseLike>) => { - if (err) decompressReject(err); - else decompressResolve(decompressed); - }); - } else { - decompressResolve(buf); - } - }); - }; + const decompressBuffer = (buf: Buffer): Promise => { + return new Promise((decompressResolve, decompressReject) => { + if (encoding === 'gzip' || encoding === 'deflate') { + zlib.unzip(buf, (err: Error | null, decompressed: Buffer) => { + if (err) decompressReject(err); + else decompressResolve(decompressed); + }); + } else { + decompressResolve(buf); + } + }); + }; - decompressBuffer(buffer) - .then((decompressed) => { - const result = JSON.parse(decompressed.toString()); - const statusCode = result?.status_code; + decompressBuffer(buffer) + .then((decompressed) => { + const result = JSON.parse(decompressed.toString()); + const statusCode = result?.status_code; - if (statusCode !== 0) { - const errorMsg = this.handleStatusError(statusCode); - return resolve({ error: errorMsg }); - } + if (statusCode !== 0) { + const errorMsg = this.handleStatusError(statusCode); + return resolve({ error: errorMsg }); + } - const voiceStr = result?.data?.v_str; - if (!voiceStr) { - return resolve({ error: 'No audio data received' }); - } + const voiceStr = result?.data?.v_str; + if (!voiceStr) { + return resolve({ error: 'No audio data received' }); + } - resolve({ data: Buffer.from(voiceStr, 'base64') }); - }) - .catch((err) => { - resolve({ error: `Decompression/Parse error: ${err.message}` }); - }); + resolve({ data: Buffer.from(voiceStr, 'base64') }); + }) + .catch((err) => { + resolve({ error: `Decompression/Parse error: ${err.message}` }); + }); + } catch (err) { + resolve({ error: `Parse error: ${err}` }); + } + }); + }); - } catch (err) { - resolve({ error: `Parse error: ${err}` }); - } - }); - }); + req.on('error', (err) => resolve({ error: err.message })); + req.on('timeout', () => { + req.destroy(); + resolve({ error: 'timed out' }); + }); - req.on('error', (err) => resolve({ error: err.message })); - req.on('timeout', () => { - req.destroy(); - resolve({ error: 'timed out' }); - }); + req.write(''); + req.end(); + }); + } - req.write(''); - req.end(); - }); - } + canBeUsed(): boolean { + return config.tiktok_session_id != undefined; + } - canBeUsed(): boolean { - return config.tiktok_session_id != undefined; - } - - handleStatusError(code: number): string { - switch (code) { - case 1: - return "Session ID may be invalid or expired"; - case 2: - return "Text is too long"; - case 4: - return "Invalid voice"; - case 5: - return "No session id."; - } - return `Unknown error code: ${code}`; - } + handleStatusError(code: number): string { + switch (code) { + case 1: + return 'Session ID may be invalid or expired'; + case 2: + return 'Text is too long'; + case 4: + return 'Invalid voice'; + case 5: + return 'No session id.'; + } + return `Unknown error code: ${code}`; + } } -export default new TikTokTTS(); \ No newline at end of file +export default new TikTokTTS(); diff --git a/src/modules/tts-modes/tiktok_voices.json b/src/modules/tts-modes/tiktok_voices.json index 128b9fb..2496c08 100644 --- a/src/modules/tts-modes/tiktok_voices.json +++ b/src/modules/tts-modes/tiktok_voices.json @@ -1,99 +1,99 @@ { - "voices": [ - "en_us_ghostface", - "en_us_chewbacca", - "en_us_c3po", - "en_us_stitch", - "en_us_stormtrooper", - "en_us_rocket", - "en_female_madam_leota", - "en_male_ghosthost", - "en_male_pirate", - "en_au_001", - "en_au_002", - "en_uk_001", - "en_uk_003", - "en_us_001", - "en_us_002", - "en_us_006", - "en_us_007", - "en_us_009", - "en_us_010", - "en_male_jomboy", - "en_male_cody", - "en_female_samc", - "en_female_makeup", - "en_female_richgirl", - "en_male_grinch", - "en_male_deadpool", - "en_male_jarvis", - "en_male_ashmagic", - "en_male_olantekkers", - "en_male_ukneighbor", - "en_male_ukbutler", - "en_female_shenna", - "en_female_pansino", - "en_male_trevor", - "en_female_betty", - "en_male_cupid", - "en_female_grandma", - "en_male_m2_xhxs_m03_christmas", - "en_male_santa_narration", - "en_male_sing_deep_jingle", - "en_male_santa_effect", - "en_female_ht_f08_newyear", - "en_male_wizard", - "en_female_ht_f08_halloween", - "fr_001", - "fr_002", - "de_001", - "de_002", - "es_002", - "es_mx_002", - "br_001", - "br_003", - "br_004", - "br_005", - "bp_female_ivete", - "bp_female_ludmilla", - "pt_female_lhays", - "pt_female_laizza", - "pt_male_bueno", - "id_001", - "jp_001", - "jp_003", - "jp_005", - "jp_006", - "kr_002", - "kr_003", - "kr_004", - "jp_female_fujicochan", - "jp_female_hasegawariona", - "jp_male_keiichinakano", - "jp_female_oomaeaika", - "jp_male_yujinchigusa", - "jp_female_shirou", - "jp_male_tamawakazuki", - "jp_female_kaorishoji", - "jp_female_yagishaki", - "jp_male_hikakin", - "jp_female_rei", - "jp_male_shuichiro", - "jp_male_matsudake", - "jp_female_machikoriiita", - "jp_male_matsuo", - "jp_male_osada", - "en_female_f08_salut_damour", - "en_male_m03_lobby", - "en_female_f08_warmy_breeze", - "en_male_m03_sunshine_soon", - "en_female_ht_f08_glorious", - "en_male_sing_funny_it_goes_up", - "en_male_m2_xhxs_m03_silly", - "en_female_ht_f08_wonderful_world", - "en_male_sing_funny_thanksgiving", - "en_male_narration", - "en_male_funny", - "en_female_emotional" - ] -} \ No newline at end of file + "voices": [ + "en_us_ghostface", + "en_us_chewbacca", + "en_us_c3po", + "en_us_stitch", + "en_us_stormtrooper", + "en_us_rocket", + "en_female_madam_leota", + "en_male_ghosthost", + "en_male_pirate", + "en_au_001", + "en_au_002", + "en_uk_001", + "en_uk_003", + "en_us_001", + "en_us_002", + "en_us_006", + "en_us_007", + "en_us_009", + "en_us_010", + "en_male_jomboy", + "en_male_cody", + "en_female_samc", + "en_female_makeup", + "en_female_richgirl", + "en_male_grinch", + "en_male_deadpool", + "en_male_jarvis", + "en_male_ashmagic", + "en_male_olantekkers", + "en_male_ukneighbor", + "en_male_ukbutler", + "en_female_shenna", + "en_female_pansino", + "en_male_trevor", + "en_female_betty", + "en_male_cupid", + "en_female_grandma", + "en_male_m2_xhxs_m03_christmas", + "en_male_santa_narration", + "en_male_sing_deep_jingle", + "en_male_santa_effect", + "en_female_ht_f08_newyear", + "en_male_wizard", + "en_female_ht_f08_halloween", + "fr_001", + "fr_002", + "de_001", + "de_002", + "es_002", + "es_mx_002", + "br_001", + "br_003", + "br_004", + "br_005", + "bp_female_ivete", + "bp_female_ludmilla", + "pt_female_lhays", + "pt_female_laizza", + "pt_male_bueno", + "id_001", + "jp_001", + "jp_003", + "jp_005", + "jp_006", + "kr_002", + "kr_003", + "kr_004", + "jp_female_fujicochan", + "jp_female_hasegawariona", + "jp_male_keiichinakano", + "jp_female_oomaeaika", + "jp_male_yujinchigusa", + "jp_female_shirou", + "jp_male_tamawakazuki", + "jp_female_kaorishoji", + "jp_female_yagishaki", + "jp_male_hikakin", + "jp_female_rei", + "jp_male_shuichiro", + "jp_male_matsudake", + "jp_female_machikoriiita", + "jp_male_matsuo", + "jp_male_osada", + "en_female_f08_salut_damour", + "en_male_m03_lobby", + "en_female_f08_warmy_breeze", + "en_male_m03_sunshine_soon", + "en_female_ht_f08_glorious", + "en_male_sing_funny_it_goes_up", + "en_male_m2_xhxs_m03_silly", + "en_female_ht_f08_wonderful_world", + "en_male_sing_funny_thanksgiving", + "en_male_narration", + "en_male_funny", + "en_female_emotional" + ] +}