Найти - Пользователи
Полная версия: Динамические переменные в InlineKeyboardButton
Начало » Центр помощи » Динамические переменные в InlineKeyboardButton
1
Wylamin
Я хочу чтобы inline кнопка взяла имя и url с переменных, но переменные у меня динамические
Я использую библиотеку aiogram
код:
 from aiogram import Bot, Dispatcher, executor, types
TOKEN = ""
bot = Bot(token=TOKEN)
dp = Dispatcher(bot)
class Button(object):
    addurlname = None
    names = None
bt = Button()
buttonad = types.InlineKeyboardMarkup(row_width=1)
buttonbuttonad = types.InlineKeyboardButton(f"{bt.names}", url=f"{bt.addurlname}")
buttonad.add(buttonbuttonad)
# записываем какое будет название кнопки
@dp.message_handler(commands=["start"])
async def welcome(message):
    await bot.send_message(message.chat.id, "Привет, введи имя")
    bt.names = message.text
    return bt.names
# записываем какое будет URL
@dp.message_handler(commands=["url"])
async def urlwelcome(message):
    await bot.send_message(message.chat.id, "Привет, введи url")
    bt.addurlname = message.text
    return bt.addurlname
# Команда чтобы увидеть кнопку
@dp.message_handler(commands=["check"])
async def check(message):
    await bot.send_message(message.chat.id, "Привет", reply_markup=buttonad)
не судите за код строго, он должен быть правильным, в моём основном коде просто будет сложнее

Проблема заключается в том, что кнопка(Inline) принимает значение - Имя кнопки: None, url: None;
И тут два варианта либо кнопка вообще не срабатывает потому что url должен начинаться с http(дальше объяснение почему даже если ссылка у вас начинается http), но если мы сразу напишем в классе Button() какую нибудь ссылку, то кнопка покажется(даже когда мы попытались изменить эту переменную в команде url), но название кнопки будет None, хотя я изменил значение имени кнопки, когда писал команду start.
Вывод из выше сказанного такой - inline кнопке вообще все равно если значение было изменено, оно примет значения которые были запущены с кодом, я хочу это исправить

Кто-то может сказать используй FSM, но нет, мне оно только помешает во всём коде, мне надо понять почему Inline кнопка не хочет использовать новые значения переменной

UPD: добавил полностью рабочий код, при копировании у вас может первая строчка уйти вправо
Wylamin
Deleted
Wylamin
Прикрепляю фото работы кода + ошибка
 aiogram.utils.exceptions.BadRequest: Inline keyboard button url 'none' is invalid: wrong http url
https://yapx.ru/v/R4FuB - фотохостинг
Wylamin
меняем теперь
 class Button(object):
    addurlname = None
    names = None
на
 class Button(object):
    addurlname = "https://t.me/testpythonforum"
    names = None
и получаем это:
https://yapx.ru/u/R4Fry - фотохостинг

Как это исправить? я хочу чтобы он брал новые значения переменных

UPD: если что кнопка “None”, перекидывает меня на ссылку "https://t.me/testpythonforum“, а не на ”https://t.me/testpythonforum1"
FishHook
а как это может работать? У вас переменная bt глобальная. Бот у вас же не одно подключение обслуживает. Вы при обработке конкретного реквеста изменили глобальное состояние процесса, то есть для всех клиентов бота. Как только у вас будет больше одного юзера вы очень удивите их поведением своей программы.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB