AttributeError: 'Message' object has no attribute 'answer_document'

Рейтинг: 0Ответов: 1Опубликовано: 22.04.2023

Необходимо, чтобы бот присылал файл excel, однако пишет эту ошибку. Путь к файлу указан верно, никак не пойму в чём ошибка.

async def telegram_channel_parser(message: types.Message):

    async with TelegramClient('session', api_id, api_hash) as client:
        all_message = client.iter_messages(message, reverse=True, offset_date=date)
        name_of_file = str(message.split('/')[-1])
        async for message in all_message:
            msg.append(message.message)
            df = pd.DataFrame({'Содержание публикации': [title for title in msg]})
    
            with pd.ExcelWriter(f"{name_of_file}_channel_tg.xlsx", engine='xlsxwriter') as writer:
                df.to_excel(writer, sheet_name=f"{name_of_file}", index=False)  
                worksheet_paimon = writer.sheets[f"{name_of_file}"]
                worksheet_paimon.set_column('A:B', 280)
    
        await message.answer_document(open(f'{name_of_file}_channel_tg.xlsx', 'rb'))

Стоит отметить, что вот так, отправляется всё, но не от лица бота, а от лица клиента. Как сделать наоборот?

await client.send_file('@Bot', f'{name_of_file}_channel_tg.xlsx')

Ответы

▲ 1

answer_document лучше заменить на send_document или reply_document Если это то о чем я подумал. Несколько ошибок в:

  1. name_of_file = str(message.split('/')[-1]),
  2. df = pd.DataFrame({'Содержание публикации': [title for title in msg]})
  3. await message.answer_document(open(f'{name_of_file}_channel_tg.xlsx', 'rb'))
async def telegram_channel_parser(message: types.Message):
    # устанавливаем соединение с клиентом Telegram
    async with TelegramClient('session', api_id, api_hash) as client:
        # получаем все сообщения из чата, начиная с указанной даты
        all_message = client.iter_messages(message, reverse=True, offset_date=date)
        # получаем имя файла из текста сообщения
        name_of_file = str(message.text.split('/')[-1])
        # создаем список для хранения текста сообщений
        msg = []
        # получаем текст каждого сообщения и добавляем его в список
        async for message in all_message:
            msg.append(message.message)
        # создаем DataFrame из списка сообщений
        df = pd.DataFrame({'Содержание публикации': [title for title in msg]})
    
        # записываем DataFrame в файл Excel
        with pd.ExcelWriter(f"{name_of_file}_channel_tg.xlsx", engine='xlsxwriter') as writer:
            df.to_excel(writer, sheet_name=f"{name_of_file}", index=False)  
            # устанавливаем ширину столбцов в Excel
            worksheet_paimon = writer.sheets[f"{name_of_file}"]
            worksheet_paimon.set_column('A:B', 280)

        # отправляем файл Excel обратно в чат
        await message.reply_document(open(f'{name_of_file}_channel_tg.xlsx', 'rb'))

Если не получится, копай в направлении inputfile и io.BytesIO

@app.on_message()
async def handler(client, message):
    # открываем файл и создаем InputFile
    with open(f'{name_of_file}_channel_tg.xlsx', 'rb') as f:
        document = io.BytesIO(f.read())
        document.name = f'{name_of_file}_channel_tg.xlsx'
        
    # отправляем документ в чат
    await client.send_document(message.chat.id, document) 

И последний момент, если ты хочешь отправлять от имени бота, используй метод:

await bot.send_document(message.chat.id, open(f'{name_of_file}_channel_tg.xlsx', 'rb'))