У меня есть бот в Python, который предлагает пользователю выбрать из списка идентификаторов для изменения, и идея состоит в том, что пользователь выберет идентификатор и затем предоставит идентификатор, на который он хочет изменить.
Вот мой код:
def build_menu(buttons, n_cols):
menu = [buttons[i:i + n_cols] for i in range(0, len(buttons), n_cols)]
return menu
def change_process(bot, update):
global action
query = update.callback_query
NAME = query.data
if action == 'Change':
# Prompt user for new value
# run sql query to update
def change(bot, update, args):
global action
action = 'Change'
sql = sqlite3.connect('SQL_FILE.db',detect_types=sqlite3.PARSE_DECLTYPES|sqlite3.PARSE_COLNAMES)
cur = sql.cursor()
button_list = [InlineKeyboardButton(s[0], callback_data=s[0]) for s in cur.execute('SELECT Name FROM ID ORDER BY Name ASC')]
reply_markup = InlineKeyboardMarkup(build_menu(button_list, n_cols=3))
update.message.reply_text('ID to change:', reply_markup=reply_markup)
action = None
updater = Updater(token='XXXX:XXXX')
dispatcher = updater.dispatcher
dispatcher.add_handler(CallbackQueryHandler(change_process))
arg_handler = CommandHandler('change', change, pass_args=True)
dispatcher.add_handler(arg_handler)
Вот как я хочу, чтобы программа работала:
Пользователь запускает /change
Бот возвращает список идентификаторов, которые могутизменить (используя InlineKeyboardMarkup()
и build_menu()
Пользователь выбирает один из идентификаторов
Бот запрашивает у пользователя новое значение
Следующее сообщение, которое пользователь отправляет наBot будет использовать значение
Bot будет использовать идентификатор, выбранный пользователем, а также новое значение и выполнить запрос для обновления в базе данных
Bot сообщит, что он обновил идентификатор с новым значением 'USER VALUE '
Проблема, с которой я сталкиваюсь, заключается в том, что я могу предложить пользователю выбрать идентификатор и предложить пользователю ввести данные, но я не знаю, как сделать оба и использовать оба значения в одномфункция.