@Didi_Tariani
Я начинающий разработчки на Python

Как сделать чтобы телеграм бот сохранял message id при получении фотографии?

Все привет.
Я начинающий пайтон разработчик решил сделать телеграмм бот галерею.
Бот получает в чате сообщение с хэштешом и сохраняет в бд хэштех = message id при запросе от пользователя хэштега
он форвардит все сообщения с эти хэштегом из чата юзеру. столкнулся с проблемой когда приходит только сообщение все ок но когда сообщение с фотографиями выдает ошибку вот код :
@bot.message_handler(func=lambda message: '#' in message.text and message.chat.id == GALLERY_ID,
                     content_types=['text', 'photo', "new_chat_photo"])
def get_gallery(message):
    """
    Берет сообщение с хэштегом и сохраняет в базу данных чтобы когда пользователь запрост фотографии с хэштегом
    бот взял ид сообщения с этим хэштегом и переслал его пользователю
    """
    if message.text in message_ids.keys() and message.id not in message_ids.values():
        message_ids[message.text] += [message.id]
    else:
        message_ids[message.text] = [message.id]
    update_db(message_ids)
    message_ids.clear()


Вот ошибка не могу понять в чем дело :
6236fad16e741119351985.jpeg

помогите пожалуйта
  • Вопрос задан
  • 110 просмотров
Решения вопроса 1
SoreMix
@SoreMix Куратор тега Python
yellow
Не прикладывайте ошибки/код картинкой. Никому не интересно всматриваться туда.

Если обновляется фото либо присылается изображение, никакого текста в сообщении нет, поэтому конструкция '#' in message.text превращается в '#' in None, а так делать нельзя.

Не понимаю в чем логика, поэтому конкретное исправление не представляю. Но если прям нужно чтобы был хэш в тексте, нужно проверять наличие самого текста. Ну и если хэш нужен в сообщении с картинкой, то такой текст лежит в поле caption объекта message

Наверное, как-то так
@bot.message_handler(func=lambda message: ((message.text and '#' in message.text) or (message.caption and '#' in message.caption)) and message.chat.id == GALLERY_ID,
                     content_types=['text', 'photo', "new_chat_photo"])


Но, опять же, непонятно. Если требуется добавлять в БД картинки, если к ним приложен хэш, и возвращать картинки по хэшу, если отправлен только он, то можно спокойно разбить на две функции. Одна принимает только текстовые сообщения, и проверяет что текст начинается с #, и вторая функция принмает просто изображения, и проверяет что caption начинается с #. new_chat_photo при этом не нужен, к нему никакой текст не приложишь
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы