mirror of
https://github.com/th-ch/youtube-music.git
synced 2026-01-29 19:03: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 {
|
import {
|
||||||
buildDiscordButtons,
|
buildDiscordButtons,
|
||||||
padHangulFields,
|
padHangulFields,
|
||||||
truncateString,
|
sanitizeActivityText,
|
||||||
isSeek,
|
isSeek,
|
||||||
} from './utils';
|
} from './utils';
|
||||||
|
|
||||||
@ -114,13 +114,17 @@ export class DiscordService {
|
|||||||
const activityInfo: SetActivity = {
|
const activityInfo: SetActivity = {
|
||||||
type: ActivityType.Listening,
|
type: ActivityType.Listening,
|
||||||
statusDisplayType: config.statusDisplayType,
|
statusDisplayType: config.statusDisplayType,
|
||||||
details: truncateString(songInfo.alternativeTitle ?? songInfo.title, 128), // Song title
|
details: sanitizeActivityText(
|
||||||
|
songInfo.alternativeTitle ?? songInfo.title
|
||||||
|
), // Song title
|
||||||
detailsUrl: songInfo.url ?? undefined,
|
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,
|
stateUrl: songInfo.artistUrl,
|
||||||
largeImageKey: songInfo.imageSrc ?? undefined,
|
largeImageKey: songInfo.imageSrc ?? undefined,
|
||||||
largeImageText: songInfo.album
|
largeImageText: songInfo.album
|
||||||
? truncateString(songInfo.album, 128)
|
? sanitizeActivityText(songInfo.album)
|
||||||
: undefined,
|
: undefined,
|
||||||
buttons: buildDiscordButtons(config, songInfo),
|
buttons: buildDiscordButtons(config, songInfo),
|
||||||
};
|
};
|
||||||
|
|||||||
@ -19,6 +19,27 @@ export const truncateString = (str: string, length: number): string => {
|
|||||||
return str;
|
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.
|
* Builds the array of buttons for the Discord Rich Presence activity.
|
||||||
* @param config - The plugin configuration.
|
* @param config - The plugin configuration.
|
||||||
|
|||||||
Reference in New Issue
Block a user