Как отправить картинку пользователю с помощью бота в вк [закрыт]
Вопросы с просьбами помочь с отладкой («почему этот код не работает?») должны включать желаемое поведение, конкретную проблему или ошибку и минимальный код для её воспроизведения прямо в вопросе. Вопросы без явного описания проблемы бесполезны для остальных посетителей. См. Как создать минимальный, самодостаточный и воспроизводимый пример.
Закрыт 4 года назад .
Язык Python, библиотека vk_api.
Проверял множество способов которые нашел в интернете, но ничего не работает.
Мне нужно когда пользоветель отправляет боту команду /tabl , бот отсылал картинку. Проблема в том, что я немогу отсылать картинку.
Помогите кто знает.
Отслеживать
user262779
задан 23 авг 2019 в 14:28
375 2 2 серебряных знака 16 16 бронзовых знаков
«Проверял множество способов», — какие именно? Обычно используется класс VkUpload и его метод photo_messages после чего полученный access_token прикладывается attachment ‘ом типа photo к сообщению.
23 авг 2019 в 14:44
Если можеш пример использования напиши пожалуйста
23 авг 2019 в 14:58
У меня получилось получить access_key, а как его в отправить?
24 авг 2019 в 8:52
1 ответ 1
Сортировка: Сброс на вариант по умолчанию
Для загрузки фотографии на сервер ВК используется класс VkUpload и его метод photo_messages .
Данный метод вернёт нам ответ, из которого нам необходимо извлечь owner_id , id и access_key . Данные значения нам нужны для формирования attachment ‘а к сообщению.
attachment имеет следующий вид: f’__’ .
Иногда access_key можно опустить, но для отправки в сообщениях он нужен.
Формируем его с типом photo и значениями, полученными выше.
Чтобы приложить его к сообщению, используется поле с тем же названием — attachment .
Пример:
from vk_api import VkApi from vk_api.upload import VkUpload from vk_api.utils import get_random_id TOKEN = '. ' PEER_ID = . def upload_photo(upload, photo): response = upload.photo_messages(photo)[0] owner_id = response['owner_id'] photo_id = response['id'] access_key = response['access_key'] return owner_id, photo_id, access_key def send_photo(vk, peer_id, owner_id, photo_id, access_key): attachment = f'photo__' vk.messages.send( random_id=get_random_id(), peer_id=peer_id, attachment=attachment ) def main(): vk_session = VkApi(token=TOKEN) vk = vk_session.get_api() upload = VkUpload(vk) send_photo(vk, PEER_ID, *upload_photo(upload, 'photo.jpg')) if __name__ == '__main__': main()
Данный код отправит в беседу (или ЛС) c peer_id равным PEER_ID изображение photo.jpg
Не забудьте заменить в начале кода переменные TOKEN ( access_token ) и PEER_ID на соответствующие им свои значения.
UPD:
Для отправки фото по URL его все равно придётся загрузить (хотя бы в ОЗУ).
Для этого можно воспользоваться модулями requests и io .
Пример:
from vk_api import VkApi from vk_api.upload import VkUpload from vk_api.utils import get_random_id import requests from io import BytesIO TOKEN = '. ' PEER_ID = . URL = '. ' def upload_photo(upload, url): img = requests.get(url).content f = BytesIO(img) response = upload.photo_messages(f)[0] owner_id = response['owner_id'] photo_id = response['id'] access_key = response['access_key'] return owner_id, photo_id, access_key def send_photo(vk, peer_id, owner_id, photo_id, access_key): attachment = f'photo__' vk.messages.send( random_id=get_random_id(), peer_id=peer_id, attachment=attachment ) def main(): vk_session = VkApi(token=TOKEN) vk = vk_session.get_api() upload = VkUpload(vk) send_photo(vk, PEER_ID, *upload_photo(upload, URL)) if __name__ == '__main__': main()
Фото — как добавить, отправить, переслать?
Сегодня трудно представить переписку в мессенджерах без потока медиафайлов и документов, но самым востребованным контентом остаются изображения. Поэтому, сделав отличный снимок или обнаружив интересную картинку, пользователь сталкивается с проблемой, как отправить фото в Телеграмм.
Как загрузить/приложить фото?
Не всем известно, что Телеграмм сжимает фото, но это происходит не со всеми картинками и не всегда. Распространенные форматы – jpg (jpeg), png и gif – можно отправить как в сжатом виде, так и в исходном. Остальные виды фото (такие как raw или psd) Телеграмм отправляет не сжимая.
Чтобы вставить фото в чат Телеграмм с помощью смартфона на Android , потребуется:
- Открыть чат и тапнуть пиктограмму в виде скрепки возле поля для сообщений;
- Для того, чтобы быстро отправить снимок из галереи – надо выбрать фото (можно как одно, так и несколько) и нажать по значку самолетика . В этом случае изображение будет сжато, а если снимков несколько – все они будут отправлены отдельными сообщениями;
- Чтобы отправить несколько снимков в альбоме – надо выбрать кнопку «Галерея» , затем альбом (если снимки в телефоне разделены по альбомам). Поставив галочки на нужных изображениях, пользователю потребуется тапнуть по пиктограмме в виде двух квадратов. Квадраты должны поменять цвет с белого на синий — это значит, что картинки будут отправлены в альбоме;
- Для того, чтобы отправить снимок в исходном размере – надо выбрать пункт «Файл» , в открывшемся списке найти и открыть нужную папку. По короткому нажатию отправиться одно выбранное изображение. Зажав палец на файле, можно начать выделять несколько файлов для отправки.
Для устройств, работающих на iOS , отправить фото через Телеграмм можно по схожему принципу:
- Открыть чат и нажать значок скрепки ;
- Выбрать пункт «Choose Photo» — для отправки сжатого фото из галереи, «File» — для отправки снимка в исходном размере, «Find images» — для поиска картинки в файловом менеджере.

Для ПК (Windows) алгоритм отправки изображения имеет следующий вид:
- Открыть чат кликнуть мышкой по значку скрепки ;

- Чтобы выбрать, сжимать или нет фото для отправки: надо в открывшемся окне выбрать «All Files» и 1(!) файл . Затем кликнуть по кнопке «Открыть», выбрать «Send as a photo», чтобы сжать снимок, или «Send as a file», чтобы отправить исходник;


- Чтобы быстро отправить сжатую картинку – выбрать тип «Image files» , выделить картинку (можно как одну, так и несколько), а затем кликнуть по кнопке «Открыть».

При отправке с ПК пользователь не имеет возможности собирать изображения в альбомы.
Как сохранить фото из Телеграмм в галерее?
Большие медиафайлы, отправленные в исходном размере, мессенджер автоматически не скачивает, а загрузка небольших и сжатых изображений зависит от настройки приложения Телеграмм. Если в настройках ползунок «Автозагрузка медиа» зафиксирован во включенном положении, то сжатые медиафайлы будут автоматически загружаться в кэш (внутреннюю память) устройства.
Но, для того чтобы изображение можно было увидеть в галерее, пользователю потребуется совершить несколько действий в приложении Телеграмм:
- Для устройств на Android . Открыть чат, если на изображении нарисована стрелочка – надо кликнуть на нее и дождаться загрузки. Затем надо тапнуть на три вертикальные точки возле изображения, и в открывшемся меню выбрать такой пункт, как «Сохранить в галерею»;

- Для устройств на iOS . Открыть беседу, нажать на стрелочку, если она нарисована. Затем тапнуть по изображению, чтобы оно открылось на весь экран. Затем нажать на значок сохранения в левом нижнем углу и выбрать «Save to Camera Roll»;

- Для ПК (Windows) . Открыть чат, если на изображении нарисована стрелочка – надо кликнуть на нее и дождаться загрузки. Затем надо кликнуть правой клавишей мыши по изображению — откроется меню, в котором надо выбрать «Сохранить как» и выбрать нужную папку.



Где Телеграмм хранит фото?
Отправленные картинки Телеграмм хранит на сервере – это значит, что можно авторизоваться устройстве (как смартфоне, так и ПК) и увидеть все файлы, которые пользователь получал или отправлял. Исключение составляют:
- контент из секретных чатов;
- сообщения, удаленные отправителем у себя и у получателя (такое возможно только в течение 48 часов после отправки).
Если фото были сохранены пользователем, найти их можно в галерее, загрузках или папке, которую пользователь выбирал вручную.
Инструкция: Как сделать собственные стикеры в Telegram
Долгое время смайлы из двоеточий и скобок отвечали за эмоции, которые человек хотел выразить в записи в блоге или в переписке. Недавно широкое распространение получили эмодзи — японские пиктограммы, заменяющие порой слова или целые предложения. Сейчас, в связи с ростом популярности различных мессенджеров, растет и популярность стикеров. Стикеры — это нечто среднее между смайлом и картинкой, взятой из интернета.

Стикеры (с английского можно перевести как «наклейки») в целом играют ту же роль, что смайлы и эмодзи, выражающие действия или чувства. На стикерах часто изображают героев фильмов и мультфильмов, а также исторических фигур, публичных личностей и интернет-мемы с самыми разными персонажами в главной роли.
Еще стикеры хороши тем, что к их созданию могут приложить руку не только дизайнеры и иллюстраторы, но и обычные пользователи. Возможность создания и обмена самодельными стикерами предоставляет мессенджер Telegram, созданный командой основателя «ВКонтакте» Павла Дурова.
Итак, если в голове давно родилась идея для набора «наклеек», то с помощью представленной ниже инструкции ее можно воплотить в жизнь.
Бот поможет
Если уже есть заготовки к картинкам и установлен Telegram (не мобильная, а десктопная версия), нужно написать любое сообщение специальному боту — @Stickers. В ответ он предложит следующий набор команд:
/newpack — создать новый набор стикеров/addsticker — добавить стикер в набор/delsticker — удалить стикер из набора/ordersticker — переставить местами/cancel — отменить предыдущее действие
Выбираем первую команду и отправляем ее боту. Далее он предложит выбрать имя для нового пакета стикеров (просто введите название в строке чата и нажмите клавишу ввода), а следом прислать эмодзи, которое будет соответствовать первому стикеру.
Стоит отметить, что бот устанавливает ограничения на разрешение загружаемых картинок: их ширина должна составлять ровно 512 пикселей, а высота — не превышать этого же значения. Максимальный вес картинки может быть не более 350 килобайт. Изображение для будущего стикера нужно прикрепить через меню File, которое появляется при нажатии на изображение скрепки.
Не стоит переживать, если сразу не будет получаться — на каждом этапе создания стикера бот подскажет, как нужно действовать.

Когда первый стикер будет готов, необходимо выбрать эмодзи для второго стикера и снова загрузить нужную картинку. Повторять эти шаги придется, пока все «наклейки» не будут готовы.
Для того чтобы опубликовать новый набор, отправьте команду /publish. В ответ бот предложит придумать короткое название (с ним могут возникнуть проблемы) ссылки, которую в дальнейшем можно будет отправлять друзьям или публиковать в соцсетях. Разумеется, она будет вести на авторский пакет стикеров.

Как сделать красивую картинку
Создать сам набор стикеров не так сложно, однако у начинающих пользователей могут возникнуть трудности при обработке самих изображений в фоторедакторе. Для простых действий можно использовать Paint. Правда, понадобится сноровка, так как произвольное выделение делается «от руки» — задать значение 512 пикселей по горизонтали (и по вертикали тоже) не получится.
Если удалось вырезать изображение ровно, то затем его следует скопировать на новый документ (скопировать выделенной изображение — Ctrl+C — «Создать» — вставить скопированное изображение — Ctrl+V). Не стоит забывать, что итоговый размер картинки должен составлять 512 пикселей по ширине. Высота может быть меньше.
Если есть доступ к редактору Photoshop, то для вырезания стикеров лучше воспользоваться им. Алгоритм лишь немного сложнее, но на выходе получится аккуратная картинка с нужными параметрами.
Итак, открываем картинку и берем инструмент «Перо» или Pen Tool (скриншот №1, выделен красным). Начинаем выделять изображения, устанавливая точки по контуру. В конце соединяем последнюю точку с первой. Кстати, чем больше точек будет установлено по контуру, тем плавнее будет выглядеть обтравка.

Далее на панели параметров находим вкладку «Контуры» или Paths (скриншот №2, выделен красным), нажимаем правой кнопкой на «Рабочий контур» и на всплывающем меню выбираем «Образовать выделенную область».

После нужно выбрать радиус растушевки. Оптимально — 1-2 пикселя. Галочка «Сглаживание» пусть тоже стоит. «Ок».

После этого можно копировать выделенное изображение (Ctrl+C или в панели «Меню» открыть «Редактирование», потом нажать «Скопировать»), чтобы перенести его на новый холст нужного размера.
Чтобы открыть новый холст, в верхнем меню открываем вкладку «Файл» и выбираем «Новый» (Ctrl+N). В полях «Ширина» и «Высота» задаем 512 пикселей. «Содержимое фона» — «Прозрачный». Жмем «Ок».

Когда откроется новый файл, вставляем из буфера обмена вырезанное изображение. Это можно сделать сочетанием клавиш Ctrl+V либо «Редактирование» — «Вклеить». После этого картинку можно сохранять: «Файл» — «Сохранить для Web» или Alt+Shift+Ctrl+S. Напомним, картинка должна быть в формате .png — его можно установить в настройках в открывшемся окне. Там же можно «поиграться» с уровнем качества, от которого напрямую зависит размер.

Стикеры, которые получились у РГ Digital, доступны по ссылке.
Saved searches
Use saved searches to filter your results more quickly
Cancel Create saved search
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session.
seniv / vk-tg-bot Public
A Telegram bot that sends messages from vk.com to you in Telegram and vice versa
seniv/vk-tg-bot
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Switch branches/tags
Branches Tags
Could not load branches
Nothing to show
Could not load tags
Nothing to show
Name already in use
A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Cancel Create
- Local
- Codespaces
HTTPS GitHub CLI
Use Git or checkout with SVN using the web URL.
Work fast with our official CLI. Learn more about the CLI.
Sign In Required
Please sign in to use Codespaces.
Launching GitHub Desktop
If nothing happens, download GitHub Desktop and try again.
Launching GitHub Desktop
If nothing happens, download GitHub Desktop and try again.
Launching Xcode
If nothing happens, download Xcode and try again.
Launching Visual Studio Code
Your codespace will open once ready.
There was a problem preparing your codespace, please try again.
Latest commit
Git stats
Files
Failed to load latest commit information.
Latest commit message
Commit time
README.md
Что это, и зачем оно нужно
Это бот, который:
- Отправляет вам все ваши входящие сообщения из vk.com.
- Даёт вам возможность ответить любому пользователю.
- Позволяет посмотреть список друзей, а так же посмотреть онлайн ли сейчас конкретный человек.
Нужно это если вы уже давно выбрали Telegram как свой основной мессенджер, но у вас еще остались пара друзей/знакомых которые пишут вам в VK, или же вы просто с Украины (как я), и у вас нет доступа к Вконтакте без всяких неудобных VPN, а вам нужно что-то написать, или просто ответить.
- Для работы бота, у вас должен быть установлен NodeJS версии не ниже 10, скачать который можно по ссылке: https://nodejs.org/en/
- На системе в которой запускается бот, должен быть доступ к VK. Если запускаете с ПК, а VK заблокирован — используйте VPN
Для начала вам нужен сам бот в телеграме, а точнее бота. Надеюсь вы уже знаете где и как его получить. Если нет — вам сюда
Если у вас есть бота, тогда идите в ВК, и возьмите access_token с правами «offline,messages,video,photos,docs». Не знаете как?
Это очень просто, вам нужно сделать 3 простых шага:
- Создать Standalone-приложение, сделать это можно перейдя сюда
- Скопировать ID приложения из настроек приложения
- Перейти по ссылке ниже, заменив «*ID*» на ваш ID приложения и скопировать access_token из адресной строки после авторизации
https://oauth.vk.com/authorize?client_id=*ID*&display=page&redirect_uri=https://oauth.vk.com/blank.html&response_type=token&v=5.65&scope=offline,messages,video,photos,docs
У вас есть 2 токена? хорошо, скачивайте бота:
git clone https://github.com/seniv/vk-tg-bot.git
Войдите в папку с ботом:
cd vk-tg-bot
npm install
Почти готово! Далее откройте файл config.json, и измените 3 строчки конфигурации:
"vk_token": "ВАШ ВК ТОКЕН", "tg_token": "ВАШ ТОКЕН БОТА", "tg_user": 0, // *TelegramID пользователя*, Измените этот айди на свой
Получить TelegramID пользователя можно введя боту команду «/myid», запустив бота перед этим.
И всё, ваш бот готов к использованию. Запускаем:
npm start
Прошу заметить, бот не будет реагировать если ему напишет кто-то, у кого ID не такой как указан в конфигурации! (будет работать только команда /myid)
Запуск при помощи Docker
docker run -e VK_TOKEN='ВАШ ВК ТОКЕН' -e TG_TOKEN='ВАШ ТОКЕН БОТА' -e TG_USER=TelegramID пользователя 421p/vk-tg-bot
version: '3' services: bot: image: 421p/vk-tg-bot environment: VK_TOKEN: 'ВАШ ВК ТОКЕН' TG_TOKEN: 'ВАШ ТОКЕН БОТА' TG_USER: 0 // id
Для начала можете отправить боту команду «/start», чтобы бот создал клавиатуру с основными командами, но это не обязательно.
Команды, которые понимает бот:
- Вышеупомянутый «/start»
- «/friends» — Посмотреть список друзей. Ответ вы получите в виде «Имя Фамилия (*команда для быстрой смены получателя*) *онлайн-статус друга*»
- «/online» — Посмотреть онлайн-статус текущего получателя
- «/friendson» — Список друзей которые сейчас онлайн
- «/history» — Посмотреть историю сообщений с текущим выбраным пользователем
Для того чтобы написать что-то кому-то из ВК, сначала вам нужно выбрать получателя. Выбрать получателя очень просто — напишите боту слэш(/), а после него — ID получателя (ID пользователя VK).
Должно получится что то в этом роде: (в примере использован мой айди)
/98117105
После чего бот сообщит вам что получатель изменён, и напишет имя и фамилию нового получателя, а вы сможете отправлять сообщения этому человеку просто написав боту.
Вы можете отправить боту фото, стикер или голосовое сообщение, он загрузит его в ВК и отправит получателю. Стикер из телеграма будет отправлен как картинка.
Так же бот разбирает основные вложения (фотографии, видео, записи на стене, стикеры, голосовые сообщения, любые документы), остальные вложения бот не будет разбирать, и просто отправит вам тип вложения (gift, audio и т.д.). Стикеры из ВК будут отправлены как картинка
В файле config.json вы можете изменить клавиатуру, которая будет создана после ввода команды «/start», или после смены получателя. В ней вы можете добавить несколько людей которым вы часто пишите, или же просто какую-то часто использованную фразу. После добавления команды для смены пользователя должно получится примерно так:
"keyboard": [ ["/98117105 - Ivan"], ["/online", "/friends"], ["/friendson", "/history"] ]
Знаю что бот написан не идеально, но это работает!
Бота я больше не поддерживаю, т.к. больше не пользуюсь ВК вообще.
Но если у вас есть навыки програмирования и желание сделать что-то хорошее — можете присылать Pull-реквесты, их я буду просматривать и принимать, если они будут полезными.
Так-что вы все ещё можете сообщать о проблемах, возможно кто-то из других разработчиков их исправит. Возможно даже я
Если решите что-то исправить/добавить — вот вам нескольно полезных ссылок которые помогут быстро разобратся с кодом и библиотеками которые сдесь используются:
- VK-IO: либа для VK API: https://github.com/negezor/vk-io
- Telegraf: Фрэймворк для телеграм ботов: https://telegraf.js.org/#/
- Доки Telegram Bots API: https://core.telegram.org/bots/api
- Доки VK API: https://vk.com/dev
About
A Telegram bot that sends messages from vk.com to you in Telegram and vice versa