Спрощена обробка файлів у grammY (files
)
Цей плагін дозволяє легко завантажувати файли з серверів Telegram, а також отримувати URL-адресу, щоб ви могли завантажити файл самостійно.
Пригадайте, як працюють файли та як їх завантажувати.
Завантаження файлів
Вам потрібно передати токен бота цьому плагіну, оскільки він повинен автентифікуватися як ваш бот, коли завантажує файли. Потім цей плагін встановлює метод download
на результати виклику get
. Наприклад:
import { Bot, Context } from "grammy";
import { FileFlavor, hydrateFiles } from "@grammyjs/files";
// Перетворювальний розширювач для контексту
type MyContext = FileFlavor<Context>;
// Створюємо бота.
const bot = new Bot<MyContext>("");
// Використовуємо плагін.
bot.api.config.use(hydrateFiles(bot.token));
// Завантажуємо відео та GIF у тимчасове сховище.
bot.on([":video", ":animation"], async (ctx) => {
// Готуємо файл до завантаження.
const file = await ctx.getFile();
// Завантажуємо файл у тимчасове сховище.
const path = await file.download();
// Виводимо шлях до файлу.
console.log("Файл збережено за шляхом ", path);
});
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import { Bot } from "grammy";
import { hydrateFiles } from "@grammyjs/files";
// Створюємо бота.
const bot = new Bot("");
// Використовуємо плагін.
bot.api.config.use(hydrateFiles(bot.token));
// Завантажуємо відео та GIF у тимчасове сховище.
bot.on([":video", ":animation"], async (ctx) => {
// Готуємо файл до завантаження.
const file = await ctx.getFile();
// Завантажуємо файл у тимчасове сховище.
const path = await file.download();
// Виводимо шлях до файлу.
console.log("Файл збережено за шляхом ", path);
});
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import { Bot, Context } from "https://deno.land/x/grammy@v1.33.0/mod.ts";
import {
FileFlavor,
hydrateFiles,
} from "https://deno.land/x/grammy_files@v1.1.1/mod.ts";
// Перетворювальний розширювач для контексту
type MyContext = FileFlavor<Context>;
// Створюємо бота.
const bot = new Bot<MyContext>("");
// Використовуємо плагін.
bot.api.config.use(hydrateFiles(bot.token));
// Завантажуємо відео та GIF у тимчасове сховище.
bot.on([":video", ":animation"], async (ctx) => {
// Готуємо файл до завантаження.
const file = await ctx.getFile();
// Завантажуємо файл у тимчасове сховище.
const path = await file.download();
// Виводимо шлях до файлу.
console.log("Файл збережено за шляхом ", path);
});
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Ви можете передати методу download
рядок із шляхом для зберігання файлу, якщо не хочете створювати тимчасовий файл. Просто виконайте await file
.
Якщо ви хочете отримати лише URL-адресу файлу, щоб завантажити його самостійно, використовуйте file
. Цей метод поверне посилання HTTPS на ваш файл, яке буде дійсним протягом принаймні однієї години.
Локальний сервер Bot API
Якщо ви використовуєте локальний сервер Bot API, то виклик get
вже фактично завантажує файл на ваш диск.
У свою чергу, ви можете викликати file
, щоб отримати доступ до шляху цього файлу. Зверніть увагу, що await file
тепер просто копіює наявний локальний файл у тимчасове місце розташування або за вказаним шляхом, якщо його було вказано.
Підтримка викликів bot.api
Результати await bot
також матимуть типові методи download
та get
. Однак це не відображатиметься у типах. Якщо вам потрібно їх викликати, вам також варто встановити розширювач для API з назвою File
на обʼєкті бота:
import { Api, Bot, Context } from "grammy";
import { FileApiFlavor, FileFlavor, hydrateFiles } from "@grammyjs/files";
type MyContext = FileFlavor<Context>;
type MyApi = FileApiFlavor<Api>;
const bot = new Bot<MyContext, MyApi>("");
// ...
2
3
4
5
6
7
8
import { Api, Bot, Context } from "https://deno.land/x/grammy@v1.33.0/mod.ts";
import {
FileApiFlavor,
FileFlavor,
hydrateFiles,
} from "https://deno.land/x/grammy_files@v1.1.1/mod.ts";
type MyContext = FileFlavor<Context>;
type MyApi = FileApiFlavor<Api>;
const bot = new Bot<MyContext, MyApi>("");
// ...
2
3
4
5
6
7
8
9
10
11
12