import logging
import types
from aiogram import Bot, Dispatcher, types
from aiogram.contrib.middlewares.logging import LoggingMiddleware
from aiogram.types import ParseMode, InlineKeyboardMarkup, InlineKeyboardButton
API_TOKEN = "ВАШ_API_ТОКЕН"
bot = Bot(token=API_TOKEN)
dp = Dispatcher(bot)
dp.middleware.setup(LoggingMiddleware())
def create_product_inline_keyboard():
return InlineKeyboardMarkup(inline_keyboard=[[InlineKeyboardButton(" Хліб"), InlineKeyboardButton(" Булочки"), InlineKeyboardButton(" Фокачча"), InlineKeyboardButton(" Сухарики, печиво")],
[InlineKeyboardButton("⏪️ В головне меню")]
])
def create_product_type_inline_keyboard(product_type):
inline_keyboard = []
if product_type == ' Хліб':
inline_keyboard = [
[InlineKeyboardButton("Варіант 1", callback_data='bread_variant1')],
[InlineKeyboardButton("Варіант 2", callback_data='bread_variant2')],
[InlineKeyboardButton("Варіант 3", callback_data='bread_variant3')],
[InlineKeyboardButton("Назад", callback_data='back_to_products')]
]
elif product_type == ' Булочки':
inline_keyboard = [
[InlineKeyboardButton("Варіант 1", callback_data='buns_variant1')],
[InlineKeyboardButton("Варіант 2", callback_data='buns_variant2')],
[InlineKeyboardButton("Варіант 3", callback_data='buns_variant3')],
[InlineKeyboardButton("Назад", callback_data='back_to_products')]
]
elif product_type == ' Фокачча':
inline_keyboard = [
[InlineKeyboardButton("Варіант 1", callback_data='focaccia_variant1')],
[InlineKeyboardButton("Варіант 2", callback_data='focaccia_variant2')],
[InlineKeyboardButton("Варіант 3", callback_data='focaccia_variant3')],
[InlineKeyboardButton("Назад", callback_data='back_to_products')]
]
elif product_type == ' Сухарики, печиво':
inline_keyboard = [
[InlineKeyboardButton("Варіант 1", callback_data='crackers_variant1')],
[InlineKeyboardButton("Варіант 2", callback_data='crackers_variant2')],
[InlineKeyboardButton("Варіант 3", callback_data='crackers_variant3')],
[InlineKeyboardButton("Назад", callback_data='back_to_products')]
]
return InlineKeyboardMarkup(inline_keyboard=inline_keyboard)
def create_variant_inline_keyboard(variant_data):
inline_keyboard = [
[InlineKeyboardButton("Тут буде опис та фото", callback_data='description')],
[InlineKeyboardButton("Назад", callback_data='back_to_variants')]
]
return InlineKeyboardMarkup(inline_keyboard=inline_keyboard)
@dp.message_handler(commands=['start'])
async def start(message: types.Message):
await message.answer(
"Привіт! Це чат-бот від bread and memories.\n\n"
"Ми створили його, щоб ви могли зручно та швидко замовити справжній хліб на заквасці, а з ним — й інші пухкі смаколики від нашої майстерні.\n\n"
"⬇️Нижче знаходяться кнопки, які допоможуть зробити замовлення, подивитися меню чи інші деталі.\n"
"Вибирайте свій варіант, і не бійтеся помилитися — тут все просто ",
reply_markup=types.ReplyKeyboardMarkup(
keyboard=[
[types.KeyboardButton(" Зробити замовлення"), types.KeyboardButton(" Подивитися меню"),
types.KeyboardButton(" Контакти")]
],
resize_keyboard=True
),
parse_mode=ParseMode.MARKDOWN
)
async def make_order(message: types.Message):
await message.answer(
" ВАРІАНТИ ОТРИМАННЯ ЗАМОВЛЕННЯ\n\n"
"♀️ Самовивіз з нашого цеху за адресою вул. Університетська, 23а.\n"
"Немає мінімальної суми замовлення, оплата онлайн за реквізитами чи при отриманні замовлення.\n\n"
" Доставка містом за …. Мінімальне замовлення — …, оплата онлайн за реквізитами чи за посиланням.\n\n"
" Відправка Новою поштою на відділення або адресу. Відправляємо все, що є в меню продукції, оплата продукції — онлайн за реквізитами чи за посиланням, оплата доставки — за рахунок отримувача посилки.\n\n"
"❗️❗️❗️ Замовлення приймаємо мінімум за два дні до дня випікання.\n"
"А випікаємо в такі дні: вівторок, четвер, субота.\n\n"
"Тобто, наприклад, хліб на вівторок можна замовити в неділю чи слідкувати за наявністю вільних буханців в нашому Instagram.\n\n"
"Яка саме продукція тебе цікавить? ",
reply_markup=types.ReplyKeyboardMarkup(
keyboard=[
[types.KeyboardButton(" Хліб"), types.KeyboardButton(" Булочки"), types.KeyboardButton(" Фокачча"),
types.KeyboardButton(" Сухарики, печиво")],
[types.KeyboardButton("⏪️ В головне меню")]
],
resize_keyboard=True
),
parse_mode=ParseMode.MARKDOWN
)
async def view_menu(message: types.Message):
await message.answer(
"Натисніть кнопку з назвою продукції, яка вас цікавить",
reply_markup=create_product_inline_keyboard()
)
@dp.message_handler(text=[' Зробити замовлення', ' Подивитися меню'])
async def view_menu_or_order(message: types.Message):
if message.text == ' Зробити замовлення':
await make_order(message)
elif message.text == ' Подивитися меню':
await view_menu(message)
@dp.message_handler(text=[' Хліб', ' Булочки', ' Фокачча', ' Сухарики, печиво'])
async def view_product_menu(message: types.Message):
product_type = message.text
await message.answer(f"Оберіть варіант {product_type}",
reply_markup=create_product_inline_keyboard(product_type))
@dp.callback_query_handler(lambda query: query.data.startswith('back_to_products'))
async def back_to_products_callback(query: types.CallbackQuery):
await query.message.edit_reply_markup(reply_markup=create_product_inline_keyboard())
@ dp.callback_query_handler(
lambda query: query.data.startswith(('bread_variant', 'buns_variant', 'focaccia_variant', 'crackers_variant')))
async
def product_variant_callback(query: types.CallbackQuery):
variant = query.data
description = "Тут будет описание и фото варианта."
# Удаляем существующее сообщение
await query.message.delete()
# Отправляем новое сообщение с описанием и фото
new_message = await query.message.answer_photo(
photo="https://t1.gstatic.com/licensed-image?q=tbn:ANd9GcQwu9l5QEVRGPd9-hQ90jhpiGAMg1ycT46XWkXivXoCYaZ2RUm0Fz_Y0ZVxsJ50o3_K",
caption=description
)
# Отправляем клавиатуру варианта
await new_message.reply("Тут может быть клавиатура с дополнительными действиями",
reply_markup=create_variant_inline_keyboard(variant))
await bot.send_message(chat_id=query.message.chat.id, text="",
reply_markup=types.ReplyKeyboardRemove())
@dp.message_handler(text=' Контакти')
async def send_contact_info(message: types.Message):
await message.answer_contact(phone_number='1234567890', first_name='Ваше Имя')
if __name__ == '__main__':
from aiogram import executor
executor.start_polling(dp, skip_updates=True)