Уффф! Тема принесла мне удовольствие сегодня. Поговорим о возможности быстрой передачи файлов через Telegram.
Для этого обзаведёмся нужными инструментами (у меня Debian ,арчеводы извините пожалуйста за это, но вы прохаваные и быстро соориентируетесь)
sudo apt install python3-pip
sudo apt install pipx
pipx install telegram-send
pipx ensurepath
sudo apt install xsel
далее настроим telegram-send обычно pipx устанавливает его в $HOME/.local/pipx/venvs/telegram-send/bin/
введем в терминал
$HOME/.local/pipx/venvs/telegram-send/bin/telegram-send --configure
и telegram-send запросит ключ к API ,
чтоб получить его необходимо произвести следующие шаги,
Откройте Telegram и найдите @BotFather:
Введите @BotFather в поле поиска и выберите официального бота.
Начните разговор с BotFather, отправив команду /start.
Создайте нового бота, отправив команду:
/newbot
Вам будет предложено выбрать имя для вашего бота. Введите любое имя, например MyFileSenderBot.
Затем выберите уникальное имя пользователя для бота, которое должно оканчиваться на bot, например, myfilesender_bot.
После создания бота BotFather отправит вам токен API — уникальную строку, что-то вроде 123456789:ABCdefGhIjkLmnoPQRStUvWxYz.
Сохраните этот токен.
этот токен следует подставить где он был запрошен в терминале и нажать ввод в ответ будет предложен уникальный код
который следует ввести в чат бота после его старта. Теперь чат-бот и ваш telegram-send сопряжены.
Далее следует код скрипта который использует xsel для автоматизации получения полного пути файла который мы хотим переслать в чат бот telegram.
Как использовать скрипт, скопировать файл который хотим перслать в буфер обмена, скрипт предварительно подвешиваем на горячую клавишу,
и запускаем скрипт, все файл передан в telegram в указаный чат.
Код:
#!/bin/bash
#set -x
# Получаем путь до файла из буфера обмена
FILE_PATH="$(xsel -b)"
# Проверяем, существует ли файл по указанному пути
if [ -f "$FILE_PATH" ]; then
# Отправляем файл с помощью telegram-send
$HOME/.local/pipx/venvs/telegram-send/bin/telegram-send --file "$FILE_PATH"
echo "Файл успешно отправлен!"
sleep 5
else
echo "Ошибка: файл не найден по указанному пути."
fi
upd: а если нам захочется на другой машине в этот же чат бот файлы сливать , то достаточно ввести при настройке telegram-send --configure сохранёный токен,
в ответ на который получим код, который бот зарегестрирует, максимальный размер пересылаемого файла 2 гиг.
upd2:
внёс небольшие дополнения в код позволяющие увидеть что началась передача файла, а также показывается общее время передачи файла. telegram-send не имеет встроеного прогресс-бара...(увы точно не имеет, то есть на больших файлах придется дождатся сообщения что файл закачен, может есть смысл вместо sleep применить read ,чтоб скрипт закрылся по вводу? )
#!/bin/bash
#set -x
# Получаем путь до файла из буфера обмена
FILE_PATH="$(xsel -b)"
# Проверяем, существует ли файл по указанному пути
if [ -f "$FILE_PATH" ]; then
# Сохраняем начальное время
START_TIME=$(date +%s)
echo "== Начинаю отправку файла.Ждите =="
# Отправляем файл
$HOME/.local/pipx/venvs/telegram-send/bin/telegram-send --file "$FILE_PATH"
# Проверяем, успешно ли выполнена команда
if [ $? -eq 0 ]; then
# Сохраняем конечное время
END_TIME="$(date +%s)"
# Вычисляем прошедшее время
ELAPSED_TIME="$(($END_TIME - $START_TIME))"
# Преобразуем прошедшее время в часы, минуты и секунды
HOURS="$(($ELAPSED_TIME / 3600))"
MINUTES="$(($ELAPSED_TIME % 3600 / 60))"
SECONDS="$(($ELAPSED_TIME % 60))"
echo "Файл успешно отправлен!"
echo "Время передачи: $HOURS ч. $MINUTES мин. $SECONDS сек."
else
echo "Ошибка при отправке файла."
fi
sleep 6
else
echo "Ошибка: файл не найден по указанному пути."
fi