diff --git a/src/commands/nowplaying.ts b/src/commands/nowplaying.ts index ee24352..f3b82d2 100644 --- a/src/commands/nowplaying.ts +++ b/src/commands/nowplaying.ts @@ -31,6 +31,7 @@ export default class PingCommand extends Command { await interaction.deferReply() const user = interaction.options.getString("user") ?? config.listenbrainzAccount; const usesonglink = interaction.options.getBoolean("usesonglink") ?? true + const useitunes = interaction.options.getBoolean("useitunes") ?? true const meow = await fetch(`https://api.listenbrainz.org/1/user/${user}/playing-now`).then((res) => res.json()); if (!meow) { @@ -44,7 +45,10 @@ export default class PingCommand extends Command { const paramsObj = {entity: "song", term: track_metadata.artist_name + " " + track_metadata.track_name}; const searchParams = new URLSearchParams(paramsObj); const itunesinfo = (await (await fetch(`https://itunes.apple.com/search?${searchParams.toString()}`)).json()).results[0]; - const link = itunesinfo.trackViewUrl + let link = track_metadata.additional_info.origin_url + if (useitunes) { + link = itunesinfo.trackViewUrl + } const songlink = await fetch(`https://api.song.link/v1-alpha.1/links?url=${link}`).then(a => a.json()) const preferredApi = getSongOnPreferredProvider(songlink, link) @@ -108,6 +112,9 @@ export default class PingCommand extends Command { .addBooleanOption(option => { return option.setName("usesonglink").setDescription("use songlink or not").setRequired(false) }) + .addBooleanOption(option => { + return option.setName("useitunes").setDescription("use itunes or not").setRequired(false) + }) .addStringOption(option => { return option.setName("user").setDescription("listenbrainz username").setRequired(false) }) diff --git a/src/helper.ts b/src/helper.ts index 509f4aa..531719f 100644 --- a/src/helper.ts +++ b/src/helper.ts @@ -15,7 +15,7 @@ const songLinkShape = z.object({ id: z.string(), type: z.string(), title: z.string(), - thumbnailUrl: z.string(), + thumbnailUrl: z.string().optional(), apiProvider: z.string(), artistName: z.string(), }) @@ -38,6 +38,10 @@ export const preferredProviders = [ ]; export function getSongOnPreferredProvider(json: any, link: string): Song | null { + if (json.statusCode === 500) { + return null; + } + console.log(json) const song = songLinkShape.parse(json); for (const platform of preferredProviders) { if (!song.linksByPlatform[platform]) { @@ -46,11 +50,12 @@ export function getSongOnPreferredProvider(json: any, link: string): Song | null } const entityId = song.linksByPlatform[platform].entityUniqueId; const songInfo = song.entitiesByUniqueId[entityId] + return { title: songInfo.title, artist: songInfo.artistName, apiProvider: songInfo.apiProvider, - thumbnailUrl: songInfo.thumbnailUrl, + thumbnailUrl: songInfo.thumbnailUrl!, link: song.linksByPlatform[platform].url, } }