forked from jmug/stoatchat
feat: add webhook permissions
This commit is contained in:
@@ -10,7 +10,7 @@ use crate::{
|
||||
models::{
|
||||
message::{
|
||||
AppendMessage, BulkMessageResponse, Interactions, PartialMessage, SendableEmbed,
|
||||
SystemMessage,
|
||||
SystemMessage, DataMessageSend,
|
||||
},
|
||||
Channel, Emoji, Message, User,
|
||||
},
|
||||
@@ -451,3 +451,39 @@ impl Interactions {
|
||||
!self.restrict_reactions && self.reactions.is_none()
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
fn throw_permission(permissions: u64, permission: Permission) -> Result<()> {
|
||||
if (permission as u64) & permissions == (permission as u64) {
|
||||
Ok(())
|
||||
} else {
|
||||
Err(Error::MissingPermission { permission })
|
||||
}
|
||||
}
|
||||
|
||||
impl DataMessageSend {
|
||||
pub fn validate_webhook_permissions(
|
||||
&self,
|
||||
permissions: u64,
|
||||
) -> Result<()> {
|
||||
throw_permission(permissions, Permission::SendMessage)?;
|
||||
|
||||
if self.attachments.as_ref().map_or(false, |v| !v.is_empty()) {
|
||||
throw_permission(permissions, Permission::UploadFiles)?;
|
||||
};
|
||||
|
||||
if self.embeds.as_ref().map_or(false, |v| !v.is_empty()) {
|
||||
throw_permission(permissions, Permission::SendEmbeds)?;
|
||||
};
|
||||
|
||||
if self.masquerade.is_some() {
|
||||
throw_permission(permissions, Permission::Masquerade)?;
|
||||
};
|
||||
|
||||
if self.interactions.is_some() {
|
||||
throw_permission(permissions, Permission::React)?;
|
||||
};
|
||||
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
@@ -110,6 +110,7 @@ pub static DEFAULT_PERMISSION: Lazy<u64> = Lazy::new(|| DEFAULT_PERMISSION_VIEW_
|
||||
pub static DEFAULT_PERMISSION_SAVED_MESSAGES: u64 = Permission::GrantAllSafe as u64;
|
||||
pub static DEFAULT_PERMISSION_DIRECT_MESSAGE: Lazy<u64> = Lazy::new(|| DEFAULT_PERMISSION.add(Permission::ManageChannel + Permission::React));
|
||||
pub static DEFAULT_PERMISSION_SERVER: Lazy<u64> = Lazy::new(|| DEFAULT_PERMISSION.add(Permission::React + Permission::ChangeNickname + Permission::ChangeAvatar));
|
||||
pub static DEFAULT_WEBHOOK_PERMISSIONS: Lazy<u64> = Lazy::new(|| Permission::SendMessage + Permission::SendEmbeds + Permission::Masquerade + Permission::React);
|
||||
|
||||
bitfield! {
|
||||
#[derive(Default)]
|
||||
|
||||
Reference in New Issue
Block a user