async def edit_name(message: Message): markup = ReplyKeyboardMarkup(resize_keyboard=True) markup.insert(KeyboardButton(text=_("🔙 Back"))) await message.answer(_("Enter your new name"), reply_markup=markup) await Settings.InputtingName.set()
def _get_text(user: User, inline: bool = False): commands_text = '' if not inline: commands_text = _('<b>Commands �</b>\n') commands = get_admin_commands( user.language) if user.is_admin else get_default_commands( user.language) for command in commands: commands_text += f'{command.command} - {command.description}\n' commands_text += '\n' text = _( '<b>Help 🆘</b>\n\n' '{commands}' '<b>Price 💰</b>\n' '<code>@cryptocompare_bot [quantity] coin</code>\n' '<code>@cryptocompare_bot BTC</code>\n' '<code>@cryptocompare_bot 4 BTC</code>\n' '<code>@cryptocompare_bot BTC,ETH,USD</code>\n\n' '<b>Conversion 🔄</b>\n' '<code>@cryptocompare_bot [quantity] coin / coin</code>\n' '<code>@cryptocompare_bot BTC USD</code>\n' '<code>@cryptocompare_bot 2 Btc usd</code>\n' '<code>@cryptocompare_bot 4.55 BTC,ETH,DOGE / USD,EUR,UAH</code>\n\n' '<i>*coins for conversion can be separated by / or by a space, the case of coins is insensitive </i>\n\n' '<b>Contact ☎</b>\n' '@briler').format(commands=commands_text) return text
def get_contact_keyboard(lang): contact_keyboard = ReplyKeyboardMarkup(keyboard=[[ KeyboardButton(text=_("📱 Share Phone Number", locale=lang), request_contact=True) ], [KeyboardButton(text=_("🔙 Back", locale=lang))]], resize_keyboard=True) return contact_keyboard
def get_about_keyboard(lang): about_keyboard = ReplyKeyboardMarkup( keyboard=[[KeyboardButton(text=_("📍 Shop's Location", locale=lang))], [ KeyboardButton(text=_("📱 Contacts", locale=lang)), ], [KeyboardButton(text=_("🔙 Back", locale=lang))]], resize_keyboard=True) return about_keyboard
def get_default_commands(lang: str = 'en') -> list[BotCommand]: commands = [ BotCommand('/start', _('start bot', locale=lang)), BotCommand('/help', _('how it works?', locale=lang)), BotCommand('/lang', _('change language', locale=lang)), BotCommand('/settings', _('open bot settings', locale=lang)), ] return commands
async def show_shop(message: Message, state: FSMContext): user = await db.get_user(message.from_user.id) await message.answer(text=_("Great! Where do we start?"), reply_markup=ReplyKeyboardRemove()) await state.update_data(message_ids=[]) await message.answer(text=_("Categories Menu"), reply_markup=get_categories_keyboard(user.language)) await Menu.Category.set()
def get_location_keyboard(lang): location_keyboard = ReplyKeyboardMarkup( keyboard=[[ KeyboardButton(text=_("📍 Share Current Location", locale=lang), request_location=True) ], [KeyboardButton(text=_("✖️ Cancel", locale=lang))]], resize_keyboard=True, one_time_keyboard=True, ) return location_keyboard
def get_main_menu(lang: str) -> ReplyKeyboardMarkup: main_menu = ReplyKeyboardMarkup( keyboard=[ [ KeyboardButton(text=_('Меню', locale=lang)), # KeyboardButton(text='Ігра') ], [KeyboardButton(text=_('Змінити мову', locale=lang))] ], resize_keyboard=True) return main_menu
async def bot_start(message: Message): await message.answer(_('Привіт') + f', {User.get_current().first_name}!', reply_markup=main_menu) db.insert_or_ignore( 'users', { 'id': User.get_current().id, 'first_name': User.get_current().first_name, 'last_name': User.get_current().last_name, 'lang': User.get_current().locale.language }) await message.answer(_('Виберіть мову'), reply_markup=choose_language) await message.answer(_('Натисніть /help, щоб отримати список команд'))
def get_admin_commands(lang: str = 'en') -> list[BotCommand]: commands = get_default_commands(lang) commands.extend([ BotCommand('/export_users', _('export users to csv', locale=lang)), BotCommand('/count_users', _('count users who contacted the bot', locale=lang)), BotCommand( '/count_active_users', _('count active users (who didn\'t block the bot)', locale=lang)), ]) return commands
def get_default_markup(user): markup = ReplyKeyboardMarkup(resize_keyboard=True, row_width=3) markup.add(_('Help 🆘'), _('Settings 🛠')) if user.is_admin: markup.add(_('Export users 📁')) markup.add(_('Count users 👥')) markup.add(_('Count active users 👥')) if len(markup.keyboard) < 1: return ReplyKeyboardRemove() return markup
async def show_menu(message: Union[Message, CallbackQuery]): user = await db.get_user(message.from_user.id) print("lang=", user.language) if isinstance(message, Message): await message.answer(_("Main Menu"), reply_markup=get_main_menu_keyboard( user.language)) elif isinstance(message, CallbackQuery): await message.message.answer(_("Main Menu"), reply_markup=get_main_menu_keyboard( user.language)) await Menu.Main_Menu.set()
async def change_language(call: CallbackQuery): await call.message.edit_reply_markup() lang = call.data[-2:] db.update('users', User.get_current().id, { 'lang': lang }) # await call.message.edit_text(_("Мова була змінена", locale=lang)) full_lang = { 'uk': 'українська', 'ru': 'русский', 'en': 'English' } await call.message.answer(_("Мова була змінена", locale=lang), reply_markup=ReplyKeyboardRemove()) await call.message.answer(_('Ваша поточна мова', locale=lang) + f': {full_lang[lang]}', reply_markup=get_main_menu(db.get_lang(User.get_current().id)))
def get_cart_keyboard(items): markup = InlineKeyboardMarkup() for index, item in enumerate(items, 1): markup.row(InlineKeyboardButton(text=f"❌ {item.name}", callback_data=cart_delete_cd.new(f"delete_{item.id}"))) markup.row(InlineKeyboardButton(text=_("🚫 Clear cart"), callback_data="clear_cart")) markup.row(InlineKeyboardButton(text=_("🔙 Back"), callback_data=back_to_menu.new(action="back_to_category"))) markup.row(InlineKeyboardButton(text=_("📤 Place Order"), callback_data="order")) return markup
async def change_language(call: CallbackQuery): await call.message.edit_reply_markup() lang = call.data[-2:] await db.set_language(lang) await call.message.answer(_("Thank you! Here's our Main Menu", locale=lang), reply_markup=get_main_menu_keyboard(lang)) await Menu.Main_Menu.set()
def get_main_menu_keyboard(lang): main_menu_keyboard = ReplyKeyboardMarkup(keyboard=[ [KeyboardButton(text=_("🛍 Shop", locale=lang))], [ KeyboardButton(text=_("🗣 Feedback", locale=lang)), KeyboardButton(text=_("ℹ About", locale=lang)), ], [ KeyboardButton(text=_("❗ Help", locale=lang)), KeyboardButton(text=_("⚙ Settings", locale=lang)), ], ], resize_keyboard=True) return main_menu_keyboard
async def show_settings(message: Message): user = await db.get_user(message.from_user.id) await message.answer(_("Settings Menu:", locale=user.language), reply_markup=get_settings_keyboard(user.language)) await Menu.Settings.set()
async def pay_method(call: CallbackQuery): cart_items = await db.get_cart_items(call.from_user.id) user = await db.get_user(call.from_user.id) payment_method = call.data[8:].capitalize() is_cash = False if payment_method == 'Cash': is_cash = True payment_method = "Наличные" text = "<i>Информация о заказе:</i>\n\n" \ f"<b>Номер Телефона:</b> {user.phone_number}\n\n" \ f"<b>Адрес Доставки:</b> {user.address}\n\n" \ f"<b>Метод Оплаты:</b> {payment_method}\n\n" total = 0 item_ids = [] for index, cart_item in enumerate(cart_items, 1): item_ids.append(cart_item.item_id) item = await db_commands.get_item(int(cart_item.item_id)) text += f"<b>{index}.</b> {item.name} - <b>{cart_item.size}</b>\n" text += f"\t\t\t{cart_item.quantity} × {item.price} = {refactor(int(item.price.replace(' ', '')) * cart_item.quantity)} СУМ\n\n" total += int(item.price.replace(" ", "")) * cart_item.quantity text += f"<b>Итого</b>: {refactor(total)} СУМ" order = await db.create_order(item_ids=",".join(item_ids), sum=total, is_cash=is_cash) text = f"<b>Номер заказа:</b> #N{order.id}\n" + text await call.message.answer(text=_("<i>Thank you, your order has been submitted for processing! Our operators will contact you shortly</i>"), reply_markup=ReplyKeyboardRemove()) await bot.send_message(chat_id="@MustHave_Official", text=text, reply_markup=get_order_keyboard_phase_1(order.id, call.from_user.id)) await Order.Confirmation.set() await call.answer()
async def create_order(call: CallbackQuery): user = await db.get_user(call.from_user.id) await call.message.answer(_("Leave your contact number so we can contact you regarding your order"), reply_markup=get_contact_keyboard(user.language)) await Order.PhoneNumber.set() await call.answer()
async def edit_number(message: Message): user = await db.get_user(message.from_user.id) await message.answer(_("Enter your new phone number"), reply_markup=get_contact_keyboard(user.language)) await Settings.InputtingPhone.set()
async def inputting_number(message: Message): number = message.text await db.set_phone_number(number) await message.answer(_("Your phone number has been changed!")) await show_settings(message)
async def change_language(message: Message): user = await db.get_user(message.from_user.id) await message.answer(_("Choose the language"), reply_markup=get_language_keyboard(user.language)) await Settings.ChangeLanguage.set()
async def show_about(message: Message): user = await db.get_user(message.from_user.id) await message.answer(_("What do you want to know about us?"), reply_markup=get_about_keyboard(user.language)) await Menu.About.set()
async def show_item(message: Message, state: FSMContext): user = await db.get_user(message.from_user.id) item_id = message.text item = await db_commands.get_item(int(item_id)) text = _("<b>{name}</b>" "\n\n<b>Price:</b> {price} UZS " "\n<b>Sizes:</b> {available_sizes} " "\n\nFor all related questions text @g_continent\n\n").format(name=item.name, price=item.price, available_sizes=item.available_sizes) photo = await bot.send_photo(chat_id=message.from_user.id, photo=item.photo, caption=text, reply_markup=get_item_keyboard(item.category_name, item.id, message.from_user.id, item.active, user.language)) data = await state.get_data() message_ids = data.get('message_ids') if message_ids: message_ids.append(photo.message_id) else: message_ids = [photo.message_id] await state.update_data(message_ids=message_ids) await bot.delete_message(chat_id=message.from_user.id, message_id=message.message_id) await Menu.Item.set()
async def bot_help(message: types.Message): text = [ _('Список команд') + ': ', '/start - ' + _('Запустити бота'), '/help - ' + _('Отримати список команд'), '/lang - ' + _('Змінити мову'), '/menu - ' + _('Відкрити меню'), '/table - ' + _('Відкрити таблицю результатів'), '/scorers - ' + _('Відкрити топ бомбрадирів'), '/assists - ' + _('Відкрити топ асистентів'), '/matches - ' + _('Відкдити розклад матчів') ] await message.answer('\n'.join(text))
async def confirming(call: CallbackQuery): x, order_id, user_id = call.data.split("_") order_id = int(order_id) user_id = int(user_id) order = await db.get_order(order_id) await bot.edit_message_reply_markup(chat_id="@MustHave_Official", message_id=call.message.message_id, reply_markup=get_order_keyboard_phase_2(order_id, user_id)) await db.update_order(order_id=order_id, status=1) if not order.is_cash: await bot.send_message(chat_id=user_id, text=_("<b>Order Number</b>: #N{order_id}\n\n" "Credit card number for transferring:\n<b>8600 3129 4618 7313</b>").format(order_id=order_id)) else: await bot.send_message(chat_id=user_id, text=_("<b>Order Number</b>: #N{order_id}\n\nYour order has been confirmed.").format(order_id=order_id))
async def inputting_number(message: Message): user = await db.get_user(message.from_user.id) number = message.text await db.set_phone_number(number) await message.answer(_("Share your current location for the shipping address"), reply_markup=get_location_keyboard(user.language)) await Order.Location.set()
async def clear_cart(call: CallbackQuery): user = await db.get_user(call.from_user.id) await db.clear_cart(chat_id=call.from_user.id) await show_cart(call, edit=True) await bot.send_message(chat_id=call.from_user.id, text=_('Categories Menu:'), reply_markup=get_categories_keyboard(user.language)) await Menu.Category.set()
async def command_handler(message: Message): task = message.text[1] if task == 't': await message.answer(_('Виберіть лігу'), reply_markup=table_choose_liga) elif task == 's': await message.answer(_('Виберіть лігу'), reply_markup=scorers_choose_liga) elif task == 'a': if db.get_lang(User.get_current().id) != 'en': await message.answer(_('Виберіть лігу'), reply_markup=assists_choose_liga) else: await message.answer(_('Виберіть лігу'), reply_markup=assists_choose_liga_en) elif task == 'm': await message.answer(_('Виберіть лігу'), reply_markup=matches_choose_liga)
def get_language_keyboard(lang): language_keyboard = ReplyKeyboardMarkup( keyboard=[[KeyboardButton(text="🇺🇸 English")], [KeyboardButton(text="🇷🇺 Русский")], [KeyboardButton(text="🇺🇿 O'zbek tili")], [KeyboardButton(text=_("🔙 Back", locale=lang))]], resize_keyboard=True) return language_keyboard