Proksi imej
Gunakan proksi imej Nowly apabila Discord tidak dapat memuatkan imej kehadiran secara terus daripada CDN luaran yang disokong.
Kegunaan
Proksi imej disediakan untuk keadaan khusus: kehadiran dapat melihat imej awam pada halaman, tetapi Discord tidak dapat memuatkannya dengan boleh dipercayai daripada URL asal.
Ia berguna untuk lakaran kecil video, avatar, poster atau imej kategori yang disajikan oleh CDN luaran apabila:
- imej itu awam dan sudah kelihatan dalam pelayar;
- URL CDN terlalu panjang untuk Discord Rich Presence;
- Discord menolak imej terus, URL tamat tempoh atau muat turun gagal;
- kehadiran perlu menunjukkan imej khusus kandungan dan bukan hanya logo perkhidmatan.
Ini bukan proksi imej serba guna. API hanya menerima perkhidmatan dan domain yang dibenarkan secara jelas.
Cara ia berfungsi
Aliran yang disyorkan menggunakan URL pendek sementara:
TXTPOST https://api.nowly.me/images-proxy
GET https://api.nowly.me/images-proxy/<id>Kehadiran menghantar URL imej CDN sebenar kepada API. API menyemak sama ada perkhidmatan disokong, memuat turun imej, mengesahkan jenis MIME dan saiznya, kemudian menyimpannya sementara dalam cache. API memulangkan URL pendek seperti:
TXThttps://api.nowly.me/images-proxy/abc123...URL ini memulangkan bait imej secara terus dengan Content-Type yang betul. Ia untuk digunakan sebagai largeImageKey atau smallImageKey.
import { createCachedImageProxyUrl } from "@nowly/sdk"
const image = await createCachedImageProxyUrl("tiktok", imageUrl)
await presence.setActivity({
details: "Watching a video",
largeImageKey: image ?? Assets.Logo,
})Tempoh cache adalah singkat, kini lima minit. Pembantu ini turut menyimpan cache dalam memori kehadiran supaya API tidak dipanggil pada setiap kemas kini.
Titik akhir terus
Proksi terus yang lebih lama masih tersedia untuk ujian manual atau URL yang sudah cukup pendek:
TXThttps://api.nowly.me/image-proxy?service=<service>&url=<encoded-url>
https://api.nowly.me/i?u=<encoded-url>Parameter url dan u mesti dikodkan dengan encodeURIComponent. Untuk Discord Rich Presence, utamakan createCachedImageProxyUrl kerana Discord mengehadkan kunci imej kepada 300 aksara.
Menyediakannya dalam kehadiran
Mula-mula, dapatkan URL imej sebenar daripada halaman:
const getPoster = (video: HTMLVideoElement): string | undefined => {
if (video.poster) return video.poster
const image = video.closest("[data-video]")?.querySelector("img")
return image?.getAttribute("src") ?? undefined
}Kemudian, lalukan URL itu melalui pembantu sebelum menetapkan aktiviti:
import { createCachedImageProxyUrl } from "@nowly/sdk"
const poster = await createCachedImageProxyUrl("tiktok", getPoster(video))
await presence.setActivity({
details: "Watching a video",
largeImageKey: poster ?? Assets.Logo,
})Sentiasa sediakan imej sandaran. Jika halaman tiada imej, imej terlalu besar atau sumber tidak dibenarkan, kehadiran patut terus berfungsi dengan Assets.Logo atau imej setempat.
Menambah perkhidmatan
Domain yang dibenarkan diperiksa oleh API, bukan oleh kehadiran. Kehadiran tidak boleh menggunakan proksi bagi domain sewenang-wenangnya hanya dengan memintanya semasa berjalan. Tiada langkah kelulusan berasingan atau perubahan kod API: isytiharkan hos yang diperlukan terus dalam metadata.json kehadiran anda. Gunakan nilai service yang sama (slug kehadiran) seperti yang dihantar kepada pembantu:
"imageProxy": {
"hostSuffixes": ["netflix.com", "nflxvideo.net", "nflximg.net"],
"headers": { "Referer": "https://www.netflix.com/" }
}Maklumat ini diterbitkan kepada API secara automatik bersama kandungan metadata.json yang lain. API hanya mempercayai pengisytiharan untuk ID service kehadiran anda sendiri. Kehadiran tidak boleh mengisytiharkan nama hos bagi pihak kehadiran lain; permintaan hanya dibenarkan jika nama hos URL sasaran benar-benar sepadan dengan salah satu akhiran yang diisytiharkan.
Apabila PR anda mengubah imageProxy, bot pratonton kehadiran mengesannya secara automatik, menambah bahagian Image Proxy Requested pada komennya yang menyenaraikan nama hos dan meletakkan label image-proxy. Penyemak masih perlu mengesahkan bahawa hos itu awam dan selamat untuk proksi sebelum penggabungan. Jelaskan dalam PR mengapa Discord tidak boleh menggunakan URL imej terus dan imej yang akan dilihat pengguna.
Had dan keselamatan
Proksi hanya menyajikan imej awam daripada hos yang diisytiharkan oleh kehadiran yang telah disemak. Ia menolak URL bukan HTTPS, hos yang tidak sepadan dengan akhiran diisytiharkan, respons yang bukan imej dan fail yang terlalu besar.
Titik akhir ini awam dan tidak memerlukan pengesahan (kehadiran memanggilnya terus dari pelayar, jadi tiada rahsia untuk dilampirkan) serta berkongsi had kadar global API; tiada kuota bagi setiap kehadiran. Jangan gunakan proksi untuk kandungan akaun peribadi, sumber yang memerlukan pengesahan, URL penjejakan, input pengguna sewenang-wenangnya atau kandungan bukan imej.