Merge branch 'main' into feature/full-gateway-coverage
This commit is contained in:
commit
a26ded8ab2
|
@ -4,6 +4,11 @@ version = "0.1.0"
|
||||||
license = "AGPL-3"
|
license = "AGPL-3"
|
||||||
edition = "2021"
|
edition = "2021"
|
||||||
|
|
||||||
|
[features]
|
||||||
|
default = ["client"]
|
||||||
|
backend = ["poem", "sqlx"]
|
||||||
|
client = []
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
tokio = {version = "1.28.1", features = ["rt", "macros", "rt-multi-thread", "full"]}
|
tokio = {version = "1.28.1", features = ["rt", "macros", "rt-multi-thread", "full"]}
|
||||||
serde = {version = "1.0.163", features = ["derive"]}
|
serde = {version = "1.0.163", features = ["derive"]}
|
||||||
|
@ -28,7 +33,7 @@ bigdecimal = "0.3.1"
|
||||||
num-bigint = "0.4.3"
|
num-bigint = "0.4.3"
|
||||||
lazy_static = "1.4.0"
|
lazy_static = "1.4.0"
|
||||||
poem = { version = "1.3.55", optional = true }
|
poem = { version = "1.3.55", optional = true }
|
||||||
sqlx = { version = "0.6.3", features = ["mysql", "sqlite", "json", "chrono", "ipnetwork", "runtime-tokio-native-tls", "any"], optional = true }
|
sqlx = { git = "https://github.com/zert3x/sqlx", branch="feature/skip", features = ["mysql", "sqlite", "json", "chrono", "ipnetwork", "runtime-tokio-native-tls", "any"], optional = true }
|
||||||
thiserror = "1.0.40"
|
thiserror = "1.0.40"
|
||||||
jsonwebtoken = "8.3.0"
|
jsonwebtoken = "8.3.0"
|
||||||
|
|
||||||
|
|
79
README.md
79
README.md
|
@ -31,24 +31,77 @@
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
## Roadmap
|
## Roadmap
|
||||||
|
### Core Functionality
|
||||||
Core functionality:
|
|
||||||
|
|
||||||
- [x] Rate Limiter (hint: couldn't be fully tested due to [an Issue with the Spacebar Server](https://github.com/spacebarchat/server/issues/1022))
|
- [x] Rate Limiter (hint: couldn't be fully tested due to [an Issue with the Spacebar Server](https://github.com/spacebarchat/server/issues/1022))
|
||||||
- [x] Login (conventional way) (Guess what? Found [an Issue with the Spacebar Server](https://github.com/spacebarchat/server/pull/1043) :3)
|
- [x] [Login (the conventional way)](https://github.com/polyphony-chat/chorus/issues/1)
|
||||||
- [ ] 2FA
|
- [ ] [2FA](https://github.com/polyphony-chat/chorus/issues/40)
|
||||||
- [x] Registration (encountered another [Issue with the Spacebar Server](https://github.com/spacebarchat/server/issues/1040) which makes some error messages an empty string)
|
- [x] [Registration](https://github.com/polyphony-chat/chorus/issues/1)
|
||||||
- [x] Gateway Events, multithreaded
|
|
||||||
- [x] Sending messages (Text, Images, Attachments)
|
### Messaging
|
||||||
- [x] Events (Message, User, Channel, etc.)
|
- [x] [Sending messages](https://github.com/polyphony-chat/chorus/issues/23)
|
||||||
- [ ] Adding, deleting and editing channels
|
- [ ] [Events (Message, User, Channel, etc.)](https://github.com/polyphony-chat/chorus/issues/51)
|
||||||
- [ ] User profile customization
|
- [x] Channel creation
|
||||||
|
- [x] Channel deletion
|
||||||
|
- [ ] Channel management (name, description, icon, etc.)
|
||||||
- [ ] Deleting messages
|
- [ ] Deleting messages
|
||||||
|
- [ ] Message threads
|
||||||
|
- [ ] Reactions
|
||||||
|
- [ ] Message Search
|
||||||
|
- [ ] Message history
|
||||||
|
|
||||||
|
### User Management
|
||||||
|
- [ ] User profile customization
|
||||||
|
- [x] Gettings users and user profiles
|
||||||
|
- [ ] Friend requests
|
||||||
|
- [ ] Blocking users
|
||||||
|
- [ ] User presence (online, offline, idle, etc.)
|
||||||
|
- [ ] User status (custom status, etc.)
|
||||||
|
- [x] Account deletion
|
||||||
|
|
||||||
|
### Additional Features
|
||||||
- [ ] Emoji
|
- [ ] Emoji
|
||||||
- [ ] Stickers
|
- [ ] Stickers
|
||||||
- [ ] Listing users and user profiles
|
|
||||||
- [ ] Message threads
|
|
||||||
- [ ] Forum channels
|
- [ ] Forum channels
|
||||||
|
- [ ] Server discovery
|
||||||
|
- [ ] Server templates
|
||||||
|
|
||||||
|
### Voice and Video
|
||||||
|
- [ ] Voice chat support
|
||||||
|
- [ ] Video chat support
|
||||||
|
|
||||||
|
### Permissions and Roles
|
||||||
|
- [ ] Role management (creation, deletion, modification)
|
||||||
|
- [ ] Permission management (assigning and revoking permissions)
|
||||||
|
- [ ] Channel-specific permissions
|
||||||
|
- [ ] Role-based access control
|
||||||
|
|
||||||
|
### Server Management
|
||||||
|
- [x] Server creation
|
||||||
|
- [x] Server deletion
|
||||||
|
- [ ] Server settings management (name, description, icon, etc.)
|
||||||
|
- [ ] Member management (adding, removing, banning, unbanning)
|
||||||
|
- [ ] Server invites
|
||||||
|
|
||||||
|
### Moderation
|
||||||
|
- [ ] Channel moderation (slow mode, etc.)
|
||||||
|
- [ ] User sanctions (mute, kick, ban)
|
||||||
|
- [ ] Audit logs
|
||||||
|
|
||||||
|
### Embeds and Rich Content
|
||||||
|
- [x] Sending rich content in messages (links, images, videos)
|
||||||
|
- [ ] Customizing embed appearance (title, description, color, fields)
|
||||||
|
|
||||||
|
### Notifications and Push Notifications
|
||||||
|
- [ ] Notification settings management
|
||||||
|
|
||||||
|
### Webhooks
|
||||||
|
- [ ] Webhook creation and management
|
||||||
|
- [ ] Handling incoming webhook events
|
||||||
|
|
||||||
|
### Documentation and Examples
|
||||||
|
- [ ] Comprehensive documentation
|
||||||
|
- [ ] Example usage and code snippets
|
||||||
|
- [ ] Tutorials and guides
|
||||||
|
|
||||||
[Rust]: https://img.shields.io/badge/Rust-orange?style=plastic&logo=rust
|
[Rust]: https://img.shields.io/badge/Rust-orange?style=plastic&logo=rust
|
||||||
[Rust-url]: https://www.rust-lang.org/
|
[Rust-url]: https://www.rust-lang.org/
|
||||||
|
|
|
@ -1,9 +1,14 @@
|
||||||
|
#[cfg(feature = "client")]
|
||||||
pub mod api;
|
pub mod api;
|
||||||
pub mod errors;
|
pub mod errors;
|
||||||
|
#[cfg(feature = "client")]
|
||||||
pub mod gateway;
|
pub mod gateway;
|
||||||
|
#[cfg(feature = "client")]
|
||||||
pub mod instance;
|
pub mod instance;
|
||||||
|
#[cfg(feature = "client")]
|
||||||
pub mod limit;
|
pub mod limit;
|
||||||
pub mod types;
|
pub mod types;
|
||||||
|
#[cfg(feature = "client")]
|
||||||
pub mod voice;
|
pub mod voice;
|
||||||
|
|
||||||
use url::{ParseError, Url};
|
use url::{ParseError, Url};
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
use crate::types::utils::Snowflake;
|
use crate::types::utils::Snowflake;
|
||||||
|
use crate::types::{Team, User};
|
||||||
use bitflags::{bitflags, Flags};
|
use bitflags::{bitflags, Flags};
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
use serde_json::Value;
|
use serde_json::Value;
|
||||||
|
@ -7,7 +8,7 @@ use serde_repr::{Serialize_repr, Deserialize_repr};
|
||||||
use sqlx::FromRow;
|
use sqlx::FromRow;
|
||||||
|
|
||||||
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
|
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
|
||||||
#[cfg_attr(feature = "sqlx", derive(FromRow))]
|
#[cfg_attr(feature = "sqlx", derive(sqlx::FromRow))]
|
||||||
pub struct Application {
|
pub struct Application {
|
||||||
pub id: Snowflake,
|
pub id: Snowflake,
|
||||||
pub name: String,
|
pub name: String,
|
||||||
|
@ -22,7 +23,8 @@ pub struct Application {
|
||||||
pub bot_public: bool,
|
pub bot_public: bool,
|
||||||
pub bot_require_code_grant: bool,
|
pub bot_require_code_grant: bool,
|
||||||
pub verify_key: String,
|
pub verify_key: String,
|
||||||
pub owner_id: Snowflake,
|
#[cfg_attr(feature = "sqlx", sqlx(skip))]
|
||||||
|
pub owner: User,
|
||||||
pub flags: u64,
|
pub flags: u64,
|
||||||
#[cfg(feature = "sqlx")]
|
#[cfg(feature = "sqlx")]
|
||||||
pub redirect_uris: Option<sqlx::types::Json<Vec<String>>>,
|
pub redirect_uris: Option<sqlx::types::Json<Vec<String>>>,
|
||||||
|
@ -36,7 +38,6 @@ pub struct Application {
|
||||||
pub integration_require_code_grant: bool,
|
pub integration_require_code_grant: bool,
|
||||||
pub discoverability_state: i64,
|
pub discoverability_state: i64,
|
||||||
pub discovery_eligibility_flags: i64,
|
pub discovery_eligibility_flags: i64,
|
||||||
pub bot_user_id: Snowflake,
|
|
||||||
#[cfg(feature = "sqlx")]
|
#[cfg(feature = "sqlx")]
|
||||||
pub tags: Option<sqlx::types::Json<Vec<String>>>,
|
pub tags: Option<sqlx::types::Json<Vec<String>>>,
|
||||||
#[cfg(not(feature = "sqlx"))]
|
#[cfg(not(feature = "sqlx"))]
|
||||||
|
@ -48,7 +49,8 @@ pub struct Application {
|
||||||
pub install_params: Option<InstallParams>,
|
pub install_params: Option<InstallParams>,
|
||||||
pub terms_of_service_url: Option<String>,
|
pub terms_of_service_url: Option<String>,
|
||||||
pub privacy_policy_url: Option<String>,
|
pub privacy_policy_url: Option<String>,
|
||||||
pub team_id: Option<Snowflake>,
|
#[cfg_attr(feature = "sqlx", sqlx(skip))]
|
||||||
|
pub team: Option<Team>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Application {
|
impl Application {
|
||||||
|
|
|
@ -1,8 +1,10 @@
|
||||||
|
use crate::types::Message;
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
|
|
||||||
use crate::types::utils::Snowflake;
|
use crate::types::utils::Snowflake;
|
||||||
|
|
||||||
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
|
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
|
||||||
|
#[cfg_attr(feature = "sqlx", derive(sqlx::FromRow))]
|
||||||
pub struct Attachment {
|
pub struct Attachment {
|
||||||
pub id: Snowflake,
|
pub id: Snowflake,
|
||||||
pub filename: String,
|
pub filename: String,
|
||||||
|
@ -13,11 +15,11 @@ pub struct Attachment {
|
||||||
pub proxy_url: String,
|
pub proxy_url: String,
|
||||||
pub height: Option<u64>,
|
pub height: Option<u64>,
|
||||||
pub width: Option<u64>,
|
pub width: Option<u64>,
|
||||||
pub message_id: Snowflake,
|
|
||||||
pub ephemeral: Option<bool>,
|
pub ephemeral: Option<bool>,
|
||||||
pub duration_secs: Option<f32>,
|
pub duration_secs: Option<f32>,
|
||||||
pub waveform: Option<String>,
|
pub waveform: Option<String>,
|
||||||
#[serde(skip_serializing)]
|
#[serde(skip_serializing)]
|
||||||
|
#[cfg_attr(feature = "sqlx", sqlx(default))]
|
||||||
pub content: Vec<u8>,
|
pub content: Vec<u8>,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
use chrono::Utc;
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
use serde_aux::prelude::{deserialize_number_from_string, deserialize_option_number_from_string, deserialize_string_from_number};
|
use serde_aux::prelude::{deserialize_number_from_string, deserialize_option_number_from_string, deserialize_string_from_number};
|
||||||
use serde_repr::{Deserialize_repr, Serialize_repr};
|
use serde_repr::{Deserialize_repr, Serialize_repr};
|
||||||
|
@ -8,12 +9,17 @@ use crate::types::{
|
||||||
};
|
};
|
||||||
|
|
||||||
#[derive(Default, Debug, Serialize, Deserialize, Clone, PartialEq, Eq)]
|
#[derive(Default, Debug, Serialize, Deserialize, Clone, PartialEq, Eq)]
|
||||||
|
#[cfg_attr(feature = "sqlx", derive(sqlx::FromRow))]
|
||||||
pub struct Channel {
|
pub struct Channel {
|
||||||
pub id: Snowflake,
|
pub id: Snowflake,
|
||||||
|
pub created_at: chrono::DateTime<Utc>,
|
||||||
#[serde(rename = "type")]
|
#[serde(rename = "type")]
|
||||||
pub channel_type: ChannelType,
|
pub channel_type: ChannelType,
|
||||||
pub guild_id: Option<Snowflake>,
|
pub guild_id: Option<Snowflake>,
|
||||||
pub position: Option<i32>,
|
pub position: Option<i32>,
|
||||||
|
#[cfg(feature = "sqlx")]
|
||||||
|
pub permission_overwrites: Option<sqlx::types::Json<Vec<PermissionOverwrite>>>,
|
||||||
|
#[cfg(not(feature = "sqlx"))]
|
||||||
pub permission_overwrites: Option<Vec<PermissionOverwrite>>,
|
pub permission_overwrites: Option<Vec<PermissionOverwrite>>,
|
||||||
pub name: Option<String>,
|
pub name: Option<String>,
|
||||||
pub topic: Option<String>,
|
pub topic: Option<String>,
|
||||||
|
@ -22,24 +28,37 @@ pub struct Channel {
|
||||||
pub bitrate: Option<i32>,
|
pub bitrate: Option<i32>,
|
||||||
pub user_limit: Option<i32>,
|
pub user_limit: Option<i32>,
|
||||||
pub rate_limit_per_user: Option<i32>,
|
pub rate_limit_per_user: Option<i32>,
|
||||||
|
#[cfg_attr(feature = "sqlx", sqlx(skip))]
|
||||||
pub recipients: Option<Vec<User>>,
|
pub recipients: Option<Vec<User>>,
|
||||||
pub icon: Option<String>,
|
pub icon: Option<String>,
|
||||||
pub owner_id: Option<String>,
|
pub owner_id: Option<Snowflake>,
|
||||||
pub application_id: Option<String>,
|
pub application_id: Option<Snowflake>,
|
||||||
|
pub managed: Option<bool>,
|
||||||
pub parent_id: Option<String>,
|
pub parent_id: Option<String>,
|
||||||
pub last_pin_timestamp: Option<String>,
|
pub last_pin_timestamp: Option<String>,
|
||||||
pub rtc_region: Option<String>,
|
pub rtc_region: Option<String>,
|
||||||
pub video_quality_mode: Option<i32>,
|
pub video_quality_mode: Option<i32>,
|
||||||
pub message_count: Option<i32>,
|
pub message_count: Option<i32>,
|
||||||
pub member_count: Option<i32>,
|
pub member_count: Option<i32>,
|
||||||
|
#[cfg_attr(feature = "sqlx", sqlx(skip))]
|
||||||
pub thread_metadata: Option<ThreadMetadata>,
|
pub thread_metadata: Option<ThreadMetadata>,
|
||||||
|
#[cfg_attr(feature = "sqlx", sqlx(skip))]
|
||||||
pub member: Option<ThreadMember>,
|
pub member: Option<ThreadMember>,
|
||||||
pub default_auto_archive_duration: Option<i32>,
|
pub default_auto_archive_duration: Option<i32>,
|
||||||
pub permissions: Option<String>,
|
pub permissions: Option<String>,
|
||||||
pub flags: Option<i32>,
|
pub flags: Option<i32>,
|
||||||
pub total_message_sent: Option<i32>,
|
pub total_message_sent: Option<i32>,
|
||||||
|
#[cfg(feature = "sqlx")]
|
||||||
|
pub available_tags: Option<sqlx::types::Json<Vec<Tag>>>,
|
||||||
|
#[cfg(not(feature = "sqlx"))]
|
||||||
pub available_tags: Option<Vec<Tag>>,
|
pub available_tags: Option<Vec<Tag>>,
|
||||||
|
#[cfg(feature = "sqlx")]
|
||||||
|
pub applied_tags: Option<sqlx::types::Json<Vec<String>>>,
|
||||||
|
#[cfg(not(feature = "sqlx"))]
|
||||||
pub applied_tags: Option<Vec<String>>,
|
pub applied_tags: Option<Vec<String>>,
|
||||||
|
#[cfg(feature = "sqlx")]
|
||||||
|
pub default_reaction_emoji: Option<sqlx::types::Json<DefaultReaction>>,
|
||||||
|
#[cfg(not(feature = "sqlx"))]
|
||||||
pub default_reaction_emoji: Option<DefaultReaction>,
|
pub default_reaction_emoji: Option<DefaultReaction>,
|
||||||
pub default_thread_rate_limit_per_user: Option<i32>,
|
pub default_thread_rate_limit_per_user: Option<i32>,
|
||||||
pub default_sort_order: Option<i32>,
|
pub default_sort_order: Option<i32>,
|
||||||
|
@ -101,6 +120,7 @@ pub struct DefaultReaction {
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Default, Clone, Copy, Debug, Serialize_repr, Deserialize_repr, PartialEq, Eq)]
|
#[derive(Default, Clone, Copy, Debug, Serialize_repr, Deserialize_repr, PartialEq, Eq)]
|
||||||
|
#[cfg_attr(feature = "sqlx", derive(sqlx::Type))]
|
||||||
#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
|
#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
|
||||||
#[repr(i32)]
|
#[repr(i32)]
|
||||||
pub enum ChannelType {
|
pub enum ChannelType {
|
||||||
|
|
|
@ -2,14 +2,18 @@ use serde::{Deserialize, Serialize};
|
||||||
use serde_aux::prelude::deserialize_option_number_from_string;
|
use serde_aux::prelude::deserialize_option_number_from_string;
|
||||||
|
|
||||||
use crate::types::entities::User;
|
use crate::types::entities::User;
|
||||||
|
use crate::types::{Guild, Snowflake};
|
||||||
|
|
||||||
#[derive(Debug, Deserialize, Serialize, Default, Clone)]
|
#[derive(Debug, PartialEq, Clone, Deserialize, Serialize, Default)]
|
||||||
|
#[cfg_attr(feature = "sqlx", derive(sqlx::FromRow))]
|
||||||
pub struct Emoji {
|
pub struct Emoji {
|
||||||
#[serde(default)]
|
pub id: Option<Snowflake>,
|
||||||
#[serde(deserialize_with = "deserialize_option_number_from_string")]
|
|
||||||
pub id: Option<u64>,
|
|
||||||
pub name: Option<String>,
|
pub name: Option<String>,
|
||||||
pub roles: Option<Vec<u64>>,
|
#[cfg(feature = "sqlx")]
|
||||||
|
pub roles: Option<sqlx::types::Json<Vec<Snowflake>>>,
|
||||||
|
#[cfg(not(feature = "sqlx"))]
|
||||||
|
pub roles: Option<Vec<Snowflake>>,
|
||||||
|
#[cfg_attr(feature = "sqlx", sqlx(skip))]
|
||||||
pub user: Option<User>,
|
pub user: Option<User>,
|
||||||
pub require_colons: Option<bool>,
|
pub require_colons: Option<bool>,
|
||||||
pub managed: Option<bool>,
|
pub managed: Option<bool>,
|
||||||
|
|
|
@ -9,7 +9,8 @@ use crate::types::{
|
||||||
};
|
};
|
||||||
|
|
||||||
/// See https://discord.com/developers/docs/resources/guild
|
/// See https://discord.com/developers/docs/resources/guild
|
||||||
#[derive(Serialize, Deserialize, Debug, Default, Clone)]
|
#[derive(Serialize, Deserialize, Debug, Default, Clone, PartialEq)]
|
||||||
|
#[cfg_attr(feature = "sqlx", derive(sqlx::FromRow))]
|
||||||
pub struct Guild {
|
pub struct Guild {
|
||||||
pub id: Snowflake,
|
pub id: Snowflake,
|
||||||
pub name: Option<String>,
|
pub name: Option<String>,
|
||||||
|
@ -17,24 +18,27 @@ pub struct Guild {
|
||||||
pub icon_hash: Option<String>,
|
pub icon_hash: Option<String>,
|
||||||
pub splash: Option<String>,
|
pub splash: Option<String>,
|
||||||
pub discovery_splash: Option<String>,
|
pub discovery_splash: Option<String>,
|
||||||
pub owner: Option<User>,
|
#[cfg_attr(feature = "sqlx", sqlx(skip))]
|
||||||
|
pub owner: bool, // True if requesting user is owner
|
||||||
pub owner_id: Option<Snowflake>,
|
pub owner_id: Option<Snowflake>,
|
||||||
pub permissions: Option<String>,
|
pub permissions: Option<String>,
|
||||||
pub afk_channel_id: Option<Snowflake>,
|
pub afk_channel_id: Option<Snowflake>,
|
||||||
pub afk_timeout: Option<u8>,
|
pub afk_timeout: Option<u8>,
|
||||||
pub widget_enabled: Option<bool>,
|
pub widget_enabled: Option<bool>,
|
||||||
pub widget_channel_id: Option<Snowflake>,
|
pub widget_channel_id: Option<Snowflake>,
|
||||||
pub widget_channel: Option<Channel>,
|
|
||||||
pub verification_level: Option<u8>,
|
pub verification_level: Option<u8>,
|
||||||
pub default_message_notifications: Option<u8>,
|
pub default_message_notifications: Option<u8>,
|
||||||
pub explicit_content_filter: Option<u8>,
|
pub explicit_content_filter: Option<u8>,
|
||||||
|
#[cfg_attr(feature = "sqlx", sqlx(skip))]
|
||||||
pub roles: Vec<RoleObject>,
|
pub roles: Vec<RoleObject>,
|
||||||
|
#[cfg_attr(feature = "sqlx", sqlx(skip))]
|
||||||
pub emojis: Vec<Emoji>,
|
pub emojis: Vec<Emoji>,
|
||||||
|
#[cfg_attr(feature = "sqlx", sqlx(skip))]
|
||||||
pub features: Option<Vec<String>>,
|
pub features: Option<Vec<String>>,
|
||||||
pub application_id: Option<String>,
|
pub application_id: Option<String>,
|
||||||
pub system_channel_id: Option<Snowflake>,
|
pub system_channel_id: Option<Snowflake>,
|
||||||
pub system_channel_flags: Option<u8>,
|
pub system_channel_flags: Option<u8>,
|
||||||
pub rules_channel_id: Option<String>,
|
pub rules_channel_id: Option<Snowflake>,
|
||||||
pub rules_channel: Option<String>,
|
pub rules_channel: Option<String>,
|
||||||
pub max_presences: Option<u64>,
|
pub max_presences: Option<u64>,
|
||||||
pub max_members: Option<u64>,
|
pub max_members: Option<u64>,
|
||||||
|
@ -45,47 +49,48 @@ pub struct Guild {
|
||||||
pub premium_subscription_count: Option<u64>,
|
pub premium_subscription_count: Option<u64>,
|
||||||
pub preferred_locale: Option<String>,
|
pub preferred_locale: Option<String>,
|
||||||
pub public_updates_channel_id: Option<Snowflake>,
|
pub public_updates_channel_id: Option<Snowflake>,
|
||||||
pub public_updates_channel: Option<Channel>,
|
|
||||||
pub max_video_channel_users: Option<u8>,
|
pub max_video_channel_users: Option<u8>,
|
||||||
pub max_stage_video_channel_users: Option<u8>,
|
pub max_stage_video_channel_users: Option<u8>,
|
||||||
pub approximate_member_count: Option<u64>,
|
pub approximate_member_count: Option<u64>,
|
||||||
pub approximate_presence_count: Option<u64>,
|
pub approximate_presence_count: Option<u64>,
|
||||||
pub member_count: Option<u64>,
|
#[cfg(feature = "sqlx")]
|
||||||
pub presence_count: Option<u64>,
|
pub welcome_screen: Option<sqlx::types::Json<WelcomeScreenObject>>,
|
||||||
|
#[cfg(not(feature = "sqlx"))]
|
||||||
pub welcome_screen: Option<WelcomeScreenObject>,
|
pub welcome_screen: Option<WelcomeScreenObject>,
|
||||||
pub nsfw_level: Option<u8>,
|
pub nsfw_level: Option<u8>,
|
||||||
pub nsfw: Option<bool>,
|
#[cfg_attr(feature = "sqlx", sqlx(skip))]
|
||||||
pub stickers: Option<Vec<Sticker>>,
|
pub stickers: Option<Vec<Sticker>>,
|
||||||
pub premium_progress_bar_enabled: Option<bool>,
|
pub premium_progress_bar_enabled: Option<bool>,
|
||||||
|
#[cfg_attr(feature = "sqlx", sqlx(skip))]
|
||||||
pub joined_at: String,
|
pub joined_at: String,
|
||||||
pub afk_channel: Option<Channel>,
|
#[cfg_attr(feature = "sqlx", sqlx(skip))]
|
||||||
pub bans: Option<Vec<GuildBan>>,
|
pub bans: Option<Vec<GuildBan>>,
|
||||||
pub primary_category_id: Option<Snowflake>,
|
pub primary_category_id: Option<Snowflake>,
|
||||||
pub large: Option<bool>,
|
pub large: Option<bool>,
|
||||||
|
#[cfg_attr(feature = "sqlx", sqlx(skip))]
|
||||||
pub channels: Option<Vec<Channel>>,
|
pub channels: Option<Vec<Channel>>,
|
||||||
pub template_id: Option<Snowflake>,
|
#[cfg_attr(feature = "sqlx", sqlx(skip))]
|
||||||
pub template: Option<GuildTemplate>,
|
|
||||||
pub invites: Option<Vec<GuildInvite>>,
|
pub invites: Option<Vec<GuildInvite>>,
|
||||||
|
#[cfg_attr(feature = "sqlx", sqlx(skip))]
|
||||||
pub voice_states: Option<Vec<VoiceState>>,
|
pub voice_states: Option<Vec<VoiceState>>,
|
||||||
|
#[cfg_attr(feature = "sqlx", sqlx(skip))]
|
||||||
pub webhooks: Option<Vec<Webhook>>,
|
pub webhooks: Option<Vec<Webhook>>,
|
||||||
pub mfa_level: Option<u8>,
|
pub mfa_level: Option<u8>,
|
||||||
pub region: Option<String>,
|
pub region: Option<String>,
|
||||||
pub unavailable: Option<bool>,
|
|
||||||
pub parent: Option<String>,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// See https://docs.spacebar.chat/routes/#get-/guilds/-guild_id-/bans/-user-
|
/// See https://docs.spacebar.chat/routes/#get-/guilds/-guild_id-/bans/-user-
|
||||||
#[derive(Serialize, Deserialize, Debug, Default, Clone)]
|
#[derive(Serialize, Deserialize, Debug, Default, Clone, PartialEq)]
|
||||||
|
#[cfg_attr(feature = "sqlx", derive(sqlx::FromRow))]
|
||||||
pub struct GuildBan {
|
pub struct GuildBan {
|
||||||
pub id: Snowflake,
|
|
||||||
pub user_id: Snowflake,
|
pub user_id: Snowflake,
|
||||||
pub guild_id: Snowflake,
|
pub guild_id: Snowflake,
|
||||||
pub executor_id: Snowflake,
|
|
||||||
pub reason: Option<String>,
|
pub reason: Option<String>,
|
||||||
}
|
}
|
||||||
|
|
||||||
/// See https://docs.spacebar.chat/routes/#cmp--schemas-invite
|
/// See https://docs.spacebar.chat/routes/#cmp--schemas-invite
|
||||||
#[derive(Serialize, Deserialize, Debug, Default, Clone)]
|
#[derive(Serialize, Deserialize, Debug, Default, Clone, PartialEq)]
|
||||||
|
#[cfg_attr(feature = "sqlx", derive(sqlx::FromRow))]
|
||||||
pub struct GuildInvite {
|
pub struct GuildInvite {
|
||||||
pub code: String,
|
pub code: String,
|
||||||
pub temporary: Option<bool>,
|
pub temporary: Option<bool>,
|
||||||
|
@ -106,13 +111,13 @@ pub struct GuildInvite {
|
||||||
pub vanity_url: Option<bool>,
|
pub vanity_url: Option<bool>,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Serialize, Deserialize, Debug, Default)]
|
#[derive(Serialize, Deserialize, Debug, Default, Clone, PartialEq)]
|
||||||
pub struct UnavailableGuild {
|
pub struct UnavailableGuild {
|
||||||
id: String,
|
id: String,
|
||||||
unavailable: bool,
|
unavailable: bool,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Serialize, Deserialize, Debug, Default, Clone)]
|
#[derive(Serialize, Deserialize, Debug, Default, Clone, PartialEq)]
|
||||||
pub struct GuildCreateResponse {
|
pub struct GuildCreateResponse {
|
||||||
pub id: String,
|
pub id: String,
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,6 +7,7 @@ use crate::types::{
|
||||||
};
|
};
|
||||||
|
|
||||||
#[derive(Default, Debug, Deserialize, Serialize, Clone)]
|
#[derive(Default, Debug, Deserialize, Serialize, Clone)]
|
||||||
|
#[cfg_attr(feature = "sqlx", derive(sqlx::FromRow))]
|
||||||
/// See https://discord.com/developers/docs/resources/guild#integration-object-integration-structure
|
/// See https://discord.com/developers/docs/resources/guild#integration-object-integration-structure
|
||||||
pub struct Integration {
|
pub struct Integration {
|
||||||
pub id: Snowflake,
|
pub id: Snowflake,
|
||||||
|
@ -19,11 +20,14 @@ pub struct Integration {
|
||||||
pub enabled_emoticons: Option<bool>,
|
pub enabled_emoticons: Option<bool>,
|
||||||
pub expire_behaviour: Option<u8>,
|
pub expire_behaviour: Option<u8>,
|
||||||
pub expire_grace_period: Option<u16>,
|
pub expire_grace_period: Option<u16>,
|
||||||
|
#[cfg_attr(feature = "sqlx", sqlx(skip))]
|
||||||
pub user: Option<User>,
|
pub user: Option<User>,
|
||||||
|
#[cfg_attr(feature = "sqlx", sqlx(skip))]
|
||||||
pub account: IntegrationAccount,
|
pub account: IntegrationAccount,
|
||||||
pub synced_at: Option<DateTime<Utc>>,
|
pub synced_at: Option<DateTime<Utc>>,
|
||||||
pub subscriber_count: Option<f64>,
|
pub subscriber_count: Option<f64>,
|
||||||
pub revoked: Option<bool>,
|
pub revoked: Option<bool>,
|
||||||
|
#[cfg_attr(feature = "sqlx", sqlx(skip))]
|
||||||
pub application: Option<Application>,
|
pub application: Option<Application>,
|
||||||
pub scopes: Option<Vec<String>>,
|
pub scopes: Option<Vec<String>>,
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,43 +8,62 @@ use crate::types::{
|
||||||
utils::Snowflake,
|
utils::Snowflake,
|
||||||
};
|
};
|
||||||
|
|
||||||
#[derive(Debug, Serialize, Deserialize, Default)]
|
#[derive(Debug, Serialize, Deserialize, Default, Clone, PartialEq)]
|
||||||
|
#[cfg_attr(feature = "sqlx", derive(sqlx::FromRow))]
|
||||||
pub struct Message {
|
pub struct Message {
|
||||||
id: Snowflake,
|
pub id: Snowflake,
|
||||||
pub channel_id: Snowflake,
|
pub channel_id: Snowflake,
|
||||||
author: User,
|
#[cfg_attr(feature = "sqlx", sqlx(skip))]
|
||||||
content: String,
|
pub author: User,
|
||||||
timestamp: String,
|
pub content: String,
|
||||||
edited_timestamp: Option<String>,
|
pub timestamp: String,
|
||||||
tts: bool,
|
pub edited_timestamp: Option<String>,
|
||||||
mention_everyone: bool,
|
pub tts: bool,
|
||||||
mentions: Option<Vec<User>>,
|
pub mention_everyone: bool,
|
||||||
mention_roles: Vec<String>,
|
#[cfg_attr(feature = "sqlx", sqlx(skip))]
|
||||||
mention_channels: Option<Vec<ChannelMention>>,
|
pub mentions: Option<Vec<User>>,
|
||||||
|
#[cfg_attr(feature = "sqlx", sqlx(skip))]
|
||||||
|
pub mention_roles: Vec<Snowflake>,
|
||||||
|
#[cfg_attr(feature = "sqlx", sqlx(skip))]
|
||||||
|
pub mention_channels: Option<Vec<ChannelMention>>,
|
||||||
|
#[cfg_attr(feature = "sqlx", sqlx(skip))]
|
||||||
pub attachments: Vec<Attachment>,
|
pub attachments: Vec<Attachment>,
|
||||||
embeds: Vec<Embed>,
|
#[cfg(feature = "sqlx")]
|
||||||
reactions: Option<Vec<Reaction>>,
|
pub embeds: Vec<sqlx::types::Json<Embed>>,
|
||||||
nonce: Option<serde_json::Value>,
|
#[cfg(not(feature = "sqlx"))]
|
||||||
pinned: bool,
|
pub embeds: Vec<Embed>,
|
||||||
webhook_id: Option<String>,
|
#[cfg(feature = "sqlx")]
|
||||||
|
pub reactions: Option<sqlx::types::Json<Vec<Reaction>>>,
|
||||||
|
#[cfg(not(feature = "sqlx"))]
|
||||||
|
pub reactions: Option<Vec<Reaction>>,
|
||||||
|
pub nonce: Option<serde_json::Value>,
|
||||||
|
pub pinned: bool,
|
||||||
|
pub webhook_id: Option<Snowflake>,
|
||||||
#[serde(rename = "type")]
|
#[serde(rename = "type")]
|
||||||
message_type: i32,
|
pub message_type: i32,
|
||||||
activity: Option<MessageActivity>,
|
#[cfg(feature = "sqlx")]
|
||||||
application: Option<Application>,
|
pub activity: Option<sqlx::types::Json<MessageActivity>>,
|
||||||
application_id: Option<String>,
|
#[cfg(not(feature = "sqlx"))]
|
||||||
message_reference: Option<MessageReference>,
|
pub activity: Option<MessageActivity>,
|
||||||
flags: Option<i32>,
|
#[cfg_attr(feature = "sqlx", sqlx(skip))]
|
||||||
referenced_message: Option<Box<Message>>,
|
pub application: Option<Application>,
|
||||||
interaction: Option<MessageInteraction>,
|
pub application_id: Option<Snowflake>,
|
||||||
thread: Option<Channel>,
|
#[cfg(feature = "sqlx")]
|
||||||
components: Option<Vec<Component>>,
|
pub message_reference: Option<sqlx::types::Json<MessageReference>>,
|
||||||
sticker_items: Option<Vec<StickerItem>>,
|
#[cfg(not(feature = "sqlx"))]
|
||||||
stickers: Option<Vec<Sticker>>,
|
pub message_reference: Option<MessageReference>,
|
||||||
position: Option<i32>,
|
pub flags: Option<u64>,
|
||||||
role_subscription_data: Option<RoleSubscriptionData>,
|
pub referenced_message: Option<Box<Message>>,
|
||||||
|
pub interaction: Option<MessageInteraction>,
|
||||||
|
pub thread: Option<Channel>,
|
||||||
|
pub components: Option<Vec<Component>>,
|
||||||
|
pub sticker_items: Option<Vec<StickerItem>>,
|
||||||
|
pub stickers: Option<Vec<Sticker>>,
|
||||||
|
pub position: Option<i32>,
|
||||||
|
pub role_subscription_data: Option<RoleSubscriptionData>,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Serialize, Deserialize)]
|
#[derive(Debug, PartialEq, Clone, Serialize, Deserialize)]
|
||||||
pub struct MessageReference {
|
pub struct MessageReference {
|
||||||
pub message_id: Snowflake,
|
pub message_id: Snowflake,
|
||||||
pub channel_id: Snowflake,
|
pub channel_id: Snowflake,
|
||||||
|
@ -52,7 +71,7 @@ pub struct MessageReference {
|
||||||
pub fail_if_not_exists: Option<bool>,
|
pub fail_if_not_exists: Option<bool>,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Deserialize, Serialize)]
|
#[derive(Debug, PartialEq, Clone, Deserialize, Serialize)]
|
||||||
pub struct MessageInteraction {
|
pub struct MessageInteraction {
|
||||||
pub id: Snowflake,
|
pub id: Snowflake,
|
||||||
#[serde(rename = "type")]
|
#[serde(rename = "type")]
|
||||||
|
@ -62,7 +81,7 @@ pub struct MessageInteraction {
|
||||||
pub member: Option<GuildMember>,
|
pub member: Option<GuildMember>,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Serialize, Deserialize)]
|
#[derive(Debug, PartialEq, Clone, Serialize, Deserialize)]
|
||||||
pub struct AllowedMention {
|
pub struct AllowedMention {
|
||||||
parse: Vec<AllowedMentionType>,
|
parse: Vec<AllowedMentionType>,
|
||||||
roles: Vec<Snowflake>,
|
roles: Vec<Snowflake>,
|
||||||
|
@ -70,7 +89,7 @@ pub struct AllowedMention {
|
||||||
replied_user: bool,
|
replied_user: bool,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Serialize, Deserialize)]
|
#[derive(Debug, PartialEq, Clone, Copy, Serialize, Deserialize)]
|
||||||
#[serde(rename_all = "snake_case")]
|
#[serde(rename_all = "snake_case")]
|
||||||
pub enum AllowedMentionType {
|
pub enum AllowedMentionType {
|
||||||
Roles,
|
Roles,
|
||||||
|
@ -78,16 +97,16 @@ pub enum AllowedMentionType {
|
||||||
Everyone,
|
Everyone,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Serialize, Deserialize)]
|
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
|
||||||
struct ChannelMention {
|
pub struct ChannelMention {
|
||||||
id: Snowflake,
|
pub id: Snowflake,
|
||||||
guild_id: Snowflake,
|
pub guild_id: Snowflake,
|
||||||
#[serde(rename = "type")]
|
#[serde(rename = "type")]
|
||||||
channel_type: i32,
|
channel_type: i32,
|
||||||
name: String,
|
name: String,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Serialize, Deserialize)]
|
#[derive(Debug, PartialEq, Clone, Serialize, Deserialize)]
|
||||||
pub struct Embed {
|
pub struct Embed {
|
||||||
title: Option<String>,
|
title: Option<String>,
|
||||||
#[serde(rename = "type")]
|
#[serde(rename = "type")]
|
||||||
|
@ -105,30 +124,30 @@ pub struct Embed {
|
||||||
fields: Option<Vec<EmbedField>>,
|
fields: Option<Vec<EmbedField>>,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Serialize, Deserialize)]
|
#[derive(Debug, PartialEq, Clone, Serialize, Deserialize)]
|
||||||
struct EmbedFooter {
|
pub struct EmbedFooter {
|
||||||
text: String,
|
text: String,
|
||||||
icon_url: Option<String>,
|
icon_url: Option<String>,
|
||||||
proxy_icon_url: Option<String>,
|
proxy_icon_url: Option<String>,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Serialize, Deserialize)]
|
#[derive(Debug, PartialEq, Clone, Serialize, Deserialize)]
|
||||||
struct EmbedImage {
|
pub struct EmbedImage {
|
||||||
url: String,
|
url: String,
|
||||||
proxy_url: String,
|
proxy_url: String,
|
||||||
height: Option<i32>,
|
height: Option<i32>,
|
||||||
width: Option<i32>,
|
width: Option<i32>,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Serialize, Deserialize)]
|
#[derive(Debug, PartialEq, Clone, Serialize, Deserialize)]
|
||||||
struct EmbedThumbnail {
|
pub struct EmbedThumbnail {
|
||||||
url: String,
|
url: String,
|
||||||
proxy_url: Option<String>,
|
proxy_url: Option<String>,
|
||||||
height: Option<i32>,
|
height: Option<i32>,
|
||||||
width: Option<i32>,
|
width: Option<i32>,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Serialize, Deserialize)]
|
#[derive(Debug, PartialEq, Clone, Serialize, Deserialize)]
|
||||||
struct EmbedVideo {
|
struct EmbedVideo {
|
||||||
url: Option<String>,
|
url: Option<String>,
|
||||||
proxy_url: Option<String>,
|
proxy_url: Option<String>,
|
||||||
|
@ -136,36 +155,36 @@ struct EmbedVideo {
|
||||||
width: Option<i32>,
|
width: Option<i32>,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Serialize, Deserialize)]
|
#[derive(Debug, PartialEq, Clone, Serialize, Deserialize)]
|
||||||
struct EmbedProvider {
|
pub struct EmbedProvider {
|
||||||
name: Option<String>,
|
name: Option<String>,
|
||||||
url: Option<String>,
|
url: Option<String>,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Serialize, Deserialize)]
|
#[derive(Debug, PartialEq, Clone, Serialize, Deserialize)]
|
||||||
struct EmbedAuthor {
|
pub struct EmbedAuthor {
|
||||||
name: String,
|
name: String,
|
||||||
url: Option<String>,
|
url: Option<String>,
|
||||||
icon_url: Option<String>,
|
icon_url: Option<String>,
|
||||||
proxy_icon_url: Option<String>,
|
proxy_icon_url: Option<String>,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Serialize, Deserialize)]
|
#[derive(Debug, PartialEq, Clone, Serialize, Deserialize)]
|
||||||
|
|
||||||
struct EmbedField {
|
pub struct EmbedField {
|
||||||
name: String,
|
name: String,
|
||||||
value: String,
|
value: String,
|
||||||
inline: Option<bool>,
|
inline: Option<bool>,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Serialize, Deserialize)]
|
#[derive(Debug, PartialEq, Clone, Serialize, Deserialize)]
|
||||||
pub struct Reaction {
|
pub struct Reaction {
|
||||||
pub count: i32,
|
pub count: i32,
|
||||||
pub me: bool,
|
pub me: bool,
|
||||||
pub emoji: Emoji,
|
pub emoji: Emoji,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Serialize, Deserialize)]
|
#[derive(Debug, PartialEq, Clone, Copy, Serialize, Deserialize)]
|
||||||
pub enum Component {
|
pub enum Component {
|
||||||
ActionRow = 1,
|
ActionRow = 1,
|
||||||
Button = 2,
|
Button = 2,
|
||||||
|
@ -177,7 +196,7 @@ pub enum Component {
|
||||||
ChannelSelect = 8,
|
ChannelSelect = 8,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Serialize, Deserialize)]
|
#[derive(Debug, PartialEq, Clone, Serialize, Deserialize)]
|
||||||
pub struct MessageActivity {
|
pub struct MessageActivity {
|
||||||
#[serde(rename = "type")]
|
#[serde(rename = "type")]
|
||||||
pub activity_type: i64,
|
pub activity_type: i64,
|
||||||
|
|
|
@ -3,7 +3,8 @@ use serde_aux::prelude::{deserialize_string_from_number, deserialize_option_numb
|
||||||
|
|
||||||
use crate::types::utils::Snowflake;
|
use crate::types::utils::Snowflake;
|
||||||
|
|
||||||
#[derive(Serialize, Deserialize, Debug, Default, Clone)]
|
#[derive(Serialize, Deserialize, Debug, Default, Clone, PartialEq)]
|
||||||
|
#[cfg_attr(feature = "sqlx", derive(sqlx::FromRow))]
|
||||||
/// See https://discord.com/developers/docs/topics/permissions#role-object
|
/// See https://discord.com/developers/docs/topics/permissions#role-object
|
||||||
pub struct RoleObject {
|
pub struct RoleObject {
|
||||||
pub id: Snowflake,
|
pub id: Snowflake,
|
||||||
|
@ -21,7 +22,7 @@ pub struct RoleObject {
|
||||||
pub tags: Option<RoleTags>
|
pub tags: Option<RoleTags>
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Serialize, Deserialize)]
|
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
|
||||||
pub struct RoleSubscriptionData {
|
pub struct RoleSubscriptionData {
|
||||||
pub role_subscription_listing_id: Snowflake,
|
pub role_subscription_listing_id: Snowflake,
|
||||||
pub tier_name: String,
|
pub tier_name: String,
|
||||||
|
|
|
@ -3,6 +3,7 @@ use serde::{Deserialize, Serialize};
|
||||||
use crate::types::utils::Snowflake;
|
use crate::types::utils::Snowflake;
|
||||||
|
|
||||||
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
|
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
|
||||||
|
#[cfg_attr(feature = "sqlx", derive(sqlx::FromRow))]
|
||||||
pub struct SecurityKey {
|
pub struct SecurityKey {
|
||||||
pub id: String,
|
pub id: String,
|
||||||
pub user_id: String,
|
pub user_id: String,
|
||||||
|
|
|
@ -3,7 +3,8 @@ use serde_aux::prelude::{deserialize_option_number_from_string};
|
||||||
|
|
||||||
use crate::types::{entities::User, utils::Snowflake};
|
use crate::types::{entities::User, utils::Snowflake};
|
||||||
|
|
||||||
#[derive(Debug, Serialize, Deserialize, Clone)]
|
#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
|
||||||
|
#[cfg_attr(feature = "sqlx", derive(sqlx::FromRow))]
|
||||||
pub struct Sticker {
|
pub struct Sticker {
|
||||||
#[serde(default)]
|
#[serde(default)]
|
||||||
pub id: Snowflake,
|
pub id: Snowflake,
|
||||||
|
@ -16,14 +17,13 @@ pub struct Sticker {
|
||||||
pub sticker_type: u8,
|
pub sticker_type: u8,
|
||||||
pub format_type: u8,
|
pub format_type: u8,
|
||||||
pub available: Option<bool>,
|
pub available: Option<bool>,
|
||||||
#[serde(default)]
|
pub guild_id: Option<Snowflake>,
|
||||||
#[serde(deserialize_with = "deserialize_option_number_from_string")]
|
#[cfg_attr(feature = "sqlx", sqlx(skip))]
|
||||||
pub guild_id: Option<u64>,
|
|
||||||
pub user: Option<User>,
|
pub user: Option<User>,
|
||||||
pub sort_value: Option<u8>,
|
pub sort_value: Option<u8>,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Serialize, Deserialize)]
|
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
|
||||||
pub struct StickerItem {
|
pub struct StickerItem {
|
||||||
pub id: Snowflake,
|
pub id: Snowflake,
|
||||||
pub name: String,
|
pub name: String,
|
||||||
|
|
|
@ -1,20 +1,23 @@
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
|
|
||||||
use crate::types::entities::User;
|
use crate::types::entities::User;
|
||||||
|
use crate::types::Snowflake;
|
||||||
|
|
||||||
#[derive(Debug, Deserialize, Serialize, Clone)]
|
#[derive(Debug, PartialEq, Deserialize, Serialize, Clone)]
|
||||||
|
#[cfg_attr(feature = "sqlx", derive(sqlx::FromRow))]
|
||||||
pub struct Team {
|
pub struct Team {
|
||||||
pub icon: Option<String>,
|
pub icon: Option<String>,
|
||||||
pub id: u64,
|
pub id: Snowflake,
|
||||||
|
#[cfg_attr(feature = "sqlx", sqlx(skip))]
|
||||||
pub members: Vec<TeamMember>,
|
pub members: Vec<TeamMember>,
|
||||||
pub name: String,
|
pub name: String,
|
||||||
pub owner_user_id: u64,
|
pub owner_user_id: Snowflake,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Deserialize, Serialize, Clone)]
|
#[derive(Debug, PartialEq, Deserialize, Serialize, Clone)]
|
||||||
pub struct TeamMember {
|
pub struct TeamMember {
|
||||||
pub membership_state: u8,
|
pub membership_state: u8,
|
||||||
pub permissions: Vec<String>,
|
pub permissions: Vec<String>,
|
||||||
pub team_id: u64,
|
pub team_id: Snowflake,
|
||||||
pub user: User,
|
pub user: User,
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,18 +7,21 @@ use crate::types::{
|
||||||
};
|
};
|
||||||
|
|
||||||
/// See https://docs.spacebar.chat/routes/#cmp--schemas-template
|
/// See https://docs.spacebar.chat/routes/#cmp--schemas-template
|
||||||
#[derive(Serialize, Deserialize, Debug, Default, Clone)]
|
#[derive(Serialize, Deserialize, Debug, Default, Clone, PartialEq)]
|
||||||
|
#[cfg_attr(feature = "sqlx", derive(sqlx::FromRow))]
|
||||||
pub struct GuildTemplate {
|
pub struct GuildTemplate {
|
||||||
pub code: String,
|
pub code: String,
|
||||||
pub name: String,
|
pub name: String,
|
||||||
pub description: Option<String>,
|
pub description: Option<String>,
|
||||||
pub usage_count: Option<u64>,
|
pub usage_count: Option<u64>,
|
||||||
pub creator_id: Snowflake,
|
pub creator_id: Snowflake,
|
||||||
|
#[cfg_attr(feature = "sqlx", sqlx(skip))]
|
||||||
pub creator: User,
|
pub creator: User,
|
||||||
pub created_at: DateTime<Utc>,
|
pub created_at: DateTime<Utc>,
|
||||||
pub updated_at: DateTime<Utc>,
|
pub updated_at: DateTime<Utc>,
|
||||||
pub source_guild_id: String,
|
pub source_guild_id: String,
|
||||||
|
#[cfg_attr(feature = "sqlx", sqlx(skip))]
|
||||||
pub source_guild: Vec<Guild>, // Unsure how a {recursive: Guild} looks like, might be a Vec?
|
pub source_guild: Vec<Guild>, // Unsure how a {recursive: Guild} looks like, might be a Vec?
|
||||||
|
#[cfg_attr(feature = "sqlx", sqlx(skip))]
|
||||||
pub serialized_source_guild: Vec<Guild>,
|
pub serialized_source_guild: Vec<Guild>,
|
||||||
id: Snowflake,
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,8 +2,6 @@ use chrono::{DateTime, Utc};
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
use serde_aux::prelude::deserialize_option_number_from_string;
|
use serde_aux::prelude::deserialize_option_number_from_string;
|
||||||
use serde_json::{Map, Value};
|
use serde_json::{Map, Value};
|
||||||
#[cfg(feature = "sqlx")]
|
|
||||||
use sqlx::{FromRow, Type};
|
|
||||||
|
|
||||||
use crate::types::{
|
use crate::types::{
|
||||||
errors::Error,
|
errors::Error,
|
||||||
|
@ -11,7 +9,7 @@ use crate::types::{
|
||||||
};
|
};
|
||||||
|
|
||||||
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, Default)]
|
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, Default)]
|
||||||
#[cfg_attr(feature = "sqlx", derive(Type))]
|
#[cfg_attr(feature = "sqlx", derive(sqlx::Type))]
|
||||||
pub struct UserData {
|
pub struct UserData {
|
||||||
pub valid_tokens_since: DateTime<Utc>,
|
pub valid_tokens_since: DateTime<Utc>,
|
||||||
pub hash: Option<String>,
|
pub hash: Option<String>,
|
||||||
|
@ -24,36 +22,38 @@ impl User {
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Serialize, Deserialize, Debug, Default, Clone, PartialEq, Eq)]
|
#[derive(Serialize, Deserialize, Debug, Default, Clone, PartialEq, Eq)]
|
||||||
|
#[cfg_attr(feature = "sqlx", derive(sqlx::FromRow))]
|
||||||
pub struct User {
|
pub struct User {
|
||||||
pub id: Snowflake,
|
pub id: Snowflake,
|
||||||
username: String,
|
pub username: String,
|
||||||
discriminator: String,
|
pub discriminator: String,
|
||||||
avatar: Option<String>,
|
pub avatar: Option<String>,
|
||||||
bot: Option<bool>,
|
pub bot: Option<bool>,
|
||||||
system: Option<bool>,
|
pub system: Option<bool>,
|
||||||
mfa_enabled: Option<bool>,
|
pub mfa_enabled: Option<bool>,
|
||||||
accent_color: Option<u8>,
|
pub accent_color: Option<u8>,
|
||||||
locale: Option<String>,
|
#[cfg_attr(feature = "sqlx", sqlx(default))]
|
||||||
verified: Option<bool>,
|
pub locale: Option<String>,
|
||||||
email: Option<String>,
|
pub verified: Option<bool>,
|
||||||
|
pub email: Option<String>,
|
||||||
/// This field comes as either a string or a number as a string
|
/// This field comes as either a string or a number as a string
|
||||||
/// So we need to account for that
|
/// So we need to account for that
|
||||||
#[serde(default)]
|
#[serde(default)]
|
||||||
#[serde(deserialize_with = "deserialize_option_number_from_string")]
|
#[serde(deserialize_with = "deserialize_option_number_from_string")]
|
||||||
flags: Option<i32>,
|
flags: Option<i32>,
|
||||||
premium_since: Option<DateTime<Utc>>,
|
pub premium_since: Option<DateTime<Utc>>,
|
||||||
premium_type: u8,
|
pub premium_type: u8,
|
||||||
pronouns: Option<String>,
|
pub pronouns: Option<String>,
|
||||||
public_flags: Option<u16>,
|
pub public_flags: Option<u16>,
|
||||||
banner: Option<String>,
|
pub banner: Option<String>,
|
||||||
bio: String,
|
pub bio: String,
|
||||||
theme_colors: Option<Vec<u8>>,
|
pub theme_colors: Option<Vec<u8>>,
|
||||||
phone: Option<String>,
|
pub phone: Option<String>,
|
||||||
nsfw_allowed: bool,
|
pub nsfw_allowed: bool,
|
||||||
premium: bool,
|
pub premium: bool,
|
||||||
purchased_flags: i32,
|
pub purchased_flags: i32,
|
||||||
premium_usage_flags: Option<i32>,
|
pub premium_usage_flags: Option<i32>,
|
||||||
disabled: Option<bool>,
|
pub disabled: Option<bool>,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)]
|
#[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)]
|
||||||
|
@ -97,7 +97,7 @@ const CUSTOM_USER_FLAG_OFFSET: u64 = 1 << 32;
|
||||||
|
|
||||||
bitflags::bitflags! {
|
bitflags::bitflags! {
|
||||||
#[derive(Debug, Clone, Copy, PartialEq, Serialize, Deserialize)]
|
#[derive(Debug, Clone, Copy, PartialEq, Serialize, Deserialize)]
|
||||||
#[cfg_attr(feature = "sqlx", derive(Type))]
|
#[cfg_attr(feature = "sqlx", derive(sqlx::Type))]
|
||||||
pub struct UserFlags: u64 {
|
pub struct UserFlags: u64 {
|
||||||
const DISCORD_EMPLOYEE = 1 << 0;
|
const DISCORD_EMPLOYEE = 1 << 0;
|
||||||
const PARTNERED_SERVER_OWNER = 1 << 1;
|
const PARTNERED_SERVER_OWNER = 1 << 1;
|
||||||
|
|
|
@ -4,6 +4,7 @@ use serde::{Deserialize, Serialize};
|
||||||
use crate::types::utils::Snowflake;
|
use crate::types::utils::Snowflake;
|
||||||
|
|
||||||
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, Default)]
|
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, Default)]
|
||||||
|
#[cfg_attr(feature = "sqlx", derive(sqlx::Type))]
|
||||||
#[serde(rename_all = "lowercase")]
|
#[serde(rename_all = "lowercase")]
|
||||||
pub enum UserStatus {
|
pub enum UserStatus {
|
||||||
#[default]
|
#[default]
|
||||||
|
@ -15,6 +16,7 @@ pub enum UserStatus {
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, Default)]
|
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, Default)]
|
||||||
|
#[cfg_attr(feature = "sqlx", derive(sqlx::Type))]
|
||||||
#[serde(rename_all = "lowercase")]
|
#[serde(rename_all = "lowercase")]
|
||||||
pub enum UserTheme {
|
pub enum UserTheme {
|
||||||
#[default]
|
#[default]
|
||||||
|
@ -23,6 +25,7 @@ pub enum UserTheme {
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
|
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
|
||||||
|
#[cfg_attr(feature = "sqlx", derive(sqlx::FromRow))]
|
||||||
pub struct UserSettings {
|
pub struct UserSettings {
|
||||||
pub afk_timeout: u16,
|
pub afk_timeout: u16,
|
||||||
pub allow_accessibility_detection: bool,
|
pub allow_accessibility_detection: bool,
|
||||||
|
@ -30,6 +33,9 @@ pub struct UserSettings {
|
||||||
pub animate_stickers: u8,
|
pub animate_stickers: u8,
|
||||||
pub contact_sync_enabled: bool,
|
pub contact_sync_enabled: bool,
|
||||||
pub convert_emoticons: bool,
|
pub convert_emoticons: bool,
|
||||||
|
#[cfg(feature = "sqlx")]
|
||||||
|
pub custom_status: Option<sqlx::types::Json<CustomStatus>>,
|
||||||
|
#[cfg(not(feature = "sqlx"))]
|
||||||
pub custom_status: Option<CustomStatus>,
|
pub custom_status: Option<CustomStatus>,
|
||||||
pub default_guilds_restricted: bool,
|
pub default_guilds_restricted: bool,
|
||||||
pub detect_platform_accounts: bool,
|
pub detect_platform_accounts: bool,
|
||||||
|
@ -37,10 +43,19 @@ pub struct UserSettings {
|
||||||
pub disable_games_tab: bool,
|
pub disable_games_tab: bool,
|
||||||
pub enable_tts_command: bool,
|
pub enable_tts_command: bool,
|
||||||
pub explicit_content_filter: u8,
|
pub explicit_content_filter: u8,
|
||||||
|
#[cfg(feature = "sqlx")]
|
||||||
|
pub friend_source_flags: sqlx::types::Json<FriendSourceFlags>,
|
||||||
|
#[cfg(not(feature = "sqlx"))]
|
||||||
pub friend_source_flags: FriendSourceFlags,
|
pub friend_source_flags: FriendSourceFlags,
|
||||||
pub gateway_connected: bool,
|
pub gateway_connected: bool,
|
||||||
pub gif_auto_play: bool,
|
pub gif_auto_play: bool,
|
||||||
|
#[cfg(feature = "sqlx")]
|
||||||
|
pub guild_folders: sqlx::types::Json<Vec<GuildFolder>>,
|
||||||
|
#[cfg(not(feature = "sqlx"))]
|
||||||
pub guild_folders: Vec<GuildFolder>,
|
pub guild_folders: Vec<GuildFolder>,
|
||||||
|
#[cfg(feature = "sqlx")]
|
||||||
|
pub guild_positions: sqlx::types::Json<Vec<String>>,
|
||||||
|
#[cfg(not(feature = "sqlx"))]
|
||||||
pub guild_positions: Vec<String>,
|
pub guild_positions: Vec<String>,
|
||||||
pub inline_attachment_media: bool,
|
pub inline_attachment_media: bool,
|
||||||
pub inline_embed_media: bool,
|
pub inline_embed_media: bool,
|
||||||
|
@ -49,6 +64,9 @@ pub struct UserSettings {
|
||||||
pub native_phone_integration_enabled: bool,
|
pub native_phone_integration_enabled: bool,
|
||||||
pub render_embeds: bool,
|
pub render_embeds: bool,
|
||||||
pub render_reactions: bool,
|
pub render_reactions: bool,
|
||||||
|
#[cfg(feature = "sqlx")]
|
||||||
|
pub restricted_guilds: sqlx::types::Json<Vec<String>>,
|
||||||
|
#[cfg(not(feature = "sqlx"))]
|
||||||
pub restricted_guilds: Vec<String>,
|
pub restricted_guilds: Vec<String>,
|
||||||
pub show_current_game: bool,
|
pub show_current_game: bool,
|
||||||
pub status: UserStatus,
|
pub status: UserStatus,
|
||||||
|
@ -73,11 +91,11 @@ impl Default for UserSettings {
|
||||||
disable_games_tab: true,
|
disable_games_tab: true,
|
||||||
enable_tts_command: false,
|
enable_tts_command: false,
|
||||||
explicit_content_filter: 0,
|
explicit_content_filter: 0,
|
||||||
friend_source_flags: FriendSourceFlags::default(),
|
friend_source_flags: Default::default(),
|
||||||
gateway_connected: false,
|
gateway_connected: false,
|
||||||
gif_auto_play: false,
|
gif_auto_play: false,
|
||||||
guild_folders: Vec::new(),
|
guild_folders: Default::default(),
|
||||||
guild_positions: Vec::new(),
|
guild_positions: Default::default(),
|
||||||
inline_attachment_media: true,
|
inline_attachment_media: true,
|
||||||
inline_embed_media: true,
|
inline_embed_media: true,
|
||||||
locale: "en-US".to_string(),
|
locale: "en-US".to_string(),
|
||||||
|
@ -85,7 +103,7 @@ impl Default for UserSettings {
|
||||||
native_phone_integration_enabled: true,
|
native_phone_integration_enabled: true,
|
||||||
render_embeds: true,
|
render_embeds: true,
|
||||||
render_reactions: true,
|
render_reactions: true,
|
||||||
restricted_guilds: Vec::new(),
|
restricted_guilds: Default::default(),
|
||||||
show_current_game: true,
|
show_current_game: true,
|
||||||
status: UserStatus::Online,
|
status: UserStatus::Online,
|
||||||
stream_notifications_enabled: false,
|
stream_notifications_enabled: false,
|
||||||
|
@ -96,6 +114,7 @@ impl Default for UserSettings {
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
|
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
|
||||||
|
#[cfg_attr(feature = "sqlx", derive(sqlx::FromRow))]
|
||||||
pub struct CustomStatus {
|
pub struct CustomStatus {
|
||||||
pub emoji_id: Option<String>,
|
pub emoji_id: Option<String>,
|
||||||
pub emoji_name: Option<String>,
|
pub emoji_name: Option<String>,
|
||||||
|
|
|
@ -7,14 +7,13 @@ use crate::types::{
|
||||||
};
|
};
|
||||||
|
|
||||||
/// See https://docs.spacebar.chat/routes/#cmp--schemas-voicestate
|
/// See https://docs.spacebar.chat/routes/#cmp--schemas-voicestate
|
||||||
#[derive(Serialize, Deserialize, Debug, Default, Clone)]
|
#[derive(Serialize, Deserialize, Debug, Default, Clone, PartialEq)]
|
||||||
|
#[cfg_attr(feature = "sqlx", derive(sqlx::FromRow))]
|
||||||
pub struct VoiceState {
|
pub struct VoiceState {
|
||||||
pub guild_id: Option<Snowflake>,
|
pub guild_id: Option<Snowflake>,
|
||||||
pub guild: Option<Guild>,
|
pub guild: Option<Guild>,
|
||||||
pub channel_id: Snowflake,
|
pub channel_id: Snowflake,
|
||||||
pub channel: Option<Channel>,
|
|
||||||
pub user_id: Snowflake,
|
pub user_id: Snowflake,
|
||||||
pub user: Option<User>,
|
|
||||||
pub member: Option<GuildMember>,
|
pub member: Option<GuildMember>,
|
||||||
pub session_id: Snowflake,
|
pub session_id: Snowflake,
|
||||||
pub token: Option<String>,
|
pub token: Option<String>,
|
||||||
|
|
|
@ -6,27 +6,24 @@ use crate::types::{
|
||||||
};
|
};
|
||||||
|
|
||||||
/// See https://docs.spacebar.chat/routes/#cmp--schemas-webhook
|
/// See https://docs.spacebar.chat/routes/#cmp--schemas-webhook
|
||||||
#[derive(Serialize, Deserialize, Debug, Default, Clone)]
|
#[derive(Serialize, Deserialize, Debug, Default, Clone, PartialEq)]
|
||||||
|
#[cfg_attr(feature = "sqlx", derive(sqlx::FromRow))]
|
||||||
pub struct Webhook {
|
pub struct Webhook {
|
||||||
|
pub id: Snowflake,
|
||||||
#[serde(rename = "type")]
|
#[serde(rename = "type")]
|
||||||
pub webhook_type: i32,
|
pub webhook_type: i32,
|
||||||
pub name: String,
|
pub name: String,
|
||||||
pub avatar: String,
|
pub avatar: String,
|
||||||
pub token: String,
|
pub token: String,
|
||||||
pub guild_id: Snowflake,
|
pub guild_id: Snowflake,
|
||||||
#[serde(skip_serializing_if = "Option::is_none")]
|
|
||||||
pub guild: Option<Guild>,
|
|
||||||
pub channel_id: Snowflake,
|
pub channel_id: Snowflake,
|
||||||
#[serde(skip_serializing_if = "Option::is_none")]
|
|
||||||
pub channel: Option<Channel>,
|
|
||||||
pub application_id: Snowflake,
|
pub application_id: Snowflake,
|
||||||
#[serde(skip_serializing_if = "Option::is_none")]
|
#[serde(skip_serializing_if = "Option::is_none")]
|
||||||
pub application: Option<Application>,
|
#[cfg_attr(feature = "sqlx", sqlx(skip))]
|
||||||
pub user_id: Snowflake,
|
|
||||||
#[serde(skip_serializing_if = "Option::is_none")]
|
|
||||||
pub user: Option<User>,
|
pub user: Option<User>,
|
||||||
pub source_guild_id: Snowflake,
|
|
||||||
#[serde(skip_serializing_if = "Option::is_none")]
|
#[serde(skip_serializing_if = "Option::is_none")]
|
||||||
|
#[cfg_attr(feature = "sqlx", sqlx(skip))]
|
||||||
pub source_guild: Option<Guild>,
|
pub source_guild: Option<Guild>,
|
||||||
pub id: Snowflake,
|
#[serde(skip_serializing_if = "Option::is_none")]
|
||||||
|
pub url: Option<String>,
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,14 +1,14 @@
|
||||||
use crate::types::utils::Snowflake;
|
use crate::types::utils::Snowflake;
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
|
|
||||||
#[derive(Serialize, Deserialize, Debug, Default, Clone)]
|
#[derive(Serialize, Deserialize, Debug, Default, Clone, PartialEq)]
|
||||||
pub struct WelcomeScreenObject {
|
pub struct WelcomeScreenObject {
|
||||||
pub enabled: bool,
|
pub enabled: bool,
|
||||||
pub description: Option<String>,
|
pub description: Option<String>,
|
||||||
pub welcome_channels: Vec<WelcomeScreenChannel>,
|
pub welcome_channels: Vec<WelcomeScreenChannel>,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Serialize, Deserialize, Debug, Default, Clone)]
|
#[derive(Serialize, Deserialize, Debug, Default, Clone, PartialEq)]
|
||||||
pub struct WelcomeScreenChannel {
|
pub struct WelcomeScreenChannel {
|
||||||
pub channel_id: Snowflake,
|
pub channel_id: Snowflake,
|
||||||
pub description: String,
|
pub description: String,
|
||||||
|
|
Loading…
Reference in New Issue