diff --git a/lib/routes/telegram/tglib/channel.ts b/lib/routes/telegram/tglib/channel.ts index 6863cd07fa40..1c63528bce2c 100644 --- a/lib/routes/telegram/tglib/channel.ts +++ b/lib/routes/telegram/tglib/channel.ts @@ -35,6 +35,26 @@ export async function getPollResults(client, message, m: Api.MessageMediaPoll) { return txt; } +export function withSearchParams(src: string, params: Record) { + const url = new URL(src); + for (const [key, value] of Object.entries(params)) { + url.searchParams.set(key, value); + } + return url.toString(); +} + +export function getMessageMediaUrl(requestUrl: string, username: string, messageId: number) { + const request = new URL(requestUrl); + const url = new URL(`/telegram/media/${username}/${messageId}`, request.origin); + for (const key of ['key', 'code']) { + const value = request.searchParams.get(key); + if (value) { + url.searchParams.set(key, value); + } + } + return url.toString(); +} + export function getMediaLink(src: string, m: Api.TypeMessageMedia) { const doc = getDocument(m); const mime = doc ? doc.mimeType : ''; @@ -44,7 +64,7 @@ export function getMediaLink(src: string, m: Api.TypeMessageMedia) { } if (doc && mime.startsWith('video/')) { const vid = (doc.attributes.find((t) => t instanceof Api.DocumentAttributeVideo) ?? { w: 1080, h: 720 }) as { w: number; h: number }; - return ``; + return ``; } if (doc && mime.startsWith('audio/')) { return `
${getAudioTitle(m)}
`; @@ -56,7 +76,7 @@ export function getMediaLink(src: string, m: Api.TypeMessageMedia) { linkText = ''; // remove filename, it's only an animated sticker } if ((doc.thumbs?.length ?? 0) > 0) { - linkText = `
${linkText}
`; + linkText = `
${linkText}
`; } return `${linkText}`; } @@ -155,7 +175,7 @@ export default async function handler(ctx: Context) { } // messages that have no text are shown as if they're one post // because in TG only 1 attachment per message is possible - const src = `${new URL(ctx.req.url).origin}/telegram/media/${username}/${message.id}`; + const src = getMessageMediaUrl(ctx.req.url, username, message.id); attachments.push(getMediaLink(src, media)); } if (message.replyMarkup instanceof Api.ReplyInlineMarkup) {