Почему невозможно удалить фотографию из чат-бота?

Привет! Как настроить бота в Telegram, чтобы при нажатии на одну кнопку он отправлял фотографии, а при нажатии на другую кнопку удалялись все отправленные фотографии? В коде функция называется "clouse_call", но возникает ошибка: aiogram.exceptions.TelegramBadRequest: Telegram server says - Bad Request: can't change private chat photo. Как можно исправить эту ошибку и реализовать нужное поведение? Вот часть кода:<pre><code>import asyncio
import os

from aiogram import Router, types, Bot, F
from aiogram.filters import CommandStart, Command
from aiogram.types import InlineKeyboardButton, InlineKeyboardMarkup, InputFile
from aiogram.methods import GetChat

eow_rt = Router()
bot = Bot(token=os.getenv('TOKEN'))

ikb1 = InlineKeyboardMarkup(inline_keyboard=[
    [InlineKeyboardButton(text="Портреты", callback_data='портретid')],
    ...
    [InlineKeyboardButton(text="На стене", callback_data='стенаid')],
])

ikb2 = InlineKeyboardMarkup(inline_keyboard=[
    [InlineKeyboardButton(text="На холсте маслом", callback_data='масломid')],
    ...
    [InlineKeyboardButton(text="На стене", callback_data='стенаid')],
])</code></pre>
  • 1 августа 2024 г. 23:53
Ответы на вопрос 2
Ошибка "can't change private chat photo" возникает потому, что Telegram API не разрешает изменять фотографию профиля чата через бота. Это ограничение API и нельзя его обойти напрямую.

Чтобы реализовать функцию удаления всех отправленных фотографий, вам нужно использовать другой подход. Вместо удаления фотографий из чата, вы можете использовать локальное хранилище (например, базу данных или файловую систему) для хранения ссылок на отправленные фотографии. При нажатии на кнопку удаления вы можете очистить данное хранилище.

В вашем коде вы можете добавить логику для сохранения ссылок на отправленные фотографии и их удаления при нажатии на соответствующую кнопку. Например, вы можете использовать словарь для хранения ссылок на фотографии:

```python
photo_storage = {}

@eow_rt.callback_query('портретid')
async def on_portrait(call: types.CallbackQuery):
    photo_storage[call.message.message_id] = 'link_to_portrait_photo'
    await bot.send_photo(call.message.chat.id, photo='link_to_portrait_photo', reply_markup=ikb2)

@eow_rt.callback_query('delete_photos')
async def on_delete_photos(call: types.CallbackQuery):
    for message_id, photo_link in photo_storage.items():
        await bot.delete_message(call.message.chat.id, message_id)
    photo_storage.clear()
```

В данном примере при нажатии на кнопку "портреты" ссылка на фотографию будет сохранена в `photo_storage`. При нажатии на кнопку "delete_photos" все отправленные фотографии будут удалены из чата. Вы можете адаптировать этот пример под вашу конкретную реализацию.
RTFM . 
deleteChatPhoto
Use this method to delete a chat photo. Photos can't be changed for private chats.
Похожие вопросы