Не прикладывайте ошибки/код картинкой. Никому не интересно всматриваться туда.
Если обновляется фото либо присылается изображение, никакого текста в сообщении нет, поэтому конструкция
'#' 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 при этом не нужен, к нему никакой текст не приложишь