Почему TgBot присылает "document"?

Необходимо реализовать задачу, чтобы бот при отправке ему текста "file" присылал файл с ssh сервера.

Тут вызываю библиотеки, которые необходимы будут:

import paramiko
from aiogram import Bot, types, Dispatcher
from aiogram.utils import executor
from aiogram.types import InlineKeyboardMarkup, InlineKeyboardButton

Затем делаю коннект к самому серверу SSH

host = "host"
port = 22
bot = Bot(token = 'YOUR_TOKEN')
mybot = Dispatcher(bot)

transport = paramiko.Transport((host, port))
transport.connect(username='USERNAME', password='PASSWORD')
sftp = paramiko.SFTPClient.from_transport(transport)

Затем вызываю команду /start

@mybot.message_handler(commands=["start"])
async def start(message: types.Message):
    markup = InlineKeyboardMarkup(row_width=1)
    station = InlineKeyboardButton(text='file', callback_data='file')
    markup.add(station)
    await message.reply('Выберите просмотр', reply_markup=markup)

Далее уже функцию, которая будет реализовывать отправку файла при нажатии на кнопку "file"

@mybot.callback_query_handler(text='file')
async def menu_index(call: types.CallbackQuery):
    a = '/usr/tgbotTok/files/123.pdf'
    await call.message.answer_document(document=sftp.open(a, 'rb').read())

Ну и соответственно Executor

if __name__ == '__main__':
  executor.start_polling(mybot)

Это весь код в моем боте, однако на выходе я получаю не файл с расширением .pdf, а только "document" в ответе телеграм бота

Подскажите, пожалуйста, как следует изменить код или может другую библиотеку просто попробовать использовать для этой задачи?


Ответы (1 шт):

Автор решения: oleksandrigo

Попробуйте так

import io

from aiogram.types import InputFile

@mybot.callback_query_handler(text='file')
async def menu_index(call: types.CallbackQuery):
    a = '/usr/tgbotTok/files/123.pdf'
    file = InputFile(io.BytesIO(sftp.open(a, 'rb').read()), filename="1234.pdf")
    await call.message.answer_document(document=file)

введите сюда описание изображения

→ Ссылка