forked from jmug/stoatchat
Merge remote-tracking branch 'origin/main' into chore/utoipa
This commit is contained in:
@@ -143,6 +143,7 @@ impl From<crate::FieldsWebhook> for FieldsWebhook {
|
||||
}
|
||||
|
||||
impl From<crate::Channel> for Channel {
|
||||
#[allow(deprecated)]
|
||||
fn from(value: crate::Channel) -> Self {
|
||||
match value {
|
||||
crate::Channel::SavedMessages { id, user } => Channel::SavedMessages { id, user },
|
||||
@@ -188,6 +189,7 @@ impl From<crate::Channel> for Channel {
|
||||
default_permissions,
|
||||
role_permissions,
|
||||
nsfw,
|
||||
voice,
|
||||
} => Channel::TextChannel {
|
||||
id,
|
||||
server,
|
||||
@@ -198,31 +200,14 @@ impl From<crate::Channel> for Channel {
|
||||
default_permissions,
|
||||
role_permissions,
|
||||
nsfw,
|
||||
},
|
||||
crate::Channel::VoiceChannel {
|
||||
id,
|
||||
server,
|
||||
name,
|
||||
description,
|
||||
icon,
|
||||
default_permissions,
|
||||
role_permissions,
|
||||
nsfw,
|
||||
} => Channel::VoiceChannel {
|
||||
id,
|
||||
server,
|
||||
name,
|
||||
description,
|
||||
icon: icon.map(|file| file.into()),
|
||||
default_permissions,
|
||||
role_permissions,
|
||||
nsfw,
|
||||
voice: voice.map(|voice| voice.into()),
|
||||
},
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl From<Channel> for crate::Channel {
|
||||
#[allow(deprecated)]
|
||||
fn from(value: Channel) -> crate::Channel {
|
||||
match value {
|
||||
Channel::SavedMessages { id, user } => crate::Channel::SavedMessages { id, user },
|
||||
@@ -268,6 +253,7 @@ impl From<Channel> for crate::Channel {
|
||||
default_permissions,
|
||||
role_permissions,
|
||||
nsfw,
|
||||
voice,
|
||||
} => crate::Channel::TextChannel {
|
||||
id,
|
||||
server,
|
||||
@@ -278,25 +264,7 @@ impl From<Channel> for crate::Channel {
|
||||
default_permissions,
|
||||
role_permissions,
|
||||
nsfw,
|
||||
},
|
||||
Channel::VoiceChannel {
|
||||
id,
|
||||
server,
|
||||
name,
|
||||
description,
|
||||
icon,
|
||||
default_permissions,
|
||||
role_permissions,
|
||||
nsfw,
|
||||
} => crate::Channel::VoiceChannel {
|
||||
id,
|
||||
server,
|
||||
name,
|
||||
description,
|
||||
icon: icon.map(|file| file.into()),
|
||||
default_permissions,
|
||||
role_permissions,
|
||||
nsfw,
|
||||
voice: voice.map(|voice| voice.into()),
|
||||
},
|
||||
}
|
||||
}
|
||||
@@ -315,6 +283,7 @@ impl From<crate::PartialChannel> for PartialChannel {
|
||||
role_permissions: value.role_permissions,
|
||||
default_permissions: value.default_permissions,
|
||||
last_message_id: value.last_message_id,
|
||||
voice: value.voice.map(|voice| voice.into())
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -332,6 +301,7 @@ impl From<PartialChannel> for crate::PartialChannel {
|
||||
role_permissions: value.role_permissions,
|
||||
default_permissions: value.default_permissions,
|
||||
last_message_id: value.last_message_id,
|
||||
voice: value.voice.map(|voice| voice.into())
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -342,6 +312,7 @@ impl From<FieldsChannel> for crate::FieldsChannel {
|
||||
FieldsChannel::Description => crate::FieldsChannel::Description,
|
||||
FieldsChannel::Icon => crate::FieldsChannel::Icon,
|
||||
FieldsChannel::DefaultPermissions => crate::FieldsChannel::DefaultPermissions,
|
||||
FieldsChannel::Voice => crate::FieldsChannel::Voice,
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -352,6 +323,7 @@ impl From<crate::FieldsChannel> for FieldsChannel {
|
||||
crate::FieldsChannel::Description => FieldsChannel::Description,
|
||||
crate::FieldsChannel::Icon => FieldsChannel::Icon,
|
||||
crate::FieldsChannel::DefaultPermissions => FieldsChannel::DefaultPermissions,
|
||||
crate::FieldsChannel::Voice => FieldsChannel::Voice,
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -543,6 +515,7 @@ impl From<crate::SystemMessage> for SystemMessage {
|
||||
crate::SystemMessage::UserRemove { id, by } => Self::UserRemove { id, by },
|
||||
crate::SystemMessage::MessagePinned { id, by } => Self::MessagePinned { id, by },
|
||||
crate::SystemMessage::MessageUnpinned { id, by } => Self::MessageUnpinned { id, by },
|
||||
crate::SystemMessage::CallStarted { by, finished_at } => Self::CallStarted { by, finished_at }
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -639,6 +612,8 @@ impl From<crate::Member> for Member {
|
||||
avatar: value.avatar.map(|f| f.into()),
|
||||
roles: value.roles,
|
||||
timeout: value.timeout,
|
||||
can_publish: value.can_publish,
|
||||
can_receive: value.can_receive,
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -652,6 +627,8 @@ impl From<Member> for crate::Member {
|
||||
avatar: value.avatar.map(|f| f.into()),
|
||||
roles: value.roles,
|
||||
timeout: value.timeout,
|
||||
can_publish: value.can_publish,
|
||||
can_receive: value.can_receive,
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -665,6 +642,8 @@ impl From<crate::PartialMember> for PartialMember {
|
||||
avatar: value.avatar.map(|f| f.into()),
|
||||
roles: value.roles,
|
||||
timeout: value.timeout,
|
||||
can_publish: value.can_publish,
|
||||
can_receive: value.can_receive,
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -678,6 +657,8 @@ impl From<PartialMember> for crate::PartialMember {
|
||||
avatar: value.avatar.map(|f| f.into()),
|
||||
roles: value.roles,
|
||||
timeout: value.timeout,
|
||||
can_publish: value.can_publish,
|
||||
can_receive: value.can_receive,
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -707,6 +688,8 @@ impl From<crate::FieldsMember> for FieldsMember {
|
||||
crate::FieldsMember::Nickname => FieldsMember::Nickname,
|
||||
crate::FieldsMember::Roles => FieldsMember::Roles,
|
||||
crate::FieldsMember::Timeout => FieldsMember::Timeout,
|
||||
crate::FieldsMember::CanReceive => FieldsMember::CanReceive,
|
||||
crate::FieldsMember::CanPublish => FieldsMember::CanPublish,
|
||||
crate::FieldsMember::JoinedAt => FieldsMember::JoinedAt,
|
||||
}
|
||||
}
|
||||
@@ -719,6 +702,8 @@ impl From<FieldsMember> for crate::FieldsMember {
|
||||
FieldsMember::Nickname => crate::FieldsMember::Nickname,
|
||||
FieldsMember::Roles => crate::FieldsMember::Roles,
|
||||
FieldsMember::Timeout => crate::FieldsMember::Timeout,
|
||||
FieldsMember::CanReceive => crate::FieldsMember::CanReceive,
|
||||
FieldsMember::CanPublish => crate::FieldsMember::CanPublish,
|
||||
FieldsMember::JoinedAt => crate::FieldsMember::JoinedAt,
|
||||
}
|
||||
}
|
||||
@@ -1387,3 +1372,19 @@ impl From<FieldsMessage> for crate::FieldsMessage {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl From<VoiceInformation> for crate::VoiceInformation {
|
||||
fn from(value: VoiceInformation) -> Self {
|
||||
crate::VoiceInformation {
|
||||
max_users: value.max_users
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl From<crate::VoiceInformation> for VoiceInformation {
|
||||
fn from(value: crate::VoiceInformation) -> Self {
|
||||
VoiceInformation {
|
||||
max_users: value.max_users
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -144,10 +144,6 @@ impl<'z> BulkDatabasePermissionQuery<'z> {
|
||||
Channel::TextChannel {
|
||||
default_permissions,
|
||||
..
|
||||
}
|
||||
| Channel::VoiceChannel {
|
||||
default_permissions,
|
||||
..
|
||||
} => default_permissions.unwrap_or_default().into(),
|
||||
_ => Default::default(),
|
||||
}
|
||||
@@ -156,16 +152,14 @@ impl<'z> BulkDatabasePermissionQuery<'z> {
|
||||
}
|
||||
}
|
||||
|
||||
#[allow(dead_code)]
|
||||
#[allow(dead_code, deprecated)]
|
||||
fn get_channel_type(&mut self) -> ChannelType {
|
||||
if let Some(channel) = &self.channel {
|
||||
match channel {
|
||||
Channel::DirectMessage { .. } => ChannelType::DirectMessage,
|
||||
Channel::Group { .. } => ChannelType::Group,
|
||||
Channel::SavedMessages { .. } => ChannelType::SavedMessages,
|
||||
Channel::TextChannel { .. } | Channel::VoiceChannel { .. } => {
|
||||
ChannelType::ServerChannel
|
||||
}
|
||||
Channel::TextChannel { .. } => ChannelType::ServerChannel,
|
||||
}
|
||||
} else {
|
||||
ChannelType::Unknown
|
||||
@@ -179,9 +173,6 @@ impl<'z> BulkDatabasePermissionQuery<'z> {
|
||||
match channel {
|
||||
Channel::TextChannel {
|
||||
role_permissions, ..
|
||||
}
|
||||
| Channel::VoiceChannel {
|
||||
role_permissions, ..
|
||||
} => role_permissions,
|
||||
_ => panic!("Not supported for non-server channels"),
|
||||
}
|
||||
@@ -208,12 +199,6 @@ async fn calculate_members_permissions<'a>(
|
||||
role_permissions,
|
||||
default_permissions,
|
||||
..
|
||||
}
|
||||
| Channel::VoiceChannel {
|
||||
id,
|
||||
role_permissions,
|
||||
default_permissions,
|
||||
..
|
||||
} => (id, role_permissions, default_permissions),
|
||||
_ => panic!("Calculation of member permissions must be done on a server channel"),
|
||||
};
|
||||
|
||||
@@ -0,0 +1,24 @@
|
||||
use crate::Database;
|
||||
use revolt_result::Result;
|
||||
|
||||
/// Formats a user's name depending on their optional features and location.
|
||||
/// Factors in server display names and user display names before falling back to username#discriminator.
|
||||
/// Passing a server in which the user is not a member will result in an Err.
|
||||
pub async fn format_display_name(
|
||||
db: &Database,
|
||||
user_id: &str,
|
||||
server_id: Option<&str>,
|
||||
) -> Result<String> {
|
||||
if let Some(server_id) = server_id {
|
||||
let member = db.fetch_member(server_id, user_id).await?;
|
||||
if let Some(nick) = member.nickname {
|
||||
return Ok(nick);
|
||||
}
|
||||
}
|
||||
|
||||
let user = db.fetch_user(user_id).await?;
|
||||
if let Some(display) = user.display_name {
|
||||
return Ok(display);
|
||||
}
|
||||
Ok(format!("{}#{}", user.username, user.discriminator))
|
||||
}
|
||||
@@ -1,8 +1,11 @@
|
||||
pub mod bridge;
|
||||
pub mod bulk_permissions;
|
||||
mod funcs;
|
||||
pub mod idempotency;
|
||||
pub mod permissions;
|
||||
pub mod reference;
|
||||
pub mod test_fixtures;
|
||||
#[cfg(feature = "utoipa")]
|
||||
pub mod utoipa;
|
||||
pub mod utoipa;
|
||||
|
||||
pub use funcs::*;
|
||||
|
||||
@@ -185,9 +185,26 @@ impl PermissionQuery for DatabasePermissionQuery<'_> {
|
||||
}
|
||||
}
|
||||
|
||||
async fn do_we_have_publish_overwrites(&mut self) -> bool {
|
||||
if let Some(member) = &self.member {
|
||||
member.can_publish
|
||||
} else {
|
||||
true
|
||||
}
|
||||
}
|
||||
|
||||
async fn do_we_have_receive_overwrites(&mut self) -> bool {
|
||||
if let Some(member) = &self.member {
|
||||
member.can_receive
|
||||
} else {
|
||||
true
|
||||
}
|
||||
}
|
||||
|
||||
// * For calculating channel permission
|
||||
|
||||
/// Get the type of the channel
|
||||
#[allow(deprecated)]
|
||||
async fn get_channel_type(&mut self) -> ChannelType {
|
||||
if let Some(channel) = &self.channel {
|
||||
match channel {
|
||||
@@ -199,9 +216,7 @@ impl PermissionQuery for DatabasePermissionQuery<'_> {
|
||||
Cow::Borrowed(Channel::SavedMessages { .. })
|
||||
| Cow::Owned(Channel::SavedMessages { .. }) => ChannelType::SavedMessages,
|
||||
Cow::Borrowed(Channel::TextChannel { .. })
|
||||
| Cow::Owned(Channel::TextChannel { .. })
|
||||
| Cow::Borrowed(Channel::VoiceChannel { .. })
|
||||
| Cow::Owned(Channel::VoiceChannel { .. }) => ChannelType::ServerChannel,
|
||||
| Cow::Owned(Channel::TextChannel { .. }) => ChannelType::ServerChannel,
|
||||
}
|
||||
} else {
|
||||
ChannelType::Unknown
|
||||
@@ -225,14 +240,6 @@ impl PermissionQuery for DatabasePermissionQuery<'_> {
|
||||
| Cow::Owned(Channel::TextChannel {
|
||||
default_permissions,
|
||||
..
|
||||
})
|
||||
| Cow::Borrowed(Channel::VoiceChannel {
|
||||
default_permissions,
|
||||
..
|
||||
})
|
||||
| Cow::Owned(Channel::VoiceChannel {
|
||||
default_permissions,
|
||||
..
|
||||
}) => default_permissions.unwrap_or_default().into(),
|
||||
_ => Default::default(),
|
||||
}
|
||||
@@ -250,12 +257,6 @@ impl PermissionQuery for DatabasePermissionQuery<'_> {
|
||||
})
|
||||
| Cow::Owned(Channel::TextChannel {
|
||||
role_permissions, ..
|
||||
})
|
||||
| Cow::Borrowed(Channel::VoiceChannel {
|
||||
role_permissions, ..
|
||||
})
|
||||
| Cow::Owned(Channel::VoiceChannel {
|
||||
role_permissions, ..
|
||||
}) => {
|
||||
if let Some(server) = &self.server {
|
||||
let member_roles = self
|
||||
@@ -343,11 +344,10 @@ impl PermissionQuery for DatabasePermissionQuery<'_> {
|
||||
/// (this will only ever be called for server channels, use unimplemented!() for other code paths)
|
||||
async fn set_server_from_channel(&mut self) {
|
||||
if let Some(channel) = &self.channel {
|
||||
#[allow(deprecated)]
|
||||
match channel {
|
||||
Cow::Borrowed(Channel::TextChannel { server, .. })
|
||||
| Cow::Owned(Channel::TextChannel { server, .. })
|
||||
| Cow::Borrowed(Channel::VoiceChannel { server, .. })
|
||||
| Cow::Owned(Channel::VoiceChannel { server, .. }) => {
|
||||
| Cow::Owned(Channel::TextChannel { server, .. }) => {
|
||||
if let Some(known_server) =
|
||||
// I'm not sure why I can't just pattern match both at once here?
|
||||
// It throws some weird error and the provided fix doesn't work :/
|
||||
|
||||
Reference in New Issue
Block a user