Я пытаюсь написать бота, в котором пользователь нажимает на команду, отправляет ссылку в виде сообщения, а затем бот добавляет ссылку в некоторую базу данных. Вот как это будет выглядеть:
Поэтому я подумал, что мне следует использовать ConversationHandler
. Вот что я написал: bot.py
:
from telegram.ext import (Updater, CommandHandler, MessageHandler, Filters,
ConversationHandler)
from settings import BOT_TOKEN
import commands
def main():
updater = Updater(BOT_TOKEN, use_context=True)
dispatcher = updater.dispatcher
conversation = ConversationHandler(
entry_points=[
MessageHandler(
(Filters.command & Filters.regex("al_(.*)")),
commands.add_link
)
],
states={
commands.ADD_LINK: [
MessageHandler(Filters.entity("url"), commands.receive_link)
]
},
fallbacks=[]
)
dispatcher.add_handler(CommandHandler("search", commands.search))
dispatcher.add_handler(conversation)
updater.start_polling()
updater.idle()
if __name__ == "__main__":
main()
И команды находятся в другом файле с именем commands.py
:
from telegram.ext import ConversationHandler
ADD_LINK = range(1)
def receive_link(update, context):
bot = context.bot
url = update.message.text
chat_id = update.message.chat.id
bot.send_message(
chat_id=chat_id,
text="The link has been added."
)
return ConversationHandler.END
def add_link(update, context):
bot = context.bot
uuid = update.message.text.replace("/al_", "")
chat_id = update.message.chat.id
bot.send_message(
chat_id=chat_id,
text="Send the link as a message."
)
return ADD_LINK
Теперь проблема в том, что мне нужно иметь возможность используйте переменную uuid
(которая генерируется в add_link
) в моей функции receive_link
. Но я не знаю, как передать эту переменную. Как я могу это сделать?