major-domo-v2/CLAUDE.md
Cal Corum 67de736581
All checks were successful
Build Docker Image / build (pull_request) Successful in 1m8s
Add production environment details to CLAUDE.md
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-15 18:01:55 -06:00

2.6 KiB

Discord Bot v2.0

SBA fantasy league Discord bot. discord.py with async Python, Pydantic models, FastAPI backend.

Commands

  • Run: python bot.py
  • Test: python -m pytest --tb=short -q
  • Test specific: python -m pytest tests/test_services.py -v

IMPORTANT: Patterns That Prevent Real Bugs

Docker Hub Repository Name

manticorum67/major-domo-discordapp

There is NO DASH between "discord" and "app". Not discord-app, not discordapp-v2.

Git Workflow

NEVER commit directly to main. Always use feature branches:

git checkout -b feature/name   # or fix/name

Double Emoji in Embeds

EmbedTemplate.success/error/warning/info/loading() auto-add emoji prefixes.

  • Do NOT put emoji in the title parameter of these methods (causes double emoji)
  • Use EmbedTemplate.create_base_embed() when you want custom emoji in titles

Autocomplete Functions

Define autocomplete as standalone functions OUTSIDE the class, not as methods.

  • See commands/players/info.py:20-67 for canonical example

Model Requirements

  • Database entities require id fields: Player(id=123, ...), Team(id=456, ...)
  • Use explicit None checks (if obj is None:) not if not obj:
  • Use "Raise or Return" pattern - don't return Optional unless specifically required

New Commands Must Use

from utils.decorators import logged_command
from utils.logging import get_contextual_logger

class MyCog(commands.Cog):
    def __init__(self, bot):
        self.bot = bot
        self.logger = get_contextual_logger(f'{__name__}.MyCog')  # Required

    @discord.app_commands.command(name="example")
    @logged_command("/example")
    async def example(self, interaction, param: str):
        # Business logic only - decorator handles logging, timing, errors

Deployment

Production Environment

  • Host: ssh akamai (Akamai cloud server)
  • Bot container: major-domo-discord-app-1
  • Logs: ssh akamai "docker logs --since 1h major-domo-discord-app-1"
  • Other services on same host: sba_db_api, sba_postgres, sba_redis, sba-website-sba-web-1, pd_api

CI/CD

Builds and deploys are handled by Gitea Actions. Create a PR to main using tea:

tea pulls create --repo cal/major-domo-v2 --head <branch> --base main --title "title" --description "description"

Gitea validates the version, builds the Docker image, and deploys on merge.

API Reference

Sub-directory Documentation

Each package has its own CLAUDE.md with detailed patterns: commands/, services/, models/, views/, tasks/, tests/, utils/