Форум сайта python.su
0
Я хочу чтобы 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)
Отредактировано Wylamin (Май 7, 2022 15:33:47)
Офлайн
0
Deleted
Отредактировано Wylamin (Май 7, 2022 15:38:27)
Офлайн
0
Прикрепляю фото работы кода + ошибка
aiogram.utils.exceptions.BadRequest: Inline keyboard button url 'none' is invalid: wrong http url
Офлайн
0
меняем теперь
class Button(object): addurlname = None names = None
class Button(object): addurlname = "https://t.me/testpythonforum" names = None
Отредактировано Wylamin (Май 7, 2022 15:39:38)
Офлайн
568
а как это может работать? У вас переменная bt глобальная. Бот у вас же не одно подключение обслуживает. Вы при обработке конкретного реквеста изменили глобальное состояние процесса, то есть для всех клиентов бота. Как только у вас будет больше одного юзера вы очень удивите их поведением своей программы.
Офлайн