PyTelegramBotApi Error code: 429. Description: Too Many Requests: retry after 237
писал бота-предложку для телеграм группы, через несколько часов бот стал выдавать ошибку 429. немного поясню - пользователь отправляет в бота картинку/текст, и выбирает кнопку "отправить на рассмотрение". после этого бот пересылает это в админский чат, где админы получают кнопки одобрить/отклонить. после перезапуска бота ничего не происходит, та же 429 ошибка. читал в интернете, что это связано с задержкой в 30 секунд.
код ошибки ниже
$ python main_bot.py
2023-07-02 23:24:18,768 (__init__.py:1083 MainThread) ERROR - TeleBot: "Threaded polling exception: A request to the Telegram API was unsuccessful. Error code: 429. De
scription: Too Many Requests: retry after 237"
2023-07-02 23:24:18,768 (__init__.py:1085 MainThread) ERROR - TeleBot: "Exception traceback:
Traceback (most recent call last):
File "/home/haltenny/.local/lib/python3.10/site-packages/telebot/__init__.py", line 1074, in __threaded_polling
self.worker_pool.raise_exceptions()
File "/home/haltenny/.local/lib/python3.10/site-packages/telebot/util.py", line 147, in raise_exceptions
raise self.exception_info
File "/home/haltenny/.local/lib/python3.10/site-packages/telebot/util.py", line 90, in run
task(*args, **kwargs)
File "/home/haltenny/.local/lib/python3.10/site-packages/telebot/__init__.py", line 6770, in _run_middlewares_and_handler
result = handler['function'](message)
File "/home/haltenny/main_bot.py", line 43, in callback_message
callback_admin(callback)
File "/home/haltenny/main_bot.py", line 33, in callback_admin
bot.forward_message(TO_CHAT_ID, callback.message.chat.id, callback.message.message_id - 1)
File "/home/haltenny/.local/lib/python3.10/site-packages/telebot/__init__.py", line 1593, in forward_message
apihelper.forward_message(self.token, chat_id, from_chat_id, message_id, disable_notification, timeout, protect_content,
File "/home/haltenny/.local/lib/python3.10/site-packages/telebot/apihelper.py", line 401, in forward_message
return _make_request(token, method_url, params=payload)
File "/home/haltenny/.local/lib/python3.10/site-packages/telebot/apihelper.py", line 162, in _make_request
json_result = _check_result(method_name, result)
File "/home/haltenny/.local/lib/python3.10/site-packages/telebot/apihelper.py", line 189, in _check_result
raise ApiTelegramException(method_name, result, result_json)
telebot.apihelper.ApiTelegramException: A request to the Telegram API was unsuccessful. Error code: 429. Description: Too Many Requests: retry after 237
Код самого бота:
import telebot
from telebot import types
import time
bot = telebot.TeleBot("78")
TO_CHAT_ID = "78"
@bot.message_handler(commands=['start'])
def main(message):
if message.from_user.last_name == None:
bot.send_message(message.chat.id, f"<b>{message.from_user.first_name}, приветствуем тебя в боте.</b> Отправь мне мем, и после проверки модерации он появится на канале. Злоупотребление ботом карается бананом.", parse_mode="html")
else:
bot.send_message(message.chat.id, f"<b>{message.from_user.first_name} {message.from_user.last_name}, приветствуем тебя в боте.</b> Отправь мне мем, и после проверки модерации он появится на канале. Злоупотребление ботом карается бананом.", parse_mode="html")
@bot.message_handler(commands=['help'])
def main(message):
bot.send_message(message.chat.id, """Это бот-предложка канала. Вы можете отправить ваш мем, который отправится на модерацию. Если администраторы одобрят ваш мем, то он появится в канале.""")
@bot.message_handler(content_types=["photo", "video", "sticker", "text", "audio", "voice", "video_note"])
def photo(message):
markup = types.InlineKeyboardMarkup()
markup.add(types.InlineKeyboardButton("Отправить мем на модерацию", callback_data="moderate_meme"))
markup.add(types.InlineKeyboardButton("Отправить сообщение администрации", callback_data="send_to_admins"))
markup.add(types.InlineKeyboardButton("Ничего", callback_data="leave"))
bot.reply_to(message, "Что вы хотите сделать с этим сообщением?", reply_markup=markup)
def callback_admin(callback):
markup = types.InlineKeyboardMarkup()
markup.add(types.InlineKeyboardButton("Да", callback_data="allowed"))
markup.add(types.InlineKeyboardButton("Нет", callback_data="not_allowed"))
bot.forward_message(TO_CHAT_ID, callback.message.chat.id, callback.message.message_id - 1)
bot.send_message(TO_CHAT_ID, text="Одобрить пост?", reply_markup=markup)
@bot.callback_query_handler(func=lambda callback: True)
def callback_message(callback):
if callback.data == "moderate_meme":
time.sleep(1)
bot.edit_message_text("Мем отправлен на модерацию админам", callback.message.chat.id, callback.message.message_id)
time.sleep(30)
callback_admin(callback)
if callback.data == "send_to_admins":
time.sleep(1)
bot.edit_message_text("Сообщение отправлено администраторам канала", callback.message.chat.id, callback.message.message_id)
time.sleep(30)
bot.forward_message(TO_CHAT_ID, callback.message.chat.id, callback.message.message_id - 1)
if callback.data == "leave":
time.sleep(1)
bot.edit_message_text("Сообщение проигнорировано", callback.message.chat.id, callback.message.message_id)
if callback.data == "allowed":
time.sleep(1)
bot.forward_message(000, callback.message.chat.id, callback.message.message_id - 1)
bot.edit_message_text(f"Мем одобрен", callback.message.chat.id, callback.message.message_id)
if callback.data == "not_allowed":
time.sleep(1)
bot.edit_message_text("Пост отклонён", callback.message.chat.id, callback.message.message_id)
bot.polling(none_stop=True)
Источник: Stack Overflow на русском