telegramtelegram-botpy-telegram-bot-api

Cannot embed button with a link in Telegram Bot


I'm trying to make a function in telegram bot which will add a button with a link to any text message, here is a main part of a code:

message_user_send = {}
name_of_url = {}
url_user_send = {}

############################ 
@bot.message_handler(commands=['aaa'])
def send(message):
    msg1 = bot.send_message(message.chat.id, 'Put main text')
    bot.register_next_step_handler(msg1, name_of_link)

def name_of_link(message):
    message_user_send[message.text] = message.text
    msg1 = bot.send_message(message.chat.id, 'Put name of url')
    bot.register_next_step_handler(msg1, send_alll)

def send_alll(message):
    name_of_url[message.text] = message.text
    msg1 = bot.send_message(message.chat.id, 'Put url')
    bot.register_next_step_handler(msg1, send_all_userss)   

def send_all_userss(message):
    url_user_send[message.text] = message.text
    markup = types.InlineKeyboardMarkup()
    b1 = types.InlineKeyboardButton(name_of_url[message.text], url= url_user_send[message.text])
    markup.add(b1)
    keyboard_markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
    bot.send_message(message.chat.id, message_user_send, reply_markup=markup)
############################

But when I am trying to put name_of_url[message.text] (the text which produses on button b1) in button it does not work and gives an error:

line 85, in send_all_userss
    b1 = types.InlineKeyboardButton(name_of_url[message.text], url= url_user_send[message.text])
                                    ~~~~~~~~~~~^^^^^^^^^^^^^^
KeyError: 'https://stackoverflow.com/questions/1871524/how-can-i-convert-json-to-csv'

However, if I use just text in "" it works, what am I doing wrong?

What I want to achieve: enter image description here

instead of name_of_url should be text which user send before.


Solution

  • message_user_send = {}
    name_of_url = {}
    url_user_send = {}
    
    ############################
    @bot.message_handler(commands=['aaa'])
    def send(message):
        msg1 = bot.send_message(message.chat.id, 'Введи текст который нужно отправить')
        bot.register_next_step_handler(msg1, name_of_link)
    
    def name_of_link(message):
        message_user_send[message.from_user.id] = message.text # <--
        msg1 = bot.send_message(message.chat.id, 'Введи название ссылки')
        bot.register_next_step_handler(msg1, send_alll)
    
    def send_alll(message):
        name_of_url[message.from_user.id] = message.text # <--
        msg1 = bot.send_message(message.chat.id, 'Введи url')
        bot.register_next_step_handler(msg1, send_all_userss)   
    
    def send_all_userss(message):
        url_user_send[message.text] = message.text
        markup = types.InlineKeyboardMarkup()
        b1 = types.InlineKeyboardButton(name_of_url[message.from_user.id], url= url_user_send[message.text])
        markup.add(b1)
        keyboard_markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
        bot.send_message(message.chat.id, message_user_send[message.from_user.id], reply_markup=markup)
    ############################