Telebot как отправить картинку
Перейти к содержимому

Telebot как отправить картинку

  • автор:

Как отправить фото через telebot?

Возникла проблема с send_photo. Я не понимаю как работает список message.photo. Что значат элементы этого списка? Почему можно выбрать [-1] элемент?
Решил протестить код, чтобы выводилось количество элементов списка message.photo, на одну фотографию бот высылает то 2, то 3, как это возможно, если я скинул одну фотографию?

@bot.message_handler(content_types=['photo']) def gg(message): bot.send_message(message.chat.id, str(len(message.photo)))
  • Вопрос задан более трёх лет назад
  • 18459 просмотров

Комментировать
Решения вопроса 1

-1 элемент это последний (часто когда не знают длину списка и хотят взять последний — пишуть именно минус один),

Отправить фото через telebot:

photo = open('путь_к_фото', 'rb') bot.send_photo(chat_id, photo)

Также у вас декоратор
@bot.message_handler(content_types=[‘photo’])
Он работает с фотографиями которые пользователи отправили боту.

Ответ написан более трёх лет назад
Нравится 1 1 комментарий
bongerka @bongerka Автор вопроса

за это спасибо, но не могли бы вы все таки подсказать почему с одной фотографии приходит несколько одинаковых id, и какой путь к фото в телеграме? 0_о

Ответы на вопрос 0
Ваш ответ на вопрос

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

telegram

  • Telegram

Передача аргумента в ответе от ТГ-бота?

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

cpp

  • C++
  • +2 ещё

Почему в сообщении от ESP в телеграм не получается жирный шрифт?

  • 1 подписчик
  • вчера
  • 55 просмотров

Как отправлять изображения из telegram-бота?

Вы используете устаревший браузер. Этот и другие сайты могут отображаться в нем неправильно.
Необходимо обновить браузер или попробовать использовать другой.

rosvo
Новичок

Пользователь
Дек 29, 2021 10 0 1

Доброго времени суток, буду признателен за помощь.
Проблема следующая: необходимо сделать рассылку в виде изображения и текста для пользователей бота. Изображения первоначально должны отправляться боту, затем боту отправляется текст и следующим шагом будет рассылка этого блока ( изображение + текст ) пользователям бота.
Я смог реализовать только рассылку изображения, записанного в коде и любого отправляемого текста. Пример работающего кода прилагаю, telebot (pyTelegramBotAPI), Windows. Заранее спасибо за помощь.

@bot.callback_query_handler(func = lambda call: call.data == 'admin|send') def admin_send(msg): Users.us(msg.from_user.id, 'admin|send') bot.send_message(msg.from_user.id, 'Отправьте картинку и прикрепите к ней текст.') @bot.message_handler(func = lambda msg: Users.gs(msg.from_user.id) == 'admin|send') def admin_send_text(msg): users = Users.query.all() bot.send_message(msg.from_user.id, 'Рассылка запущена.') for u in users: try: bot.send_photo( u.id, photo='https://bit.ly/3JRhuK1', caption=msg.text, parse_mode='HTML' ) except: pass bot.send_message(msg.from_user.id, 'Рассылка выполнена.') Users.us(msg.from_user.id, '')
rosvo
Новичок

Пользователь
Дек 29, 2021 10 0 1
Готов оплатить за дописанный по моим требованиям код.

stud_55
Модератор

Команда форума
Модератор
Апр 3, 2020 1 522 672 113

Изображения первоначально должны отправляться боту, затем боту отправляется текст и следующим шагом будет рассылка этого блока ( изображение + текст ) пользователям бота.

Вот пример (без сохранения изображения):

import telebot from telebot import types bot = telebot.TeleBot('TOKEN') user_dict = <> # > def start_keyboard(): keyboard = types.InlineKeyboardMarkup() send = types.InlineKeyboardButton(text='send photo', callback_data='send') keyboard.add(send) return keyboard @bot.message_handler(commands=['start']) def main(message): bot.send_message( message.chat.id, 'Выберите действие ⤵', reply_markup=start_keyboard() ) @bot.callback_query_handler(func=lambda call: call.data == 'send') def admin_send(call): bot.send_message(call.from_user.id, 'Отправьте картинку.') bot.register_next_step_handler(call.message, photo_handler) def photo_handler(message): try: # если изображение есть в словаре - заменяем его и убираем описание if user_dict.get(message.chat.id) is not None: user_dict[message.chat.id]['photo'] = message.photo[len(message.photo) - 1].file_id user_dict[message.chat.id]['caption'] = '' else: # если фото нет - создаем словарь и добавляем изображение user_dict[message.chat.id] = user_dict[message.chat.id]['photo'] = message.photo[len(message.photo) - 1].file_id except Exception as e: bot.reply_to(message, e) else: bot.send_message(message.chat.id, 'Теперь введите текст к картинке') bot.register_next_step_handler(message, text_handler) def text_handler(message): # добавляем описание изображения фото в словарь user_dict[message.chat.id]['caption'] = message.text bot.send_message(message.chat.id, 'Напишите "отправить" чтобы разослать картинку пользователям') bot.register_next_step_handler(message, send_to_users) def send_to_users(message): if message.text.lower() == 'отправить': # здесь можно добавить отправку в цикле bot.send_photo( message.chat.id, photo=user_dict[message.chat.id]['photo'], caption=user_dict[message.chat.id]['caption'], parse_mode='HTML' ) else: bot.send_message(message.chat.id, 'Напишите "отправить" чтобы разослать картинку пользователям') bot.register_next_step_handler(message, send_to_users) bot.polling(none_stop=True, interval=0)

Как отправить картинку 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) 

Не работает отправка фото через TeleBot на python

Хочу написать своего Телеграм-бота на питоне, при помощи TeleBot. Для отправки фото я использовал стандартный метод:

@bot.message_handler (commands=[‘start’])
def send_welcome(message):
img = open(‘photo.jpg’, ‘rb’)
bot.send_photo(message.chat.id, img)

При открытии фото, выдает ошибку:

File «C:\Users\toyot\Desktop\TeleBot\main.py», line 12, in send_welcome
img = open(‘photo.jpg’, ‘rb’)
TypeError: ‘str’ object cannot be interpreted as an integer

Я указывал различные пути к файлу, на данный момент он находится в одной папке со скриптом. Если просто скопировать открытие файла в отдельный скрипт, то все работает без ошибок и фото открывается, но в скрипте бота он выдает ошибку.
Пробовал в ручную переписать этот же код из гайдов на ютубе, но все равно не работает.

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

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