Testing fabrics for inline keyboards

This commit is contained in:
Aleksei Krugliak 2022-04-03 14:49:14 +04:00
parent d187f33abc
commit bcbed0a4c1
5 changed files with 97 additions and 19 deletions

View File

@ -3,3 +3,4 @@ from . import start
from . import echo from . import echo
from . import add from . import add
from . import settings from . import settings
from . import test

View File

@ -1,6 +1,4 @@
from aiogram import types from aiogram import types
from aiogram.dispatcher.filters.builtin import Command
from loader import dp from loader import dp
@ -8,18 +6,18 @@ from loader import dp
async def bot_add(message: types.Message): async def bot_add(message: types.Message):
await message.answer(f"This is ADD command, {message.from_user.username}!") await message.answer(f"This is ADD command, {message.from_user.username}!")
@dp.message_handler(state=None) # todo сделать стейты. сейчас это хэндлит все сообщения в любых состояниях! # @dp.message_handler(state=None) # todo сделать стейты. сейчас это хэндлит все сообщения в любых состояниях!
async def bot_add_parse_message(message: types.Message): # async def bot_add_parse_message(message: types.Message):
words = message.text.split() # words = message.text.split()
# Uncomment to see debug in console # # Uncomment to see debug in console
# print('Split message:') # # print('Split message:')
# i = 0 # # i = 0
# for each in words: # # for each in words:
# print('[' + str(i) + ']: ' + '[' + each + ']') # # print('[' + str(i) + ']: ' + '[' + each + ']')
# i += 1 # # i += 1
# print('[end]') # # print('[end]')
#
if len(words) == 2: # if len(words) == 2:
await message.answer('[added] ' + words[0] + ' ' + words[1]) # await message.answer('[added] ' + words[0] + ' ' + words[1])
else: # else:
await message.answer("can't parse. wrong arguments!") # await message.answer("can't parse. wrong arguments!")

View File

@ -12,7 +12,8 @@ async def bot_help(message: types.Message):
"/add - Add expense.", "/add - Add expense.",
"/edit - Edit expense.", "/edit - Edit expense.",
"/list - See my expenses.", "/list - See my expenses.",
"/settings - Configure bot." "/settings - Configure bot.",
"/test - Test command."
) )
await message.answer("\n".join(text)) await message.answer("\n".join(text))

78
handlers/users/test.py Normal file
View File

@ -0,0 +1,78 @@
from aiogram import types
from loader import dp
@dp.message_handler(commands="test")
async def cmd_random(message: types.Message):
keyboard = types.InlineKeyboardMarkup()
keyboard.add(types.InlineKeyboardButton(text="Нажми меня", callback_data="random_value"))
keyboard.add(types.InlineKeyboardButton(text="Нажми меня 2", callback_data="random_value2"))
await message.answer("test reply 1-2-3", reply_markup=keyboard)
@dp.callback_query_handler(text="random_value")
async def send_random_value(call: types.CallbackQuery):
await call.message.answer('test reply 1')
# shows alert with 'Ok' button
await call.answer(text="Спасибо, что воспользовались ботом!", show_alert=True)
# или просто await call.answer()
@dp.callback_query_handler(text="random_value2")
async def send_random_value(call: types.CallbackQuery):
await call.message.answer('test reply 2')
await call.answer()
########################################################################################
from aiogram.utils.callback_data import CallbackData
from aiogram.utils.exceptions import MessageNotModified
from contextlib import suppress
# fabnum - префикс, action - название аргумента, которым будем передавать значение
callback_numbers = CallbackData("fabnum", "action")
# Здесь хранятся пользовательские данные.
# Т.к. это словарь в памяти, то при перезапуске он очистится
user_data = {}
def get_keyboard_fab():
buttons = [
types.InlineKeyboardButton(text="-1", callback_data=callback_numbers.new(action="decr")),
types.InlineKeyboardButton(text="+1", callback_data=callback_numbers.new(action="incr")),
types.InlineKeyboardButton(text="Подтвердить", callback_data=callback_numbers.new(action="finish"))
]
keyboard = types.InlineKeyboardMarkup(row_width=2)
keyboard.add(*buttons)
return keyboard
async def update_num_text_fab(message: types.Message, new_value: int):
with suppress(MessageNotModified):
await message.edit_text(f"Укажите число: {new_value}", reply_markup=get_keyboard_fab())
@dp.message_handler(commands="numbers_fab")
async def cmd_numbers(message: types.Message):
user_data[message.from_user.id] = 0
await message.answer("Укажите число: 0", reply_markup=get_keyboard_fab())
@dp.callback_query_handler(callback_numbers.filter(action=["incr", "decr"]))
async def callbacks_num_change_fab(call: types.CallbackQuery, callback_data: dict):
user_value = user_data.get(call.from_user.id, 0)
action = callback_data["action"]
if action == "incr":
user_data[call.from_user.id] = user_value + 1
await update_num_text_fab(call.message, user_value + 1)
elif action == "decr":
user_data[call.from_user.id] = user_value - 1
await update_num_text_fab(call.message, user_value - 1)
await call.answer()
@dp.callback_query_handler(callback_numbers.filter(action=["finish"]))
async def callbacks_num_finish_fab(call: types.CallbackQuery):
user_value = user_data.get(call.from_user.id, 0)
await call.message.edit_text(f"Итого: {user_value}")
await call.answer()

View File

@ -10,7 +10,7 @@ async def set_default_commands(dp):
types.BotCommand("edit", "Edit expense."), types.BotCommand("edit", "Edit expense."),
types.BotCommand("list", "See my expenses."), types.BotCommand("list", "See my expenses."),
types.BotCommand("settings", "Configure bot."), types.BotCommand("settings", "Configure bot."),
# types.BotCommand("settings2", "Configure bot."), types.BotCommand("test", "Test command."),
# types.BotCommand("settings3", "Configure bot."), # types.BotCommand("settings3", "Configure bot."),
] ]
) )