Уведомления

Группа в Telegram: @pythonsu

#1 Май 7, 2022 15:19:39

Wylamin
Зарегистрирован: 2022-05-05
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

Динамические переменные в InlineKeyboardButton

Я хочу чтобы 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 (Май 7, 2022 15:33:47)

Офлайн

#2 Май 7, 2022 15:36:23

Wylamin
Зарегистрирован: 2022-05-05
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

Динамические переменные в InlineKeyboardButton

Deleted

Отредактировано Wylamin (Май 7, 2022 15:38:27)

Офлайн

#3 Май 7, 2022 15:36:39

Wylamin
Зарегистрирован: 2022-05-05
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

Динамические переменные в InlineKeyboardButton

Прикрепляю фото работы кода + ошибка

 aiogram.utils.exceptions.BadRequest: Inline keyboard button url 'none' is invalid: wrong http url
https://yapx.ru/v/R4FuB - фотохостинг

Офлайн

#4 Май 7, 2022 15:38:01

Wylamin
Зарегистрирован: 2022-05-05
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

Динамические переменные в InlineKeyboardButton

меняем теперь

 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"

Отредактировано Wylamin (Май 7, 2022 15:39:38)

Офлайн

#5 Май 16, 2022 17:05:38

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Динамические переменные в InlineKeyboardButton

а как это может работать? У вас переменная bt глобальная. Бот у вас же не одно подключение обслуживает. Вы при обработке конкретного реквеста изменили глобальное состояние процесса, то есть для всех клиентов бота. Как только у вас будет больше одного юзера вы очень удивите их поведением своей программы.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version