Hidratar (hydrate
)
Este plugin instala métodos útiles en dos tipos de objetos, a saber
- los resultados de las llamadas a la API, y
- los objetos del objeto de contexto
ctx
.
En lugar de tener que llamar a ctx
o bot
y tener que suministrar todo tipo de identificadores, ahora puedes simplemente llamar a los métodos de los objetos y simplemente funcionarán. Esto se ilustra mejor con un ejemplo.
SIN este plugin:
bot.on(":photo", async (ctx) => {
const statusMessage = await ctx.reply("Procesando");
await doWork(ctx.msg.photo); // un procesado largo de la imagen
await ctx.api.editMessageText(
ctx.chat.id,
statusMessage.message_id,
"¡Hecho!",
);
setTimeout(
() =>
ctx.api.deleteMessage(ctx.chat.id, statusMessage.message_id).catch(
() => {
// No hacer nada en caso de error.
},
),
3000,
);
});
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
CON este plugin:
bot.on(":photo", async (ctx) => {
const statusMessage = await ctx.reply("Procesando");
await doWork(ctx.msg.photo); // un procesado largo de la imagen
await statusMessage.editText("¡Hecho!"); // ¡tan fácil!
setTimeout(() => statusMessage.delete().catch(() => {}), 3000);
});
2
3
4
5
6
Genial, ¿verdad?
Instalación
Hay dos maneras de instalar este plugin.
Instalación simple
Este plugin se puede instalar de una manera sencilla que debería ser suficiente para la mayoría de los usuarios.
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.33.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
Instalación avanzada
Al utilizar la instalación simple, sólo se hidratarán los resultados de las llamadas a la API que pasen por ctx
, por ejemplo, ctx
. Estas son la mayoría de las llamadas para la mayoría de los bots.
Sin embargo, algunos bots pueden necesitar hacer llamadas a bot
. En este caso, deberías utilizar esta instalación avanzada.
Integrará la hidratación del contexto y la hidratación de los resultados de las llamadas a la API por separado en tu bot. Ten en cuenta que ahora también tienes que instalar un API flavor.
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.33.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
Qué objetos se hidratan
Este plugin actualmente hidrata
- mensajes y mensajes del canal
- mensajes editados y mensajes de canal editados
- consultas de devolución de llamada
- consultas en línea
- resultados elegidos en línea
- consultas de la aplicación web
- consultas de precomprobación y envío
- solicitudes de ingreso al chat
Todos los objetos se hidratan en
- el objeto de contexto
ctx
, - el objeto de actualización
ctx
dentro del contexto,.update - los accesos directos al objeto de contexto, como
ctx
, y.msg - los resultados de las llamadas a la API, cuando corresponda.
Resumen del plugin
- Nombre:
hydrate
- Fuente
- Referencia