Контроль флуда (transformer-throttler
)
Вместо этого используйте плагин auto
-retry .
Этот плагин регистрирует исходящие 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, // интервал в миллисекундах, через который резервуар будет обновляться
};
// Outgoing Group Throttler
const groupConfig = {
maxConcurrent: 1, // только 1 задание за раз
minTime: 1000, // сколько миллисекунд ждать, чтобы быть готовым, после выполнения задания
reservoir: 20, // количество новых заданий, которые троттлер будет принимать при запуске
reservoirRefreshAmount: 20, // количество заданий, которые троттлер будет принимать после обновления
reservoirRefreshInterval: 60000, // интервал в миллисекундах, через который резервуар будет обновляться
};
// Outgoing Private Throttler
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