Python Telegram Bot Conversation Method Not Working

2.6k views Asked by At

I am writing a Telegram Bot for an Income/Expense project.

I have this code using python-telegram-bot:

#!/usr/bin/python
# -*- Coding : UTF-8 -*-

from telegram import ReplyKeyboardMarkup, ReplyKeyboardRemove
from telegram.ext import Updater, CommandHandler, MessageHandler, Filters, ConversationHandler
from settings.conf import conf

conf = conf()
updater = Updater(str(conf.token()))
SETUP ,USERNAME = range(2)

def start_method(bot, update):
    """ Start Command """

    startList = [["Register New Account","Integrate An Account"]]

    chat_id = update.message.chat_id
    replyText = update.message.text

    text = """Hello And Welcome To [Bestoon](http://bestoon.ir).
This Bot Helps You Easily Access Your [Bestoon](http://bestoon.ir) Account.
Now, How Can I Help You?
"""
    bot.sendChatAction(chat_id, "TYPING")
    update.message.reply_text(text, parse_mode="Markdown",reply_markup=ReplyKeyboardMarkup(startList, one_time_keyboard=True))
    return SETUP

def setup(bot, update):
    """Initialize The User Account For The First Time"""
    chat_id = update.message.chat_id

    if update.message.text == "Register New Account":
        bot.sendChatAction(chat_id, "TYPING")
        register_text = """Ok.
Now Send Me Your Bestoon Username.
"""
        update.message.reply_text(register_text,reply_markup=ReplyKeyboardRemove())
        print "Going For Username"
        return USERNAME

    elif update.message.text == "Integrate An Account":
        bot.sendChatAction(chat_id, "TYPING")
        update.message.reply_text("Sorry, Can\'t Integrate Now!", reply_markup=ReplyKeyboardRemove())
        bot.sendMessage(update.message.chat_id, "Bye!")
        return ConversationHandler.END

    else:
        bot.sendChatAction(chat_id, "TYPING")
        update.message.reply_text("Invalid Command!")

def regUser(bot, Update):
    chat_id = update.message.chat_id
    bot.sendChatAction("chat_id", "TYPING")
    update.message.reply_text("Registering Your Username")
    return ConversationHandler.END

def cancel(bot, update):
    bot.sendMessage(update.message.chat_id, "Bye!")
    return ConversationHandler.END

conv_handler = ConversationHandler(
    entry_points = [CommandHandler('start', start_method)],

    states = {
        SETUP: [MessageHandler(Filters.text, setup)],
        USERNAME: [MessageHandler(Filters.text, regUser)]

    },

    fallbacks = [CommandHandler('cancel', cancel)]
)
updater.dispatcher.add_handler(conv_handler)

########## Starting Bot ##########
updater.start_polling()
updater.idle()

When I use /start it works until the Bot says:

Ok

Now Send Me Your Username

And after that it need to return Registering Your Username but it doesn't.

but I have access to /cancel command. I need to know why this script doesn't call regUser function?

1

There are 1 answers

0
Sadegh Alirezaie On BEST ANSWER

Ok I've found 2 errors wich fixed my problem.

in regUser:

first I used chat_id between double quotes, and second I used Updater with capital U instead of updater.