mirror of
https://github.com/th-ch/youtube-music.git
synced 2026-01-29 10:53:44 +00:00
Fix: discord activity sanitizer (#4119)
Co-authored-by: Angelos Bouklis <me@arjix.dev>
This commit is contained in:
@ -9,7 +9,7 @@ import { TimerManager } from './timer-manager';
|
||||
import {
|
||||
buildDiscordButtons,
|
||||
padHangulFields,
|
||||
truncateString,
|
||||
sanitizeActivityText,
|
||||
isSeek,
|
||||
} from './utils';
|
||||
|
||||
@ -114,13 +114,17 @@ export class DiscordService {
|
||||
const activityInfo: SetActivity = {
|
||||
type: ActivityType.Listening,
|
||||
statusDisplayType: config.statusDisplayType,
|
||||
details: truncateString(songInfo.alternativeTitle ?? songInfo.title, 128), // Song title
|
||||
details: sanitizeActivityText(
|
||||
songInfo.alternativeTitle ?? songInfo.title
|
||||
), // Song title
|
||||
detailsUrl: songInfo.url ?? undefined,
|
||||
state: truncateString(songInfo.tags?.at(0) ?? songInfo.artist, 128), // Artist name
|
||||
state: sanitizeActivityText(
|
||||
songInfo.tags?.at(0) ?? songInfo.artist
|
||||
), // Artist name
|
||||
stateUrl: songInfo.artistUrl,
|
||||
largeImageKey: songInfo.imageSrc ?? undefined,
|
||||
largeImageText: songInfo.album
|
||||
? truncateString(songInfo.album, 128)
|
||||
? sanitizeActivityText(songInfo.album)
|
||||
: undefined,
|
||||
buttons: buildDiscordButtons(config, songInfo),
|
||||
};
|
||||
|
||||
@ -19,6 +19,27 @@ export const truncateString = (str: string, length: number): string => {
|
||||
return str;
|
||||
};
|
||||
|
||||
/**
|
||||
* Sanitizes a string for Discord Rich Presence activity, ensuring it meets length requirements.
|
||||
* @param input - The string to sanitize.
|
||||
* @param fallback - A fallback string to use if the input is empty or whitespace. Defaults to 'undefined'.
|
||||
* @returns The sanitized string, compliant with Discord's requirements.
|
||||
*/
|
||||
export function sanitizeActivityText(input: string | undefined, fallback: string = 'undefined'): string {
|
||||
const text = (input && input.trim()) ? input.trim() : fallback.trim();
|
||||
let safeString = truncateString(text, 128);
|
||||
|
||||
if (safeString.length === 0) {
|
||||
return fallback;
|
||||
}
|
||||
|
||||
if (safeString.length < 2) {
|
||||
safeString = safeString.padEnd(2, '⠀'); // change if necessary
|
||||
}
|
||||
|
||||
return safeString;
|
||||
}
|
||||
|
||||
/**
|
||||
* Builds the array of buttons for the Discord Rich Presence activity.
|
||||
* @param config - The plugin configuration.
|
||||
|
||||
Reference in New Issue
Block a user