- Python 68.9%
- JavaScript 12.4%
- CSS 9.9%
- HTML 7.7%
- Dockerfile 1.1%
|
All checks were successful
deploy / deploy (push) Successful in 5m45s
Headless chromium leaves crashpad/zygote children behind. Python runs as PID 1 in the container and never reaps them, so every stats card leaks a handful of zombie processes (10 in the first 90 minutes of uptime, thousands over a week). Co-Authored-By: Claude <noreply@anthropic.com> |
||
|---|---|---|
| .forgejo/workflows | ||
| dashboard | ||
| src/nochnoy_bot | ||
| .dockerignore | ||
| .env.example | ||
| .gitignore | ||
| docker-compose.yml | ||
| Dockerfile | ||
| pyproject.toml | ||
| README.md | ||
| uv.lock | ||
Ночной бот
Telegram-бот Ночной бот. Команда /pokur публикует объявление о покуре в тот чат, где бот добавлен.
Команды
| Команда | Что делает |
|---|---|
/start |
Приветствие |
/help |
Подсказка |
/pokur |
СЕЙЧАС, у входа в уник |
/pokur <время> <локация> |
Своё время и место |
/dota |
Алерт Dota II |
/ya_kuryu |
В список / из списка на покур |
/ya_eblan |
В список / из списка на доту |
/kiss |
Кого сегодня целует Мадина (один человек на сутки, UTC+03) |
Postgres крутится рядом в Docker (db). На алертах покура и доты кнопки ✅ (список + счётчик) и ❌ (только счётчик отказов), внизу подсказка как записаться в список (/ya_kuryu / /ya_eblan). Поцелуи /kiss тоже копятся в БД.
/dota без аргументов — тот же стиль, что покур, но DOTA II ALERT, «играем в доту», кнопки ✅/❌ и внизу /ya_eblan.
/kiss раз в сутки (полночь UTC+03) выбирает человека из тех, кого бот видел в чате. Первый вызов за день — отсчёт 5…4…3…, сообщение с таймером удаляется, затем «мадина сегодня целует @username». Повтор в тот же день только называет, кого уже выбрали. Все поцелуи пишутся в Postgres. Чтобы пул был шире, в BotFather выключи Group Privacy.
Пример:
/pokur 17:30 hall
Сообщение в чате (эмодзи каждый раз случайные из пака):
🚨🚨🚨 ПОКУР ALERT 🚨🚨🚨
(1 random, not siren) 17:30 у входа в уник
от мадины 💋💋
запишись в список: /ya_kuryu
hall / холл всегда подписывается как «у входа в уник». Другая локация пишется как есть.
Эмодзи
По умолчанию стоят обычные эмодзи (🌙 📍 🕐). Можно подставить custom emoji pack Telegram.
- Собери custom emoji pack через @Stickers (именно custom emoji, не обычные стикеры).
- Скопируй short name пака — из ссылки
https://t.me/addemoji/<name>это<name>. - В
.env:
CUSTOM_EMOJI_PACK=YourPackByBot
Бот берёт из пака эмодзи, привязанные к 🌙/🚬, 📍 и 🕐. Если таких нет — берёт первые три custom emoji из пака.
Либо укажи id вручную (из пака / Bot API getStickerSet):
CUSTOM_EMOJI_POKUR=5368324170671202286
CUSTOM_EMOJI_LOCATION=...
CUSTOM_EMOJI_TIME=...
Настройка
- Создай бота в @BotFather, имя — Ночной бот.
- Скопируй
.env.exampleв.env, вставь токен и пароль Postgres:
BOT_TOKEN=123456789:AA...
POSTGRES_PASSWORD=long-random-password
DATABASE_URL=postgresql://nochnoy:long-random-password@db:5432/nochnoy
- Добавь бота в нужный чат.
Запуск через uv
uv sync
uv run python -m nochnoy_bot
Docker
Поднимает Postgres (nochnoy-db, том nochnoy-pgdata), бота и дашборд. Порт 5432 наружу не открывается. Дашборд слушает 8091 на сервере, снаружи — https://bot.mikyss.ru (nginx на nova).
В чужих группах бот не отвечает и выходит. Разрешённые чаты — ALLOWED_CHAT_IDS или те, что уже есть в БД.
docker compose up --build -d
Логи: docker compose logs -f
Остановка: docker compose down (данные Postgres остаются в томе, пока не сделать down -v)
CI/CD
Пуш в main на Forgejo сам обновляет стек на этой же машине (Forgejo Actions + runner). Ручной git pull на сервере не нужен.