@neekerman

Что нужно поправить в коде на 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())


Вот такая ошибка:
D:\pyMap\venv\Scripts\python.exe "D:\pyMap\main 5.py"
Traceback (most recent call last):
File "D:\pyMap\main 5.py", line 29, in
asyncio.run(main())
File "C:\Users\777\AppData\Local\Programs\Python\Python312\Lib\asyncio\runners.py", line 194, in run
return runner.run(main)
^^^^^^^^^^^^^^^^
File "C:\Users\777\AppData\Local\Programs\Python\Python312\Lib\asyncio\runners.py", line 118, in run
return self._loop.run_until_complete(task)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\777\AppData\Local\Programs\Python\Python312\Lib\asyncio\base_events.py", line 664, in run_until_complete
return future.result()
^^^^^^^^^^^^^^^
File "D:\pyMap\main 5.py", line 15, in main
messages = await bot.get_chat(chat_id).fetch_all()
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
AttributeError: 'coroutine' object has no attribute 'fetch_all'
sys:1: RuntimeWarning: coroutine 'Bot.get_chat' was never awaited

Process finished with exit code 1
  • Вопрос задан
  • 280 просмотров
Пригласить эксперта
Ответы на вопрос 1
@twistfire92
Python backend developer
Вы должны сначала получить чат с помощью
await bot.get_chat(chat_id)
и только потом у этого объекта вызвать метод fetch_all()

либо
chat = await bot.get_chat(chat_id)
messages = chat.fetch_all()

либо
messages = (await bot.get_chat(chat_id)).fetch_all()
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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