Как отправить картинку aiogram Telegram

Создайте объект InputFile , в котором хранится путь к файлу и воспользуйтесь методом send_photo() :

Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.

Работа с сообщениями¶

В этой главе мы разберёмся, как применять различные типы форматирования к сообщениям и работать с медиафайлами.

Текст¶

Обработка текстовых сообщений — это, пожалуй, одно из важнейших действий у большинства ботов. Текстом можно выразить практически что угодно и при этом подавать информацию хочется красиво. В распоряжении у разработчика имеется три способа разметки текста: HTML, Markdown и MarkdownV2. Наиболее продвинутыми из них считаются HTML и MarkdownV2, «классический» маркдаун оставлен для обеспечения обратной совместимости и поддерживает меньше возможностей.

За выбор форматирования при отправке сообщений отвечает аргумент parse_mode , например:

Учимся отправлять картинки

Hello world с разным форматированием

Если в боте повсеместно используется определённое форматирование, то каждый раз указывать аргумент parse_mode довольно накладно. К счастью, в aiogram можно передать необходимый тип прямо в объект Bot, а если в каком-то конкретном случае нужно обойтись без этих ваших разметок, то просто укажите parse_mode=»» (пустая строка):

Настройка типа разметки по умолчанию

Существует и более «программный» или даже «динамический» способ формирования сообщения. Для этого нужно импортировать модуль markdown из aiogram.utils, который, несмотря на название, поддерживает и HTML тоже. Далее вызовите функцию text() , в которую передайте произвольное число таких же вызовов функции text() . Тип форматирования определяется названием функции, а буква «h» в начале означает HTML, т.е. функция hbold() обрамляет переданный ей текст как жирный в HTML-разметке ( текст ). Аргумент sep определяет разделитель между кусками текста.
В общем, смотрите на код и скриншот ниже. Стоит ли использовать такой способ создания текста — решать вам:

Динамическое форматирование

Помимо отправки с форматированием, Aiogram позволяет извлекать входящий текст как простое содержимое (plain text), как HTML и как Markdown. Сравнить можно на скриншоте ниже. Это удобно использовать, например, если вы хотите вернуть отправителю его сообщение с небольшими изменениями:

Настройка типа разметки по умолчанию

Всё бы ничего, но с использованием форматирования есть проблема: не в меру хитрые пользователи могут использовать спец. символы в именах или сообщениях, ломая бота. Впрочем, в aiogram существуют методы экранирования таких символов: escape_md() и quote_html() . Либо можно использовать упомянутые выше методы (h)bold, (h)italic и прочие:

ПЕРЕСЛАТЬ ФОТО В КАНАЛ ► Python TelegramBot на AIOGram

Экранирование ввода

Подробнее о различных способах форматирования и поддерживаемых тегах можно узнать в документации Bot API.

Медиафайлы¶

Помимо обычных текстовых сообщений Telegram позволяет обмениваться медиафайлами различных типов: фото, видео, гифки, геолокации, стикеры и т.д. У большинства медиафайлов есть свойства file_id и file_unique_id . Первый можно использовать для повторной отправки одного и того же медиафайла много раз, причём отправка будет мгновенной, т.к. сам файл уже лежит на серверах Telegram. Это самый предпочтительный способ.
К примеру, следующий код заставит бота моментально ответить пользователю той же гифкой, что была прислана:

Еще по теме:  Тестирование Телеграм бота Telegram бота

file_id уникален для каждого бота, т.е. переиспользовать чужой идентификатор нельзя. Однако в Bot API есть ещё file_unique_id . Его нельзя использовать для повторной отправки или скачивания медиафайла, но зато он одинаковый у всех ботов. Нужен file_unique_id обычно тогда, когда нескольким ботам требуется знать, что их собственные file_id относятся к одному и тому же файлу.

Кстати, про скачивание: aiogram предлагает удобный вспомогательный метод download() для загрузки небольших файлов на сервер, где запущен бот:

Работа с изображениями

Обратите внимание на конструкцию message.photo[-1] . Когда пользователь присылает боту изображение, Telegram присылает не один объект, а целый массив с разными размерами одного и того же изображения, отсортированными по возрастанию. В общем случае нас будет интересовать изображение наибольшего размера, стоящее последним (индекс «минус один»).

Скачивание больших файлов

Боты, использующие Telegram Bot API, могут скачивать файлы размером не более 20 мегабайт. Если вы планируете скачивать/заливать большие файлы, лучше рассмотрите библиотеки, взаимодействующие с Telegram Client API, а не с Telegram Bot API, например, Telethon. Немногие знают, но Client API могут использовать не только обычные аккаунты, но ещё и боты.

А начиная с Bot API версии 5.0, можно использовать собственный сервер Bot API для работы с большими файлами.

Бонус¶

Бывают ситуации, когда хочется отправить длинное сообщение с картинкой, но лимит на подписи к медиафайлам составляет всего 1024 символа против 4096 у обычного текстового, а вставлять внизу ссылку на медиа — выглядит некрасиво. Более того, когда Telegram делает предпросмотр ссылок, он берёт первую из них и считывает метатеги, в результате сообщение может отправиться не с тем превью, которое хочется увидеть.
Для решения этой проблемы ещё много лет назад придумали подход со «скрытыми ссылками» в HTML-разметке. Суть в том, что можно поместить ссылку в пробел нулевой ширины и вставить всю эту конструкцию в начало сообщения. Для наблюдателя в сообщении никаких ссылок нет, а сервер Telegram всё видит и честно добавляет предпросмотр.
Разработчики aiogram для этого даже сделали специальный вспомогательный метод hide_link() :

Изображение со скрытой ссылкой

На этом всё. До следующих глав!
Ставьте лайки, подписывайтесь, прожимайте колокольчик

sendPhoto#

class aiogram.methods.send_photo. SendPhoto ( * , chat_id : Union [ int , str ] , photo : Union [ InputFile , str ] , message_thread_id : Optional [ int ] = None , caption : Optional [ str ] = None , parse_mode : Optional [ str ] = sentinel.UNSET_PARSE_MODE , caption_entities : Optional [ List [ MessageEntity ] ] = None , has_spoiler : Optional [ bool ] = None , disable_notification : Optional [ bool ] = None , protect_content : Optional [ bool ] = sentinel.UNSET_PROTECT_CONTENT , reply_to_message_id : Optional [ int ] = None , allow_sending_without_reply : Optional [ bool ] = None , reply_markup : Optional [ Union [ InlineKeyboardMarkup , ReplyKeyboardMarkup , ReplyKeyboardRemove , ForceReply ] ] = None , ** extra_data : Any ) [исходный код] #

Use this method to send photos. On success, the sent aiogram.types.message.Message is returned.

chat_id : Union [ int , str ] #

Photo to send. Pass a file_id as String to send a photo that exists on the Telegram servers (recommended), pass an HTTP URL as a String for Telegram to get a photo from the Internet, or upload a new photo using multipart/form-data. The photo must be at most 10 MB in size. The photo’s width and height must not exceed 10000 in total. Width and height ratio must be at most 20. More information on Sending Files »

message_thread_id : Optional [ int ] #

Unique identifier for the target message thread (topic) of the forum; for forum supergroups only

Еще по теме:  Курс Телеграмм как бизнес

caption : Optional [ str ] #

Photo caption (may also be used when resending photos by file_id), 0-1024 characters after entities parsing

parse_mode : Optional [ str ] #

Mode for parsing entities in the photo caption. See formatting options for more details.

caption_entities : Optional [ List [ MessageEntity ] ] #

A JSON-serialized list of special entities that appear in the caption, which can be specified instead of parse_mode

has_spoiler : Optional [ bool ] #

Pass True if the photo needs to be covered with a spoiler animation

disable_notification : Optional [ bool ] #

Sends the message silently. Users will receive a notification with no sound.

protect_content : Optional [ bool ] #

Protects the contents of the sent message from forwarding and saving

reply_to_message_id : Optional [ int ] #

If the message is a reply, ID of the original message

allow_sending_without_reply : Optional [ bool ] #

Pass True if the message should be sent even if the specified replied-to message is not found

Additional interface options. A JSON-serialized object for an inline keyboard, custom reply keyboard, instructions to remove reply keyboard or to force a reply from the user.

Как отправить фото aiogram

Всё ещё ищете ответ? Посмотрите другие вопросы с метками python telegram bot aiogram или задайте свой вопрос.

Знакомство с aiogram¶

Команда /test2 не работает

Давайте запустим с ним бота:

Обе команды работают

Снова запустим бота:

Разница между message.answer() и message.reply()

Разница между message.answer() и message.reply()

How to upload file?#

As says official Telegram Bot API documentation there are three ways to send files (photos, stickers, audio, media, etc.):

If the file is already stored somewhere on the Telegram servers or file is available by the URL, you don’t need to reupload it.

But if you need to upload new file just use subclasses of InputFile.

Here is available three different builtin types of input file:

Be respectful with Telegram

Instances of InputFile is reusable. That’s mean you can create instance of InputFile and sent this file multiple times but Telegram is not recommend to do that and when you upload file once just save their file_id and use it in next times.

Upload from file system#

By first step you will need to import InputFile wrapper:

Then you can use it:

Upload from buffer#

Files can be also passed from buffer (For example you generate image using Pillow and the want’s to sent it to the Telegram):

And then you can use it:

Create buffer from file

path – Path to file

filename – Filename to be propagated to telegram. By default will be parsed from path

Похожие публикации:

  1. Как избавиться от иррациональности в знаменателе
  2. Как изменить диаграмму в powerpoint
  3. Как поменять формат даты в sql
  4. Какие команды сможет выполнить исполнитель водолей

Источник: gshimki.ru

Как в aiogram3 отправить фото

Пишу бота на aiogram3, столкнулся с такой проблемой — бот не отправляет фото. Читал документацию и написал так же, но безуспешно. Этот код работает только с ссылкой на фото из интернета, а фото из папки не отправляет, писал разный путь до фото, но ошибка всегда одна и та же.

from aiogram import Bot from aiogram.types import Message, FSInputFile photo = FSInputFile(«photo_2020-09-03_03-42-41.jpg») async def menu(message: Message): await message.answer_photo(photo=photo, caption=»hi»)

Выдаёт следующую ошибку

aiogram.exceptions.TelegramNetworkError: ClientOSError: [Errno 2] Can not write request body for https://api.telegram.org/bot/sendPhoto

Еще по теме:  Если ты владелец группы в Телеграме и выходишь из нее группа удаляется или нет

Ответы (2 шт):

Попробуйте заменить photo = FSInputFile(«photo_2020-09-03_03-42-41.jpg») на photo = open(‘photo_2020-09-03_03-42-41.jpg’, ‘rb’) Я не уверен что это поможет, но с PyTelegramBotApi я делаю только так.

photo = InputFile(«files/test.png») await bot.send_photo(chat_id=message.chat.id, photo=photo)

ИЛИ вы можете отправлять фото по file_id

просто отправьте боту фото и вы получите file_id фото

async def photo_handler(msg: types.Message): await msg.answer_photo(FILE_ID)

Источник: husl.ru

Как на Aiogram отправлять фотографию?

Aiogram (https://docs.aiogram.dev) – это библиотека для создания ботов в Telegram. Она предоставляет множество возможностей, которые помогают разработчикам создавать ботов быстро и эффективно.

Одной из таких возможностей является отправка фотографий в чат. В этой статье мы расскажем, как сделать эту операцию с помощью Aiogram.

Первый шаг – установить библиотеку

Библиотека Aiogram может быть установлена с использованием pip. Просто введите следующую команду:

pip install aiogram

Если вы хотите использовать виртуальную среду, то сначала запустите ее, а затем установите Aiogram.

python -m venv myvenv source myenv/bin/activate # Для Linux и macOS myenvScriptsactivate # Для Windows pip install aiogram

Шаг №2 – создать бота

Для того, чтобы отправить фотографию, вам необходимо создать бота в Telegram. Это можно сделать с помощью BotFather, официального бота от команды Telegram для создания ботов.

Зайдите к нему в Telegram и напишите /start. Затем напишите ему /newbot и следуйте инструкциям.

После того, как вы создали бота, скопируйте его токен. Он будет использоваться, чтобы связать вашего бота с Aiogram.

Шаг №3 – подготовить код

Создайте новый файл в вашем проекте и импортируйте Aiogram.

import logging from aiogram import Bot, Dispatcher, types from aiogram.types import ParseMode from aiogram.utils import executor

Затем создайте экземпляр бота, используя токен, который вы получили от BotFather.

bot = Bot(token=»YOUR_TOKEN_HERE»)

Затем создайте экземпляр диспетчера. Диспетчер – это объект, который служит для обработки команд и сообщений. Он также используется для регистрации обработчиков событий.

dp = Dispatcher(bot)

Добавьте обработчик команды /start. Этот обработчик будет вызываться, когда пользователь напишет /start в чате.

Добавьте обработчик для отправки фотографии. Этот обработчик будет вызываться, когда пользователь напишет /photo в чате.

Здесь мы используем ключевое слово with open, чтобы открыть файл photo.jpg, который находится в том же каталоге, что и наш скрипт.

Затем мы используем метод send_photo, чтобы отправить фотографию в чат. chat_id – это идентификатор чата, в который мы хотим отправить фото. photo – это объект файлов, содержащий фотографию, которую мы хотим отправить. caption – это подпись, которая будет отправлена вместе с фотографией.

Шаг №4 – запустить код

Итак, мы создали бота, добавили обработчики команд и сообщений, и готовы его запустить. Введите следующую команду:

executor.start_polling(dp, skip_updates=True)

Эта команда запускает бота и начинает прослушивание сообщений. skip_updates=True означает, что мы пропускаем все обновления, которые мы уже обработали, поскольку мы не хотим получать старые сообщения каждый раз, когда запускаем бота.

Отправка фотографии в Telegram с помощью Aiogram смогла быть освещена в этой статье на примере самой библиотеки. Вы можете опробовать разные варианты кода и возможности для отправки сообщений командами вашим друзьям или коллегам. Вы также можете использовать библиотеку для создания других функций для вашего бота, но в этом случае обязательно ознакомьтесь с документацией Aiogram.

Похожие записи:

Источник: qaa-engineer.ru

Рейтинг
( Пока оценок нет )
Загрузка ...