- π§ AI Chat β Unhinged, sassy replies inspired by Aira from Dandadan. No full sentences required.
- π Web Search β Searches the web via Exa and cites sources in a references embed
- π Chart Generation β Renders bar, line, pie, radar, and horizontal bar charts as PNG images
- π Server Vibe Check β Reads recent channel messages and gives a brutally honest vibe report
- π Voice Chat β Joins voice channels and speaks responses aloud via Piper TTS
- π‘οΈ Moderation β Kick, ban, assign/remove roles, send DMs, list roles
- π Status Control β Sets her own Discord status and activity on command
- π§΅ Reply Awareness β Responds to replies on her own messages with full context
- π Persistent Memory β Short and long-term memory stored in encrypted msgpack
- π Async Task Queue β All Discord actions run asynchronously and in order
- π‘οΈ Prompt Injection Defense β Go-layer regex sanitizer + hardened system prompt
- π€ Mention to Activate β Just mention her or reply to her messages
airo/
βββ discord/
β βββ events/ # Message handler, search, vibe check, permissions, cooldown
β βββ voice/ # Voice connection manager + Piper TTS pipeline
βββ lib/ # AI client abstraction, prompts, injection sanitizer
βββ skills/
β βββ actions/ # Action parser, handler, memory store
β βββ chart.go # go-charts PNG renderer
β βββ exa.go # Exa web search client
βββ tasks/ # Async task queue
βββ main.go
βββ .env
git clone https://github.com/jayydoesdev/airo.git
cd airoCreate a .env file in the root:
DISCORD_BOT_TOKEN=your_bot_token
DEEPSEEK_API_KEY=your_deepseek_api_key
EXA_API_KEY=your_exa_api_key
EXA_RESULT_LIMIT=5
# Optional β only needed for voice chat
PIPER_MODEL=/path/to/en_US-lessac-medium.onnx
PIPER_SAMPLE_RATE=22050Enable Message Content Intent, Guild Members Intent, and Guild Voice States Intent in the Discord Developer Portal.
# Required for chart rendering (already pure-Go, no extra deps)
# Required for voice chat only
apt install libopus-dev ffmpeg # Ubuntu/Debian
brew install opus ffmpeg # macOSDownload a Piper binary and a voice model:
# Download model (~60MB)
curl -LO https://huggingface.co/rhasspy/piper-voices/resolve/main/en/en_US/lessac/medium/en_US-lessac-medium.onnx
curl -LO https://huggingface.co/rhasspy/piper-voices/resolve/main/en/en_US/lessac/medium/en_US-lessac-medium.onnx.jsonSet PIPER_MODEL and PIPER_SAMPLE_RATE in your .env.
go run main.go| Action | Description |
|---|---|
kick_user |
Kicks a member |
ban_user |
Bans a member |
assign_role |
Gives a user a role |
remove_role |
Removes a role from a user |
dm_user |
Sends a private message to a user |
list_user_roles |
Lists roles for a specific member |
generate_chart |
Renders a chart as a PNG embed |
set_status |
Sets the bot's Discord status and activity |
join_voice |
Joins the user's current voice channel |
leave_voice |
Leaves the current voice channel |
speak_in_voice |
Speaks text aloud in the user's voice channel |
Aira can generate charts inline in her response embed. Supported types:
| Type | Best for |
|---|---|
bar |
Comparisons and rankings |
horizontal_bar |
Long category names |
line |
Trends over time |
pie |
Proportions and percentages |
radar |
Multi-attribute comparisons |
Supports custom colors per dataset (hex), dark/light/grafana/ant themes, and custom width/height.
Contributions, PRs, and sarcastic comments welcome.
MIT License β see LICENSE for details.
Airo is inspired by Aira from Dandadan β chaotic, funny, and a little too smart for her own good.
