Перейти к содержимому

Как сделать чтобы бот отправлял картинку python telegram

  • автор:

Как передать картинку через бота телеграмм на python?

Можно показать реальный пример использования send_photo?

  • Вопрос задан более трёх лет назад
  • 26007 просмотров

Комментировать

Решения вопроса 1

img = open('Photo.PNG', 'rb') bot.send_photo(message.chat.id, img)

Ответ написан более трёх лет назад

Нравится 3 3 комментария

Если помогло, отметь решением. Спасибо.

а какую библиотеку скачать надо ?

The_King_Midas @The_King_Midas

xxxfdd, pytelegrambotapi

Ответы на вопрос 1

witness_krampuzz @witness_krampuzz

А как можно сделать так чтобы бот кидал фото/видео по url?
Лучше если даже как то из самой телеги

Ответ написан более года назад

Нужно получить file_id, а потом переслать его куда нужно.

Ваш ответ на вопрос

Войдите, чтобы написать ответ

python

  • Python
  • +1 ещё

Как отфильтровать текст Python?

  • 1 подписчик
  • 28 минут назад
  • 28 просмотров

Как отправить картинку telebot [закрыт]

Закрыт. Этот вопрос не по теме. Ответы на него в данный момент не принимаются.

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

Закрыт 1 год назад .

Скажите, как сделать так, чтобы при определенном сообщении юзера бот отправлял фото.

import telebot from telebot import types import time import math from urllib.request import urlopen print('Бот запущен') # Создаем экземпляр бота bot = telebot.TeleBot('5374997789:AAFiW1JFXT8A8m_xZJms5BRDPqxc8wvrLo4') # Функция, обрабатывающая команду /start @bot.message_handler(commands=["start"]) def start(message): mess = f'Привет, !Я формулознайка,наилучший бот- помощник в поиске формул по математике ��, выбери что ты хочешь:' markup = types.ReplyKeyboardMarkup(resize_keyboard = True, row_width=2) poisk = types.KeyboardButton('Начать поиск��:') admin = types.KeyboardButton('Связь с разработчиком') podderzchka = types.KeyboardButton('Поддержать разработку��') spisoksokr = types.KeyboardButton('Список сокращений:') bistriypoisk = types.KeyboardButton('Быстрый поиск��:') kalculator = types.KeyboardButton('Калькулятор кв. уравнений��') mess = f'Привет, !Я формулознайка,наилучший бот- помощник в поиске формул по математике ��, выбери что ты хочешь:' markup.add(poisk, admin, podderzchka, spisoksokr, bistriypoisk, kalculator) bot.send_message(message.chat.id, mess, parse_mode = 'html', reply_markup=markup) user_num1 = '' user_num2 = '' user_num3 = '' discr = '' korni = None @bot.message_handler(content_types=["text"]) def bot_message(message): mess2 = '''Треуг.(Тр.)➡️Треугольник\nКв.➡️Квадрат\nПрямоуг.➡️Прямоугольник(-ый)\nОкр.➡️Окружность(круг)\nВпис.➡️Вписанный\nОпис.➡️Описанный\nПрил.➡️Прилежащая\nРавноб.➡️Равнобедренный\nКат.➡️Катет\nГипот.➡️Гипотенуза\nСтор.➡️Стороны\nИзв.➡️Изввестный(-ая)\nH(h)➡️Высота в общей геометрии\nS(s)➡️Площадь в общей геометрии\nL➡️Сторона в общей геометрии\nM(m)➡️Медиана в общей геометрии\nПроизв.➡️Произвольный(ого)\nПолуп.➡️Полупериметр\nОсн.➡️Основние/основа\nЧ/з➡️Через\nР-но➡️Ровно\nРавтост.➡️Равносторонний''' mess1 = 'Поддержите разработку если считаете это нужным, это поможет проэкту существовать и развиваться�� Карта ПриватБанка: 5168 7559 0884 1170 Спасибо заранее!' mess3 = 'Связь с разработчиком: @MarcoPopa' mess4 = 'P.s после каждого ответа бота можете сразу продолжать искать другие формулы. Введи название формулы ниже��' mess5 = 'Введи ниже переменную а' mess6 = 'Введи переменную b' mess7 = 'Введи переменную с' if message.chat.type == 'private': if message.text == 'Поддержать разработку��': bot.send_message(message.chat.id, mess1) elif message.text =='Список сокращений:': bot.send_message(message.chat.id, mess2) elif message.text == 'Связь с разработчиком': bot.send_message(message.chat.id, mess3) elif message.text == 'Начать поиск��:': bot.send_message(message.chat.id, mess4) @bot.message_handler(func=lambda msg: msg.text == 'photo') def get_user_photo(message: types.Message): bot.send_photo(message.chat.id, "https://i.imgur.com/ofwPfHE.png") bot.polling(none_stop=True) 

Как создать бота для Telegram | Бот отправляющий изображения котов

Боты для телеграмма сейчас весьма популярны, давайте и мы научимся делать своих.

ЯП который мы будем использовать, как всегда Python. Напишем простого бота, который по заданной команде будет присылать нам котиков, а еще добавим кнопку, чтобы не вводить команды каждый раз. Вот рабочий пример (надеюсь к моменту твоего прочтения, я его еще буду хостить).
И итог того, что должно получиться:

Скриншот чата с ботом

Подготовка

Для начала мы будем исходить из того, что Python3 уже установлен и из командной строки прекрасно работает >_ python и >_ pip. Сидим мы из под Linux или Windows неважно.
Для работы с телеграмом будем использовать эту библиотеку, для установки необходима командная строка с правами администратора.
И ввод одной команды.

pip install python-telegram-bot —upgrade

pip install requests

Также нужно создать непоcредственно самого бота и получить токен, для этого нужно написать в самом телеграмме @BotFather’у /newbot и следовать инструкциям. В конце вы получите токен, который уже можно использовать.

Чат с BotFather

Не забудем и про добавление команды

Чат с BotFather

Пишем код

В принципе, многое уже и так есть в примерах в репозитории и заново ничего придумывать не надо, мы лишь изменим и дополним то, что уже есть.
И так поехали, берем из примеров простого бота echobot2, который уже умеет отвечать на все сообщения и знает команды /help /start. Отвечалку на все сообщения мы изменим, команды тоже немного поменяем и добавим свою /cat, которая собственно и будет постить котиков :3.
Для начала подставляем ранее полученный токен, необходимый для работы.

Код инициализации бота

Смотрим дальше и видим, что все обработчики в боте (команды, текст и тд) находятся в функции main и добавляются как dp.add_handler
Как вы можете заметить, событие использования команды в чате состоит из двух частей: текст команд и функции, которая вызывается при ее использовании.

По тому же принципу добавим свою команду строкой
dp.add_handler(CommandHandler(«cat», sendcat)), где cat — это команда , sendcat — вызываемая функция при получение данной команды.

Код инициализации бота

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

Код отправки сообщения в Telegram

Изменим отправляемый текст на сообщение об ошибке

Код отправки сообщения в Telegram

Также изменим отправляемый текст на /start и /help

Украшательства закончены. Приступим к котикам :).
Котики у нас будут состоять из двух функций. Первую вы уже видели в хендлере — sendcat, она будет отвечать за отправку, но встает вопрос, а что же нам собственно отправлять? Тут мы будем использовать вторую функцию getcat которая будет отвечает за предоставление ссылок на картинки с котиками, брать которые мы будет с сайта thecatapi. Его апи позволяет получать ссылки на случайные картинки с котами, чем мы и воспользуемся.
Подключаем библиотеку requests и пишим простенькую функцию выдающию ссылки на картинки с котиками. Потом просто вызываем ее в sendcat.

Получения ссылки python requests

Проверим что получилос. Запускаем наш скрипт, ищем в телеграмме бота по нику, который вы задали ему при создании и. Котики .

Скриншот чата с ботом

Уже неплохо, но что-то все равно не то. Мы отправляем котов не как картинки, а как ссылки, телеграм конечно их подгружает и показывает, но решение так себе. Исправим же это, открываем документацию по работе с апи телеграма для ботов и ищем метод отправки картинок.

Функция отправки изображения в Telegram

Возвращаемся обратно и в функции sendcat заменяем всю строку отправки сообщения на bot.sendPhoto(chat_id=update.message.chat_id, photo=getcat())

Функция отправки сообщения с картинкой

Скриншот чата с ботом

Почти все готово, осталось сделать кнопку в чате, чтобы не вписывать постоянно команду вручную.
Использовать мы будем Inline клавиатуру (прямо в чате которая), она состоит из двух функций: первая отвечает за отрисовку (markup), вторая за обработку нажатий (callback).
Снова идем в примеры, которые даются авторами библиотеки, вытаскиваем вот это и переделываем под себя.
Кое-что доподключаем:

Подключение библиотек inline keyboard

В итоге получается

Код клавиатуры inline в Telegram

Скриншот чата с ботом

Исходный код

import requests from telegram import InlineKeyboardButton, InlineKeyboardMarkup, ReplyKeyboardRemove, ReplyKeyboardMarkup, KeyboardButton from telegram.ext import Updater, CommandHandler, MessageHandler, Filters, CallbackQueryHandler import logging # Enable logging logging.basicConfig(format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', level=logging.INFO) logger = logging.getLogger(__name__) # Define a few command handlers. These usually take the two arguments bot and # update. Error handlers also receive the raised TelegramError object in error. def start(bot, update): """Приветствие""" update.message.reply_text('Привет, я бот, который очень любит котиков :3\nНапиши мне /cat и я поделюсь ими с тобой') def help(bot, update): """Сообщение для помощи с командами""" update.message.reply_text('Чтобы получить котика напиши /cat') def echo(bot, update): """На любой текст отвечаем ошибкой""" update.message.reply_text("Неизвестная команда :(") def error(bot, update, error): """Log Errors caused by Updates.""" logger.warning('Update "%s" caused error "%s"', update, error) def getcat(): '''Получение ссылки на картинку с котиком''' try: r = requests.get('http://thecatapi.com/api/images/get?format=src') url = r.url except: url = get_cat() print('Error with cat parsing') pass return url def sendcat(bot, update): """Отправка котиков""" bot.sendPhoto(chat_id=update.message.chat_id, photo=getcat(), reply_markup=draw_button()) def draw_button(): keys =[[InlineKeyboardButton('?Еще котика. ', callback_data='1')]] return InlineKeyboardMarkup(inline_keyboard=keys) def get_callback_from_button(bot, update): query = update.callback_query username = update.effective_user.username chat_id = query.message.chat.id message_id = query.message.message_id if int(query.data) == 1: bot.sendPhoto(photo=getcat(), chat_id=chat_id, message_id=message_id, reply_markup=draw_button()) def main(): """Start the bot.""" # Create the EventHandler and pass it your bot's token. updater = Updater("СЮДА ВАШ ТОКЕН") # Get the dispatcher to register handlers dp = updater.dispatcher dp.add_handler(CallbackQueryHandler(get_callback_from_button)) dp.add_handler(CommandHandler("start", start)) dp.add_handler(CommandHandler("help", help)) dp.add_handler(CommandHandler("cat", sendcat)) # on noncommand i.e message - echo the message on Telegram dp.add_handler(MessageHandler(Filters.text, echo)) # log all errors dp.add_error_handler(error) # Start the Bot updater.start_polling() # Run the bot until you press Ctrl-C or the process receives SIGINT, # SIGTERM or SIGABRT. This should be used most of the time, since # start_polling() is non-blocking and will stop the bot gracefully. updater.idle() if __name__ == '__main__': main()

F.A.Q

  • Q: Т.к бот каждый раз запрашивает картинку, а потом еще и загружает ее в мессенджер, уходит масса времени. Как ускорить выдачу ответов?
  • A: Решение — использовать сервера Telegram, как кеш. Сохраняйте при отправке фото их media_id (куда нибудь в бд), чтобы потом можно было быстренько его оттуда вытянуть и отправить.
  • Q: А как сделать ребут, админку, оформить тексты т.д ?
  • A: Здесь есть отличные сниппеты
  • Q: Как осуществить . ?
  • A: Документация Telegram bot api, Вики библиотеки

Как сделать, чтобы телеграм-бот отправлял фото(python)?

5dcaeea315522794900214.jpeg

Я начинающий программист python, научился отвечать на сообщения в телеграм-боте, но как отправить в ответ на сообщение фотографию, не могу понять. В интернете искал, мало информации нормальной. Жду адекватного ответа. Спасибо!

  • Вопрос задан более трёх лет назад
  • 23057 просмотров

3 комментария

Простой 3 комментария

Что такое Phyton?

Ternick

Araya, Опечатка вероятно 🙂

Ternick

Для начала давайте сделаем так, вы удалите скриншот кода и скопируете код в специальный тег для кода.

Решения вопроса 1

Ternick

Может python, не ?
Пожалуйста вот ссылка на код который показывает как это делать https://pypi.org/project/pyTelegramBotAPI/0.2.9/ 🙂
Лайфхак:
После перехода на страницу нажимаем ctrl + f и вписываем в окно поиска send_photo и получаем следующее :
image.png
Или в вашем случае для начала нужно будет сделать так:
imagee8cf526e2cd3c116.png
КОД:

import telebot from requests import get bot = telebot.TeleBot("TOKEN") @bot.message_handler(commands=["start"]) def start(message): bot.send_message(message.chat.id, "ТЕСТ") bot.send_photo(message.chat.id, get("https://i0.wampi.ru/2019/11/12/image.png").content) bot.polling()

На всё про всё минут 7 понадобилось мне и 2 ссылки которые доступны по первому же запросу в гугл.
(2 ссылку указать не могу потому что видёт на ‘запрещённый сайт’ 🙂 )
Вопросы ?

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *