# sinisterrectus/discordia architecture

> Architecture diagram of the GitHub repository sinisterrectus/discordia, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-29). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/sinisterrectus/discordia
- Repository: https://github.com/sinisterrectus/discordia

## Overview

Discordia is a Lua library for building Discord bots: applications use its event-driven Client, which communicates asynchronously with Discord over REST and WebSockets and exposes a high-level object interface. The tree also shows voice support, including connections and audio streams. Relationships are limited to the README’s documented capabilities and the tree’s module names; source excerpts were unavailable, so internal call wiring is not asserted.

Main entry points: [`libs/client/Client.lua`](https://github.com/sinisterrectus/discordia/blob/master/libs/client/Client.lua) (Client), [`libs/voice/VoiceConnection.lua`](https://github.com/sinisterrectus/discordia/blob/master/libs/voice/VoiceConnection.lua) (Voice connection), [`libs/client/EventHandler.lua`](https://github.com/sinisterrectus/discordia/blob/master/libs/client/EventHandler.lua) (Event handling), [`libs/client/API.lua`](https://github.com/sinisterrectus/discordia/blob/master/libs/client/API.lua) (REST API)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_client["Client and events"]
  node_client["Client<br/>[Client.lua]"]
  node_events["Event handling<br/>[EventHandler.lua]"]
end

subgraph group_discord["Discord interface"]
  node_gateway["WebSocket<br/>[WebSocket.lua]"]
  node_shard["Shard<br/>[Shard.lua]"]
  node_api["REST API<br/>[API.lua]"]
  node_endpoints["Endpoints<br/>[endpoints.lua]"]
end

subgraph group_models["Objects and state"]
  node_resolver["Resolver<br/>[Resolver.lua]"]
  node_containers["Discord objects"]
  node_message["Message<br/>[Message.lua]"]
  node_iterables["Iterables and caches"]
end

subgraph group_voice["Voice and audio"]
  node_voice_manager["Voice manager<br/>[VoiceManager.lua]"]
  node_voice_connection["Voice connection"]
  node_voice_socket["Voice socket<br/>[VoiceSocket.lua]"]
  node_audio_streams["Audio streams"]
  node_opus["Opus support<br/>[opus.lua]"]
  node_sodium["Sodium support<br/>[sodium.lua]"]
end

node_app(("Bot application"))
node_discordsvc(("Discord service"))

node_app -->|"uses"| node_client
node_client -->|"REST communication"| node_discordsvc
node_client -->|"WebSocket communication"| node_discordsvc
node_app -->|"registers handlers"| node_events
node_events -->|"dispatches events"| node_app
node_app -->|"requests API actions"| node_api
node_api -->|"HTTP requests"| node_discordsvc
node_client -->|"WebSocket I/O"| node_gateway
node_client -->|"supports sharding"| node_shard
node_app -->|"uses objects"| node_containers
node_app -->|"reads messages"| node_message
node_client -->|"resolves objects"| node_resolver
node_client -->|"uses collections"| node_iterables
node_client -->|"voice support"| node_voice_manager
node_voice_manager -->|"manages connections"| node_voice_connection
node_voice_connection -->|"voice transport"| node_voice_socket
node_voice_connection -->|"processes audio"| node_audio_streams
node_audio_streams -->|"codec support"| node_opus
node_voice_socket -->|"crypto support"| node_sodium

click node_client "https://github.com/sinisterrectus/discordia/blob/master/libs/client/Client.lua"
click node_events "https://github.com/sinisterrectus/discordia/blob/master/libs/client/EventHandler.lua"
click node_gateway "https://github.com/sinisterrectus/discordia/blob/master/libs/client/WebSocket.lua"
click node_shard "https://github.com/sinisterrectus/discordia/blob/master/libs/client/Shard.lua"
click node_api "https://github.com/sinisterrectus/discordia/blob/master/libs/client/API.lua"
click node_endpoints "https://github.com/sinisterrectus/discordia/blob/master/libs/endpoints.lua"
click node_resolver "https://github.com/sinisterrectus/discordia/blob/master/libs/client/Resolver.lua"
click node_containers "https://github.com/sinisterrectus/discordia/tree/master/libs/containers"
click node_message "https://github.com/sinisterrectus/discordia/blob/master/libs/containers/Message.lua"
click node_iterables "https://github.com/sinisterrectus/discordia/tree/master/libs/iterables"
click node_voice_manager "https://github.com/sinisterrectus/discordia/blob/master/libs/voice/VoiceManager.lua"
click node_voice_connection "https://github.com/sinisterrectus/discordia/blob/master/libs/voice/VoiceConnection.lua"
click node_voice_socket "https://github.com/sinisterrectus/discordia/blob/master/libs/voice/VoiceSocket.lua"
click node_audio_streams "https://github.com/sinisterrectus/discordia/tree/master/libs/voice/streams"
click node_opus "https://github.com/sinisterrectus/discordia/blob/master/libs/voice/opus.lua"
click node_sodium "https://github.com/sinisterrectus/discordia/blob/master/libs/voice/sodium.lua"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_client,node_events toneBlue
class node_gateway,node_shard,node_api,node_endpoints toneAmber
class node_resolver,node_containers,node_message,node_iterables toneMint
class node_voice_manager,node_voice_connection,node_voice_socket,node_audio_streams,node_opus,node_sodium toneRose
class node_app,node_discordsvc toneIndigo
```

## Components

### Client and events

- [Client](https://github.com/sinisterrectus/discordia/blob/master/libs/client/Client.lua): `libs/client/Client.lua`
- [Event handling](https://github.com/sinisterrectus/discordia/blob/master/libs/client/EventHandler.lua): `libs/client/EventHandler.lua`

### Discord interface

- [WebSocket](https://github.com/sinisterrectus/discordia/blob/master/libs/client/WebSocket.lua): `libs/client/WebSocket.lua`
- [Shard](https://github.com/sinisterrectus/discordia/blob/master/libs/client/Shard.lua): `libs/client/Shard.lua`
- [REST API](https://github.com/sinisterrectus/discordia/blob/master/libs/client/API.lua): `libs/client/API.lua`
- [Endpoints](https://github.com/sinisterrectus/discordia/blob/master/libs/endpoints.lua): `libs/endpoints.lua`

### Objects and state

- [Resolver](https://github.com/sinisterrectus/discordia/blob/master/libs/client/Resolver.lua): `libs/client/Resolver.lua`
- [Discord objects](https://github.com/sinisterrectus/discordia/tree/master/libs/containers): `libs/containers`
- [Message](https://github.com/sinisterrectus/discordia/blob/master/libs/containers/Message.lua): `libs/containers/Message.lua`
- [Iterables and caches](https://github.com/sinisterrectus/discordia/tree/master/libs/iterables): `libs/iterables`

### Voice and audio

- [Voice manager](https://github.com/sinisterrectus/discordia/blob/master/libs/voice/VoiceManager.lua): `libs/voice/VoiceManager.lua`
- [Voice connection](https://github.com/sinisterrectus/discordia/blob/master/libs/voice/VoiceConnection.lua): `libs/voice/VoiceConnection.lua`
- [Voice socket](https://github.com/sinisterrectus/discordia/blob/master/libs/voice/VoiceSocket.lua): `libs/voice/VoiceSocket.lua`
- [Audio streams](https://github.com/sinisterrectus/discordia/tree/master/libs/voice/streams): `libs/voice/streams`
- [Opus support](https://github.com/sinisterrectus/discordia/blob/master/libs/voice/opus.lua): `libs/voice/opus.lua`
- [Sodium support](https://github.com/sinisterrectus/discordia/blob/master/libs/voice/sodium.lua): `libs/voice/sodium.lua`

### Other components

- **Bot application**
- **Discord service**

## Connections

- Bot application → Client: uses
- Client → Discord service: REST communication
- Client → Discord service: WebSocket communication
- Bot application → Event handling: registers handlers
- Event handling → Bot application: dispatches events
- Bot application → REST API: requests API actions
- REST API → Discord service: HTTP requests
- Client → WebSocket: WebSocket I/O
- Client → Shard: supports sharding
- Bot application → Discord objects: uses objects
- Bot application → Message: reads messages
- Client → Resolver: resolves objects
- Client → Iterables and caches: uses collections
- Client → Voice manager: voice support
- Voice manager → Voice connection: manages connections
- Voice connection → Voice socket: voice transport
- Voice connection → Audio streams: processes audio
- Audio streams → Opus support: codec support
- Voice socket → Sodium support: crypto support
