#python #telegram #telegram-bot #python-telegram-bot
Вопрос:
В моем коде при запуске бота запускается функция user_exist()
. Если возвращает False, функция new_account()
запускается и работает идеально, вместо этого, когда возвращает True, она должна запустить функцию wallet_handler()
, но не может. Код выполняется в обработчике разговора. Я думал, что все сделал нормально, но я не могу понять, почему функция wallet_handler()
не запускается. Кто-нибудь может мне помочь? Это мой код:
import logging
import data
from web3 import Web3
from telegram import ReplyKeyboardMarkup, ReplyKeyboardRemove, Update
from telegram import InlineKeyboardButton, InlineKeyboardMarkup, ReplyKeyboardMarkup
from telegram.ext import (
Updater,
CommandHandler,
MessageHandler,
Filters,
ConversationHandler,
CallbackContext,
CallbackQueryHandler,
)
NEW_ACCOUNT, WALLET_HANDLER= range(2)
def start(update: Update, context: CallbackContext) -> int:
chatid = update.message.chat_id
if data.user_exist(chatid) == True:
print('s')
return WALLET_HANDLER
if data.user_exist(chatid) == False:
update.message.reply_text('This is your first time with us! Please insert a wallet')
return NEW_ACCOUNT
def new_account(update: Update, context: CallbackContext) -> int:
chatid = update.message.chat_id
wallet = update.message.text
if Web3.isAddress(wallet) == True:
data.new_account(chatid, wallet)
update.message.reply_text('New account succesfully created.nWelcome to Tarsier. Enjoy it!')
return WALLET_HANDLER
else:
update.message.reply_text('Wallet Address invalid.nPlease insert a valid Wallet Address.')
return NEW_ACCOUNT
def wallet_handler(update: Update, context: CallbackContext) -> int:
update.message.reply_text('aaa')
return ConversationHandler.END
def cancel(update: Update, context: CallbackContext) -> int:
"""Cancels and ends the conversation."""
user = update.message.from_user
update.message.reply_text(
'Bye! I hope we can talk again some day.', reply_markup=ReplyKeyboardRemove()
)
return ConversationHandler.END
def main() -> None:
"""Run the bot."""
# Create the Updater and pass it your bot's token.
updater = Updater("TOKEN")
# Get the dispatcher to register handlers
dispatcher = updater.dispatcher
# Add conversation handler with the states GENDER, PHOTO, LOCATION and BIO
conv_handler = ConversationHandler(
entry_points=[CommandHandler('start', start)],
states={
NEW_ACCOUNT: [MessageHandler(Filters.text amp; ~Filters.command, new_account)],
WALLET_HANDLER: [MessageHandler(Filters.text amp; ~Filters.command, wallet_handler)],
},
fallbacks=[CommandHandler('cancel', cancel)],
)
dispatcher.add_handler(conv_handler)
updater.start_polling()
updater.idle()
if __name__ == '__main__':
main()
Ответ №1:
Вы должны использовать функцию check_update, чтобы определить, в каком состоянии находится разговор.
Новое состояние пользователя 0 Существующее состояние пользователя 1
Комментарии:
1. Не могли бы вы показать, как вы бы отредактировали мой код, чтобы использовать check_update ?