skip to Main Content

I am writing conversations with python-telegram-bot and need a way to disable nested conversations. That is, if a user is in a conversation, then an entry command for another conversation should not activate another handler.

It seems that this is not enforceable in a ConversationHandler object. I.e. I try to catch a command in a state where I don’t want another command to run (UPLOAD), but it doesn’t work – a bot happily starts another conversation. Also, this does not work with fallbacks alone

submission_conv_handler = ConversationHandler(

        entry_points=[
             CommandHandler('submit', self.submit_command),
             
          ],


        states={
             self.CHOSE_TYPE: [
               CallbackQueryHandler(self.submission_query_callback, pattern=r'^(py|ipynb)')
             ],

             self.UPLOAD: [
               MessageHandler(Filters.document, self.upload_message),
               MessageHandler(Filters.command | Filters.text , done)
             ],

        },

        fallbacks=[MessageHandler(Filters.all, done)]
    )

2

Answers


  1. Interruption behaviour of conversations is a common problem, as PTB currently (v13.0) has no built in way to prevent it. Please have a look at the GitHub issues 1640 and 1447 as well as this FAQ entry.

    Login or Signup to reply.
  2. When another conversation should be prevented for the user if the first one is not finished, looks like the only solution is still:

    There is no built-in way to do that. You can however easily set a flag
    as e.g. context.user_data[‘in_conversation’] = True in your
    entry_pointss and set it to False before returning
    ConversationHandler.END.

    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search