超出了Python电报漫游器洪水控制

时间:2018-07-19 12:48:56

标签: python python-3.x telegram python-telegram-bot

我使用python-telegram-bot开发电报机器人。

尽管使用了MessageQueue(正如docs中所述),但我一直在获得

telegram.error.RetryAfter: Flood control exceeded. Retry in N seconds

当我从客户端(真的非常快地按下回复键盘按钮)向我的漫游器泛洪时,它就会回答我。

MessageQueue实际上有效,我可以看到一次发送大量消息(带有for循环)期间的延迟。我为消息队列尝试了不同的值,但这些值都无济于事。

无论它实际发送的消息数量如何,该机器人似乎都被电报禁止。

启动:

class MQBot(telegram.bot.Bot):

def __init__(self, *args, is_queued_def=True, mqueue=None, **kwargs):
    super(MQBot, self).__init__(*args, **kwargs)
    self._is_messages_queued_default = is_queued_def
    self._msg_queue = mqueue or mq.MessageQueue()

def __del__(self):
    try:
        self._msg_queue.stop()
    except:
        pass
    super(MQBot, self).__del__()

@mq.queuedmessage
def send_message(self, *args, **kwargs):
    return super(MQBot, self).send_message(*args, **kwargs)

主要

token = config.get_token()

q = mq.MessageQueue(all_burst_limit=3, all_time_limit_ms=3000)
request = Request(con_pool_size=8)
bot = MQBot(token=token, request=request, mqueue=q)
updater = telegram.ext.updater.Updater(bot=bot)
dispatcher = updater.dispatcher

main_handler = handlers.get_main_menu_handler()
start_handler = handlers.get_start_command_handler()
change_wallet_handler = handlers.get_change_wallet_handler()
callback_query_handler = handlers.get_callback_query_handler()

conv_handler = ConversationHandler(
    entry_points=[
        start_handler,
        main_handler
    ],
    states={
        handlers.MAIN: [
            main_handler
        ],
        handlers.WALLET_CHANGE: [change_wallet_handler],
    },
    fallbacks=[]
)

dispatcher.add_handler(conv_handler)
dispatcher.add_handler(callback_query_handler)
dispatcher.add_error_handler(handlers.error_callback)
updater.start_polling()
updater.idle()

处理程序示例:

def deposit(bot, user):
    bot.send_message(
        chat_id=user.chat_id,
        text=lang.deposit(user.deposit, user.balance)
    )
    return MAIN

方法线程(同步或异步)不会更改任何内容。在发生这种情况时,如何防止用户泛滥或避免禁止我的机器人?

1 个答案:

答案 0 :(得分:0)

问题出在bot的回复邮件大小:它大于512个字节。 Telegram API将此类消息视为大消息。因此,缩短bot的回复消息即可解决该问题。

您可以在article中了解更多信息。