No description
  • Rust 91.6%
  • Nix 4.7%
  • Dockerfile 3.7%
Find a file
hayshin ae96dde31d fix(call): skip caller direct notification
- exclude tag caller from direct message recipients
- retain caller mention in group and cover filtering with a test
2026-08-12 17:21:40 +05:00
.github/workflows chore(workflow): make two outputs separately for docker and binary 2026-03-08 15:50:16 +05:00
docs feat: remove ask and mute commands 2026-03-13 16:09:52 +05:00
src fix(call): skip caller direct notification 2026-08-12 17:21:40 +05:00
.env.example docs: add .env.example 2026-03-08 14:13:16 +05:00
.gitignore chore: add db to gitignore 2026-03-08 15:17:47 +05:00
Cargo.lock chore: add async trait 2026-03-08 14:10:11 +05:00
Cargo.toml fix: retry Telegram connection during startup 2026-08-12 12:08:35 +05:00
Dockerfile chore: define app path in docker 2026-03-29 14:45:25 +05:00
flake.lock chore(nix): use naersk+flake-utils 2026-03-08 13:16:50 +05:00
flake.nix chore: add docker image to nix flake 2026-03-08 13:36:22 +05:00
README.md docs: update readme 2026-03-29 14:45:17 +05:00

Telegram Tag Bot

Телеграм-бот на Rust (Teloxide) для создания и управления тегами для групповых упоминаний.

Особенности

  • Менеджмент тегов: Пользователи могут вступать в кастомные теги.
  • Мут тегов: Можно замутить конкретный тег, чтобы не получать упоминания.
  • Случайный выбор: Команда /ask выбирает случайного человека из тега.
  • Двуязычные команды: Поддержка команд на русском (аск, калл, джоин) и английском.
  • Работа без слеша: Возможность использовать команды просто текстом (например, аск дев).

Важное примечание для групп

По умолчанию у ботов Telegram включен Privacy Mode. Чтобы бот мог реагировать на команды без слеша (например, просто аск вместо /ask), необходимо отключить его:

  1. Напишите @BotFather.
  2. Выберите своего бота: /mybots -> аш_бот.
  3. Перейдите в Bot Settings -> Group Privacy.
  4. Нажмите Turn off (должно стать Privacy mode is disabled).
  5. Если бот уже в группе, его нужно удалить и добавить заново (или сделать администратором).

Команды

  • /mute <названиеега> - Замутить тег для себя.
  • /unmute <названиеега> - Размутить тег.
  • /join [названиеега] - Вступить в тег (по умолчанию "алл").
  • /leave [названиеега] - Выйти из тега (по умолчанию "алл").
  • /call [названиеега] - Позвать всех участников тега.
  • /ask [названиеега] - Выбрать случайного участника.
  • /list - Список всех тегов в группе.
  • /help - Справка.

Примеры использования

  1. Вступить в теги:
    • джоин дев или /join dev
    • джоин - вступить в дефолтный тег "алл".
  2. Вызвать группу:
    • калл дев - упомянет всех в теге "dev".
    • калл - упомянет всех в теге "алл".
  3. Выбрать случайного:
    • аск дев -> "Это @user!"
  4. Выйти из тега:
    • лив дев
    • лив - выйти из "алл".

Структура проекта

.
├── src/
│   ├── main.rs          # Точка входа и диспетчер
│   ├── db.rs            # Операции с БД (SQLite)
│   ├── models.rs        # Модели данных
│   └── commands/        # Обработчики команд
│       ├── mod.rs       # Определение команд и нормализация
│       ├── call.rs      # /call (вызов)
│       ├── join.rs      # /join (вступление)
│       ├── leave.rs     # /leave (выход)
│       ├── list.rs      # /list (список)
│       ├── mute.rs      # /mute (мут)
│       └── unmute.rs    # /unmute (размут)
├── Cargo.toml           # Зависимости Rust
├── flake.nix            # Конфигурация Nix flake
├── .env.example         # Шаблон переменных окружения
└── README.md           # Этот файл

Заметки

  • Данные хранятся в SQLite (tagbot.db).
  • Каждая группа имеет свою отдельную систему тегов.
  • Пользователи в муте исключаются из результатов /call.
  • Личные уведомления: Чтобы получать уведомления в личку при вызове в группе, вы ДОЛЖНЫ начать чат с ботом лично (отправить ему любое сообщение).