shokollm 7c17bff110 feat: add category service layer methods
Service layer for category feature (Issue #86):

Category Management:
- add_category() - Create category (admin only, validates slug format)
- delete_category() - Soft delete category (admin only)
- list_categories() - List active categories
- get_category() - Get category by slug

Category-to-Bounty Association:
- add_category_to_bounty() - Add category to bounty (admin only)
- remove_category_from_bounty() - Remove category from bounty (admin only)
- update_bounty_categories() - Replace all categories on bounty (admin only)

All methods properly validate permissions, slug format, and existence.
Soft delete preserves category data for bounties that reference it.
2026-04-09 10:38:08 +00:00
2026-04-01 08:05:10 +00:00

JIGAIDO

Named after Nanami Kento's Cursed Technique restriction. Suppresses power during normal hours, exerts it during overtime.

A bounty tracking platform. Currently ships with a Telegram bot for managing and tracking bounties in groups and DMs.

Apps

  • Telegram Bot — Group and personal bounty tracking via Telegram commands, with due date reminders

Overview

  • Group bounties: Each Telegram group has its own bounty list
  • Personal bounties: Private DM bounty list for individuals
  • Admin-only posting: Only group admins can add/update/delete bounties
  • Universal tracking: Any member can track bounties to their personal list
  • Due date reminders: Daily cron notifies users when bounties are due within 7 days
  • Free-form dates: Natural language due dates ("tomorrow", "in 3 days", "april 15")
  • Link deduplication: No duplicate links within the same group

Project Structure

jigaido/
├── core/                    # Domain layer (pure Python, no external deps)
│   ├── models.py            # Domain dataclasses (Bounty, Tracking)
│   ├── ports.py             # Port interfaces
│   └── services.py          # Domain services
├── adapters/                # Infrastructure adapters
│   └── storage/
│       └── json_file.py     # JSON file storage implementation
├── apps/
│   └── telegram-bot/        # Telegram bot CLI application
│       ├── bot.py            # Bot entry point
│       └── commands.py       # Command handlers
├── tests/                   # Unit tests
├── config.py               # Configuration management
└── SPEC.md                 # Full design specification

Quick Start

# Install dependencies
pip install -r apps/telegram-bot/requirements.txt

# Set bot token
export JIGAIDO_BOT_TOKEN="your_bot_token"

# Run bot
python -m apps.telegram-bot.bot

License

MIT

Description
Bounty tracker powered by Telegram — Nanami-style cursed technique for tracking obligations and overtime.
Readme 759 KiB
Languages
Python 99.1%
Shell 0.9%