1 unstable release
Uses new Rust 2024
new 0.1.0 | Mar 24, 2025 |
---|
#23 in #resume
215KB
5.5K
SLoC
Discord Client Gateway
A high-level Rust implementation of the Discord gateway, designed to provide a robust and efficient client-side connection to Discord's real-time WebSocket API.
This crate offers a seamless integration for Discord bot developers, featuring:
- Zlib-stream decompression support for Discord's compressed payloads
- TLS impersonation and HTTP/2 (H2) mimicing of Chrome to avoid detection
- Automatic heartbeat with sequence number handling
- Efficient handling of Discord's WebSocket events
- Automatic shard management for scalable bot implementations
- Reconnect and resume support
Whether you're building a simple bot or a complete Discord client reimplementation, this crate provides the tools you need to establish and maintain a reliable connection to Discord's gateway.
Key Features
- High-level API
- Automatic reconnection
- Event dispatching
- Guilds subscribing
Usage
Dependencies
Add this crate to your Cargo.toml
:
[dependencies]
discord_client_gateway = "0.1.0"
Creating a client
let token = "CLIENT_TOKEN".to_string();
let capabilities = 53607934; // Best if you want to receive all events
let client_build_nubmer = 369195; // You should always use the latest build number
// you can also fetch the build number from the crate `discord_client_rest`
let mut client = GatewayClient::connect(token, capabilities, client_build_nubmer)
.await
.unwrap();
Receive events
loop {
let event = client.next_event().await.unwrap();
println!("{}", event);
// Print the new messages content
if let Event::MessageCreate(message_create) = event {
let centent = message_create.message.content.unwrap_or("No content".to_string());
println!("Message: {}", content);
}
}
Subscribe to guilds
This example shows how to subscribe to all guilds after receiving the Ready
event.
You can just subscribe to the guilds you want to receive events from by giving the guild ids to the bulk_guild_subscribe
method.
let event = client.next_event().await.unwrap();
println!("{}", event);
if let Event::Ready(ready) = event {
let mut ids: Vec<u64> = Vec::new();
let guilds = ready.guilds;
for guild in guilds {
let guild_id = guild.id;
ids.push(guild_id);
}
client.bulk_guild_subscribe(ids).await.unwrap();
}
Supported send events
- Identify
- Resume
- Heartbeat
- Update Presence
- Update Voice State
- Ping Voice Server
- Create Stream
- Watch Stream
- Set Stream Paused
- Delete Stream
- Ping Stream Server
- Bulk guild subscribe
- Request Guild Members
- Request Call Connect
- Update Guild Subscriptions
- Request Forum Unreads
- Remote Command
- Request Deleted Entity IDs
- Request Soundboard Sounds
- Request Last Messages
- Search Recent Members
- Request Channel Statuses
Supported receive events
- Application
- Application Command Permissions Update
- Channel
- Call
- Call Create
- Call Delete
- Call Update
- Conversation
- Conversation Summary Update
- DM
- DM Settings Upsell Show
- Pin
- Channel Pins Update
- Channel Pins ACX
- Recipient
- Channel Recipient Add
- Channel Recipient Remove
- Thread
- Thread Create
- Thread Delete
- Thread List Sync
- Thread Member Update
- Thread Members Update
- Thread Update
- Typing
- Typing Start
- Voice
- Voice Channel State Update
- Voice Server Update
- Voice State Update
- Webhook
- Webhooks Update
- Channel Create
- Channel Delete
- Channel Statuses
- Channel Update
- Call
- Friend
- Friend Suggestion Create
- Friend Suggestion Delete
- Game Relationship
- Game Relationship Add
- Game Relationship Remove
- Gateway
- Auth Session Change
- Authenticator Create
- Authenticator Delete
- Authenticator Update
- Gateway Payload
- Gateway Reconnect
- Heartbeat Ack
- OAuth2 Token Revoke
- Remote Command
- Resumed
- Sessions Replace
- Guild
- ACK
- Guild Features Ack
- Auto Moderation
- Auto Moderation Mention Raid Detection
- Ban
- Guild Ban Add
- Guild Ban Remove
- Channels
- Channels unread update
- Emoji
- Guild Emojis Update
- Integration
- Guild Integration Create
- Guild Integration Delete
- Guild Integration Update
- Guild Integrations Update
- Log
- Guild Audit Log Entry Create
- Member
- Guild Member Add
- Guild Member Remove
- Guild Member Update
- Guild Members Chunk
- Requests
- Guild Join Request Create
- Guild Join Request Delete
- Guild Join Request Update
- Role
- Guild Role Create
- Guild Role Delete
- Guild Role Update
- Schedule Event
- Guild Schedule Event Create
- Guild Schedule Event Delete
- Guild Schedule Event Update
- Guild Schedule Event User Add
- Guild Schedule Event User Remove
- Guild Scheduled Event Exception Create
- Guild Scheduled Event Exception Delete
- Guild Scheduled Event Exceptions Delete
- Guild Scheduled Event Exception Update
- Soundboard
- Guild Soundboard Sound Create
- Guild Soundboard Sound Delete
- Guild Soundboard Sound Update
- Soundboard Sounds
- Sticker
- Guild Stickers Update
- Update
- Passive Update V2
- Guild Create
- Guild Delete
- Guild Update
- ACK
- Message
- Mention
- Recent Mention Delete
- Poll
- Message Poll Vote Add
- Message Poll Vote Remove
- Reactions
- Message Reaction Add
- Message Reaction Add Many
- Message Reaction Remove
- Message Reaction Remove All
- Message Reaction Remove Emoji
- Last Messages
- Message Ack
- Message Create
- Message Delete
- Message Delete Bulk
- Message Update
- Mention
- Misc
- Content Inventory Inbox Stale
- User Settings Proto Update
- Presence
- Presence Update
- Ready
- Ready
- Ready Supplemental
- Stage
- Stage Instance Create
- Stage Instance Delete
- Stage Instance Update
- Stream
- Stream Create
- Stream Delete
- Stream Server Update
- Stream Update
- User
- User Application Remove
- User Application Update
- User Connections Update
- User Guild Settings Update
- User Merge Operation Completed
- User Note Update
- User Required Action Update
- User Settings Update
- Relationship
- Relationship Add
- Relationship Remove
- Relationship Update
Dependencies
~56MB
~1M SLoC