Plugin Hidrasi untuk grammY (hydrate
)
Plugin ini akan menginstal method-method yang berguna di dua macam object, yaitu
- hasil dari pemanggilan API; serta
- object-object di context object
ctx
.
Daripada memanggil ctx
atau bot
lalu menyuplainya dengan berbagai identifier, dengan plugin ini kamu cukup memanggil method di object. Mari kita lihat perbandingannya di contoh berikut.
TANPA plugin:
bot.on(":photo", async (ctx) => {
const statusMessage = await ctx.reply("Memproses");
await doWork(ctx.msg.photo); // Pemrosesan gambar yang butuh waktu lama
await ctx.api.editMessageText(
ctx.chat.id,
statusMessage.message_id,
"Selesai!",
);
setTimeout(
() =>
ctx.api.deleteMessage(ctx.chat.id, statusMessage.message_id).catch(
() => {
// Abaikan saat terjadi error.
},
),
3000,
);
});
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
DENGAN plugin:
bot.on(":photo", async (ctx) => {
const statusMessage = await ctx.reply("Memproses");
await doWork(ctx.msg.photo); // Pemrosesan gambar yang butuh waktu lama
await statusMessage.editText("Selesai!"); // Mudah sekali!
setTimeout(() => statusMessage.delete().catch(() => {}), 3000);
});
2
3
4
5
6
Lebih rapi, bukan?
Instalasi
Ada dua cara untuk menginstal plugin ini:
Instalasi Sederhana
Plugin ini bisa diinstal secara langsung. Cara pemasangan yang seperti ini sudah cukup untuk kebanyakan pengguna.
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
Pemasangan Tingkat Lanjut
Ketika menggunakan instalasi sederhana, hanya hasil dari pemanggilan API yang melalui ctx
yang akan dihidrasi, contohnya ctx
. Pemanggilan ini yang paling sering digunakan oleh kebanyakan bot.
Namun, beberapa bot mungkin perlu untuk memanggil bot
. Untuk kasus seperti itu, kamu sebaiknya menggunakan instalasi tingkat lanjut ini.
Instalasi ini akan mengintegrasikan context hydration dan hidrasi hasil pemanggilan API secara terpisah ke dalam bot kamu. Perlu diingat bahwa kamu sekarang perlu menginstal sebuah 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
Object Apa Saja yang Dihidrasi
Untuk saat ini, plugin menghidrasi
- pesan dan postingan channel;
- pesan yang diedit dan postingan channel yang diedit;
- callback query;
- inline query;
- hasil inline yang dipilih;
- web app query; dan
- pre-checkout serta shipping query.
Semua object dihidrasi di
- context object
ctx
; - update object
ctx
di dalam context;.update - shortcut untuk context object, misal
ctx
; dan.msg - hasil pemanggilan API ketika diterapkan.