grammY bilan video yuklab oluvchi Telegram bot
grammY — Telegram botlari uchun zamonaviy Node.js freymvorki, va yechish HTTP chaqiruvi bo'lgach undagi havola-video bot o'ttiz qatorcha. Bu qo'llanma — havolalarni ushlaydigan entity filtri, URL'ni to'g'ridan-to'g'ri oladigan reply metodlari, foydalanuvchi tushunadigan xato gaplari va keshlanadigan yagona narsa.
Yangilangan
O'rnatish
Faqat grammY; fetch Node 18+ da o'rnatilgan. O'rnatiladigan skreping to'plami yo'q, tirik ushlab turiladigan brauzer yo'q.
Terminalnpm install grammy
Havolani yeching
Kalit Authorization sarlavhasida bo'lgan bitta GET. AbortSignal.timeout sekin manbani handler'ingizni ushlab turishdan saqlaydi. Endpoint platformani URL'dan aniqlaydi, bot domen bo'yicha shoxlanmaydi.
JavaScriptconst API = "https://api.saveapi.org/v1/download";
async function resolve(link) {
const res = await fetch(API + "?url=" + encodeURIComponent(link), {
headers: { Authorization: "Bearer sk_live_xxxx" },
signal: AbortSignal.timeout(30_000),
});
return res.json();
}Havolalarni ushlang va media bilan javob bering
message::url URL entity'li har qanday xabarga mos keladi; ctx.entities("url") matnini beradi. replyWithVideo va replyWithPhoto media URL'ni to'g'ridan-to'g'ri oladi — Telegram o'zi tortadi. medias[0].type ni tekshiring: slayd-shou yoki karusel — rasmlar, video emas.
JavaScriptimport { Bot } from "grammy";
const bot = new Bot(process.env.BOT_TOKEN);
bot.on("message::url", async (ctx) => {
const link = ctx.entities("url")[0].text;
const data = await resolve(link);
if (!data.success) {
return ctx.reply(EXPLAIN[data.error.code] ?? "Try another link.");
}
const media = data.medias[0];
return media.type === "video"
? ctx.replyWithVideo(media.url, { caption: data.meta?.title ?? "" })
: ctx.replyWithPhoto(media.url);
});
bot.start();Odamlar haqiqatan uchraydigan xatolarni tushuntiring
Foydalanuvchilar kun bo'yi yopiq post va o'lik havola yuboradi. Barqaror kodlarni gaplarga xaritalang: "Bu akkaunt yopiq" degan bot boshqa havola oladi, "xato" degan bot jahlli xabar. Yopiq va yo'q post to'liq 1.5 emas, 0.1 kredit turadi.
JavaScriptconst EXPLAIN = {
PRIVATE_CONTENT: "That account is private — I can only fetch public posts.",
MEDIA_NOT_FOUND: "That post has no media, or it was deleted.",
UNSUPPORTED_PLATFORM: "I do not know that site yet.",
QUOTA_EXCEEDED: "Out of credits.",
UPSTREAM_TIMEOUT: "The source was slow. Send the link again.",
};Media URL'ni emas, Telegram file_id'sini keshlang
Birinchi yuborishdan keyin Telegram file_id beradi; uni qayta yuborish hech narsa yuklamaydi va kredit sarflamaydi. Media URL saqlash uchun noto'g'ri narsa — CDN havolalari imzolangan va bir necha soatda eskiradi.
Boshlashdan oldingi savollar
- Bot 50 MB dan katta fayl yubora oladimi?
- Yuklab emas; 50 MB — bot yuklashi uchun Telegram chegarasi. Media URL'ni uzatsangiz Telegram o'zi tortadi, file_id bilan qayta yuborishda hajm narxi yo'q.
- Webhook bilan ishlaydimi?
- Ha — handler o'sha; faqat bot.start() webhookCallback ga o'zgaradi. Fetch timeout'ini saqlang, webhook handler'ida ham muddat bor.
- Telegram URL'ni tortishdan bosh tortsa-chi?
- Baytlarni o'zingiz yuklab olib InputFile sifatida yuboring. Bu ko'pincha Instagram'da va har doim media guruhida bo'ladi; uni standart emas, zaxira yo'l qilib qoldiring.
Bu yerda ishlatilgan platformalar
Boshqa qo'llanmalar
Qo'llanmani o'z kalitingiz bilan ishga tushiring
Kalit bir daqiqada. 1 000 bepul kredit, kartasiz, muddatsiz.