简体   繁体   English

Telegram bot - 在 webhook 处于活动状态时无法使用 getUpdates 方法

[英]Telegram bot - can't use getUpdates method while webhook is active

When I'm starting a bot after 10 minutes - 2 hours appears exception: can't use getUpdates method while webhook is active .当我在 10 分钟后启动机器人时 - 2 小时出现异常: can't use getUpdates method while webhook is active

I already tried to delete webhook like that: https://api.telegram.org/bot{token}/deleteWebhook , but it did not help.我已经尝试删除这样的 webhook: https://api.telegram.org/bot{token}/deleteWebhook ,但它没有帮助。

Also, I noticed that after an exception was raised, bot replies to any message with a sticker.另外,我注意到在引发异常后,bot 会回复带有贴纸的任何消息。 这是截图

Here is the part of main file of the bot (The whole project you can see on my GitHub - https://github.com/MartsinovichDanya/Task_manager_telegram )这是机器人主文件的一部分(整个项目你可以在我的 GitHub 上看到 - https://github.com/MartsinovichDanya/Task_manager_telegram

    from telegram.ext import Updater, MessageHandler, Filters, CommandHandler
    from telegram import ReplyKeyboardRemove
    # ...
    updater = Updater(TOKEN)
    
    dp = updater.dispatcher
    
    dp.add_handler(CommandHandler("start", start))
    
    
    # Клавиатура Босса
    dp.add_handler(MessageHandler(Filters.regex('Добавить задачу в проект'), write_proj_add_task))
    dp.add_handler(MessageHandler(Filters.regex('Удалить задачу из проекта'), write_proj_delete_task))
    
    dp.add_handler(MessageHandler(Filters.regex('Проекты'), project_options))
    dp.add_handler(MessageHandler(Filters.regex('Задачи'), task_options))
    dp.add_handler(MessageHandler(Filters.regex('Сотрудники'), employee_options))
    
    dp.add_handler(MessageHandler(Filters.regex('Добавить проект'), write_add_project))
    dp.add_handler(MessageHandler(Filters.regex('Удалить проект'), write_delete_project))
    dp.add_handler(MessageHandler(Filters.regex('Просмотр проектов'), select_project))
    
    dp.add_handler(MessageHandler(Filters.regex('Добавить задачу'), write_add_task))
    dp.add_handler(MessageHandler(Filters.regex('Удалить задачу'), write_delete_task))
    dp.add_handler(MessageHandler(Filters.regex('Просмотр задач'), task_preview))
    
    dp.add_handler(MessageHandler(Filters.regex('Добавить сотрудника'), write_add_employee))
    dp.add_handler(MessageHandler(Filters.regex('Удалить сотрудника'), write_delete_employee))
    dp.add_handler(MessageHandler(Filters.regex('Просмотр сотрудников'), select_employee))
    
    dp.add_handler(MessageHandler(Filters.regex('Главное меню'), start))
    
    dp.add_handler(MessageHandler(Filters.regex('Отчёты по Проектам'), project_report))
    dp.add_handler(MessageHandler(Filters.regex('Отчёты по Задачам'), task_report))
    dp.add_handler(MessageHandler(Filters.regex('Отчёты по Сотрудникам'), employee_report))
    dp.add_handler(MessageHandler(Filters.regex('Отчёты'), report))
    
    
    dp.add_handler(MessageHandler(Filters.regex('Назад'), back_to_report))
    
    
    # Клавиатура сотрудника
    dp.add_handler(MessageHandler(Filters.regex('Просмотр моих задач'), employee_task_preview))
    dp.add_handler(MessageHandler(Filters.regex('Выполнено'), select_done_task))
    
    # Создаём и удаляем тестовый обработчик текстовых сообщений (команд)
    projects_list = []
    employee_list = []
    
    em = EmployeeModel(db.get_connection())
    for e in em.get_all():
        employee_list.append(e[1])
    
    pm = ProjectModel(db.get_connection())
    for p in pm.get_all():
        projects_list.append(p[1])
    
    # Создаём обработчик текстовых сообщений типа Filters.text
    text_handler = MessageHandler(Filters.text, global_function)
    # Регистрируем обработчик в диспетчере.
    dp.add_handler(text_handler)
    
    # Запускаем цикл приема и обработки сообщений
    updater.start_polling()
    
    # Отправляем http запрос
    url = 'https://api.telegram.org/<bot_name_here>:<bot_token_here>/deleteWebhook'
    req = requests.get(url)
    print(req.status_code)
    
    # Ждём завершения приложения при нажатии клавиш Ctrl+C
    updater.idle()

If somebody knows how to solve that problem, please help me!如果有人知道如何解决这个问题,请帮助我!

You posted your TOKEN publicly and anybody can run your bot without your permission.您公开发布了您的令牌,任何人都可以在未经您许可的情况下运行您的机器人。 And also reply with sticker or anything else.还可以回复贴纸或其他任何东西。

Polling mode (with getUpdates) can be running only once at the same time and only if Webhooks are not set.轮询模式(使用 getUpdates)只能同时运行一次,并且仅当未设置 Webhooks 时。 And looks like someone repeatedly sets a webhook after some time ( 10 minutes - 2 hours ).并且看起来有人在一段时间( 10 minutes - 2 hours )后反复设置网络钩子。

To avoid that - delete this file ( token ) from GitHub and remove everywhere from code.为避免这种情况 - 从 GitHub 中删除此文件 ( token )并从代码中删除所有位置。 Use environment variables instead.改用环境变量
And put token file to .gitignore file.并将token文件放入.gitignore文件。

After that revoke token of your bot using @BotFather and update it everywhere you are using it.之后使用@BotFather撤销您的机器人的令牌并在您使用它的任何地方更新它。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM