86 lines
2.1 KiB
Markdown
86 lines
2.1 KiB
Markdown
# Task Force Beta Bot
|
|
|
|
General-purpose Telegram bot with modular handler architecture.
|
|
|
|
## Build & Run
|
|
|
|
```bash
|
|
cargo build --release
|
|
```
|
|
|
|
## Usage
|
|
|
|
```
|
|
task_force_beta_bot <token_file> <allowed_chats_file>
|
|
```
|
|
|
|
Both arguments are required:
|
|
- `token_file` - Path to file containing the Telegram bot token
|
|
- `allowed_chats_file` - Path to file containing allowed chat IDs
|
|
|
|
Example:
|
|
```bash
|
|
cargo run -- /path/to/token /path/to/allowed_chats
|
|
```
|
|
|
|
### Allowed Chats File
|
|
|
|
One chat ID per line. Lines starting with `#` are comments.
|
|
|
|
```
|
|
# My group
|
|
-100123456789
|
|
```
|
|
|
|
The bot ignores messages from chats not in this list.
|
|
|
|
## Architecture
|
|
|
|
- `src/main.rs` - Entry point, dispatcher setup
|
|
- `src/config.rs` - Token and allowed chats loading from CLI arguments
|
|
- `src/handlers/` - Message handlers (modular, each feature in own file)
|
|
- `src/utils/` - Shared utilities
|
|
|
|
## NixOS Deployment
|
|
|
|
Module location: `/home/fabian/nix/sys/modules/task-force-beta-bot.nix`
|
|
|
|
```nix
|
|
local.sys.task-force-beta-bot = {
|
|
enable = true;
|
|
tokenFile = "/var/trust/task_force_beta_bot/telegram_token";
|
|
allowedChats = [ (-1001234567890) ]; # Negative IDs for groups
|
|
};
|
|
```
|
|
|
|
The module:
|
|
- Fetches and builds the package from git
|
|
- Generates the allowed chats file in the nix store
|
|
- Runs as a hardened systemd service (`task-force-beta-bot.service`)
|
|
|
|
After code changes: update `rev` and `hash` in the module's `fetchgit` block.
|
|
|
|
## Adding New Handlers
|
|
|
|
1. Create `src/handlers/new_feature.rs`
|
|
2. Export in `src/handlers/mod.rs`
|
|
3. Add handler branch in `handlers::schema()`
|
|
|
|
## Current Features
|
|
|
|
### Instagram Link Cleaning (`handlers/instagram.rs`)
|
|
|
|
Strips tracking parameters from Instagram links:
|
|
- `igsh`, `igshid` - Instagram share tracking
|
|
- `utm_*` - UTM campaign tracking
|
|
- `ref` - Referral tracking
|
|
- `fbclid` - Facebook click ID
|
|
- `si` - Session identifier
|
|
|
|
### Tag All (`handlers/tag_all.rs`)
|
|
|
|
WhatsApp-style @all mentions. When a message contains "@all", bot replies tagging everyone it has seen.
|
|
|
|
- Tracks users by observing messages (requires privacy mode disabled)
|
|
- In-memory only - resets on restart
|
|
- Uses MarkdownV2 text mentions
|