Обмеження запитів до API (transformer-throttler
)
Цей плагін виконує вихідні запити до API в черзі через Bottleneck, щоб запобігти перевищенню вашим ботом лімітів, як це описано в просунутому розділі документації.
Існують недокументовані ліміти API
Telegram реалізує невизначені та недокументовані обмеження запитів для деяких викликів API. Ці недокументовані обмеження не враховуються плагіном. Якщо ви все ще хочете використовувати цей плагін, розгляньте можливість використання плагіну auto
разом з ним.
Використання
Ось приклад використання цього плагіна з параметрами за замовчуванням. Зверніть увагу, що типові налаштування відповідають фактичним обмеженням швидкості, які застосовує Telegram, тому вони повинні нормально працювати.
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("Я обмежений"));
// Якщо ви використовуєте цей плагін, то ви, швидше за все, захочете використати runner для паралельної обробки оновлень.
run(bot);
2
3
4
5
6
7
8
9
10
11
12
13
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("Я обмежений"));
// Якщо ви використовуєте цей плагін, то ви, швидше за все, захочете використати runner для паралельної обробки оновлень.
run(bot);
2
3
4
5
6
7
8
9
10
11
12
13
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("Я обмежений"));
// Якщо ви використовуєте цей плагін, то ви, швидше за все, захочете використати runner для паралельної обробки оновлень.
run(bot);
2
3
4
5
6
7
8
9
10
11
12
13
Налаштування
Плагін приймає один необовʼязковий обʼєкт наступного вигляду:
type ThrottlerOptions = {
global?: Bottleneck.ConstructorOptions; // для обмеження всіх викликів api
group?: Bottleneck.ConstructorOptions; // для обмеження вихідних повідомлень у групах
out?: Bottleneck.ConstructorOptions; // для обмеження вихідних приватних повідомлень
};
2
3
4
5
Повний список властивостей обʼєкта, доступних для Bottleneck
, можна знайти на сторінці Bottleneck.
Якщо не передано жодного аргументу, створений обмежувач використовуватиме параметри конфігурації за замовчуванням, які мають бути придатними для більшості випадків використання. Типова конфігурація наступна:
// Глобальний обмежувач для вихідних запитів
const globalConfig = {
reservoir: 30, // кількість нових завдань, які обмежувач візьме після старту
reservoirRefreshAmount: 30, // кількість завдань, які обмежувач візьме після оновлення резервуару
reservoirRefreshInterval: 1000, // інтервал у мілісекундах, з яким оновлюватиметься резервуар
};
// Обмежувач для вихідних запитів у групах
const groupConfig = {
maxConcurrent: 1, // тільки 1-е завдання одночасно
minTime: 1000, // чекати стільки-то мілісекунд після виконання завдання
reservoir: 20, // кількість нових завдань, які обмежувач візьме після старту
reservoirRefreshAmount: 20, // кількість завдань, які обмежувач візьме після оновлення резервуару
reservoirRefreshInterval: 60000, // інтервал у мілісекундах, з яким оновлюватиметься резервуар
};
// Обмежувач для вихідних запитів у приватних чатах
const outConfig = {
maxConcurrent: 1, // тільки 1-е завдання одночасно
minTime: 1000, // чекати стільки-то мілісекунд після виконання завдання
};
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21