Гідратація для 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.27.0/mod.ts";
import {
hydrate,
HydrateFlavor,
} from "https://deno.land/x/grammy_hydrate@v1.4.1/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.27.0/mod.ts";
import {
hydrateApi,
HydrateApiFlavor,
hydrateContext,
HydrateFlavor,
} from "https://deno.land/x/grammy_hydrate@v1.4.1/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, де це можливо.