Поиск записи в MongoDB (pymongo). Переход по записям БД с помощью InlineKeyboard (Telegram)
Уважаемые товарищи!
Являюсь новичком в программировании, осваиваю Python на примере создания телеграмм-бота. За неимением наставника и в силу своей неопытности не могу придумать, как реализовать цикл поиска документа в курсоре Mongodb и перехода к следующему документу (или к предыдущему) при помощи callback'ов от кнопок InlineKeyboard.
В выложенной части кода реализован поиск по "Фамилии", после чего бот отправляет первую "Анкету" из списка, с совпадением по "Фамилии", и прикрепляет инлайн-клавиатуру с двумя кнопками.
Как сделать , чтобы при нажатии на кнопку "forward" выводилась следующая запись - "Анкета" из курсора MongoDB, а при нажатии кнопки "back" - предыдущая запись? Не прошу, чтобы за меня здесь написали код, но прошу совета или все же практических примеров как реализовать вышесказанное.
tg_bot.dispatcher.add_handler(CallbackQueryHandler(inline_callback))
tg_bot.dispatcher.add_handler(ConversationHandler(entry_points=[MessageHandler(Filters.regex('Поиск'), find_start)],
states={'check_surname': [MessageHandler(Filters.text, find_continue)]},
fallbacks=[]))
def get_keyboard():
tg_keyboard = ReplyKeyboardMarkup([['Помощь'], ['Поиск'], ['Заполнить анкету']], resize_keyboard=True)
return tg_keyboard
def inline_keyboard():
inl_keyboard = InlineKeyboardMarkup([[InlineKeyboardButton('Вперед', callback_data='forward'),
InlineKeyboardButton('Назад', callback_data='back')]])
return inl_keyboard
def inline_callback(bot, update):
if 'forward' in bot.callback_query.data:
...
elif 'back' in bot.callback_query.data:
...
def find_start (bot, update):
bot.message.reply_text('Что вы ищете?', reply_markup=ReplyKeyboardRemove())
return 'check_surname'
def find_continue (bot, update):
cursor = mdb.chats.find({'anketa.surname': {'$regex': bot.message.text}})
for doc in cursor:
document=str(doc)
if bot.message.text in document:
if 'anketa' in doc:
text =\
'''Данные пользователя:
<b>Имя:</b> {name}
<b>Фамиля:</b> {surname}
'''.format(**doc['anketa'])
bot.message.reply_text(text, parse_mode=ParseMode.HTML, reply_markup=inl_keyboard)
return ConversationHandler.END,
else:
bot.message.reply_text('Совпадений не найдено', reply_markup=get_keyboard())
return ConversationHandler.END