Бот дискорда падает в Rate limited, что делать?

У меня бот почти 4000 серверов. По формуле КОЛИЧЕСТВО СЕРВЕРОВ / 1000 = КОЛИЧЕСТВО ШАРДОВ
Бот должен быть запущен на 4-5 шардах. Но при запуске на таких шардах у меня сразу же вылазит таймаут на несколько минут из за Rate limited, именно во время запуска

Ставлю 128 шардов у меня все норм, но во время работы бота вылазит
[2024-03-27 17:05:25] [WARNING ] discord.http: We are being rate limited. PATCH https://discord.com/api/v10/channels/1215300998588... responded with 429. Retrying in 2.08 seconds.
[2024-03-27 17:05:30] [WARNING ] discord.http: We are being rate limited. PATCH https://discord.com/api/v10/channels/1215300998588... responded with 429. Retrying in 3.78 seconds.

Но 128 шардов для такого маленького бота это очень много. Когда у другого музыкального бота, 250к серверов и у него 128 шардов

Что я делаю не так. Говорили мне, что бот где то спамит. Но я пересмотрел весь код, ну нету ничего такого

В кратце о боте:
Музыкальный бот использующий discord.py и wavelink. Так же имеется запущенный сервер lavalink

Main функция с шардированием

Дополнительно:

Может он при попытке синхронизировать команды упирается в лимит?

  • Вы запускаете шарды с разных IP адресов?
  • Ответы:

    Давайте по порядку. В документации дискорда очень четко прописаны лимиты для вебсокета и чуть менее четко для HTTP. Цитировать оттуда не буду, думаю там все понятно.

    В общем виде ошибка 429 говорит, что в один из двух лимитов вы не укладываетесь. Чтобы не происходила ошибка можно перед выполнением действий проверять блокировку через AutoShardedClient.is_ws_ratelimited, но это не лечение проблемы, а только обработка.
    Для лечения нужно перехватывать ошибку в глобальном обработчике и по стеку вызовов смотреть на каком действии она происходит. Если приложите стектрейс к запросу, можно будет по нему сказать конкретнее. Только убедитесь чтобы логи не обрезались как у вас выше. Может быть и так было бы понятно, но эндпоинт https://discord.com/api/v10/channels/1215300998588... весь не видно. Учитывайте что она может и в разных когах происходить об этом ниже.

    В целом дискорд не любит, когда боты делают что-либо без явных действий пользователя. Причем чем больше бот, тем строже, поскольку для них это больше нагрузки. К примеру в коде, который вы приложили есть обновление статуса каждые 10 секунд. Будем объективны, пользователям плевать что у бота в статусе, но эти запросы так же идут в общий рейт лимит. Я бы советовал поставить или большое значение (5-10 минут) или вообще избавиться от этой карусели.
    Аналогично пройдите по остальному коду, который не приложен и посмотрите есть ли периодические запросы без явных команд: например обновления каких-нибудь сообщений по таймерам. Если есть увеличивайте таймеры в 2 раза (повторять до исправления) или подумайте как предоставлять функционал без этого.

    • Но я так и не понял. Почему даже при запуске бота с 3к серверами ему не хватает 5 шардов. Ведь при запуске он ничего не делает. Абсолютно. Но сразу же вешаются лимиты и пишет, что надо ждать пару минут.
    • при запуске бота с 3к серверами ему не хватает 5 шардов

      Да это не нормально. Один шард может обслуживать до 2500 серверов.

      Ведь при запуске он ничего не делает. Абсолютно

      Допустим мы верим, что при запуске бот ничего не делает и обвиним во всем плохой дискорд. Вопрос этим решится?
      Нужен или код или логи. Вешайте глобальный обработчик ошибок и дополняйте вопрос логами.

     

    Для решения данной проблемы вы можете воспользоваться услугами фрилансеров. Мы выполним необходимую работу быстро и качественно.

     

      • Бот дискорда падает в Rate limited, что делать?Есть ответ
      • 08.04.2024
      Ответить

      Rate limiting is a common issue that occurs when a bot makes too many requests to the Discord API in a short period of time. This is done to prevent abuse and ensure the stability of the platform. If your bot is hitting the rate limit, there are a few steps you can take to resolve the issue:

      1. Check your bot's code: Make sure that your bot is not making unnecessary API requests or sending too many messages in a short period of time. Look for any loops or functions that may be causing the issue.

      2. Implement a rate limiting strategy: You can use a library or framework that handles rate limiting for you, such as Discord.js for JavaScript or discord.py for Python. These libraries have built-in mechanisms to prevent rate limiting and handle requests more efficiently.

      3. Use exponential backoff: If your bot receives a 429 HTTP status code (indicating that it has been rate limited), implement an exponential backoff strategy to gradually increase the time between requests. This will help prevent your bot from hitting the rate limit again.

      Here is an example of how you can implement exponential backoff in PHP:

      By following these steps and implementing a proper rate limiting strategy, you can prevent your Discord bot from hitting the rate limit and ensure its smooth operation.

    Оставить комментарий