async def process_region(message: types.Message, state: FSMContext): async with state.proxy() as data: data['casenum'] = message.text c.execute("SELECT * FROM rega ORDER BY did DESC LIMIT 0,1") fetch = c.fetchall() next_did = fetch[0][0] + 1 reger = message.chat.first_name region = data['region'] agency = data['agency'] content = data['content'] casenum = data['casenum'] await bot.send_message(message.chat.id, md.text( md.text('Сонымен, ', md.bold(data['regdoc']), " әрекеті таңдалды"), md.text('Құжаттың шығыс тіркеу номері: ', next_did), md.text('Құжатты тіркеген: ', reger), md.text('Құжат жолданатын аймақ: ', region), md.text('Құжат жолданатын мекеме: ', agency), md.text('Құжаттың қысқаша мазмұны: ', content), md.text('Құжат қатысты істің номері: ', casenum), sep='\n\n'), parse_mode=ParseMode.MARKDOWN) c.execute("INSERT INTO rega(did,reger,region,agency,content,casenum) VALUES(?,?,?,?,?,?)", (next_did, reger, region, agency, content, casenum)) conn.commit() # Finish conversation data.state = None await state.finish()
async def process_gender(message: types.Message, state: FSMContext): async with state.proxy() as data: data['gender'] = message.text # Remove keyboard markup = types.ReplyKeyboardRemove() # And send message await bot.send_message(message.chat.id, md.text( md.text('Hi! Nice to meet you,', md.bold(data['name'])), md.text('Age:', data['age']), md.text('Gender:', data['gender']), sep='\n'), reply_markup=markup, parse_mode=ParseMode.MARKDOWN) # Finish conversation data.state = None
async def process_gender(message: types.Message, state: FSMContext): async with state.proxy() as data: data['gender'] = message.text # Remove keyboard markup = types.ReplyKeyboardRemove() # And send message await bot.send_message(message.chat.id, md.text(md.text('Hi! Nice to meet you,', md.bold(data['name'])), md.text('Age:', data['age']), md.text('Gender:', data['gender']), sep='\n'), reply_markup=markup, parse_mode=ParseMode.MARKDOWN) # Finish conversation data.state = None
async def process_gender(message: types.Message, state: FSMContext): async with state.proxy() as data: data['startedu'] = message.text markup = types.ReplyKeyboardRemove() await bot.send_message( message.chat.id, md.text( md.text('Рад познакомиться!,', md.bold(data['firstname'] + " " + data['lastname'])), md.text('Твоя группа:', data['group']), md.text('Начал обучение в :', data['startedu']), sep='\n', ), reply_markup=markup, parse_mode=ParseMode.MARKDOWN, ) await state.finish()
async def deleting_expenses_state(callback_query: types.CallbackQuery): """ Sends each expense from the last ten, offering to delete each of them """ await bot.answer_callback_query(callback_query.id) budget_name = await state_budget_name(callback_query) budget_id = budgets.get_budget_id(budget_name) last_expenses = expenses.get_last_expenses(callback_query.from_user.id, budget_id) if not last_expenses: await bot.send_message(callback_query.from_user.id, "Трат ещё не было.") return await bot.send_message(callback_query.from_user.id, text(bold("Удаление трат\n\n")), parse_mode=ParseMode.MARKDOWN) for expense in last_expenses: expense_str = f"- {expense.amount} руб. на {expense.category_name}, добавил {expense.username}\n" await bot.send_message( callback_query.from_user.id, expense_str, reply_markup=buttons.markup_del_expense(expense))
async def randNumInlineQueryHandler(inline_query: InlineQuery): num = [ int(i) for i in inline_query.query.lower().replace("num", "").split() ] randomNumber = str(randint(num[0], num[1])) messToUser = markdown.italic(f"Случайное число от {num[0]} до {num[1]}:") + '\n' + \ markdown.bold(f'{randomNumber}') items = [ InlineQueryResultArticle( id=str(time()), title=f'Случайное число от {num[0]} до {num[1]}:', thumb_url=foxLogoPreview, description=f"{num[0]}, {num[1]}\n" f"Что же он выберет?", input_message_content=InputTextMessageContent( messToUser, parse_mode='MarkdownV2')) ] await bot.answer_inline_query(inline_query.id, results=items, cache_time=0)
async def process_price(message: types.Message, state: FSMContext): async with state.proxy() as data: data['price'] = message.text user = User.get(User.external_id == message.from_user.values.get('id')) Expense.create(**data, user=user) # summary of saved expense await bot.send_message( message.chat.id, md.text( md.text('Gasto de ', md.bold(data['description']), ' guardado! '), md.text('Categorias: ', md.code(data['categories'])), md.text('Price: $', data['price']), sep='\n', ), parse_mode=ParseMode.MARKDOWN, ) # Finish conversation await state.finish()
async def process_callback_button1(callback_query: types.CallbackQuery, state: FSMContext): global client calc = unreal_engine.calculate(230, "🤡 Прикладная информатика",callback_query.from_user.id, client) await bot.answer_callback_query(callback_query.id) # place # name # sum # math # it # rus # extra # approve # hit # counter_yes # counter_maybe # counter_maybe_maybe # poly_date # server_date msg = text(bold(calc['group_name']),'\nВремя запроса: '+calc['server_date']+'\nАпдейт политеха: '+calc['poly_date']+'\nМесто (только с согласиями): '+str(calc['counter_yes'])+'\nМесто (согл. + без согл.): '+str(calc['counter_maybe'])+'\nМесто (согл. + без согл. + согл.др.направ.): '+str(calc['counter_maybe_maybe'])+'\nЗаявление: '+calc['approve']+'\nПопадание: '+calc['hit']+'\nСумма баллов: '+calc['sum']+'\nФИО: '+calc['name']+'\nМесто в таблице политеха(не нужно): '+calc['place']) await bot.send_message(callback_query.from_user.id, msg)
async def process_start_command(message: types.Message): ''' Функция обработки команды /start :param message: сообщение, полученное от пользователя ''' user_id = message.from_user.id markup=types.ReplyKeyboardRemove() # Если текущий запрос сформирован, то отправляем его на обработку. # Для этого создаем запись в БД со статусом 0 if current_telbot[user_id][0] and current_telbot[user_id][1]: add_request(current_telbot, message) # Посылаем сообщение пользователю await bot.send_message(message.chat.id, md.text("Ваш запрос направлен на обработку.\nИспользуйте команду ", md.bold("/list")," для проверки состояния вашего запроса."), reply_markup = markup, parse_mode = ParseMode.MARKDOWN) else: # Если текущий запрос сформирован не полностью, то посылаем сообщение об этом пользователю await message.reply("Ваш запрос сформирован не полностью. Должет быть указан регион и текст запроса.")
async def choose_ok(message: types.Message, state: FSMContext): await state.update_data(delete=message.text) markup = types.ReplyKeyboardRemove() USER_INFO = await state.get_data() await bot.send_message( message.chat.id, md.text( md.text('Теперь ты не отслеживаешь: ', md.bold(USER_INFO['delete']))), reply_markup=markup, parse_mode=ParseMode.MARKDOWN, ) Information.CONSTANT_CATEGORY_ME.pop([ i[1] for i in Information.CONSTANT_CATEGORY_ME ].index(USER_INFO['delete'])) Information.C.pop(Information.C.index(USER_INFO['delete'])) await state.finish()
async def notif(): with Session as session: for u in session.query(User).all(): try: tm = u.get_tomuss() except Exception as e: logger.error(e) else: if tm: for i in tm: msg = markdown.text( markdown.bold(i.title), markdown.code( i.summary.replace("<br>", "\n").replace( "<b>", "").replace("</b>", "")), sep="\n") await bot.send_message(u.id, msg, parse_mode=ParseMode.MARKDOWN) u.tomuss_last = str(i) session.commit()
async def kfet(message: types.Message): check_id(message.from_user) await message.chat.do(types.ChatActions.TYPING) logger.info(f"{message.from_user.username} do kfet") with Session as session: user = session.query(User).filter_by(id=message.from_user.id).first() if not 9 < get_now().hour < 14 or not get_now().isoweekday() < 6: msg = lang(user, "kfet_close") else: msg = lang(user, "kfet_list") try: cmds = requests.get(KFET_URL).json() except (requests.exceptions.ConnectionError, requests.exceptions.ConnectTimeout): msg = markdown.bold(lang(user, "kfet_error")) else: if cmds: for c in cmds: msg += markdown.code( c) + " " if cmds[c] == "ok" else "" await message.reply(msg, parse_mode=ParseMode.MARKDOWN, reply_markup=key)
async def get_last_expenses(message: types.Message): """ Gets last ten expenses for the current budget """ budget_name = await state_budget_name(message) budget_id = budgets.get_budget_id(budget_name) last_expenses = expenses.get_last_expenses(message.from_user.id, budget_id) budget_name_mrkdwn = budget_name.replace("_", "\\_") kb = None answer_text = text( bold(f"Последние траты\n\n") + f"Бюджет: \"{budget_name_mrkdwn}\"\n\n") if not last_expenses: answer_text += "Трат ещё не было." else: expenses_to_send = [ f"- {expense.amount} руб. на {expense.category_name}, добавил {expense.username}\n" for expense in last_expenses ] answer_text += "\n".join(expenses_to_send) kb = buttons.kb_del_expenses params = {"text": answer_text, "parse_mode": ParseMode.MARKDOWN} if kb: params["reply_markup"] = kb await message.answer(**params)
async def process_iResources(callback_query: types.CallbackQuery): message_text = text( bold('ПОЛЕЗНЫЕ РЕСУРСЫ 💡'), '\n\nИНТЕРНЕТ-РЕСУРСЫ:', '\nwelcome.stepik.org - онлайн-курсы от ведущих вузов и компаний страны', '\nkpolyakov.spb.ru - сайт Полякова по информатике', '\ncodeforces.com - соревнования и олимпиады по информатике', '\nvsenauka.ru - бесплатная научная литература' '\nsilvertests.ru - портал обучения информатике' '\nege.sdamgia.ru - образовательный портал для подготовки к экзаменам' '\nolimpiada.ru - всё об олимпиадах для школьников' '\npostypashki.ru - лучшая подготовка к олимпиадам, ЕГЭ и ДВИ' '\nmathus.ru - материалы по математике: подготовка к олимпиадам и ЕГЭ' '\n\nЧАТ-БОТЫ:' '\n@mybookbot - поиск книг по всему интернету на всех языках' '\n@ias16bot - бот-учитель со множеством различных функций' '\n@Wikipedia_voice_bot - бот с функцией голосового поиска по «Википедии»' '\n@AndyRobot - чат-бот, который поможет выучить английский язык') await bot.send_message(callback_query.from_user.id, message_text, parse_mode=ParseMode.MARKDOWN, reply_markup=kb.intexBack)
async def process_help_command(message: types.Message): msg = text(bold('list of commands:'), '/voice', '/photo', '/note', '/video', '/document', '/setstate', '/terms', '/buy', '/hi1', '/hi2', '/hi3', '/hi4', '/hi5', '/hi6', '/hi7', '/rm', '/1', '/2', sep='\n') await message.reply(msg, parse_mode=ParseMode.MARKDOWN)
async def choose_ok(message: types.Message, state: FSMContext): await state.update_data(add=message.text) markup = types.ReplyKeyboardRemove() USER_INFO = await state.get_data() await bot.send_message( message.chat.id, md.text(md.text('Теперь ты отслеживаешь: ', md.bold(USER_INFO['add']))), reply_markup=markup, parse_mode=ParseMode.MARKDOWN, ) number_for_url = str(Information.CONSTANT_LIST.get(USER_INFO['add'])) url = f'https://www.fl.ru/rss/all.xml?category={number_for_url}' c = konst() Information.CONSTANT_CATEGORY_ME.append((c, USER_INFO['add'])) Information.C.append(USER_INFO['add']) print(Information.CONSTANT_CATEGORY_ME) await state.finish() await c.cn(url, message.chat.id)
async def process_sex(message: types.Message): state = dp.current_state(chat=message.chat.id, user=message.from_user.id) data = await state.get_data() data['sex'] = message.text # Remove keyboard markup = types.ReplyKeyboardRemove() # And send message await bot.send_message(message.chat.id, text(text('Hi! Nice to meet you,', bold(data['name'])), text('Age:', data['age']), text('Sex:', data['sex']), sep='\n'), reply_markup=markup, parse_mode=ParseMode.MARKDOWN) # Finish conversation # WARNING! This method will destroy all data in storage for current user! await state.finish()
async def qrCodeAcceptor(message: Message, state: FSMContext): async with state.proxy() as data: photoPath = str(time()) + ".jpg" data['qr'] = photoPath await message.photo[-1].download(photoPath) await QrFSM.qrRead.set() qrData = decodeQr(photoPath) remove(data['qr']) if qrData: messageToUser = "******" + f'{qrData}' else: messageToUser = markdown.bold("Не удалось считать QR—код") await message.reply( text=messageToUser, disable_web_page_preview=False, ) await state.finish()
async def process_gender(message: types.Message, state: FSMContext): async with state.proxy() as data: data['gender'] = message.text # Remove keyboard markup = types.ReplyKeyboardMarkup(resize_keyboard=True, selective=True) markup.add("Yes", "No") markup.add("Cancel") # And send message await bot.send_message( message.chat.id, md.text( md.text('Sending ', md.code(data['age']) + ' GRIN'), md.text('on :', md.bold(data['method'])), md.text('To adress: ', data['gender']), sep='\n', ), reply_markup=markup, parse_mode=ParseMode.MARKDOWN, ) await Form.next()
async def welcome_handler(callback: types.CallbackQuery): if callback.data == 'goals': await callback.message.edit_text(text=Smile.goals + ' Мои цели.', reply_markup=dp['kb'].goals()) await Page.goals.set() if callback.data == 'diet': await callback.message.edit_text(text=Smile.diet + ' Мое питание.', reply_markup=dp['kb'].diet()) await Page.diet.set() if callback.data == 'sport': await callback.message.edit_text(text=Smile.sport + ' Мои тренировки.', reply_markup=dp['kb'].sport()) await Page.sport.set() if callback.data == 'listen': await callback.message.edit_text(text=Smile.listen + ' Мои книги.', reply_markup=dp['kb'].listen()) await Page.listen.set() if callback.data == 'regime': # calendar.view() await callback.message.edit_text(text=Smile.regime + ' Мой режим дня.', reply_markup=dp['kb'].regime()) await Page.regime.set() if callback.data == 'budget': # status = spreadsheets.view() status = '' await callback.message.edit_text(text=text(bold(Smile.budget + ' Мои расходы'), code('\n'.join(status)), sep='\n\n'), reply_markup=dp['kb'].budget()) await Page.budget.set() if callback.data == 'water': await callback.message.edit_text(text=Smile.water + ' Мой питьевой режим.', reply_markup=dp['kb'].water()) await Page.water.set() if callback.data == 'settings': await callback.message.edit_text(text=Smile.settings + ' Мои настройки.', reply_markup=dp['kb'].settings()) await Page.settings.set() await callback.answer()
async def process_gender(message: types.Message, state: FSMContext): async with state.proxy() as data: data["gender"] = message.text # send_email("User %s passed form!", user, data) # Remove keyboard markup = types.ReplyKeyboardRemove() # And send message await bot.send_message( message.chat.id, md.text( md.text("Hi! Nice to meet you,", md.bold(data["name"])), md.text("Age:", md.code(data["age"])), md.text("Gender:", data["gender"]), sep="\n", ), reply_markup=markup, parse_mode=ParseMode.MARKDOWN, ) # Finish conversation await state.finish()
async def menu(message: types.Message): user_id = message.chat.id global categories menu = categories.copy() menu.append(["Корзина", "Заказы", "Менеджер"]) if user_id in admins: menu.append(["Добавить категорию"]) menu.append(["Добавить товар"]) if user_id == admins[0]: menu.append(["Добавить менеджера", "Чат менеджеров"]) menu.append(["Добавить адрес", "Номер QIWI"]) print(message) print(message.reply_to_message) # print (message.reply_message) text = markdown.text(markdown.bold("hello")) # texts["menu"] await bot.send_message(message.chat.id, texts["menu"], reply_markup=keyboard_main.reply( menu, one_time_keyboard=True))
async def process_iEGE(callback_query: types.CallbackQuery): message_text = text( bold('ПОЛЕЗНЫЕ РЕСУРСЫ ДЛЯ ПОДГОТОВКИ К ЕГЭ 💡'), '\n\nege.sdamgia.ru - образовательный портал для подготовки к экзаменам' '\nkpolyakov.spb.ru - сайт Полякова по информатике' '\nfipi.ru - методическая копилка заданий ЕГЭ' '\nmathege.ru - открытый банк математических задач ЕГЭ' '\nneznaika.info - позволяет подготовиться к ЕГЭ и ОГЭ' '\nfoxford.ru - онлайн-школа' '\nshkolkovo.net - образовательный портал для подготовки к ЕГЭ, ОГЭ, и олимпиадам' '\n4ege.ru - всё самое важное о ЕГЭ' '\nmathus.ru - материалы по математике: подготовка к олимпиадам и ЕГЭ' '\ndisk.yandex.ru/d/jvNVv6OfEAqftw - приложения для подготовки к ЕГЭ по русскому языку' '\n\nЕсть много каналов на YouTube. Например: ' '\nпо математике - Борис Трушин, Пифагор, Математик МГУ, Школково и др.' '\nпо информатике - Информатик БУ, Школково и др.' '\nпо физике - ЕГЭ/ОГЭ Физика, Павел ВИКТОР, Школково и др.' '\n\nТакже Вы можете посмотреть демоверсии ЕГЭ 2021 и перспективную модель на 2022 год:' ) await bot.send_message(callback_query.from_user.id, message_text, parse_mode=ParseMode.MARKDOWN, reply_markup=kb.egeintex)
def generate_basket_text(user_id): table = db_main.Table(db_config.tables.basket) data = table.select(["item_name", "item_code", "item_price", "item_count"], "user_id", user_id) table.close() text = "" sum = 0 for item in data: item_name, item_code, item_price, item_count = item[0], item[1], item[ 2], item[3] if item_count > 0: line_1 = markdown.bold("Товар #{item_code} - {item_name}".format( item_code=item_code, item_name=item_name)) line_2 = "Стоимость: {item_price} * {item_count} = {cost}".format( item_price=item_price, item_count=item_count, cost=item_price * item_count) text += line_1 + "\n" + line_2 + "\n" + "\n" sum += item_price * item_count text += "Общий чек: {sum} тенге".format(sum=sum) return text
async def NicknameChangingCallbackHandler(callback_query: CallbackQuery = None, state: FSMContext = None, isUpdate: bool = False): """Handler состояния для изменения никнейма""" if callback_query: await SettingsFSM.changingNickname.set() async with state.proxy() as data: data[ 'callback_query'] = callback_query # сохранение колбэка, так как следующим ивентом будет сообщение async with state.proxy() as data: callback_query = data['callback_query'] message = callback_query.message buttonsData = [["Обновить", "updateNickname"], ["←Назад", "back"]] buttons = buttonsList(buttonsData, rowWidth=2) reply_markup = inline_keyboard.InlineKeyboardMarkup( row_width=2, inline_keyboard=buttons) nickname = get_nick_by_id(callback_query.from_user.id) text = "Здравствуйте, " + markdown.bold(f"{nickname}!\n\n") + \ markdown.italic("Хотите изменить никнейм?\nОтправьте его мне (до 20-ти символов)") try: await bot.edit_message_text(text=text, reply_markup=reply_markup, parse_mode='MarkdownV2', chat_id=message.chat.id, message_id=message.message_id) if isUpdate: await callback_query.answer(text="Никнейм успешно обновлён.") except exceptions.MessageNotModified: await callback_query.answer(text="Не обманывай лисёнка 🥺")
async def process_gender(message: types.Message, state: FSMContext): async with state.proxy() as data: data['gender'] = message.text # Remove keyboard markup = types.ReplyKeyboardRemove() # And send message await bot.send_message( message.chat.id, md.text( md.text('Hi! Nice to meet you,', md.bold(data['name'])), md.text('Age:', md.code(data['age'])), md.text('Gender:', data['gender']), sep='\n', ), reply_markup=markup, parse_mode=ParseMode.MARKDOWN, ) #text=f'Name - {data["name"]}Age - {data["age"]}Gender - {data["gender"]}',reply_markup=markup, parse_mode=ParseMode.MARKDOWN, # Finish conversation await state.finish()
async def add_expense(message: types.Message): """ Adds an expense to the needed budget """ budget_id = budgets.get_budget_id("joint") users_list = budgets.get_all_users(budget_id) try: expense = expenses.add_expense(message.text, message.from_user.id, budget_id) except exceptions.NotCorrectMessage as e: await message.answer(str(e)) return answer_text = ( f"В бюждет \"joint\" " f"добавлена трата {expense.amount} руб. на {expense.category_name}.\n") for user in users_list: if user.id == message.from_user.id: continue else: await bot.send_message(user.id, (text( bold("В бюджет \"joint\" была добавлена трата\n\n") + f"Добавил: {message.from_user.username}\n" + f"Сумма: {expense.amount}\n" + f"Категория: {expense.category_name}\n")), parse_mode=ParseMode.MARKDOWN) await message.answer(answer_text)
async def photoReceivedCallingCallbackHandler(callback_query: CallbackQuery): message = callback_query.message userID = callback_query.from_user.id buttonsData = [["Демотиватор", "demotivator"], ["Случайный демотиватор", "randomDemotivator"], ["Распознавание QR-кода", "QRdecode"], ["Ничего", "nothing"], ["←Назад", "back"]] buttons = buttonsList(buttonsData, rowWidth=2) reply_markup = inline_keyboard.InlineKeyboardMarkup( row_width=2, inline_keyboard=buttons) currentOption = photoReceivedOptionConversion( getPhotoReceivedUserSettings(userID)) text = "Текущая опция — " + markdown.bold(f"{currentOption}") + "\n\n" \ "Что должно происходить при отправке фотографии по умолчанию?" await bot.edit_message_text(text=text, reply_markup=reply_markup, parse_mode='MarkdownV2', chat_id=message.chat.id, message_id=message.message_id)
async def process_help_command(message: types.Message): ''' Функция обработки команды /help :param message: сообщение от пользователя ''' markup=types.ReplyKeyboardRemove() # Посылаем пользователю список доступных команд await bot.send_message( message.chat.id, md.text( md.text("Cписок доступных команд:"), md.text(md.bold("\n/help"), " - вывод справочной информации"), md.text(md.bold("\n/start"), " - вывод справочной информации"), md.text(md.bold("\n/submit"), "- начать обработку запроса"), md.text(md.bold("\n/region"), "- с параметром - установить регион, без параметров - вывести текущий регион"), md.text(md.bold("\n/request"), "- с параметром - определить запрос, без параметров - вывести текущий запрос"), md.text(md.bold("\n/list"), "- вывести список всех запросов"), md.text(md.bold("\n/display"), "- с параметром - вывести результаты конкрентого запроса, без параметров - текущего запроса") ), reply_markup=markup, parse_mode=ParseMode.MARKDOWN, )
async def process_start_command(message: types.Message): ''' Функция обработки команды /list :param message: ''' params: str = message.get_args() # Если указан параметр, то выбираем все запросы из БД для этого пользователя markup = types.ReplyKeyboardRemove() # Читаем все запросы из БД get_all_requests(message) request_number: int = 1 if telbot.get(message.from_user.id): await bot.send_message(message.chat.id, md.text('Список всех запросов:')) # Анализируем статус запроса for request in telbot[message.from_user.id]: if request[3] == 0: status = 'Инициализирован' elif request[3] == 1: status = "В обработке" elif request[3] == 2: status = "Завершен" else: status = "Неопределен" # Выводим краткую информацию о запросе await bot.send_message(message.chat.id, md.text( md.text('Номер: ', md.bold(request_number)), md.text('Регион: ', md.bold(request[0])), md.text('Запрос: ', md.bold(request[1])), md.text('Количество вакансий: ', md.bold(request[2])), md.text('Статус: ', md.bold(status)), md.text('Создан: ', md.bold(request[4])), ), reply_markup=markup, parse_mode=ParseMode.MARKDOWN, ) request_number += 1 else: await bot.send_message(message.chat.id, md.text('Запросов не найдено'))
async def show_movie_info(query: CallbackQuery): """ Shows schedule for one day :param query: :return: """ _, _, movie_id = parse_callback(query) db = DBDriver() movie_info = db.get_movie_info(movie_id) ts = "" for el in movie_info.get("show_time"): ts = ts + "\U000025AA " + el.strftime("%H:%M, %d %b %Y (%a)") + "\n" s = text( bold(movie_info.get('name')), '\n', '\n', movie_info.get('description'), '\n', '\n', bold('Возрастная категория: '), movie_info.get('content_rating'), '\n', bold('Продолжительность:'), movie_info.get('duration'), '\n', bold('Год выпуска: '), movie_info.get('date_created'), '\n', bold('Жанр: '), movie_info.get('genre'), '\n', "[" + movie_info.get('name') + "](" + movie_info.get('image') + " caption)", "\n", bold("Время показов:"), "\n", ts) start_keyboard = InlineKeyboardMarkup() start_keyboard.add( InlineKeyboardButton(text='Календарь \U0001F4C5', callback_data=date_cb.new(action='show_calendar', date='0'))) start_keyboard.add( InlineKeyboardButton(text='Афиша \U0001F4E2', callback_data=date_cb.new(action='show_all', date='0'))) await bot.send_message(query.from_user.id, text=s, reply_markup=start_keyboard, parse_mode=ParseMode.MARKDOWN)
async def process_help_command(message: types.Message): msg = text(bold('Я могу ответить на следующие команды:'), '/photo - отправляет фотографию с котом (не спрашивайте зачем)', '/note - отправляет гифку с Эллиотом', '/info - дает сведение о боте', '/create - создает пост', '/history - ахуительная история', sep='\n') await message.reply(msg, parse_mode=ParseMode.MARKDOWN)