def get_help_album(caption: str): help_album = MediaGroup() for img_id in EXAMPLE_IMGS: help_album.attach_photo(img_id, caption=caption) caption = "" return help_album
async def send_right_answers(message: Message, question: dict): response = requests.get("{}/questions/{}/answers".format( config.host, question["id"]), params={"where:status": "R"}) if response.status_code != 200: await message.reply(md.bold( emojize( "К сожалению я пока не знаю ответа на этот вопрос :confused:") ), reply=False, parse_mode=ParseMode.MARKDOWN) else: media_group_content, right_answers_text, ps_message = list(), list( ), "" title_text, title_photos = (await update_image_sources( question["title"], False)).values() media_group_content.extend(title_photos) answers = response.json()["data"][0]["variants"] for answer in answers: answer_text, answer_photos = (await update_image_sources( answer[-1], False, len(media_group_content))).values() right_answers_text.append( md.bold(emojize(":white_check_mark:"), answer_text)) media_group_content.extend(answer_photos) if media_group_content: ps_message = md.text( "\n", md.bold("P.S."), " Текст может не отображать полной информации из картинок,", " поэтому ниже я отправил изображения из теста.", sep="") await message.reply(md.text(md.text( emojize(":nerd_face: Я нашел ответ на вопрос:")), md.italic(title_text), *right_answers_text, ps_message, sep="\n"), reply=False, parse_mode=ParseMode.MARKDOWN, disable_web_page_preview=True) if media_group_content: media_group = MediaGroup() photos_map = map(lambda mgc: mgc[1], media_group_content) names_map = map(lambda mgc: mgc[0], media_group_content) media_group.attach_many(*photos_map) media_group_messages = await message.reply_media_group(media_group, reply=False) for photo_name, photo_message in zip(names_map, media_group_messages): if (await file_id_storage.get_file_id(photo_name)) is None: await file_id_storage.set_file_id( photo_name, photo_message.photo[-1].file_id)
async def config_crop_range(msg: Message, state: FSMContext): user = msg.from_user crop_range_str = msg.text if not crop_range_str.replace( " ", "").isdecimal() or len(crop_range_str.split(" ")) != 3: await msg.answer( "Вводить диапазон нужно тремя целыми числами, через пробел 🥴\n" "<i>Пример ввода: 300 470 1150</i>") return elif len(crop_range_str) > 25: await msg.answer( "Какие-то очень большие размеры для обрезания картинки 🥴\n" "На самой первой тестовой картинке отмечены границы высоты зелённой линией." ) crop_range = [int(num) for num in crop_range_str.split(" ")] crop_range.sort() photo_id: str = await redis_commands.get_photo_id(user.id) await msg.bot.send_chat_action(user.id, "upload_photo") img_file = BytesIO() photo = await msg.bot.get_file(photo_id) await photo.download(destination=img_file) word_img, transl_img = await get_separated_imgs(img_file, *crop_range) if not word_img: await msg.answer( "Ты задал(-а) дипазон, который выходит за пределы размера картинки 🥴\n" "На картинке с зелённой линией показаны допустимые для тебя значения высоты." ) return separated_imgs_album = MediaGroup() separated_imgs_album.attach_many(InputMediaPhoto(word_img), InputMediaPhoto(transl_img)) await state.update_data(crop_range=crop_range) await msg.answer_media_group(separated_imgs_album) await msg.answer( "Если фотографии обрезалась не корректно, то введи " "диапозон высот ещё раз.", reply_markup=keyboards.default.create_set_menu) logging.info(f"@{user.username}-{user.id} read crop_range {crop_range}")
async def state_search(message: types.Message): albom = MediaGroup() text = "" name = str(message.text.lower()) name_kino = await db.select_kino("kinos", name) if not name_kino: await message.answer("Такого названия нет либо остановите поиск\n/stop" ) for i in name_kino: text += f"<a href='{i[1]}'>{i[0]}</a>\n" albom.attach_photo(f"{i[2]}", caption=f"{i[0]} - {i[1]}") await message.answer_media_group(media=albom) await bot.send_message(chat_id=message.chat.id, text=text, parse_mode="HTML", disable_web_page_preview=True)
async def show_item(callback: types.CallbackQuery, category, item_id): # Get keyboard markup = item_keyboard(category, item_id) album = MediaGroup() # Delete list of items message await callback.message.delete() # Take a record about our item from the database item: Item = await get_item(item_id) photos = item.photos for photo in photos: album.attach_photo(photo) await callback.message.answer_media_group(media=album) await callback.message.answer(text=f'{item.name}', reply_markup=markup)
async def show_item_command(message: types.Message): category: str = items_command[message.text]['category'] item_id: int = items_command[message.text]['item_id'] # Get keyboard markup = item_keyboard(category, item_id) album = MediaGroup() # Take a record about our item from the database item: Item = await get_item(item_id) photos = item.photos for photo in photos: album.attach_photo(photo) await message.answer_media_group(media=album) await message.answer(text=f'{item.name}\nЦена: {item.price} руб.', reply_markup=markup)
async def more_attractions(message: Message): albums = MediaGroup() url1 = "https://gos.ifrigate.ru/wp-content/uploads/main2.jpg" url2 = "http://hotel7nebo.ru/images/page/43.jpg" url3 = "https://img.geliophoto.com/rostov/12_rostov.jpg" url4 = "https://www.yuga.ru/media/0e/29/pr_budennovskogo_rostov-na-donu_ponomar__iic6nxi.jpg" albums.attach_photo(url1) albums.attach_photo(url2) albums.attach_photo(url3) albums.attach_photo(url4) await message.answer_media_group(media=albums)
async def images(size): media = MediaGroup() for i, image in enumerate(self.message_obj.media): if i < 10: media.attach_photo(f'{image[0]}{size}', image[1]) return media