def test_basic(self, dp, poll):
        handler = PollHandler(self.callback_basic)
        dp.add_handler(handler)

        assert handler.check_update(poll)

        dp.process_update(poll)
        assert self.test_flag
 def test_slot_behaviour(self, recwarn, mro_slots):
     inst = PollHandler(self.callback_basic)
     for attr in inst.__slots__:
         assert getattr(inst, attr, 'err') != 'err', f"got extra slot '{attr}'"
     assert not inst.__dict__, f"got missing slot(s): {inst.__dict__}"
     assert len(mro_slots(inst)) == len(set(mro_slots(inst))), "duplicate slot"
     inst.custom, inst.callback = 'should give warning', self.callback_basic
     assert len(recwarn) == 1 and 'custom' in str(recwarn[0].message), recwarn.list
示例#3
0
 def test_slot_behaviour(self, mro_slots):
     inst = PollHandler(self.callback)
     for attr in inst.__slots__:
         assert getattr(inst, attr,
                        "err") != "err", f"got extra slot '{attr}'"
     assert len(mro_slots(inst)) == len(set(
         mro_slots(inst))), "duplicate slot"
示例#4
0
    def initialize_bot(self, is_env):
        updater = Updater(token=self.TOKEN, use_context=True)
        dispatcher = updater.dispatcher
        self.foo = dispatcher
        logging.basicConfig(
            format="%(asctime)s - %(name)s - %(levelname)s - %(message)s",
            level=logging.INFO,
        )
        start_handler = CommandHandler("start", self.start)
        dispatcher.add_handler(start_handler)
        askdelete_handler = MessageHandler(
            Filters.regex("^@" + updater.bot.username + "$"), self.askdelete)
        askdelete_ban_handler = MessageHandler(
            Filters.regex("^@" + updater.bot.username + " ban$"),
            self.askdelete_ban)
        set_handler = CommandHandler("settings", self.set_cmd)
        dispatcher.add_handler(askdelete_handler)
        dispatcher.add_handler(askdelete_ban_handler)
        dispatcher.add_handler(PollAnswerHandler(self.receive_poll_answer))
        dispatcher.add_handler(PollHandler(self.delete))
        dispatcher.add_handler(set_handler)
        dispatcher.add_handler(CallbackQueryHandler(self.query_func))

        if is_env:
            updater.start_webhook(
                listen="0.0.0.0",
                # (c) https://t.me/c/1186975633/22915
                port=self.config.port,
                url_path=self.config.bot_api,
            )
            updater.bot.set_webhook(url=self.config.url + self.config.bot_api)
        else:
            updater.start_polling()
示例#5
0
    async def test_context(self, app, poll):
        handler = PollHandler(self.callback)
        app.add_handler(handler)

        async with app:
            await app.process_update(poll)
        assert self.test_flag
示例#6
0
def main() -> None:
    # Create the Updater and pass it your bot's token.
    updater = Updater(TOKEN)
    dispatcher = updater.dispatcher
    dispatcher.add_handler(CommandHandler('start', start))
    dispatcher.add_handler(CommandHandler('poll', poll))
    dispatcher.add_handler(PollAnswerHandler(receive_poll_answer))
    dispatcher.add_handler(CommandHandler('quiz', quiz))
    dispatcher.add_handler(PollHandler(receive_quiz_answer))
    dispatcher.add_handler(CommandHandler('preview', preview))
    dispatcher.add_handler(MessageHandler(Filters.poll, receive_poll))
    dispatcher.add_handler(CommandHandler('help', help_handler))

    # Start the Bot
    #updater.start_polling()

    #added to deploy to heroku
    updater.start_webhook(listen="0.0.0.0",
                          port=int(PORT),
                          url_path=TOKEN,
                          webhook_url='https://cawpawbot.herokuapp.com/' +
                          TOKEN)
    #updater.bot.setWebhook(webhook_url='https://cawpawbot.herokuapp.com/'+TOKEN)

    # Run the bot until the user presses Ctrl-C or the process receives SIGINT,
    # SIGTERM or SIGABRT
    updater.idle()
示例#7
0
def main(updater: Updater):
    dispatcher = updater.dispatcher
    dispatcher.add_handler(CommandHandler('start', start))
    dispatcher.add_handler(CommandHandler('poll', poll))
    dispatcher.add_handler(PollAnswerHandler(receive_poll_answer))
    dispatcher.add_handler(CommandHandler('quiz', quiz))
    dispatcher.add_handler(PollHandler(receive_quiz_answer))
    dispatcher.add_handler(CommandHandler('preview', preview))
    dispatcher.add_handler(MessageHandler(Filters.poll, receive_poll))
    dispatcher.add_handler(CommandHandler('help', help_handler))
示例#8
0
def prepare():
    create_database()
    apply_migrations()

    updater = Updater(TOKEN, request_kwargs=REQUEST_KWARGS, use_context=True)

    j = updater.job_queue
    set_timer(j)

    # Get the dispatcher to register handlers
    dp = updater.dispatcher

    # set data
    dp.bot_data["activities"] = activities
    dp.bot_data["cards_buffer"] = cards_buffer
    dp.bot_data["cards_buffer_data"] = cards_buffer_data
    dp.bot_data["logger"] = logger
    add_flash_cards(dp)

    # on different commands - answer in Telegram

    dp.add_handler(CommandHandler("start", start))

    dp.add_handler(CommandHandler("delete", delete_flash_card_request))

    dp.add_handler(CommandHandler("quiz", quiz))
    dp.add_handler(PollHandler(receive_quiz_answer))
    dp.add_handler(MessageHandler(Filters.poll, receive_poll))

    dp.add_handler(MessageHandler(Filters.text, choose_flash_card, pass_user_data=True))

    dp.add_handler(
        CallbackQueryHandler(
            get_reply_meaning, pattern=r"^ADD__.*$", pass_chat_data=True
        )
    )

    dp.add_handler(
        CallbackQueryHandler(
            start_setting_custom_meaning, pattern=OTHER, pass_chat_data=True
        )
    )

    dp.add_handler(
        CallbackQueryHandler(
            delete_flash_card_chosen, pattern=r"^DELETE__.*$", pass_chat_data=True
        )
    )

    # log all errors
    dp.add_error_handler(error)

    return updater
    def test_pass_job_or_update_queue(self, dp, poll):
        handler = PollHandler(self.callback_queue_1, pass_job_queue=True)
        dp.add_handler(handler)

        dp.process_update(poll)
        assert self.test_flag

        dp.remove_handler(handler)
        handler = PollHandler(self.callback_queue_1, pass_update_queue=True)
        dp.add_handler(handler)

        self.test_flag = False
        dp.process_update(poll)
        assert self.test_flag

        dp.remove_handler(handler)
        handler = PollHandler(self.callback_queue_2, pass_job_queue=True, pass_update_queue=True)
        dp.add_handler(handler)

        self.test_flag = False
        dp.process_update(poll)
        assert self.test_flag
    def test_pass_user_or_chat_data(self, dp, poll):
        handler = PollHandler(self.callback_data_1, pass_user_data=True)
        dp.add_handler(handler)

        dp.process_update(poll)
        assert self.test_flag

        dp.remove_handler(handler)
        handler = PollHandler(self.callback_data_1, pass_chat_data=True)
        dp.add_handler(handler)

        self.test_flag = False
        dp.process_update(poll)
        assert self.test_flag

        dp.remove_handler(handler)
        handler = PollHandler(self.callback_data_2, pass_chat_data=True, pass_user_data=True)
        dp.add_handler(handler)

        self.test_flag = False
        dp.process_update(poll)
        assert self.test_flag
示例#11
0
文件: main.py 项目: AnH0ang/pollmaker
def main() -> None:
    # load environment variables
    # config = dotenv_values(".env")
    load_dotenv()

    updater = Updater(token=os.environ["TRANSCRIBEBOT_TELEGRAM_TOKEN"], use_context=True)
    dispatcher: Dispatcher = updater.dispatcher

    # add handlers
    dispatcher.add_handler(CommandHandler("start", start))
    dispatcher.add_handler(MessageHandler(ZockenFilter(), make_poll))
    dispatcher.add_handler(PollAnswerHandler(receive_poll_answer))
    dispatcher.add_handler(PollHandler(receive_quiz_answer))

    # start polling
    updater.start_polling()
示例#12
0
def main() -> None:
    # Create the Updater and pass it your bot's token.
    # Make sure to set use_context=True to use the new context based callbacks
    # Post version 12 this will no longer be necessary
    updater = Updater(__TOKEN__, use_context=True)
    job = updater.job_queue
    dispatcher = updater.dispatcher
    dispatcher.add_handler(CommandHandler('start', start))
    dispatcher.add_handler(CommandHandler('cook', cook))
    dispatcher.add_handler(CommandHandler('bd', bd))
    dispatcher.add_handler(MessageHandler(Filters.text, kovra))
    dispatcher.add_handler(CommandHandler('poll', poll))
    dispatcher.add_handler(PollAnswerHandler(receive_poll_answer))
    dispatcher.add_handler(CommandHandler('quiz', quiz))
    dispatcher.add_handler(PollHandler(receive_quiz_answer))
    dispatcher.add_handler(CommandHandler('preview', preview))
    dispatcher.add_handler(MessageHandler(Filters.poll, receive_poll))
    dispatcher.add_handler(CommandHandler('help', help_handler))
    dispatcher.add_handler(CommandHandler("set", set_timer))
    dispatcher.add_handler(CommandHandler("unset", unset))
    dispatcher.add_handler(CommandHandler("news", news))
    dispatcher.add_handler(CommandHandler('coinflip', coinflip,
                                          pass_args=True))
    dispatcher.add_handler(
        CommandHandler('random', random_number, pass_args=True))
    target_time = datetime.time(hour=8, minute=0)
    news_time = datetime.time(hour=6, minute=12)
    joke_time = datetime.time(hour=6, minute=0)
    picture_time = datetime.time(hour=6, minute=6)
    horoscope_time = datetime.time(hour=5, minute=55)
    job.run_daily(daily_job, target_time, days=range(7))
    job.run_daily(daily_news, news_time, days=range(7))
    job.run_daily(daily_joke, joke_time, days=range(7))
    job.run_daily(daily_pciture, picture_time, days=range(7))
    job.run_daily(daily_horoscope, horoscope_time, days=range(7))

    # on noncommand i.e message - echo the message on Telegram
    #dispatcher.add_handler(MessageHandler(Filters.text, echo))

    # Start the Bot
    updater.start_polling()

    # Run the bot until the user presses Ctrl-C or the process receives SIGINT,
    # SIGTERM or SIGABRT
    updater.idle()
示例#13
0
def main():
    # Create the Updater and pass it your bot's token.
    # Make sure to set use_context=True to use the new context based callbacks
    # Post version 12 this will no longer be necessary

    TOKEN = Config.get_config()["keys"]["telegramkey"]

    updater = Updater(TOKEN, use_context=True)
    dp = updater.dispatcher
    dp.add_handler(CommandHandler("quiz", quiz))
    dp.add_handler(PollHandler(receive_quiz_answer))
    dp.add_handler(MessageHandler(Filters.poll, receive_poll))

    # Start the Bot
    updater.start_polling()

    # Run the bot until the user presses Ctrl-C or the process receives SIGINT,
    # SIGTERM or SIGABRT
    updater.idle()
示例#14
0
def main() -> None:
    # Create the Updater and pass it your bot's token.
    updater = Updater("1733062635:AAEfN_XL5R5x7ZOfBaQjw_Wu0eGLcejHS-o")
    dispatcher = updater.dispatcher
    dispatcher.add_handler(CommandHandler('start', start))
    dispatcher.add_handler(CommandHandler('poll', poll))
    dispatcher.add_handler(PollAnswerHandler(receive_poll_answer))
    dispatcher.add_handler(CommandHandler('quiz', quiz))
    dispatcher.add_handler(PollHandler(receive_quiz_answer))
    dispatcher.add_handler(CommandHandler('preview', preview))
    dispatcher.add_handler(MessageHandler(Filters.poll, receive_poll))
    dispatcher.add_handler(CommandHandler('help', help_handler))

    # Start the Bot
    updater.start_polling()

    # Run the bot until the user presses Ctrl-C or the process receives SIGINT,
    # SIGTERM or SIGABRT
    updater.idle()
示例#15
0
def main():
    # Create the Updater and pass it your bot's token.
    # Make sure to set use_context=True to use the new context based callbacks
    # Post version 12 this will no longer be necessary
    updater = Updater(TOKEN, use_context=True)
    dp = updater.dispatcher
    dp.add_handler(CommandHandler('start', start))
    dp.add_handler(CommandHandler('poll', poll))
    dp.add_handler(PollAnswerHandler(receive_poll_answer))
    dp.add_handler(CommandHandler('quiz', quiz))
    dp.add_handler(PollHandler(receive_quiz_answer))
    dp.add_handler(CommandHandler('preview', preview))
    dp.add_handler(MessageHandler(Filters.poll, receive_poll))
    dp.add_handler(CommandHandler('help', help_handler))

    # Start the Bot
    updater.start_polling()

    # Run the bot until the user presses Ctrl-C or the process receives SIGINT,
    # SIGTERM or SIGABRT
    updater.idle()
示例#16
0
def main():
    updater = Updater(DefaultConfig.TELEGRAM_TOKEN, use_context=True)

    dp = updater.dispatcher

    # command handlers
    dp.add_handler(CommandHandler("help", help_command_handler))
    dp.add_handler(CommandHandler("start", start_command_handler))

    # message handler
    dp.add_handler(MessageHandler(Filters.text, main_handler))

    # suggested_actions_handler
    dp.add_handler(
        CallbackQueryHandler(main_handler,
                             pass_chat_data=True,
                             pass_user_data=True))

    # quiz answer handler
    dp.add_handler(
        PollHandler(poll_handler, pass_chat_data=True, pass_user_data=True))

    # log all errors
    dp.add_error_handler(error)

    # Start the Bot
    if DefaultConfig.MODE == 'webhook':

        updater.start_webhook(listen="0.0.0.0",
                              port=int(DefaultConfig.PORT),
                              url_path=DefaultConfig.TELEGRAM_TOKEN)
        updater.bot.setWebhook(DefaultConfig.WEBHOOK_URL +
                               DefaultConfig.TELEGRAM_TOKEN)

        logging.info(f"Start webhook mode on port {DefaultConfig.PORT}")
    else:
        updater.start_polling()
        logging.info(f"Start polling mode")

    updater.idle()
示例#17
0
def main():
    logger.info("creating updater")
    updater = Updater(os.environ['TEL_BOT_TOKEN'], use_context=True)
    dp = updater.dispatcher
    dp.add_handler(CommandHandler('start', cmd.start.start))

    dp.add_handler(CommandHandler('quiz', cmd.quiz.quiz))
    dp.add_handler(CommandHandler('q', cmd.quiz.quiz))
    dp.add_handler(
        CommandHandler(
            'quiz3',
            lambda update, context: cmd.quiz.quiz(update, context, 3)))
    dp.add_handler(
        CommandHandler(
            'q3', lambda update, context: cmd.quiz.quiz(update, context, 3)))
    dp.add_handler(
        CommandHandler(
            'quiz4',
            lambda update, context: cmd.quiz.quiz(update, context, 4)))
    dp.add_handler(
        CommandHandler(
            'q4', lambda update, context: cmd.quiz.quiz(update, context, 4)))
    dp.add_handler(PollHandler(cmd.quiz.receive_quiz_answer))

    dp.add_handler(CommandHandler('help', cmd.help.help_handler))
    dp.add_handler(CommandHandler('h', cmd.help.help_handler))
    dp.add_handler(CommandHandler('short', cmd.help.short_handler))
    dp.add_handler(CommandHandler('credits', cmd.help.credits_handler))
    dp.add_handler(CommandHandler('qr', cmd.help.qr_handler))
    dp.add_handler(CommandHandler('sources', cmd.sources.sources_handler))
    dp.add_handler(CommandHandler('userinfo', cmd.userinfo.userinfo_handler))

    logger.info("starting to poll")
    updater.start_polling()

    updater.idle()
示例#18
0
def main():
    """Instanciate a Defaults object"""

    # Create the EventHandler and pass it your bot's token.
    q = mq.MessageQueue(all_burst_limit=29,
                        all_time_limit_ms=1017,
                        group_burst_limit=15,
                        group_time_limit_ms=55000,
                        autostart=True)
    # set connection pool size for bot
    request = Request(con_pool_size=12)
    testbot = MQBot(configs.TOKEN, request=request, mqueue=q)
    pp = PicklePersistence(filename='rabot', store_bot_data=True)
    updater = telegram.ext.updater.Updater(bot=testbot,
                                           persistence=pp,
                                           use_context=True)

    # Get the dispatcher to register handlers CallbackQueryHandler(language)
    dp = updater.dispatcher
    dp.add_handler(MessageHandler(Filters.regex('^TOP$'), botify.top))
    dp.add_handler(
        MessageHandler(Filters.regex('^PROGRESS$'), botify.check_progress))
    dp.add_handler(MessageHandler(Filters.regex('^HELP$'), botify.help))
    dp.add_handler(MessageHandler(Filters.regex('^MY RA$'), botify.myra))
    dp.add_handler(MessageHandler(Filters.regex('^PROFILE$'), botify.profile))
    dp.add_handler(CommandHandler(command='start', callback=botify.start))
    dp.add_handler(CommandHandler(command='help', callback=botify.help))
    dp.add_handler(CommandHandler(command='top', callback=botify.top))
    dp.add_handler(CommandHandler(command='gid', callback=botify.gid))
    dp.add_handler(CommandHandler(command='solo', callback=botify.solo_learn))
    dp.add_handler(
        CommandHandler(command='progress', callback=botify.check_progress))
    dp.add_handler(
        CommandHandler(command='studyrooms', callback=botify.studyrooms))
    dp.add_handler(CommandHandler(command='teachers',
                                  callback=botify.teachers))
    dp.add_handler(
        CommandHandler(command='classrooms', callback=botify.classrooms))
    dp.add_handler(CommandHandler(command='rector', callback=botify.rector))
    dp.add_handler(CommandHandler(command='settopic',
                                  callback=botify.settopic))
    dp.add_handler(
        CommandHandler(command='support', callback=botify.ask_donation))
    dp.add_handler(CommandHandler(command='topic', callback=botify.topic))
    dp.add_handler(
        CommandHandler(command='stop', callback=botify.session_manager))
    dp.add_handler(
        MessageHandler(Filters.command & Filters.reply & Filters.group,
                       botify.bonus))
    dp.add_handler(
        MessageHandler(Filters.reply & (Filters.text | Filters.voice),
                       botify.reply_check))
    dp.add_handler(
        MessageHandler(Filters.status_update.new_chat_members,
                       botify.unauth_group))
    dp.add_handler(MessageHandler(Filters.text, botify.message_counter))
    dp.add_handler(MessageHandler(Filters.dice, botify.solo_learn))
    dp.add_handler(CallbackQueryHandler(botify.javis))
    dp.add_handler(PollHandler(botify.poll_private))
    dp.add_handler(PollAnswerHandler(botify.poll_listener))
    # log all errors
    #     dp.add_error_handler(botify.error)

    # Start the Bot
    updater.start_polling()

    # Run the bot until you press Ctrl-C or the process receives SIGINT,
    # SIGTERM or SIGABRT. This should be used most of the time, since
    # start_polling() is non-blocking and will stop the bot gracefully.
    updater.idle()
示例#19
0
def quiz_response():
    return PollHandler(
        receive_quiz_answer,
        pass_chat_data=True,
        pass_user_data=True
    )
示例#20
0
 def __init__(self):
     PollHandler.__init__(self, callback=self.callback)
示例#21
0
def main():
    logger.info("creating updater")
    updater = Updater(os.environ['TEL_BOT_TOKEN'], use_context=True)
    dp = updater.dispatcher
    dp.add_handler(CommandHandler('start', cmd.start.start))

    dp.add_handler(CommandHandler('quiz', cmd.quiz.quiz))
    dp.add_handler(CommandHandler('q', cmd.quiz.quiz))
    dp.add_handler(
        CommandHandler(
            ['quiz2', 'q2'],
            lambda update, context: cmd.quiz.quiz(update, context, 2)))
    dp.add_handler(
        CommandHandler(
            ['quiz3', 'q3'],
            lambda update, context: cmd.quiz.quiz(update, context, 3)))
    dp.add_handler(
        CommandHandler(
            ['quiz4', 'q4'],
            lambda update, context: cmd.quiz.quiz(update, context, 4)))
    dp.add_handler(PollHandler(cmd.quiz.receive_quiz_answer))

    dp.add_handler(CommandHandler(['help', 'h'], cmd.help.help_handler))
    dp.add_handler(CommandHandler('short', cmd.help.short_handler))
    dp.add_handler(CommandHandler('credits', cmd.help.credits_handler))
    dp.add_handler(CommandHandler('qr', cmd.download.qr_handler))

    dp.add_handler(CommandHandler('wc', cmd.download.wc_handler))
    dp.add_handler(CommandHandler('wcm', cmd.download.wc_movie_handler))
    dp.add_handler(CommandHandler('wca', cmd.download.wc_anim_handler))
    dp.add_handler(
        CommandHandler(
            'wch', lambda update, context: cmd.download.wc_anim_handler(
                update, context, hourly=True)))
    dp.add_handler(
        CommandHandler(
            'wch5', lambda update, context: cmd.download.wc_anim_handler(
                update, context, hourly=True, top=5)))
    dp.add_handler(
        CommandHandler(
            'wch10', lambda update, context: cmd.download.wc_anim_handler(
                update, context, hourly=True, top=10)))
    dp.add_handler(
        CommandHandler(
            'wch15', lambda update, context: cmd.download.wc_anim_handler(
                update, context, hourly=True, top=15)))
    dp.add_handler(
        CommandHandler(
            'wch20', lambda update, context: cmd.download.wc_anim_handler(
                update, context, hourly=True, top=20)))
    dp.add_handler(
        CommandHandler(
            'wch25', lambda update, context: cmd.download.wc_anim_handler(
                update, context, hourly=True, top=25)))
    dp.add_handler(
        CommandHandler(
            'wch30', lambda update, context: cmd.download.wc_anim_handler(
                update, context, hourly=True, top=30)))

    dp.add_handler(CommandHandler('hd', cmd.download.headings_handler))
    dp.add_handler(CommandHandler('sources', cmd.sources.sources_handler))
    dp.add_handler(CommandHandler('domain', cmd.domain.domain_handler))
    dp.add_handler(CommandHandler('userinfo', cmd.userinfo.userinfo_handler))
    dp.add_handler(CommandHandler('hist', cmd.download.histograms_handler))
    dp.add_handler(CommandHandler('top', cmd.top.top_handler))
    dp.add_handler(CommandHandler('tops', cmd.top.tops_handler))

    dp.add_handler(CommandHandler('rss', cmd.sources.update_handler))

    logger.info("starting to poll")
    updater.start_polling()

    updater.idle()
    def test_context(self, cdp, poll):
        handler = PollHandler(self.callback_context)
        cdp.add_handler(handler)

        cdp.process_update(poll)
        assert self.test_flag
 def test_other_update_types(self, false_update):
     handler = PollHandler(self.callback_basic)
     assert not handler.check_update(false_update)
示例#24
0
if __name__ == '__main__':
    # TOKEN  = HERE
    updater = Updater(TOKEN, use_context=True,
                      request_kwargs={'read_timeout': 6, 'connect_timeout': 7})
    dp = updater.dispatcher

    if os.path.isfile('active_chats'):
        data.deserialize()

    dp.add_handler(CommandHandler('start', help_menu))
    dp.add_handler(CommandHandler('status', status))
    dp.add_handler(CommandHandler('menu', store))
    dp.add_handler(CommandHandler('help', help_menu))
    dp.add_handler(CommandHandler('chat', help_menu))
    dp.add_handler(CommandHandler('cancel', cancel))
    dp.add_handler(CommandHandler('skip', skip))
    dp.add_handler(CommandHandler('chat_id', chat_id))
    dp.add_handler(CallbackQueryHandler(callback_query_handler))
    dp.add_handler(MessageHandler(Filters.text & ~Filters.command, message_handler))
    dp.add_handler(MessageHandler(Filters.sticker, sticker_handler))
    dp.add_handler(MessageHandler(Filters.all, message_all_handler))
    dp.add_handler(PollHandler(poll_handler))
    dp.add_handler(PollAnswerHandler(poll_answer_handler))
    dp.add_error_handler(error_handle)

    Db.get_instance().create_black_list()
    Db.get_instance().create_active_command_list()

    updater.start_polling()
    updater.idle()
示例#25
0
def main():
    # Create the Updater and pass it your bot's token.
    updater = Updater(TOKEN, use_context=True)

    # Configure notifications job
    job_queue = updater.job_queue
    job_queue.run_repeating(send_notis, interval=10, first=0)

    # Get the dispatcher to register handlers
    dp = updater.dispatcher
    dp.add_handler(CommandHandler("start", start_msg))
    dp.add_handler(CommandHandler("help", help_msg))

    # Handlers for polls
    dp.add_handler(MessageHandler(Filters.poll, dojobot.handle_received_poll))
    dp.add_handler(PollHandler(dojobot.receive_poll_answer))

    dp.add_handler(MessageHandler(Filters.status_update.new_chat_members, greet_group))
    dp.add_handler(MessageHandler(Filters.voice, handle_audio))
    dp.add_handler(MessageHandler(Filters.text & ~Filters.command, handle_text_msg))
    dp.add_handler(MessageHandler(Filters.document, store_document))

    # Change meeting reminder callback query handlers
    dp.add_handler(
        CallbackQueryHandler(dojobot.remind_main_menu, pattern="remind_main")
    )
    dp.add_handler(CallbackQueryHandler(dojobot.remind_first_menu, pattern=r"rf.*"))
    dp.add_handler(
        CallbackQueryHandler(
            dojobot.change_remind, pattern=rf"{consts.CHANGE_REMIND}.*"
        )
    )
    dp.add_handler(
        CallbackQueryHandler(dojobot.cancel_del, pattern="cancel_change_reminder")
    )

    # Cancel meeting callback query handlers
    dp.add_handler(
        CallbackQueryHandler(
            dojobot.cancel_meeting_main_menu, pattern="cancel_meeting_main"
        )
    )
    dp.add_handler(
        CallbackQueryHandler(dojobot.cancel_meeting_first_menu, pattern=r"cf.*")
    )
    dp.add_handler(CallbackQueryHandler(dojobot.cancel_meeting, pattern=r"cm.*"))
    dp.add_handler(
        CallbackQueryHandler(dojobot.cancel_del, pattern="cancel_cancel_meeting")
    )

    # Meeting agenda callback query handlers
    dp.add_handler(
        CallbackQueryHandler(
            dojobot.store_agenda_callback, pattern=rf"{consts.STORE_AGENDA}.*"
        )
    )
    dp.add_handler(
        CallbackQueryHandler(
            dojobot.get_agenda_callback, pattern=rf"{consts.GET_AGENDA}.*"
        )
    )

    # Meeting notes callback query handlers
    dp.add_handler(
        CallbackQueryHandler(
            dojobot.store_notes_callback, pattern=rf"{consts.STORE_NOTES}.*"
        )
    )
    dp.add_handler(
        CallbackQueryHandler(
            dojobot.get_notes_callback, pattern=rf"{consts.GET_NOTES}.*"
        )
    )

    # Task callback query handlers
    dp.add_handler(
        CallbackQueryHandler(dojobot.ask_task_name, pattern=consts.EDIT_TASK_NAME)
    )
    dp.add_handler(
        CallbackQueryHandler(dojobot.ask_task_summary, pattern=consts.EDIT_TASK_SUMMARY)
    )
    dp.add_handler(
        CallbackQueryHandler(dojobot.ask_task_user, pattern=consts.EDIT_TASK_USER)
    )
    dp.add_handler(
        CallbackQueryHandler(
            dojobot.task_user_callback, pattern=rf"{consts.SET_TASK_USER}.*"
        )
    )
    dp.add_handler(
        CallbackQueryHandler(dojobot.ask_task_status, pattern=consts.EDIT_TASK_STATUS)
    )
    dp.add_handler(
        CallbackQueryHandler(
            dojobot.task_status_callback, pattern=rf"{consts.SET_TASK_STATUS}.*"
        )
    )
    dp.add_handler(
        CallbackQueryHandler(dojobot.ask_task_date, pattern=consts.EDIT_TASK_DATE)
    )
    dp.add_handler(
        CallbackQueryHandler(dojobot.create_task, pattern=consts.CREATE_TASK_DONE)
    )
    dp.add_handler(
        CallbackQueryHandler(
            dojobot.cancel_create_task, pattern=consts.CANCEL_CREATE_TASK
        )
    )
    dp.add_handler(
        CallbackQueryHandler(
            dojobot.update_task_callback, pattern=rf"{consts.UPDATE_TASK}.*"
        )
    )
    dp.add_handler(
        CallbackQueryHandler(
            dojobot.task_feedback_callback, pattern=rf"{consts.TASK_FEEDBACK}.*"
        )
    )

    # Start the Bot
    updater.start_polling()
    LOGGER.info("Bot started polling")

    # Run the bot until you press Ctrl-C or the process receives SIGINT,
    # SIGTERM or SIGABRT. This should be used most of the time, since
    # start_polling() is non-blocking and will stop the bot gracefully.
    updater.idle()