diff --git a/bot.py b/bot.py index 873065a..26050e1 100644 --- a/bot.py +++ b/bot.py @@ -17,6 +17,9 @@ from aiogram.types import FSInputFile, URLInputFile, BufferedInputFile from aiogram.utils.markdown import hide_link #для скрытой ссылки # новый импорт! from aiogram.utils.keyboard import ReplyKeyboardBuilder # для создания кнопок +# Новые импорты! +from contextlib import suppress +from aiogram.exceptions import TelegramBadRequest from config_reader import config @@ -435,6 +438,54 @@ async def handle_contact(message: types.Message): else: await message.answer("Это не ваш контакт!") +# Продолжим с колбэками +# Здесь хранятся пользовательские данные. +# Т.к. это словарь в памяти, то при перезапуске он очистится +user_data = {} +#сформируем инлайн-клавиатуру +def get_keyboard(): + buttons = [ + [ + types.InlineKeyboardButton(text="-1", callback_data="num_decr"), + types.InlineKeyboardButton(text="+1", callback_data="num_incr") + ], + [types.InlineKeyboardButton(text="Подтвердить", callback_data="num_finish")] + ] + keyboard = types.InlineKeyboardMarkup(inline_keyboard=buttons) + return keyboard + +# формируем сообщение с переменным аргументом +async def update_num_text(message: types.Message, new_value: int): + with suppress(TelegramBadRequest): + await message.edit_text( + f"Укажите число: {new_value}", + reply_markup=get_keyboard() + ) + +# запуск клавиатуры по команде /numbers +@dp.message(Command("numbers")) +async def cmd_numbers(message: types.Message): + user_data[message.from_user.id] = 0 + await message.answer("Укажите число: 0", reply_markup=get_keyboard()) + + +@dp.callback_query(F.data.startswith("num_")) +async def callbacks_num(callback: types.CallbackQuery): + user_value = user_data.get(callback.from_user.id, 0) + action = callback.data.split("_")[1] + + if action == "incr": + user_data[callback.from_user.id] = user_value+1 + await update_num_text(callback.message, user_value+1) + elif action == "decr": + user_data[callback.from_user.id] = user_value-1 + await update_num_text(callback.message, user_value-1) + elif action == "finish": + await callback.message.edit_text(f"Итого: {user_value}") + + await callback.answer() + + # пока не работает, надо понять как получить file_id @dp.message(Command("gif")) async def send_gif(message: Message): diff --git a/bot/main.py b/bot/main.py index 1dbdcd4..036a209 100644 --- a/bot/main.py +++ b/bot/main.py @@ -17,7 +17,9 @@ from aiogram.types import FSInputFile, URLInputFile, BufferedInputFile from aiogram.utils.markdown import hide_link #для скрытой ссылки # новый импорт! from aiogram.utils.keyboard import ReplyKeyboardBuilder # для создания кнопок - +# Новые импорты! +from contextlib import suppress +from aiogram.exceptions import TelegramBadRequest from config_reader import config @@ -435,6 +437,54 @@ async def handle_contact(message: types.Message): else: await message.answer("Это не ваш контакт!") +# Продолжим с колбэками +# Здесь хранятся пользовательские данные. +# Т.к. это словарь в памяти, то при перезапуске он очистится +user_data = {} +#сформируем инлайн-клавиатуру +def get_keyboard(): + buttons = [ + [ + types.InlineKeyboardButton(text="-1", callback_data="num_decr"), + types.InlineKeyboardButton(text="+1", callback_data="num_incr") + ], + [types.InlineKeyboardButton(text="Подтвердить", callback_data="num_finish")] + ] + keyboard = types.InlineKeyboardMarkup(inline_keyboard=buttons) + return keyboard + +# формируем сообщение с переменным аргументом +async def update_num_text(message: types.Message, new_value: int): + with suppress(TelegramBadRequest): + await message.edit_text( + f"Укажите число: {new_value}", + reply_markup=get_keyboard() + ) + +# запуск клавиатуры по команде /numbers +@dp.message(Command("numbers")) +async def cmd_numbers(message: types.Message): + user_data[message.from_user.id] = 0 + await message.answer("Укажите число: 0", reply_markup=get_keyboard()) + + +@dp.callback_query(F.data.startswith("num_")) +async def callbacks_num(callback: types.CallbackQuery): + user_value = user_data.get(callback.from_user.id, 0) + action = callback.data.split("_")[1] + + if action == "incr": + user_data[callback.from_user.id] = user_value+1 + await update_num_text(callback.message, user_value+1) + elif action == "decr": + user_data[callback.from_user.id] = user_value-1 + await update_num_text(callback.message, user_value-1) + elif action == "finish": + await callback.message.edit_text(f"Итого: {user_value}") + + await callback.answer() + + # пока не работает, надо понять как получить file_id @dp.message(Command("gif")) async def send_gif(message: Message):