chorus/bot/chorus_bot/config.py
pyr0ball 669bb3456a feat(bot): add modality map, config loader, and backend client
Implements core bot infrastructure:
- modality_map: channel name to modality string mapping (personal_text, voice, fb_messenger, nd_messenger)
- config: Config dataclass with env-driven configuration loading for Discord, backend, and email IMAP credentials
- backend_client: async HTTP client for posting items to backend /items endpoint

All modality_map tests passing (3/3)
2026-07-13 13:48:39 -07:00

45 lines
1.6 KiB
Python

import os
from dataclasses import dataclass
@dataclass
class Config:
discord_token: str
guild_id: int
inbox_channel_id: int
triage_role_id: int
backend_base_url: str
google_voice_imap_host: str
google_voice_imap_user: str
google_voice_imap_password: str
bh_email_imap_host: str
bh_email_imap_user: str
bh_email_imap_password: str
personal_email_imap_host: str
personal_email_imap_user: str
personal_email_imap_password: str
def load_config() -> Config:
def env(name: str) -> str:
value = os.environ.get(name)
if not value:
raise RuntimeError(f"Missing required env var: {name}")
return value
return Config(
discord_token=env("CHORUS_DISCORD_TOKEN"),
guild_id=int(env("CHORUS_GUILD_ID")),
inbox_channel_id=int(env("CHORUS_INBOX_CHANNEL_ID")),
triage_role_id=int(env("CHORUS_TRIAGE_ROLE_ID")),
backend_base_url=env("CHORUS_BACKEND_BASE_URL"),
google_voice_imap_host=env("CHORUS_GVOICE_IMAP_HOST"),
google_voice_imap_user=env("CHORUS_GVOICE_IMAP_USER"),
google_voice_imap_password=env("CHORUS_GVOICE_IMAP_PASSWORD"),
bh_email_imap_host=env("CHORUS_BH_EMAIL_IMAP_HOST"),
bh_email_imap_user=env("CHORUS_BH_EMAIL_IMAP_USER"),
bh_email_imap_password=env("CHORUS_BH_EMAIL_IMAP_PASSWORD"),
personal_email_imap_host=env("CHORUS_PERSONAL_EMAIL_IMAP_HOST"),
personal_email_imap_user=env("CHORUS_PERSONAL_EMAIL_IMAP_USER"),
personal_email_imap_password=env("CHORUS_PERSONAL_EMAIL_IMAP_PASSWORD"),
)