#discord #channel #rate-limiting #mfa #client #header #rest-client

discord_client_rest

Undetected discord client rest API reimplementation

1 unstable release

Uses new Rust 2024

new 0.1.0 Mar 24, 2025

#7 in #mfa

Download history 82/week @ 2025-03-19

82 downloads per month

MIT and GPL-3.0 licenses

215KB
5.5K SLoC

Discord Client Rest

A high-level Rust implementation of the Discord REST API, designed to provide a robust and efficient client-side interface to Discord's HTTP API.

This crate offers a seamless integration for Discord bot developers, featuring:

  • Automatic ratelimit handling for all REST requests
  • TLS impersonation and HTTP/2 (H2) mimicing of Chrome to avoid detection
  • Automated token login and session management
  • Efficient handling of Discord's REST responses
  • Captcha detection and handling
  • Automatic headers generation for Discord's REST requests
  • MFA Handling
  • Ratelimit handling and queueing

Usage

Dependencies

Add this crate to your Cargo.toml:

[dependencies]
discord_client_rest = "0.1.0"

Creating a client

let token = ...

let custom_api_version = None;
let custom_build_number = None;

let mut client = RestClient::connect(token, custom_api_version, custom_build_number)
    .await
    .unwrap();

getting API version and build number

println!("API Version: {}", client.api_version);

// Useful for the gateway client
println!("Build Number: {}", client.build_number);

Examples

Making custom requests

let path = "/channels/1234567890/messages";

// alwasy make sur to add a referer
let referer: Referer = match guild_id {
    Some(guild_id) => GuildChannelReferer {
        guild_id,
        channel_id: self.channel_id,
    }
    .into(),
    None => DmChannelReferer {
        channel_id: self.channel_id,
    }
    .into(),
};

let props = RequestPropertiesBuilder::default()
    .referer::<Referer>(referer.into())
    // .context(....)
    // .solved_captcha(...)
    .build()?;

// Any struct that implements Serialize can be used as the body
let body = MessageBuilder::default()
    .content("Hello, world!")
    .build()?;

// This will automatically handle ratelimits and return the response
// The return type is an Option<T> where T is Deserialize
let resp: ? = self.client
            .post::<Message, Message>(&path, Some(message), Some(props))
            .await?;

You call also use put, patch, delete, get methods to make requests.

The get method is used to make requests that cannot send a body but instead can receive query parameters.

let path = format!("channels/{}/messages/search", self.channel_id);

let referer = DmChannelReferer {
    channel_id: self.channel_id,
};

let props = RequestPropertiesBuilder::default()
    .referer::<Referer>(referer.into())
    .build()?;

// Format is HashMap<String, String> for the query
self.client
    .get::<MessageSearchResult>(&path, Some(query.to_map()), Some(props))
    .await

Supported interactions

  • Applications
    • Acknowledge Application Disclosures
    • Create Application
    • Create Application Asset
    • Create Application Attachment
    • Create Application Bot
    • Delete Application
    • Delete Application Asset
    • Get Application
    • Get Application Assets
    • Get Application Disclosures
    • Get Application Discoverability State
    • Get Application Embedded Activity Config
    • Get Application Proxy Config
    • Get Applications
    • Get Applications with Assets
    • Get Current Application
    • Get Detectable Applications
    • Get Embedded Activities
    • Get Guild Applications
    • Get Partial Application
    • Get Partial Applications
    • Get Rich Presence Application
    • Get User Application Role Connection
    • Modify Application
    • Modify Application Bot
    • Modify Application Embedded Activity Config
    • Modify Application Proxy Config
    • Modify Current Application
    • Modify User Application Role Connection
    • Report Unverified Application
    • Reset Application Bot Token
    • Reset Application Secret
    • Set Application Embeddability
    • Transfer Application
    • Upload Unverified Application Icon
  • Audit log
    • Get Guild Audit Log
  • Auto moderation
    • Clear Mention Raid Incident
    • Create Guild AutoMod Rule
    • Delete Guild AutoMod Rule
    • Execute AutoMod Alert Action
    • Get Guild AutoMod Rule
    • Get Guild AutoMod Rules
    • Modify AutoMod Incident Actions
    • Modify Guild AutoMod Rule
    • Report AutoMod Incident
    • Resolve AutoMod Incident
    • Validate Guild AutoMod Rule
  • Channels
    • Acknowledge Blocked User Warning
    • Acknowledge Safety Warnings
    • Add Channel Recipient
    • Add Safety Warning
    • Add Thread Member
    • Batch Reject Message Requests
    • Create Channel Tag
    • Create Guild Channel
    • Create Private Channel
    • Create Thread
    • Create Thread from Message
    • Delete Channel
    • Delete Channel Permission
    • Delete Channel Tag
    • Delete Read State
    • Delete Safety Warnings
    • Follow Channel
    • Get Active Threads
    • Get Call Eligibility
    • Get Channel
    • Get Channel Post Data
    • Get DM Channel
    • Get Guild Active Threads
    • Get Guild Channels
    • Get Guild Top Read Channels
    • Get Joined Private Archived Threads
    • Get Private Archived Threads
    • Get Private Channels
    • Get Public Archived Threads
    • Get Supplemental Message Request Data
    • Get Thread Member
    • Get Thread Members
    • Join Thread
    • Leave Thread
    • Modify Call
    • Modify Channel
    • Modify Channel Permissions
    • Modify Channel Status
    • Modify Channel Tag
    • Modify Guild Channel Positions
    • Modify Thread Settings
    • Reject Message Request
    • Remove Channel Recipient
    • Remove Thread Member
    • Report Safety Warning False Positive
    • Ring Channel Recipients
    • Search Threads
    • Stop Ringing Channel Recipients
    • Trigger Typing Indicator
    • Update Message Request
  • Clan
    • Create Clan
    • Disable Clan
    • Get Clan
    • Get Clan Settings
    • Modify Clan Settings
    • Set Clan Identity
  • Discovery
    • Add Guild Discovery Subcategory
    • Get Discoverable Guilds
    • Get Discovery Categories
    • Get Discovery Slug
    • Get Guild Discovery Metadata
    • Get Guild Discovery Requirements
    • Modify Guild Discovery Metadata
    • Remove Guild Discovery Subcategory
    • Search Discoverable Guilds
    • Search Published Guilds
    • Validate Discovery Search Term
  • Emoji
    • Create Application Emoji
    • Create Guild Emoji
    • Delete Application Emoji
    • Delete Guild Emoji
    • Get Application Emoji
    • Get Application Emojis
    • Get Emoji Guild
    • Get Emoji Source
    • Get Guild Emoji
    • Get Guild Emojis
    • Get Guild Top Emojis
    • Modify Application Emoji
    • Modify Guild Emoji
  • Family center
    • Create Linked User Request
    • Get Family Center Overview
    • Get Link Code
    • Get Linked Users
    • Modify Linked User
  • Guild scheduled events
    • Create Guild Scheduled Event
    • Create Guild Scheduled Event Exception
    • Create Guild Scheduled Event Exception User
    • Create Guild Scheduled Event User
    • Delete Guild Scheduled Event
    • Delete Guild Scheduled Event Exception
    • Delete Guild Scheduled Event Exception User
    • Delete Guild Scheduled Event User
    • Get Guild Scheduled Event
    • Get Guild Scheduled Event Exception Users
    • Get Guild Scheduled Event User Count
    • Get Guild Scheduled Event Users
    • Get Guild Scheduled Events
    • Get User Guild Scheduled Events
    • Modify Guild Scheduled Event
    • Modify Guild Scheduled Event Exception
  • Guild template
    • Create Guild Template
    • Delete Guild Template
    • Get Guild Template
    • Get Guild Templates
    • Modify Guild Template
    • Sync Guild Template
    • Use Guild Template
  • Guild
    • Acknowledge DM Settings Upsell Modal
    • Action Guild Join Request
    • Action Guild Join Request by User
    • Add Guild Member
    • Add Guild Member Role
    • Add Guild Role Members
    • Bulk Action Guild Join Requests
    • Bulk Guild Ban
    • Create Guild
    • Create Guild Ban
    • Create Guild Join Request
    • Create Guild Join Request Interview
    • Create Guild Role
    • Delete Guild
    • Delete Guild Ban
    • Delete Guild Join Request
    • Delete Guild Role
    • Get Admin Community Eligibility
    • Get Guild
    • Get Guild Ban
    • Get Guild Bans
    • Get Guild Basic
    • Get Guild Join Request
    • Get Guild Join Request Cooldown
    • Get Guild Join Requests
    • Get Guild Member
    • Get Guild Member Verification
    • Get Guild Members
    • Get Guild Members Supplemental
    • Get Guild Onboarding
    • Get Guild Preview
    • Get Guild Prune
    • Get Guild Role
    • Get Guild Role Member Counts
    • Get Guild Role Members
    • Get Guild Roles
    • Get Guild Vanity Invite
    • Get Guild Welcome Screen
    • Get Guild Widget
    • Get Guild Widget Image
    • Get Guild Widget Settings
    • Get Join Request Guilds
    • Get User Guilds
    • Join Admin Community
    • Join Guild
    • Join Wumpus Feedback Squad
    • Leave Guild
    • Modify Current Guild Member
    • Modify Current Guild Member Nick
    • Modify Guild
    • Modify Guild Member
    • Modify Guild Member Profile
    • Modify Guild Member Verification
    • Modify Guild MFA Level
    • Modify Guild Onboarding
    • Modify Guild Role
    • Modify Guild Role Positions
    • Modify Guild Vanity Invite
    • Modify Guild Welcome Screen
    • Modify Guild Widget
    • Prune Guild
    • Query Guild Members
    • Remove Guild Member
    • Remove Guild Member Role
    • Reset Guild Join Request
    • Search Guild Bans
    • Search Guild Members
  • Integration
    • Delete Channel Integration
    • Delete Guild Integration
    • Enable Guild Integration
    • Get Channel Integrations
    • Get Guild Integration Application IDs
    • Get Guild Integrations
    • Get Suggested GIF Search Terms
    • Get Trending GIF Categories
    • Get Trending GIF Search Terms
    • Get Trending GIFs
    • Join Integration Guild
    • Migrate Guild Command Scope
    • Modify Guild Integration
    • Search GIFs
    • Search Tenor GIFs
    • Sync Guild Integration
    • Track Selected GIF
  • Invite
    • Accept Invite
    • Create Channel Invite
    • Create User Invite
    • Delete Invite
    • Get Channel Invites
    • Get Guild Invites
    • Get Invite
    • Get User Invites
    • Revoke User Invites
  • Message
    • Acknowledge Message
    • Acknowledge Pinned Messages
    • Create Attachments
    • Create DM Message
    • Create Greet Message
    • Create Message
    • Create Poll Vote
    • Create Reaction
    • Crosspost Message
    • Delete All Reactions
    • Delete Attachment
    • Delete Conversation Summary
    • Delete DM Message
    • Delete Message
    • Delete Own Reaction
    • Delete Reaction
    • Delete Reaction Emoji
    • Edit DM Message
    • Edit Message
    • End Poll
    • Get Answer Voters
    • Get Channel Media Preview
    • Get Conversation Summaries
    • Get Message
    • Get Messages
    • Get Pinned Messages
    • Get Reactions
    • Hide Message from Guild Feed
    • Pin Message
    • Preload Messages
    • Refresh Attachment URLs
    • Search Messages
    • Unfurl Embed
    • Unfurl Embeds
    • Unpin Message
  • Premium referrals
    • Create Premium Referral
    • Get Premium Referral
    • Get Premium Referral Eligibility
    • Get Premium Referral Eligible Users
    • Preview Premium Referral
  • Presence
    • Create Headless Session
    • Delete Headless Session
    • Get Activity Metadata
    • Get Activity Secret
    • Get Presences
    • Update Presence
  • Quest
    • Accept Quest
    • Claim Quest Reward
    • Complete Quest
    • Dismiss Quest Content
    • Get Available Quests
    • Get Quest Reward Code
    • Reset Quest
    • Reset Quest Dismissibility
    • Send Quest Heartbeat
  • Relationship
    • Bulk Remove Relationships
    • Create Game Relationship
    • Create Game Relationship by Application
    • Create Relationship
    • Get Friend Suggestions
    • Get Game Relationships
    • Get Relationships
    • Ignore User
    • Modify Relationship
    • Remove Friend Suggestion
    • Remove Game Relationship
    • Remove Game Relationship by Application
    • Remove Relationship
    • Send Friend Request
    • Send Game Friend Request
    • Unignore User
  • Soundboard
    • Create Guild Soundboard Sound
    • Delete Guild Soundboard Sound
    • Get Default Soundboard Sounds
    • Get Guild Soundboard Sound
    • Get Guild Soundboard Sounds
    • Get Soundboard Sound Guild
    • Modify Guild Soundboard Sound
    • Send Soundboard Sound
  • Stage instance
    • Delete Stage Instance
    • Get Stage Instance
    • Modify Stage Instance
  • Sticker
    • Create Guild Sticker
    • Delete Guild Sticker
    • Get Guild Sticker
    • Get Guild Stickers
    • Get Sticker
    • Get Sticker Guild
    • Get Sticker Pack
    • Get Sticker Packs
    • Modify Guild Sticker
  • Team
    • Accept Team Invite
    • Add Team Member
    • Create Company
    • Create Team
    • Delete Team
    • Get Team
    • Get Team Applications
    • Get Team Members
    • Get Team Payout Onboarding
    • Get Team Payout Report
    • Get Team Payouts
    • Get Team Stripe Connect URL
    • Get Teams
    • Modify Team
    • Modify Team Member
    • Remove Team Member
    • Search Companies
  • User settings
    • Change username
    • Change global name
    • Request mail change
    • Change email
    • Change password
    • Change avatar
    • Change banner
    • Change bio
    • Change pronouns
    • Change accent color
    • Change date of birth
    • Change flags
    • Change avatar decoration
    • Bulk Modify User Guild Settings
    • Create Notification Settings Snapshot
    • Delete Notification Settings Snapshot
    • Get Email Settings
    • Get Notification Settings Snapshots
    • Get User Consents
    • Get User Settings
    • Get User Settings Proto
    • Modify Notification Settings
    • Modify User Consents
    • Modify User Guild Settings
    • Modify User Settings
    • Modify User Settings Proto
    • Restore Notification Settings Snapshot
  • User
    • Apply Confetti Potion
    • Authorize User Connection
    • Confirm Tutorial Indicator
    • Create Contact Sync Connection
    • Create Domain Connection
    • Create Pomelo Migration
    • Create User Connection Callback
    • Create User Harvest
    • Create WebAuthn Authenticator
    • Delete Recent Mention
    • Delete User
    • Delete User Connection
    • Delete WebAuthn Authenticator
    • Disable SMS MFA
    • Disable TOTP MFA
    • Disable User
    • Enable SMS MFA
    • Enable TOTP MFA
    • Get Backup Codes
    • Get Channel Affinities
    • Get Confetti Potions
    • Get Current User
    • Get Friend Token
    • Get Guild Affinities
    • Get Mutual Relationships
    • Get Pomelo Eligibility
    • Get Pomelo Suggestions
    • Get Recent Mentions
    • Get User
    • Get User Affinities
    • Get User Affinities v2
    • Get User Connection Access Token
    • Get User Connection Subreddits
    • Get User Connections
    • Get User Harvest
    • Get User Note
    • Get User Notes
    • Get User Premium Usage
    • Get User Profile
    • Get User Profile Effects
    • Get WebAuthn Authenticators
    • Join Active Developer Program
    • Join HypeSquad Online
    • Leave Active Developer Program
    • Leave HypeSquad Online
    • Modify Current User
    • Modify Current User Account
    • Modify User Connection
    • Modify User Email
    • Modify User Note
    • Modify User Profile
    • Modify WebAuthn Authenticator
    • Refresh User Connection
    • Send Backup Codes Challenge
    • Suppress Tutorial
    • Verify User Captcha
    • Verify User Email Change
  • Voice
    • Broadcast Stream Notification
    • Get Current User Voice State
    • Get Guild Voice Regions
    • Get Stream Preview
    • Get User Voice State
    • Get Voice Filters Catalog
    • Get Voice Regions
    • Modify Current User Voice State
    • Modify User Voice State
    • Send Voice Channel Effect
    • Upload Stream Preview
  • Webhook
    • Create Webhook
    • Delete Webhook
    • Delete Webhook Message
    • Delete Webhook with Token
    • Edit Webhook Message
    • Execute GitHub-Compatible Webhook
    • Execute Slack-Compatible Webhook
    • Execute Webhook
    • Get Channel Webhooks
    • Get Guild Webhooks
    • Get Webhook
    • Get Webhook Message
    • Get Webhook with Token
    • Modify Webhook
    • Modify Webhook with Token

Dependencies

~41–55MB
~1M SLoC