Add inline keyboard usage example

This commit is contained in:
birdi 2019-07-10 12:16:00 +03:00
parent af889ad6b2
commit 31b92e1b95

View file

@ -0,0 +1,56 @@
"""
This bot is created for the demonstration of a usage of inline keyboards.
"""
import logging
from aiogram import Bot, Dispatcher, executor, types
API_TOKEN = 'BOT_TOKEN_HERE'
# Configure logging
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
logger.setLevel(logging.DEBUG)
# Initialize bot and dispatcher
bot = Bot(token=API_TOKEN)
dp = Dispatcher(bot)
@dp.message_handler(commands=['start'])
async def start_cmd_handler(message: types.Message):
keyboard_markup = types.InlineKeyboardMarkup(row_width=3)
# default row_width is 3, so here we can omit it actually
# kept for clearness
keyboard_markup.row(types.InlineKeyboardButton("Yes!", callback_data='yes'),
# in real life for the callback_data the callback data factory should be used
# here the raw string is used for the simplicity
types.InlineKeyboardButton("No!", callback_data='no'))
keyboard_markup.add(types.InlineKeyboardButton("aiogram link",
url='https://github.com/aiogram/aiogram'))
# url buttons has no callback data
await message.reply("Hi!\nDo you love aiogram?", reply_markup=keyboard_markup)
@dp.callback_query_handler(lambda cb: cb.data in ['yes', 'no']) # if cb.data is either 'yes' or 'no'
# @dp.callback_query_handler(text='yes') # if cb.data == 'yes'
async def inline_kb_answer_callback_handler(query: types.CallbackQuery):
await query.answer() # send answer to close the rounding circle
answer_data = query.data
logger.debug(f"answer_data={answer_data}")
# here we can work with query.data
if answer_data == 'yes':
await bot.send_message(query.from_user.id, "That's great!")
elif answer_data == 'no':
await bot.send_message(query.from_user.id, "Oh no...Why so?")
else:
await bot.send_message(query.from_user.id, "Invalid callback data!")
if __name__ == '__main__':
executor.start_polling(dp, skip_updates=True)