Гідратація для grammY (hydrate)
Цей плагін встановлює корисні методи на два типи обʼєктів, а саме:
- Результати викликів API.
- Обʼєкти на обʼєкті контексту
ctx.
Замість того, щоб викликати ctx або bot і вказувати всілякі ідентифікатори, тепер ви можете просто викликати методи на обʼєктах, і вони просто працюватимуть. Найкраще це проілюструвати на прикладі.
БЕЗ цього плагіна:
bot.on(":photo", async (ctx) => {
const statusMessage = await ctx.reply("Обробка");
await doWork(ctx.msg.photo); // деяка тривала обробка зображення
await ctx.api.editMessageText(
ctx.chat.id,
statusMessage.message_id,
"Готово!",
);
setTimeout(
() =>
ctx.api.deleteMessage(ctx.chat.id, statusMessage.message_id).catch(
() => {
// Нічого не робимо при помилках.
},
),
3000,
);
});2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Із цим плагіном:
bot.on(":photo", async (ctx) => {
const statusMessage = await ctx.reply("Обробка");
await doWork(ctx.msg.photo); // деяка тривала обробка зображення
await statusMessage.editText("Готово!"); // так просто!
setTimeout(() => statusMessage.delete().catch(() => {}), 3000);
});2
3
4
5
6
Круто, чи не так?
Встановлення
Існує два способи встановлення цього плагіна.
Просте встановлення
Цей плагін можна встановити простим способом, якого має бути достатньо для більшості користувачів.
import { Bot, Context } from "grammy";
import { hydrate, HydrateFlavor } from "@grammyjs/hydrate";
type MyContext = HydrateFlavor<Context>;
const bot = new Bot<MyContext>("");
bot.use(hydrate());2
3
4
5
6
7
8
import { Bot } from "grammy";
import { hydrate } from "@grammyjs/hydrate";
const bot = new Bot("");
bot.use(hydrate());2
3
4
5
6
import { Bot, Context } from "https://deno.land/x/grammy@v1.38.3/mod.ts";
import {
hydrate,
HydrateFlavor,
} from "https://deno.land/x/grammy_hydrate@v1.6.0/mod.ts";
type MyContext = HydrateFlavor<Context>;
const bot = new Bot<MyContext>("");
bot.use(hydrate());2
3
4
5
6
7
8
9
10
11
Просунуте встановлення
При використанні простого встановлення будуть гідратовані лише результати викликів API, які проходять через ctx, наприклад, ctx. Це більшість викликів для більшості ботів.
Однак деяким ботам може знадобитися звертатися до bot. У цьому випадку вам слід скористатися цим просунутим встановленням.
Воно інтегрує гідратацію контексту та гідратацію результатів виклику API окремо у вашого бота. Зверніть увагу, що тепер вам також потрібно встановити розширювач для API.
import { Api, Bot, Context } from "grammy";
import {
hydrateApi,
HydrateApiFlavor,
hydrateContext,
HydrateFlavor,
} from "@grammyjs/hydrate";
type MyContext = HydrateFlavor<Context>;
type MyApi = HydrateApiFlavor<Api>;
const bot = new Bot<MyContext, MyApi>("");
bot.use(hydrateContext());
bot.api.config.use(hydrateApi());2
3
4
5
6
7
8
9
10
11
12
13
14
15
import { Bot } from "grammy";
import { hydrateApi, hydrateContext } from "@grammyjs/hydrate";
const bot = new Bot("");
bot.use(hydrateContext());
bot.api.config.use(hydrateApi());2
3
4
5
6
7
import { Api, Bot, Context } from "https://deno.land/x/grammy@v1.38.3/mod.ts";
import {
hydrateApi,
HydrateApiFlavor,
hydrateContext,
HydrateFlavor,
} from "https://deno.land/x/grammy_hydrate@v1.6.0/mod.ts";
type MyContext = HydrateFlavor<Context>;
type MyApi = HydrateApiFlavor<Api>;
const bot = new Bot<MyContext, MyApi>("");
bot.use(hydrateContext());
bot.api.config.use(hydrateApi());2
3
4
5
6
7
8
9
10
11
12
13
14
15
Які обʼєкти піддаються гідратації
Наразі цей плагін гідратує
- повідомлення та публікації каналу,
- відредаговані повідомлення та відредаговані дописи каналу,
- запити зворотного виклику,
- inline-запити,
- вибрані inline результати,
- запити вебзастосунків,
- запити на попереднє замовлення та доставку,
- запити на приєднання до чату.
Всі обʼєкти гідратовані на
- обʼєкті контексту
ctx, - обʼєкті оновлення
ctxвсередині контексту,.update - скоречені методі на обʼєкті контексту, як-от
ctx,.msg - результати викликів API, де це можливо.