Kontrol Flood (transformer-throttler
)
Pertimbangkan untuk menggunakan plugin auto
-retry .
Plugin ini menjaga bot kamu agar terhindar dari rate limit—lihat materi tingkat lanjut berikut—dengan cara membuat daftar antrian API request yang keluar menggunakan Bottleneck.
Aturan Pembatasan API yang Tidak Didokumentasikan
Telegram memiliki beberapa aturan rate limit yang tidak didokumentasikan. Sayangnya, aturan-aturan tersebut tidak diperhitungkan oleh throttler. Jika kamu hendak menggunakan plugin ini, sebaiknya gunakan juga plugin auto
Penggunaan
Perlu diketahui, pengaturan opsi bawaan plugin ini menggunakan aturan rate limit asli yang diterapkan oleh Telegram. Semestinya, pengaturan bawaan tersebut sudah cukup sesuai untuk sebagian besar bot. Berikut contoh penggunaan plugin ini dengan menggunakan opsi bawaan:
import { Bot } from "grammy";
import { run } from "@grammyjs/runner";
import { apiThrottler } from "@grammyjs/transformer-throttler";
const bot = new Bot("");
const throttler = apiThrottler();
bot.api.config.use(throttler);
bot.command("example", (ctx) => ctx.reply("Aku di-throttler."));
// Kalau kamu menggunakan throttler, kemungkinan besar kamu juga ingin
// menggunakan runner untuk menangani update secara bersamaan.
run(bot);
2
3
4
5
6
7
8
9
10
11
12
13
14
const { Bot } = require("grammy");
const { run } = require("@grammyjs/runner");
const { apiThrottler } = require("@grammyjs/transformer-throttler");
const bot = new Bot("");
const throttler = apiThrottler();
bot.api.config.use(throttler);
bot.command("example", (ctx) => ctx.reply("Aku di-throttler."));
// Kalau kamu menggunakan throttler, kemungkinan besar kamu juga ingin
// menggunakan runner untuk menangani update secara bersamaan.
run(bot);
2
3
4
5
6
7
8
9
10
11
12
13
14
import { Bot } from "https://deno.land/x/grammy@v1.33.0/mod.ts";
import { run } from "https://deno.land/x/grammy_runner@v2.0.3/mod.ts";
import { apiThrottler } from "https://deno.land/x/grammy_transformer_throttler@v1.2.1/mod.ts";
const bot = new Bot("");
const throttler = apiThrottler();
bot.api.config.use(throttler);
bot.command("example", (ctx) => ctx.reply("Aku di-throttler."));
// Kalau kamu menggunakan throttler, kemungkinan besar kamu juga ingin
// menggunakan runner untuk menangani update secara bersamaan.
run(bot);
2
3
4
5
6
7
8
9
10
11
12
13
14
Konfigurasi
Throttler ini menerima sebuah argument opsional dalam bentuk berikut:
type ThrottlerOptions = {
global?: Bottleneck.ConstructorOptions; // Untuk men-throttler semua pemanggilan api
group?: Bottleneck.ConstructorOptions; // Untuk men-throttler pesan grup yang keluar
out?: Bottleneck.ConstructorOptions; // Untuk men-throttler pesan pribadi yang keluar
};
2
3
4
5
Daftar lengkap object property apa saja yang tersedia untuk Bottleneck
bisa ditemukan di Bottleneck.
Jika tidak ada argument yang disertakan, throttler akan menggunakan konfigurasi bawaan. Berikut konfigurasi bawaannya:
// Throttler Keluaran Secara Keseluruhan
const globalConfig = {
reservoir: 30, // jumlah tugas baru yang throttler terima di awal
reservoirRefreshAmount: 30, // jumlah tugas yang throttler terima setelah diperbarui
reservoirRefreshInterval: 1000, // rentang waktu pembaruan reservoir dalam milidetik
};
// Throttler Keluaran Grup
const groupConfig = {
maxConcurrent: 1, // hanya 1 tugas dalam satu waktu
minTime: 1000, // tunggu sekian milidetik untuk satu tugas
reservoir: 20, // jumlah tugas baru yang throttler terima di awal
reservoirRefreshAmount: 20, // jumlah tugas yang throttler terima setelah diperbarui
reservoirRefreshInterval: 60000, // rentang waktu pembaruan reservoir dalam milidetik
};
// Throttler Keluaran Pribadi
const outConfig = {
maxConcurrent: 1, // hanya 1 tugas dalam satu waktu
minTime: 1000, // tunggu sekian milidetik untuk satu tugas
};
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21