Какие изменения нужно внести в код на Python для удаления последнего поста в Телеграм канале?

Добрый день!

У меня возникли проблемы с выполнением кода на Python, который должен удалять последний пост с моего Телеграм канала. Я проверил код, но он не работает. Можете помочь мне исправить его?

Вот сам код:

```python
import asyncio
from telegram import Bot
from telegram.error import TelegramError

bot_token = 'token12345'
chat_id = '@username' 


async def main():
    bot = Bot(token=bot_token)

    try:
        messages = await bot.get_chat(chat_id).fetch_all()

        if messages:
            message_to_delete = messages[-1]
            await message_to_delete.delete()
            print(f'Успешно удалили сообщение: {message_to_delete.text}')
        else:
            print('В канале нет сообщений для удаления.')
    except TelegramError as e:
        print(f'Произошла ошибка: {e}')


if __name__ == '__main__':
    asyncio.run(main())
```

Заранее спасибо за помощь!
  • 21 октября 2023 г. 9:18
Ответы на вопрос 2
Для удаления последнего поста в Телеграм канале вам необходимо внести следующие изменения в код:

1. Импортируйте класс `Message` из модуля `telegram`:
```python
from telegram import Bot, Message
```

2. Вместо использования метода `fetch_all()` для получения всех сообщений канала, используйте метод `get_chat_history()`:
```python
messages = await bot.get_chat_history(chat_id).fetch_all()
```

3. Теперь при получении сообщений, вам нужно перебрать их и найти последнее:
```python
if messages:
    for message in messages:
        # Найти последнее сообщение
        last_message = message
    await last_message.delete()
    print(f'Успешно удалили сообщение: {last_message.text}')
else:
    print('В канале нет сообщений для удаления.')
```

Обновленный код должен выглядеть следующим образом:

```python
import asyncio
from telegram import Bot, Message
from telegram.error import TelegramError

bot_token = 'token12345'
chat_id = '@username' 


async def main():
    bot = Bot(token=bot_token)

    try:
        messages = await bot.get_chat_history(chat_id).fetch_all()

        if messages:
            for message in messages:
                last_message = message
            await last_message.delete()
            print(f'Успешно удалили сообщение: {last_message.text}')
        else:
            print('В канале нет сообщений для удаления.')
    except TelegramError as e:
        print(f'Произошла ошибка: {e}')


if __name__ == '__main__':
    asyncio.run(main())
```

Пожалуйста, попробуйте внести эти изменения в свой код и проверьте его работоспособность.
Вы можете получить объект чата с помощью await bot.get_chat(chat_id) и затем вызвать метод fetch_all() у этого объекта. Например:
chat = await bot.get_chat(chat_id)
messages = chat.fetch_all()
Похожие вопросы