← Назад на главную

Простой Telegram-бот на Go, который заменит «Облако»

Знакомая ситуация: нужно переслать коллеге архив с фото или отдать заказчику готовый макет. Почта режет объём, облака просят регистрацию, а бесплатные файлообменники давят рекламой и таймерами ожидания.

Я перепробовал десятки способов, но каждый раз спотыкался об ограничения. Поэтому просто сел и написал собственного Telegram‑бота на Go. Теперь файлы хранятся на моём удалённом сервере, ссылка приходит в чат за секунду, а никаких лимитов кроме свободного места на диске нет.

Как это работает и почему ссылки не умирают

Изображение

Всё построено на связке Telegram Bot API и простого веб‑сервера внутри одной программы. Пользователь отправляет боту файл как документ. Бот генерирует короткий уникальный идентификатор, сохраняет файл в папку "data" на сервере и заносит запись в SQLite‑базу. В ответ приходит прямая ссылка вроде "http://files.rtmntnv.ru/abc12345" (если к серверу не привязано доменное имя ссылка будет такого вида "http://ip-адрес-сервера/abc12345").

Перейдя по ней, любой может скачать оригинал без каких‑либо паролей и ожидания. Важно: файл физически лежит на моём сервере, а не в облаке Telegram. Даже если бот перезапустится, ссылка останется рабочей. Для каждой загрузки ведётся счётчик скачиваний, а адрес "/stat/abc12345" выдаёт JSON‑статистику: когда залили, сколько раз забрали.

Кто и как может отправлять файлы

Бот закрытый. Просто найти его в поиске и начать слать документы не получится - нужен доступ. Администратор (в моём случае это я) добавляет пользователей командой "/adduser 123456789", где "123456789" — Telegram ID человека. Узнать свой ID может каждый, отправив боту "/getmyid".

Для обычных пользователей доступна только отправка файлов и получение ссылок.

Изображение

Админу же доступны команды управления:

  • /users - посмотреть список всех, кто имеет доступ
  • /delfile abc12345 - удалить конкретный файл и с диска, и из базы
  • /stats - общая статистика по количеству файлов, пользователям и занятому месту
Изображение

Всё это позволяет держать файловое хранилище в порядке и быстро чистить устаревшее.

Go, SQLite и сервер без лишнего шума

Я выбрал Go не случайно. На нём легко развернуть одновременно и Telegram‑бота, и HTTP‑сервер для отдачи файлов. В проекте всего один исполняемый файл, никаких тяжеловесных фреймворков. База данных - SQLite, которая лежит рядом и не требует установки отдельного СУБД.

Сейчас бот живёт на виртуальном сервере с Ubuntu, занимает около 15 МБ оперативной памяти и успешно обрабатывает сотни файлов. Вся конфигурация - это токен бота, домен и пара констант. Поднять такого же можно за полчаса даже на самом слабом VPS.

Сейчас удобно, а дальше - ещё удобнее

Telegram здесь выступает только в роли удобного интерфейса для загрузки. Но это и ограничение: нельзя, например, управлять папками, просматривать список своих файлов в виде таблицы или делиться целыми альбомами.

Поэтому следующий шаг, над которым я уже начал работать, полноценный веб‑интерфейс. Прямо как в Dropbox, только своё, лёгкое и без слежки.

Веб‑версия позволит загружать файлы простым перетаскиванием, сортировать их по проектам и генерировать публичные ссылки с возможностью установки пароля. Telegram‑бот останется как дополнительный быстрый канал - кинул документ в чат, получил ссылку и уже через браузер управляешь дальше.

Кому это может пригодиться

Такой бот - идеальное решение для небольшой команды, фрилансера или просто семьи, где постоянно нужно пересылать друг другу фото и документы. Не нужно заводить аккаунты в очередном "Облаке", не нужно покупать подписку ради 50 гигабайт.

Я выложил исходный код в открытый доступ в своем Telegram‑канале в комментариях к этому посту, так что любой желающий может поднять собственный экземпляр за вечер.

А вы сталкивались с ситуацией, когда для решения простой задачи проще написать свой инструмент, чем подстраиваться под чужие ограничения? Оказывается, полноценный файлообменник на Go - это не тысячи строк и не магия, а вполне реальный проект, который окупает время разработки уже на третий день использования.

Буду рад видеть вас в числе подписчиков моего Дзен‑канала и Telegram‑канала! Все комментарии к статье и живые обсуждения - именно там.
До новых встреч!