fuck song.link

This commit is contained in:
amy 2025-04-11 16:33:15 +03:30
parent a5efac6346
commit 4904b1d305
No known key found for this signature in database
2 changed files with 15 additions and 3 deletions

View file

@ -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)
})

View file

@ -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,
}
}