Part of #40 Allow admins to schedule one-time or recurring messages via /announce. ## Subtasks - [ ] Create scheduled_messages table: id, guild_id, channel_id, content, embed_json, cron_expression, next_run, timezone, author_id, enabled, created_at - [ ] /announce once <time> <channel> <message> — schedule a one-time message at a specific datetime - [ ] /announce recurring <cron> <channel> <message> — schedule a recurring message (daily, weekly, etc.) - [ ] /announce list — show all scheduled messages for the guild with next fire time - [ ] /announce cancel <id> — cancel a scheduled message (author or admin) - [ ] Lightweight scheduler: setInterval polling every 60s, checks next_run, fires and updates - [ ] Support rich embeds via optional --embed flag with title/description/color - [ ] Timezone support via guild-level config (default America/New_York) ## Acceptance Criteria - One-time and recurring announcements work - Scheduler persists across restarts - Timezone-aware scheduling