# Вариант 1, как в прошлом уроке # choice = InlineKeyboardMarkup(inline_keyboard=[ # [ # InlineKeyboardButton(text="Купить грушу", callback_data=buy_callback.new(item_name="pear")), # InlineKeyboardButton(text="Купить яблоки", callback_data="buy:apple") # ], # [ # InlineKeyboardButton(text="Отмена", callback_data="next") # ] # ]) # Вариант 2 - с помощью row_width и insert. choice = InlineKeyboardMarkup(row_width=2) buy_pear = InlineKeyboardButton(text="Купить грушу", callback_data=buy_callback.new(item_name="pear", quantity=1)) choice.insert(buy_pear) buy_apples = InlineKeyboardButton(text="Купить яблоки", callback_data="buy:apple:5") choice.insert(buy_apples) cancel_button = InlineKeyboardButton(text="Отмена", callback_data="cancel") choice.insert(cancel_button) # А теперь клавиатуры со ссылками на товары pear_keyboard = InlineKeyboardMarkup(inline_keyboard=[ [ InlineKeyboardButton(text="Купи тут", url="https://rozetka.com.ua/champion_a00225/p27223057") ] ]) apples_keyboard = InlineKeyboardMarkup(inline_keyboard=[
async def _confirmation_callback( self, offer_id: ObjectId, op: typing.Mapping[str, typing.Any], trx_id: str, block_num: int, ) -> bool: """Confirm found block with transaction. Notify escrow asset sender and check if block is confirmed. If it is, continue exchange. If it is not, send warning and update ``transaction_time`` of escrow offer. :param offer_id: ``_id`` of escrow offer. :param op: Operation object to confirm. :param trx_id: ID of transaction with desired operation. :param block_num: Number of block to confirm. :return: True if transaction was confirmed and False otherwise. """ offer = await database.escrow.find_one({"_id": offer_id}) if not offer: return False if offer["type"] == "buy": new_currency = "sell" escrow_user = offer["init"] other_user = offer["counter"] elif offer["type"] == "sell": new_currency = "buy" escrow_user = offer["counter"] other_user = offer["init"] answer = i18n( "transaction_passed {currency}", locale=escrow_user["locale"]).format(currency=offer[new_currency]) await tg.send_message(escrow_user["id"], answer) is_confirmed = await create_task(self.is_block_confirmed( block_num, op)) if is_confirmed: await database.escrow.update_one( {"_id": offer["_id"]}, {"$set": { "trx_id": trx_id, "unsent": True }}) keyboard = InlineKeyboardMarkup() keyboard.add( InlineKeyboardButton( i18n("sent", locale=other_user["locale"]), callback_data="tokens_sent {}".format(offer["_id"]), )) answer = markdown.link( i18n("transaction_confirmed", locale=other_user["locale"]), self.trx_url(trx_id), ) answer += "\n" + i18n("send {amount} {currency} {address}", locale=other_user["locale"]).format( amount=offer[f"sum_{new_currency}"], currency=offer[new_currency], address=markdown.escape_md( escrow_user["receive_address"]), ) answer += "." await tg.send_message( other_user["id"], answer, reply_markup=keyboard, parse_mode=ParseMode.MARKDOWN, ) return True await database.escrow.update_one( {"_id": offer["_id"]}, {"$set": { "transaction_time": time() }}) answer = i18n("transaction_not_confirmed", locale=escrow_user["locale"]) answer += " " + i18n("try_again", locale=escrow_user["locale"]) await tg.send_message(escrow_user["id"], answer) return False
def language_markup(lang): return InlineKeyboardMarkup(inline_keyboard=[[ InlineKeyboardButton(f"[{value}]" if lang == key else value, callback_data=LanguageCD.new(key)) ] for key, value in AVAILABLE_LANGUAGES.items()])
async def set_init_send_address(address: str, message: types.Message, offer: EscrowOffer): """Set ``address`` as sender's address of initiator. Send offer to counteragent. """ locale = offer.counter["locale"] buy_keyboard = InlineKeyboardMarkup() buy_keyboard.row( InlineKeyboardButton(i18n("show_order", locale=locale), callback_data=f"get_order {offer.order}")) buy_keyboard.add( InlineKeyboardButton(i18n("accept", locale=locale), callback_data=f"accept {offer._id}"), InlineKeyboardButton(i18n("decline", locale=locale), callback_data=f"decline {offer._id}"), ) mention = markdown.link(offer.init["mention"], User(id=offer.init["id"]).url) answer = i18n( "escrow_offer_notification {user} {sell_amount} {sell_currency} " "for {buy_amount} {buy_currency}", locale=locale, ).format( user=mention, sell_amount=offer.sum_sell, sell_currency=offer.sell, buy_amount=offer.sum_buy, buy_currency=offer.buy, ) if offer.bank: answer += " " + i18n("using {bank}", locale=locale).format(bank=offer.bank) answer += "." update_dict = {"init.send_address": address} if offer.type == "sell": insured = await get_insurance(offer) update_dict["insured"] = Decimal128(insured) if offer[f"sum_{offer.type}"].to_decimal() > insured: answer += "\n" + i18n( "exceeded_insurance {amount} {currency}").format( amount=insured, currency=offer[offer.type]) await offer.update_document({ "$set": update_dict, "$unset": { "pending_input_from": True } }) await tg.send_message( offer.counter["id"], answer, reply_markup=buy_keyboard, parse_mode=ParseMode.MARKDOWN, ) sell_keyboard = InlineKeyboardMarkup() sell_keyboard.add( InlineKeyboardButton(i18n("cancel"), callback_data=f"escrow_cancel {offer._id}")) await tg.send_message(message.from_user.id, i18n("offer_sent"), reply_markup=sell_keyboard) await dp.current_state().finish()
from aiogram.types import InlineKeyboardMarkup, InlineKeyboardButton, ReplyKeyboardMarkup, KeyboardButton inline_choose_menu = InlineKeyboardMarkup(inline_keyboard=[[ InlineKeyboardButton(text="Я клиент", callback_data="customer") ], [InlineKeyboardButton(text="Я сотрудник", callback_data="employee") ], [InlineKeyboardButton(text="Я менеджер", callback_data="manager")]]) customer_menu = InlineKeyboardMarkup( row_width=2, inline_keyboard=[ [InlineKeyboardButton(text="Услуги", callback_data="services")], [InlineKeyboardButton(text="Где находится", callback_data="where_is")], [ InlineKeyboardButton(text="Контакты", callback_data="contacts"), InlineKeyboardButton(text="Оставить данные", callback_data="leave_contacts") ], [ InlineKeyboardButton(text="Назад", callback_data="back_to_choose_menu") ] ]) employee_keyboard = InlineKeyboardMarkup( row_width=2, inline_keyboard=[[ InlineKeyboardButton(text="Я пришел", callback_data="employee_arrived"), InlineKeyboardButton(text="Информация", callback_data="employee_info") ], [ InlineKeyboardButton(text="Назад", callback_data="back_to_choose_menu")
def create(recipe: Recipe): select_button = InlineKeyboardButton( 'Выбрать', callback_data=f'select_recipe_{recipe.id}') keyboard = InlineKeyboardMarkup(inline_keyboard=[[select_button]]) return keyboard
from aiogram.types import InlineKeyboardMarkup, InlineKeyboardButton from keyboards.inline.callback_datas import place_callback, pagination_call choice_p = InlineKeyboardMarkup(inline_keyboard=[ [ InlineKeyboardButton(text="Советский", callback_data=place_callback.new( item_name="sov_r")), InlineKeyboardButton(text="Кировский", callback_data=place_callback.new( item_name="kir_r")), ], [ InlineKeyboardButton(text="Железнодорожный", callback_data=place_callback.new( item_name="rai_r")), InlineKeyboardButton(text="Ворошиловский", callback_data=place_callback.new( item_name="vor_r")) ], [ InlineKeyboardButton(text="Октябрьский", callback_data=place_callback.new( item_name="oct_r")), InlineKeyboardButton(text="Ленинский", callback_data=place_callback.new( item_name="len_r")), ], [ InlineKeyboardButton(text="Первомайский",
KeyboardButton(text='Азии'), KeyboardButton(text='КЫРГЫЗСТАН'), KeyboardButton(text='Демир') ], [ KeyboardButton(text='Кыргызкоммерцбанк'), KeyboardButton(text='Керемет') ] ], resize_keyboard=True ) optima = InlineKeyboardMarkup( row_width=2, inline_keyboard=[ [ InlineKeyboardButton(text='USD', callback_data='optima_usd'), InlineKeyboardButton(text='EUR', callback_data='optima_eur') ], [ InlineKeyboardButton(text='RUB', callback_data='optima_rub'), InlineKeyboardButton(text='KZT', callback_data='optima_kzt') ] ] ) rsk = InlineKeyboardMarkup( row_width=2, inline_keyboard=[ [ InlineKeyboardButton(text='USD', callback_data='rsk_usd'), InlineKeyboardButton(text='EUR', callback_data='rsk_eur') ], [
def related_artists_keyboard(related, main_artist_id): kb = InlineKeyboardMarkup(1) for i, artist in enumerate(related[:10], start=1): kb.insert(InlineKeyboardButton(f'{i}. {artist.name}', callback_data=new_callback('artist', artist.id, 'send'))) kb.insert(InlineKeyboardButton('Go back', callback_data=new_callback('artist', main_artist_id, 'main'))) return kb
def generate_reply_keyboard_for_tasks_start(): keyboard = InlineKeyboardMarkup() keyboard.insert(InlineKeyboardButton('Отмена', callback_data='cancel')) return keyboard
from aiogram.types import InlineKeyboardMarkup, InlineKeyboardButton exit_from_food_panel = InlineKeyboardMarkup(inline_keyboard=[[ InlineKeyboardButton(text='Отмена', callback_data='canteen_write_food_exit') ]])
def generate_reply_keyboard_for_tasks_done(): keyboard = InlineKeyboardMarkup() keyboard.add(InlineKeyboardButton('Назад', callback_data='back')) keyboard.insert(InlineKeyboardButton('Отмена', callback_data='cancel')) keyboard.insert(InlineKeyboardButton('Подтверждаю', callback_data='done')) return keyboard
from aiogram import Bot, Dispatcher, types, executor from aiogram.types import InlineKeyboardMarkup, InlineKeyboardButton import asyncio import aiohttp token = '1225831912:AAG60sUGFoeRVePSufgLFM0Xaat176T2t1o' bot = Bot(token) dp = Dispatcher(bot) inline_btn_1 = InlineKeyboardButton('Предложить новость', callback_data='add_news') inline_btn_2 = InlineKeyboardButton('Вывести деньги', callback_data='get_money') inline_btn_3 = InlineKeyboardButton('6🕕', callback_data='time6') inline_btn_4 = InlineKeyboardButton('7🕖', callback_data='time7') inline_btn_5 = InlineKeyboardButton('8🕗', callback_data='time8') inline_btn_6 = InlineKeyboardButton('9🕘', callback_data='time9') inline_btn_7 = InlineKeyboardButton('10🕙', callback_data='time10') inline_btn_8 = InlineKeyboardButton('11🕚', callback_data='time11') inline_btn_9 = InlineKeyboardButton('12🕛', callback_data='time12') inline_kb1 = InlineKeyboardMarkup().add(inline_btn_1, inline_btn_2) @dp.callback_query_handler() async def process_callback_button1(callback_query: types.CallbackQuery): await bot.answer_callback_query(callback_query.id) if callback_query.data == 'add_news': await bot.edit_message_text( chat_id=callback_query.message.chat.id, message_id=callback_query.message.message_id, text= "Отправьте всю информацию которую хотите опубликовать одним сообщением"
def confirmInlineButton(callbackType: str) -> InlineKeyboardButton: return InlineKeyboardButton( text = '🆗', callback_data = CONFIRM_BUTTON_CALLBACK_OBJECT.new(type = callbackType) )
from aiogram.types import InlineKeyboardMarkup, InlineKeyboardButton from callback import remember_callback choice = InlineKeyboardMarkup( inline_keyboard=[[ InlineKeyboardButton(text="\"Ван Гог\"", callback_data=remember_callback.new( item_name="First")), InlineKeyboardButton(text="Перенос стилей", callback_data=remember_callback.new( item_name="Second")) ], [ InlineKeyboardButton(text="Отмена", callback_data=remember_callback. new(item_name="Abort")) ]]) yes_or_no = InlineKeyboardMarkup( inline_keyboard=[[ InlineKeyboardButton( text="Да", callback_data=remember_callback.new(item_name="Yep")) ], [ InlineKeyboardButton(text="Нет", callback_data=remember_callback. new(item_name="Nope")) ]])
def artist_radio_keyboard(radio, artist_id): kb = InlineKeyboardMarkup(1) for i, track in enumerate(radio, start=1): kb.insert(InlineKeyboardButton(f'{i}. {track.artist.name} \u2013 {track.title}', callback_data=new_callback('track', track.id, 'send'))) kb.insert(InlineKeyboardButton('Go back', callback_data=new_callback('artist', artist_id, 'main'))) return kb
from aiogram.types import ReplyKeyboardRemove, \ ReplyKeyboardMarkup, KeyboardButton, \ InlineKeyboardMarkup, InlineKeyboardButton # ======== buttons ======== line_btn_1 = InlineKeyboardButton('транспорт та дороги', callback_data='btn1', content_types=['location']) line_btn_2 = InlineKeyboardButton('благоустрій міста та будівництво', callback_data='btn2', content_types=['location']) line_btn_3 = InlineKeyboardButton('соціальний захист та охорона праці', callback_data='btn3') line_btn_4 = InlineKeyboardButton('сім’я, молодь, діти', callback_data='btn4') line_btn_5 = InlineKeyboardButton('освіта', callback_data='btn5') line_btn_6 = InlineKeyboardButton('екологія', callback_data='btn6') line_btn_7 = InlineKeyboardButton('охорона здоровя', callback_data='btn7') line_btn_8 = InlineKeyboardButton('житлово-комунальне господарство', callback_data='btn8') line_btn_9 = InlineKeyboardButton('економіка та фінанси', callback_data='btn9') line_btn_10 = InlineKeyboardButton('інші', callback_data='btn10') # ======== keyboard ======== inline_kb = InlineKeyboardMarkup().add(line_btn_1) inline_kb.add(line_btn_2) inline_kb.add(line_btn_3) inline_kb.add(line_btn_4) inline_kb.add(line_btn_5) inline_kb.add(line_btn_6) inline_kb.add(line_btn_7) inline_kb.add(line_btn_8) inline_kb.add(line_btn_9) inline_kb.add(line_btn_10) button_dictionary = { line_btn_1.callback_data: line_btn_1, line_btn_2.callback_data: line_btn_2,
def top5_keyboard(artist, top): kb = InlineKeyboardMarkup(1) for i, track in enumerate(top, start=1): kb.insert(InlineKeyboardButton(f'{i}. {track.title}', callback_data=new_callback('track', track.id, 'send'))) kb.insert(InlineKeyboardButton('Go back', callback_data=new_callback('artist', artist.id, 'main'))) return kb
def keyboard_yn(call1, call2): keyboard = InlineKeyboardMarkup() button1 = InlineKeyboardButton(text="Да", callback_data=call1) button2 = InlineKeyboardButton(text="Нет", callback_data=call2) keyboard.add(button1, button2) return keyboard
def large_file_keyboard(): kb = InlineKeyboardMarkup(1) kb.insert(InlineKeyboardButton( "File is too big, Telegram won't let to upload it", callback_data='big_file')) return kb
async def ask_credentials( call: types.CallbackQuery, offer: EscrowOffer, ): """Update offer with ``update_dict`` and start asking transfer information. Ask to choose bank if user is initiator and there is a fiat currency. Otherwise ask receive address. """ await call.answer() is_user_init = call.from_user.id == offer.init["id"] has_fiat_currency = "RUB" in {offer.buy, offer.sell} if has_fiat_currency: if is_user_init: keyboard = InlineKeyboardMarkup() for bank in SUPPORTED_BANKS: keyboard.row( InlineKeyboardButton( bank, callback_data=f"bank {offer._id} {bank}")) await tg.send_message(call.message.chat.id, i18n("choose_bank"), reply_markup=keyboard) await states.Escrow.bank.set() else: if offer.type == "buy": request_user = offer.init answer_user = offer.counter currency = offer.sell else: request_user = offer.counter answer_user = offer.init currency = offer.buy keyboard = InlineKeyboardMarkup() keyboard.add( InlineKeyboardButton(i18n("sent"), callback_data=f"card_sent {offer._id}")) mention = markdown.link(answer_user["mention"], User(id=answer_user["id"]).url) await tg.send_message( request_user["id"], i18n( "request_full_card_number {currency} {user}", locale=request_user["locale"], ).format(currency=currency, user=mention), reply_markup=keyboard, parse_mode=ParseMode.MARKDOWN, ) state = FSMContext(dp.storage, request_user["id"], request_user["id"]) await state.set_state(states.Escrow.full_card.state) answer = i18n( "asked_full_card_number {user}", locale=answer_user["locale"]).format( user=markdown.link(request_user["mention"], User(id=request_user["id"]).url)) await tg.send_message( answer_user["id"], answer, parse_mode=ParseMode.MARKDOWN, ) return await tg.send_message( call.message.chat.id, i18n("ask_address {currency}").format( currency=offer.sell if is_user_init else offer.buy), ) await offer.update_document( {"$set": { "pending_input_from": call.from_user.id }}) await states.Escrow.receive_address.set()
def finish_download_keyboard(track_id): kb = InlineKeyboardMarkup(1) kb.insert(InlineKeyboardButton( 'Loading full track, please wait...', callback_data='finish_download')) return kb
async def set_counter_send_address(address: str, message: types.Message, offer: EscrowOffer): """Set ``address`` as sender's address of counteragent. Ask for escrow asset transfer. """ memo = create_memo(offer, transfer=False, counter_send_address=address) if offer.type == "buy": escrow_user = offer.init from_address = offer.init["send_address"] send_reply = True elif offer.type == "sell": escrow_user = offer.counter from_address = address send_reply = False transaction_time = time() await get_escrow_instance(offer[offer.type]).check_transaction( offer._id, from_address, offer["sum_fee_up"].to_decimal(), offer[f"sum_{offer.type}"].to_decimal(), offer[offer.type], memo, transaction_time, ) keyboard = InlineKeyboardMarkup() keyboard.add( InlineKeyboardButton( i18n("cancel", locale=escrow_user["locale"]), callback_data=f"escrow_cancel {offer._id}", )) escrow_address = markdown.bold( get_escrow_instance(offer[offer.type]).address) answer = i18n("send {amount} {currency} {address}", locale=escrow_user["locale"]).format( amount=offer.sum_fee_up, currency=offer[offer.type], address=escrow_address) answer += " " + i18n("with_memo", locale=escrow_user["locale"]) answer += ":\n" + markdown.code(memo) await tg.send_message(escrow_user["id"], answer, reply_markup=keyboard, parse_mode=ParseMode.MARKDOWN) if send_reply: keyboard = InlineKeyboardMarkup() keyboard.add( InlineKeyboardButton(i18n("cancel"), callback_data=f"escrow_cancel {offer._id}")) await tg.send_message( message.chat.id, i18n("transfer_information_sent") + " " + i18n("transaction_completion_notification_promise"), reply_markup=keyboard, parse_mode=ParseMode.MARKDOWN, ) update = { "counter.send_address": address, "transaction_time": transaction_time, "memo": memo, } await offer.update_document({ "$set": update, "$unset": { "pending_input_from": True } }) await dp.current_state().finish()
def start_keyboard(): kb = InlineKeyboardMarkup(1) kb.insert(InlineKeyboardButton('Search', switch_inline_query_current_chat='')) kb.insert(InlineKeyboardButton('Search albums', switch_inline_query_current_chat='.a ')) kb.insert(InlineKeyboardButton('Search artists', switch_inline_query_current_chat='.ar ')) return kb
from aiogram.types import ReplyKeyboardMarkup, InlineKeyboardButton, InlineKeyboardMarkup, InlineKeyboardButton bt_1 = InlineKeyboardButton(text="1", callback_data='1') bt_2 = InlineKeyboardButton(text="2", callback_data="2") bt_3 = InlineKeyboardButton(text="3", callback_data="3") bt_4 = InlineKeyboardButton(text="4", callback_data="4") bt_5 = InlineKeyboardButton(text="5", callback_data="5") bt_6 = InlineKeyboardButton(text="6", callback_data="6") bt_7 = InlineKeyboardButton(text="7", callback_data="7") bt_8 = InlineKeyboardButton(text="8", callback_data="8") bt_9 = InlineKeyboardButton(text="9", callback_data="9") bt_0 = InlineKeyboardButton(text="0", callback_data="0") bt_summ = InlineKeyboardButton(text="+", callback_data="+") bt_equal = InlineKeyboardButton(text="=", callback_data="=") digitals = InlineKeyboardMarkup(resize_keyboard=True).add(bt_1).add(bt_2).add(bt_3).add(bt_4).add(bt_5).\ add(bt_6).add(bt_7).add(bt_8).add(bt_9).add(bt_0).add(bt_summ).add(bt_equal)
def today_stats_keyboard(): kb = InlineKeyboardMarkup() kb.insert(InlineKeyboardButton('Update', callback_data='today')) return kb
def ct_button(title: str, c_type): return InlineKeyboardButton(title, callback_data=DefaultType.new(c_type))
from aiogram.types import InlineKeyboardMarkup, InlineKeyboardButton from keyboards.inline.callback_datas import start_callback choice_lang = InlineKeyboardMarkup( row_width=3, inline_keyboard=[[ InlineKeyboardButton(text="🇺🇦 UA", callback_data=start_callback.new("UA")), InlineKeyboardButton(text="🇺🇸 EN", callback_data=start_callback.new("EN")), InlineKeyboardButton(text="🇷🇺 RU", callback_data=start_callback.new("RU")) ]])
def create(foods: list): reset_button = InlineKeyboardButton( 'Повторить', callback_data=f'add_product_photo_check_[\'shopping_list\']') add_typing_button = InlineKeyboardButton( 'Ввести вручную', callback_data=f'add_product_typing_[\'shopping_list\']') inline_kb_full = InlineKeyboardMarkup(row_width=1) if len(foods) == 1: product_one = InlineKeyboardButton( foods[0], callback_data= f'add_product_photo_name_ok_[\'shopping_list\']+{foods[0]}') inline_kb_full.add(product_one) inline_kb_full.row(reset_button, add_typing_button) return inline_kb_full if len(foods) == 2: product_one = InlineKeyboardButton( foods[0], callback_data= f'add_product_photo_name_ok_[\'shopping_list\']+{foods[0]}') product_two = InlineKeyboardButton( foods[1], callback_data= f'add_product_photo_name_ok_[\'shopping_list\']+{foods[1]}') inline_kb_full.add(product_one, product_two) inline_kb_full.row(reset_button, add_typing_button) return inline_kb_full if len(foods) == 3: product_one = InlineKeyboardButton( foods[0], callback_data= f'add_product_photo_name_ok_[\'shopping_list\']+{foods[0]}') product_two = InlineKeyboardButton( foods[1], callback_data= f'add_product_photo_name_ok_[\'shopping_list\']+{foods[1]}') product_three = InlineKeyboardButton( foods[2], callback_data= f'add_product_photo_name_ok_[\'shopping_list\']+{foods[2]}') inline_kb_full.add(product_one, product_two, product_three) inline_kb_full.row(reset_button, add_typing_button) return inline_kb_full if len(foods) == 4: product_one = InlineKeyboardButton( foods[0], callback_data= f'add_product_photo_name_ok_[\'shopping_list\']+{foods[0]}') product_two = InlineKeyboardButton( foods[1], callback_data= f'add_product_photo_name_ok_[\'shopping_list\']+{foods[1]}') product_three = InlineKeyboardButton( foods[2], callback_data= f'add_product_photo_name_ok_[\'shopping_list\']+{foods[2]}') product_four = InlineKeyboardButton( foods[3], callback_data= f'add_product_photo_name_ok_[\'shopping_list\']+{foods[3]}') inline_kb_full = InlineKeyboardMarkup(row_width=2) inline_kb_full.row(product_one, product_two) inline_kb_full.row(product_three, product_four) inline_kb_full.row(reset_button, add_typing_button) return inline_kb_full if len(foods) == 5: product_one = InlineKeyboardButton( foods[0], callback_data= f'add_product_photo_name_ok_[\'shopping_list\']+{foods[0]}') product_two = InlineKeyboardButton( foods[1], callback_data= f'add_product_photo_name_ok_[\'shopping_list\']+{foods[1]}') product_three = InlineKeyboardButton( foods[2], callback_data= f'add_product_photo_name_ok_[\'shopping_list\']+{foods[2]}') product_four = InlineKeyboardButton( foods[3], callback_data= f'add_product_photo_name_ok_[\'shopping_list\']+{foods[3]}') product_five = InlineKeyboardButton( foods[4], callback_data= f'add_product_photo_name_ok_[\'shopping_list\']+{foods[4]}') inline_kb_full = InlineKeyboardMarkup(row_width=2) inline_kb_full.row(product_one, product_two) inline_kb_full.row(product_three, product_four) inline_kb_full.add(product_five) inline_kb_full.row(reset_button, add_typing_button) return inline_kb_full if len(foods) == 6: product_one = InlineKeyboardButton( foods[0], callback_data= f'add_product_photo_name_ok_[\'shopping_list\']+{foods[0]}') product_two = InlineKeyboardButton( foods[1], callback_data= f'add_product_photo_name_ok_[\'shopping_list\']+{foods[1]}') product_three = InlineKeyboardButton( foods[2], callback_data= f'add_product_photo_name_ok_[\'shopping_list\']+{foods[2]}') product_four = InlineKeyboardButton( foods[3], callback_data= f'add_product_photo_name_ok_[\'shopping_list\']+{foods[3]}') product_five = InlineKeyboardButton( foods[4], callback_data= f'add_product_photo_name_ok_[\'shopping_list\']+{foods[4]}') product_six = InlineKeyboardButton( foods[5], callback_data= f'add_product_photo_name_ok_[\'shopping_list\']+{foods[5]}') inline_kb_full = InlineKeyboardMarkup(row_width=2) inline_kb_full.row(product_one, product_two) inline_kb_full.row(product_three, product_four) inline_kb_full.row(product_five, product_six) inline_kb_full.row(reset_button, add_typing_button) return inline_kb_full if len(foods) == 7: product_one = InlineKeyboardButton( foods[0], callback_data= f'add_product_photo_name_ok_[\'shopping_list\']+{foods[0]}') product_two = InlineKeyboardButton( foods[1], callback_data= f'add_product_photo_name_ok_[\'shopping_list\']+{foods[1]}') product_three = InlineKeyboardButton( foods[2], callback_data= f'add_product_photo_name_ok_[\'shopping_list\']+{foods[2]}') product_four = InlineKeyboardButton( foods[3], callback_data= f'add_product_photo_name_ok_[\'shopping_list\']+{foods[3]}') product_five = InlineKeyboardButton( foods[4], callback_data= f'add_product_photo_name_ok_[\'shopping_list\']+{foods[4]}') product_six = InlineKeyboardButton( foods[5], callback_data= f'add_product_photo_name_ok_[\'shopping_list\']+{foods[5]}') product_seven = InlineKeyboardButton( foods[6], callback_data= f'add_product_photo_name_ok_[\'shopping_list\']+{foods[6]}') inline_kb_full = InlineKeyboardMarkup(row_width=2) inline_kb_full.row(product_one, product_two) inline_kb_full.row(product_three, product_four) inline_kb_full.row(product_five, product_six) inline_kb_full.add(product_seven) inline_kb_full.row(reset_button, add_typing_button) return inline_kb_full if len(foods) >= 8: product_one = InlineKeyboardButton( foods[0], callback_data= f'add_product_photo_name_ok_[\'shopping_list\']+{foods[0]}') product_two = InlineKeyboardButton( foods[1], callback_data= f'add_product_photo_name_ok_[\'shopping_list\']+{foods[1]}') product_three = InlineKeyboardButton( foods[2], callback_data= f'add_product_photo_name_ok_[\'shopping_list\']+{foods[2]}') product_four = InlineKeyboardButton( foods[3], callback_data= f'add_product_photo_name_ok_[\'shopping_list\']+{foods[3]}') product_five = InlineKeyboardButton( foods[4], callback_data= f'add_product_photo_name_ok_[\'shopping_list\']+{foods[4]}') product_six = InlineKeyboardButton( foods[5], callback_data= f'add_product_photo_name_ok_[\'shopping_list\']+{foods[5]}') product_seven = InlineKeyboardButton( foods[6], callback_data= f'add_product_photo_name_ok_[\'shopping_list\']+{foods[6]}') product_eight = InlineKeyboardButton( foods[7], callback_data= f'add_product_photo_name_ok_[\'shopping_list\']+{foods[7]}') inline_kb_full = InlineKeyboardMarkup(row_width=2) inline_kb_full.row(product_one, product_two) inline_kb_full.row(product_three, product_four) inline_kb_full.row(product_five, product_six) inline_kb_full.row(product_seven, product_eight) inline_kb_full.row(reset_button, add_typing_button) return inline_kb_full
class UserStates(Helper): GET_CHANNEL_TO_UP = ListItem() GET_SUB_COUNT = ListItem() CONFIRMATION = ListItem() GET_MSG_FOR_MAIL = ListItem() GET_USER_FOR_UBAN = ListItem() GET_USER_FOR_CHB = ListItem() main_menu = ReplyKeyboardMarkup(resize_keyboard=True) main_menu.add('✔️ Подписаться на канал', '➕ Получить подписчиков') main_menu.add('👤 Профиль', '👣 Партнёрская программа') admin_menu = InlineKeyboardMarkup() statistics_bt = InlineKeyboardButton(text='📊 Статистика', callback_data='stat') mail_bt = InlineKeyboardButton(text='✉️ Рассылка', callback_data='mail') give_uban_bt = InlineKeyboardButton(text='🚷 Выдать бан/разбан', callback_data='uban') change_balance_bt = InlineKeyboardButton(text='💳 Изменить баланс', callback_data='chb') admin_menu.add(statistics_bt, mail_bt) admin_menu.add(give_uban_bt, change_balance_bt) cancel_menu = InlineKeyboardMarkup() cancel_bt = InlineKeyboardButton(text='🚫 Отмена', callback_data='cancel') cancel_menu.add(cancel_bt) #============== async def user_in_channel_checker():