3

我正在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函数?

4

1 回答 1

1

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

regUser

首先我chat_id在双引号之间使用,其次我使用Updater大写U而不是updater.

于 2017-01-02T18:39:24.073 回答