Бот для создания и ведения собственных стикерпаков в Telegram:
- static стикеры (изображения),
- video стикеры (видео/гиф),
- импорт стикера из другого пака с выбором эмодзи (авто/исходный),
- авто-эмодзи (локально, без внешнего API),
- обработка без обрезки по умолчанию с необязательной кнопкой
обрезать до квадрата, - выбор эмодзи кнопкой или простым сообщением с нужным эмодзи,
- черновик пака до первого стикера,
- несколько паков + переключение активного,
- совместное редактирование пака (owner/editor) через инвайты.
- inline-поиск GIF через Klipy:
@otter_sticker_bot запрос.
- Python 3.12
- aiogram 3
- SQLite
- ffmpeg
- Pillow + pillow-heif
- CLIP (transformers + torch) для авто-эмодзи
/start/newpack/packs/setactive [pack_id]/invite @username/members/kick [member_id]/help/cancel
- If something is off, contact
@ve_lizardor open a pull request in the repository: https://github.com/VelizarSeleznev/Telegram-Sticker-Bot
- Скопируйте
.env.exampleв.envи заполните значения. - Запустите:
docker compose up -d --build
- Логи:
docker compose logs -f sticker-bot
BOT_TOKEN- токен бота от BotFatherDB_PATH- путь к SQLite (по умолчанию/data/bot.db)TEMP_DIR- временная папка для обработки медиаLOG_LEVEL-INFO|DEBUG|WARNMAX_CONCURRENT_JOBS- число параллельных конвертацийPOLLING_TIMEOUT- timeout long pollingKLIPY_API_KEY- ключ Klipy API для inline-поиска GIFKLIPY_CLIENT_KEY- client key для Klipy, по умолчаниюotter_sticker_botKLIPY_LOCALE- локаль поиска Klipy, по умолчаниюru_RUKLIPY_COUNTRY- country hint для Klipy, по умолчаниюUSKLIPY_CONTENT_FILTER- фильтр контента Klipy, по умолчаниюmedium
python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
cp .env.example .env
# заполните .env
python -m app.main- Изображения: по умолчанию
fitв512x512->webp, попытка ужать до лимита static sticker;center cropдо квадрата доступен кнопкой на шаге выбора эмодзи. - Видео: по умолчанию
fit, авто-трим до3s, без аудио,VP9/webm, профили сжатия по убыванию качества; квадратная обрезка доступна той же кнопкой. - После добавления бот отправляет готовый стикер в чат, если Telegram принимает локальный файл как sticker-preview.
- На шаге выбора эмодзи можно нажать предложенный вариант или просто отправить нужный эмодзи сообщением.
- Если Telegram отклоняет формат для текущего пака: бот сообщает ошибку и просит сменить/создать пак.
В Docker Compose:
- состояние хранится в volume
bot_data(/data/bot.db), - для переноса на другой сервер достаточно перенести проект +
.env+ backup volume.
- GitHub Actions workflow
.github/workflows/deploy-seggver.ymlзапускается на self-hosted runnerseggver-sticker-bot. - Runtime-путь на сервере:
/home/egg/telegram-sticker-bot. - Deploy script:
scripts/deploy_seggver.sh; он синхронизирует checkout в runtime-путь, сохраняет серверный.env, пересобираетdocker composeи проверяет help-текст внутри контейнера.
- На старте бот проверяет
getMe()с повтором при transientTelegramNetworkError, чтобы краткие DNS/Telegram-сбои не валили контейнер.
- MVP работает только в личных чатах.
- Animated
.tgsв MVP не поддерживается.