Python Telegram Bot会话方法不起作用

时间:2017-01-02 15:42:27

标签: python telegram-bot python-telegram-bot

我正在为收入/费用项目写一个Telegram Bot

我使用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()

当我使用/start时,直到Bot说:

Ok

Now Send Me Your Username

之后需要返回Registering Your Username,但事实并非如此。

但我可以访问/cancel命令。 我需要知道为什么这个脚本不会调用regUser函数?

1 个答案:

答案 0 :(得分:1)

好的,我发现了2个错误,解决了我的问题。

regUser中的

首先我在双引号之间使用了chat_id, 第二,我使用Updater使用大写U代替updater