Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 13 additions & 18 deletions .env.example
Original file line number Diff line number Diff line change
Expand Up @@ -85,26 +85,14 @@ DISCORD_AUTO_ROLE_ID=
JOKE_MODERATOR_ROLE_ID=

# ============================================================
# Conversation Summaries (OPTIONAL)
# AI Services (OPTIONAL)
# ============================================================

# Summary execution mode determines how /summary command works:
#
# Options:
# - local → Fast heuristic summaries (no API needed, always available)
# - llm → High-quality AI summaries using OpenAI (requires API key)
#
# Default: local
SUMMARY_MODE=local

# OpenAI API key for LLM-powered summaries
# Get it from: https://platform.openai.com/api-keys
#
# Only required if SUMMARY_MODE=llm
# Cost: ~$0.01-0.05 per summary (depends on message count)
#
# If unset and SUMMARY_MODE=llm, bot falls back to local summaries
OPENAI_API_KEY=
# Anthropic API key for Claude AI
# Get it from: https://console.anthropic.com/
# Used for: /gh history, /gh summary
# Cost: ~$0.003 per summary (much cheaper than ChatGPT!)
ANTHROPIC_API_KEY=

# ============================================================
# Weather (OPTIONAL)
Expand Down Expand Up @@ -245,3 +233,10 @@ LOG_PRETTY=true
#
# Default: data/omegabot.db
DATABASE_PATH=data/omegabot.db

# ============================================================
# Claude AI (Optional)
# ============================================================
# Get your API key from: https://console.anthropic.com/
# Used for: /gh history, /gh summary (AI-powered summaries)
ANTHROPIC_API_KEY=
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ build/

# OS junk
Thumbs.db
Claude.dmg

# TypeScript (if added later)
*.tsbuildinfo
Expand Down
163 changes: 91 additions & 72 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ OmegaBot is a modular Discord bot designed to support development projects with

## Table of Contents

- [Features](#features)
- [Core Features](#core-features)
- [Documentation](#documentation)
- [Getting Started](#getting-started)
- [Project Structure](#project-structure)
Expand All @@ -28,24 +28,32 @@ OmegaBot is a modular Discord bot designed to support development projects with

---

## Current features

- Modular slash-command system with auto-loading from `dist/commands`
- Centralized interaction routing with consistent, safe error handling
- Structured logging (pino)
- Welcome and onboarding flows triggered on member join (`guildMemberAdd`)
- Optional auto-role assignment for new members (`DISCORD_AUTO_ROLE_ID`)
- GitHub integration with 5-minute API caching (80-90% reduction in API calls), including:
- Health/status checks
- Issue and PR lookups
- New PR announcements
- Issue assignee change announcements (Issues only, PRs filtered for reduced noise)
- Issue closed announcements
- Smart notification filtering (only Issues trigger activity updates)
- Configuration and feature gating via environment variables (optional features run only when enabled)
- Per-guild configuration backed by persistent storage and admin slash commands
- **Timezone support** – Save your timezone, view it later, and compare times across locations or users
- **SQLite-backed storage** – Persistent data for FAQs, jokes, fun stats, timezones, and GitHub state
## Core Features

**Discord Integration:**

- Modular slash-command system with auto-loading
- Welcome messages and auto-role assignment for new members
- Structured logging (pino) and safe error handling

**GitHub Integration:**

- Issue and PR lookups with smart caching (80-90% fewer API calls)
- Automated announcements for PRs, issue activity, and closures
- Health checks and status monitoring

**Community Features:**

- User-submitted jokes with 13 categories and moderation
- Coin flips, dice rolls, weather, and polls
- FAQ system for server knowledge base
- Timezone management for coordination across time zones

**Data & Configuration:**

- SQLite database for persistent storage
- Environment-based configuration with feature gating
- Per-guild settings via admin commands

### Core commands

Expand Down Expand Up @@ -214,83 +222,78 @@ OmegaBot uses discord.js v14 which includes:

```
.
├── .github
│ ├── ISSUE_TEMPLATE
│ │ ├── bug.yml
│ │ ├── config.yml
│ │ ├── documentation.yml
│ │ ├── enhancement_refactor.yml
│ │ ├── feature_request.yml
│ │ └── question_discussion.yml
│ ├── workflows
│ │ └── OmegaBot.yml
│ └── pull_request_template.md
├── .husky
│ ├── pre-commit
│ └── pre-push
├── assets
│ ├── banner.png
│ └── omegabot.png
├── CHANGELOG.md
├── CONTRIBUTORS.md
├── data
│ ├── faqs.json
│ ├── fun-usage.json
│ ├── github-assignees.json
│ ├── guild-config.json
│ ├── last-seen.json
│ └── omegabot.db
├── docs
│ ├── Claude.dmg
│ ├── commands.md
│ ├── dev-notes.md
│ ├── faq.md
│ ├── setup-discord.md
│ ├── setup-env.md
│ └── transcripts.md
├── .env
├── .env.example
├── eslint.config.ts
├── .github
│ ├── ISSUE_TEMPLATE
│ │ ├── bug.yml
│ │ ├── config.yml
│ │ ├── documentation.yml
│ │ ├── enhancement_refactor.yml
│ │ ├── feature_request.yml
│ │ └── question_discussion.yml
│ ├── pull_request_template.md
│ └── workflows
│ └── OmegaBot.yml
├── .gitignore
├── .husky
│ ├── pre-commit
│ └── pre-push
├── LICENSE
├── package.json
├── package-lock.json
├── .prettierignore
├── .prettierrc.yml
├── README.md
├── scripts
│ └── precheck.sh
├── src
│ ├── bot.ts
│ ├── commands
│ │ ├── admin
│ │ │ └── admin.ts
│ │ ├── changelog
│ │ │ └── changelog.ts
│ │ ├── config
│ │ │ └── config.ts
│ │ ├── faq
│ │ │ ├── faq.ts
│ │ │ ── subcommands
│ │ │ ├── add.ts
│ │ │ ├── get.ts
│ │ │ ── list.ts
│ │ │ └── remove.ts
│ │ │ ├── subcommands
│ │ │ │ ├── add.ts
│ │ │ ├── get.ts
│ │ │ ├── list.ts
│ │ │ ── remove.ts
│ │ │ └── faq.ts
│ │ ├── fun
│ │ │ ├── fun.ts
│ │ │ ── subcommands
│ │ │ ├── coinflip.ts
│ │ │ ├── dice.ts
│ │ │ ├── joke
│ │ │ │ ├── add.ts
│ │ │ ── index.ts
│ │ │ │ ├── list.ts
│ │ │ │ ├── random.ts
│ │ │ ── remove.ts
│ │ │ ├── leaderboard.ts
│ │ │ ── poll.ts
│ │ │ └── weather.ts
│ │ │ ├── subcommands
│ │ │ │ ├── joke
│ │ │ ├── add.ts
│ │ │ ├── index.ts
│ │ │ ├── list.ts
│ │ │ │ ├── random.ts
│ │ │ ── remove.ts
│ │ │ │ ├── coinflip.ts
│ │ │ │ ├── dice.ts
│ │ │ │ ── leaderboard.ts
│ │ │ ├── poll.ts
│ │ │ ── weather.ts
│ │ │ └── fun.ts
│ │ ├── general
│ │ │ └── ping.ts
│ │ ├── github
│ │ │ ├── gh.ts
│ │ │ ├── pr.ts
│ │ │ └── status.ts
│ │ ├── help
│ │ │ ├── helpText.ts
│ │ │ └── help.ts
│ │ │ ├── help.ts
│ │ │ └── helpText.ts
│ │ ├── history
│ │ │ └── history.ts
│ │ ├── pagination
Expand All @@ -303,8 +306,9 @@ OmegaBot uses discord.js v14 which includes:
│ │ └── timezone.ts
│ ├── config
│ │ └── env.ts
│ ├── registerCommands.ts
│ ├── services
│ │ ├── ai
│ │ │ └── claudeService.ts
│ │ ├── cache
│ │ │ └── simpleCache.ts
│ │ ├── config
Expand All @@ -322,11 +326,11 @@ OmegaBot uses discord.js v14 which includes:
│ │ │ ├── interactionHandler.ts
│ │ │ └── safeReply.ts
│ │ ├── faq
│ │ │ ├── _shared.ts
│ │ │ ├── faqService.ts
│ │ │ ├── permissions.ts
│ │ │ ├── services.test.ts
│ │ │ ├── services.ts
│ │ │ ├── _shared.ts
│ │ │ ├── store.test.ts
│ │ │ ├── store.test.ts.disabled
│ │ │ ├── store.ts
Expand All @@ -349,7 +353,6 @@ OmegaBot uses discord.js v14 which includes:
│ │ │ └── types.ts
│ │ ├── joke
│ │ │ └── jokeStore.ts
│ │ ├── permissions
│ │ ├── roles
│ │ │ └── autoRoleHandler.ts
│ │ ├── summary
Expand All @@ -370,8 +373,24 @@ OmegaBot uses discord.js v14 which includes:
│ │ └── welcome
│ │ ├── welcomeHandler.ts
│ │ └── welcomeMessage.ts
│ └── utils
│ └── logger.ts
│ ├── utils
│ │ ├── colors.ts
│ │ ├── interactions.ts
│ │ └── logger.ts
│ ├── bot.ts
│ └── registerCommands.ts
├── .env.example
├── .gitignore
├── .prettierignore
├── .prettierrc.yml
├── CHANGELOG.md
├── CONTRIBUTORS.md
├── eslint.config.ts
├── install-claude-admin.sh
├── LICENSE
├── package-lock.json
├── package.json
├── README.md
├── tsconfig.json
└── vitest.config.ts

Expand Down
1 change: 0 additions & 1 deletion docs/commands.md
Original file line number Diff line number Diff line change
Expand Up @@ -468,7 +468,6 @@ Search FAQ entries by keyword.

## Notes

- **Ephemeral Options:** Many commands support `ephemeral: true` to show results only to you
- **Usage Tracking:** Fun commands automatically track usage for leaderboards
- **Permissions:** Some commands require specific roles (check server configuration)
- **API Keys:** Weather and LLM features require API keys in `.env`
Expand Down
Loading