Invites: Include server and channel ID.
Permissions: Small fix, consider self as User.
This commit is contained in:
@@ -8,18 +8,18 @@ use std::ops;
|
|||||||
#[derive(Debug, PartialEq, Eq, TryFromPrimitive, Copy, Clone)]
|
#[derive(Debug, PartialEq, Eq, TryFromPrimitive, Copy, Clone)]
|
||||||
#[repr(u32)]
|
#[repr(u32)]
|
||||||
pub enum ServerPermission {
|
pub enum ServerPermission {
|
||||||
View = 0b00000000000000000000000000000001, // 1
|
View = 0b00000000000000000000000000000001, // 1
|
||||||
ManageMembers = 0b00000000000000000000000000000010, // 2
|
ManageMembers = 0b00000000000000000000000000000010, // 2
|
||||||
ManageChannels = 0b00000000000000000000000000000100, // 4
|
ManageChannels = 0b00000000000000000000000000000100, // 4
|
||||||
ManageServer = 0b00000000000000000000000000001000, // 8
|
ManageServer = 0b00000000000000000000000000001000, // 8
|
||||||
KickMembers = 0b00000000000000000000000000010000, // 16
|
KickMembers = 0b00000000000000000000000000010000, // 16
|
||||||
BanMembers = 0b00000000000000000000000000100000, // 32
|
BanMembers = 0b00000000000000000000000000100000, // 32
|
||||||
// 6 bits of space
|
// 6 bits of space
|
||||||
ChangeNickname = 0b00000000000000000001000000000000, // 4096
|
ChangeNickname = 0b00000000000000000001000000000000, // 4096
|
||||||
ManageNicknames = 0b00000000000000000010000000000000, // 8192
|
ManageNicknames = 0b00000000000000000010000000000000, // 8192
|
||||||
ChangeAvatar = 0b00000000000000000100000000000000, // 16392
|
ChangeAvatar = 0b00000000000000000100000000000000, // 16392
|
||||||
RemoveAvatars = 0b00000000000000001000000000000000, // 32784
|
RemoveAvatars = 0b00000000000000001000000000000000, // 32784
|
||||||
// 16 bits of space
|
// 16 bits of space
|
||||||
}
|
}
|
||||||
|
|
||||||
impl_op_ex!(+ |a: &ServerPermission, b: &ServerPermission| -> u32 { *a as u32 | *b as u32 });
|
impl_op_ex!(+ |a: &ServerPermission, b: &ServerPermission| -> u32 { *a as u32 | *b as u32 });
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ impl_op_ex_commutative!(+ |a: &u32, b: &UserPermission| -> u32 { *a | *b as u32
|
|||||||
|
|
||||||
pub fn get_relationship(a: &User, b: &str) -> RelationshipStatus {
|
pub fn get_relationship(a: &User, b: &str) -> RelationshipStatus {
|
||||||
if a.id == b {
|
if a.id == b {
|
||||||
return RelationshipStatus::Friend;
|
return RelationshipStatus::User;
|
||||||
}
|
}
|
||||||
|
|
||||||
if let Some(relations) = &a.relations {
|
if let Some(relations) = &a.relations {
|
||||||
@@ -55,7 +55,8 @@ impl<'a> PermissionCalculator<'a> {
|
|||||||
.map(|v| v.to_owned())
|
.map(|v| v.to_owned())
|
||||||
.unwrap_or_else(|| get_relationship(&self.perspective, &target))
|
.unwrap_or_else(|| get_relationship(&self.perspective, &target))
|
||||||
{
|
{
|
||||||
RelationshipStatus::Friend => return Ok(u32::MAX),
|
RelationshipStatus::Friend |
|
||||||
|
RelationshipStatus::User => return Ok(u32::MAX),
|
||||||
RelationshipStatus::Blocked | RelationshipStatus::BlockedOther => {
|
RelationshipStatus::Blocked | RelationshipStatus::BlockedOther => {
|
||||||
return Ok(UserPermission::Access as u32)
|
return Ok(UserPermission::Access as u32)
|
||||||
}
|
}
|
||||||
@@ -64,7 +65,7 @@ impl<'a> PermissionCalculator<'a> {
|
|||||||
// ! INFO: if we add boolean switch for permission to
|
// ! INFO: if we add boolean switch for permission to
|
||||||
// ! message people who have mutual, we need to get
|
// ! message people who have mutual, we need to get
|
||||||
// ! rid of this return statement.
|
// ! rid of this return statement.
|
||||||
return Ok(permissions);
|
// return Ok(permissions);
|
||||||
}
|
}
|
||||||
_ => {}
|
_ => {}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,11 +8,13 @@ use serde::Serialize;
|
|||||||
#[serde(tag = "type")]
|
#[serde(tag = "type")]
|
||||||
pub enum InviteResponse {
|
pub enum InviteResponse {
|
||||||
Server {
|
Server {
|
||||||
|
server_id: String,
|
||||||
server_name: String,
|
server_name: String,
|
||||||
#[serde(skip_serializing_if = "Option::is_none")]
|
#[serde(skip_serializing_if = "Option::is_none")]
|
||||||
server_icon: Option<File>,
|
server_icon: Option<File>,
|
||||||
#[serde(skip_serializing_if = "Option::is_none")]
|
#[serde(skip_serializing_if = "Option::is_none")]
|
||||||
server_banner: Option<File>,
|
server_banner: Option<File>,
|
||||||
|
channel_id: String,
|
||||||
channel_name: String,
|
channel_name: String,
|
||||||
#[serde(skip_serializing_if = "Option::is_none")]
|
#[serde(skip_serializing_if = "Option::is_none")]
|
||||||
channel_description: Option<String>,
|
channel_description: Option<String>,
|
||||||
@@ -34,6 +36,7 @@ pub async fn req(target: Ref) -> Result<JsonValue> {
|
|||||||
let creator = Ref::from_unchecked(creator).fetch_user().await?;
|
let creator = Ref::from_unchecked(creator).fetch_user().await?;
|
||||||
|
|
||||||
if let Channel::TextChannel {
|
if let Channel::TextChannel {
|
||||||
|
id,
|
||||||
server,
|
server,
|
||||||
name,
|
name,
|
||||||
description,
|
description,
|
||||||
@@ -43,9 +46,11 @@ pub async fn req(target: Ref) -> Result<JsonValue> {
|
|||||||
let server = Ref::from_unchecked(server).fetch_server().await?;
|
let server = Ref::from_unchecked(server).fetch_server().await?;
|
||||||
|
|
||||||
Ok(json!(InviteResponse::Server {
|
Ok(json!(InviteResponse::Server {
|
||||||
|
server_id: server.id,
|
||||||
server_name: server.name,
|
server_name: server.name,
|
||||||
server_icon: server.icon,
|
server_icon: server.icon,
|
||||||
server_banner: server.banner,
|
server_banner: server.banner,
|
||||||
|
channel_id: id,
|
||||||
channel_name: name,
|
channel_name: name,
|
||||||
channel_description: description,
|
channel_description: description,
|
||||||
user_name: creator.username,
|
user_name: creator.username,
|
||||||
|
|||||||
Reference in New Issue
Block a user