use once_cell::sync::Lazy;
use std::{fmt, ops::Add};
pub enum ChannelType {
SavedMessages,
DirectMessage,
Group,
ServerChannel,
Unknown,
}
#[derive(Debug, PartialEq, Eq, Copy, Clone)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[cfg_attr(feature = "try-from-primitive", derive(num_enum::TryFromPrimitive))]
#[repr(u64)]
pub enum ChannelPermission {
ManageChannel = 1 << 0,
ManageServer = 1 << 1,
ManagePermissions = 1 << 2,
ManageRole = 1 << 3,
ManageCustomisation = 1 << 4,
KickMembers = 1 << 6,
BanMembers = 1 << 7,
TimeoutMembers = 1 << 8,
AssignRoles = 1 << 9,
ChangeNickname = 1 << 10,
ManageNicknames = 1 << 11,
ChangeAvatar = 1 << 12,
RemoveAvatars = 1 << 13,
ViewChannel = 1 << 20,
ReadMessageHistory = 1 << 21,
SendMessage = 1 << 22,
ManageMessages = 1 << 23,
ManageWebhooks = 1 << 24,
InviteOthers = 1 << 25,
SendEmbeds = 1 << 26,
UploadFiles = 1 << 27,
Masquerade = 1 << 28,
React = 1 << 29,
Connect = 1 << 30,
Speak = 1 << 31,
Video = 1 << 32,
MuteMembers = 1 << 33,
DeafenMembers = 1 << 34,
MoveMembers = 1 << 35,
Listen = 1 << 36,
MentionEveryone = 1 << 37,
MentionRoles = 1 << 38,
GrantAllSafe = 0x000F_FFFF_FFFF_FFFF,
GrantAll = u64::MAX,
}
impl fmt::Display for ChannelPermission {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
fmt::Debug::fmt(self, f)
}
}
impl_op_ex!(+ |a: &ChannelPermission, b: &ChannelPermission| -> u64 { *a as u64 | *b as u64 });
impl_op_ex_commutative!(+ |a: &u64, b: &ChannelPermission| -> u64 { *a | *b as u64 });
pub static ALLOW_IN_TIMEOUT: Lazy<u64> =
Lazy::new(|| ChannelPermission::ViewChannel + ChannelPermission::ReadMessageHistory);
pub static DEFAULT_PERMISSION_VIEW_ONLY: Lazy<u64> =
Lazy::new(|| ChannelPermission::ViewChannel + ChannelPermission::ReadMessageHistory);
pub static DEFAULT_PERMISSION: Lazy<u64> = Lazy::new(|| {
DEFAULT_PERMISSION_VIEW_ONLY.add(
ChannelPermission::SendMessage
+ ChannelPermission::InviteOthers
+ ChannelPermission::SendEmbeds
+ ChannelPermission::UploadFiles
+ ChannelPermission::Connect
+ ChannelPermission::Speak
+ ChannelPermission::Listen
+ ChannelPermission::Video
)
});
pub static DEFAULT_PERMISSION_SAVED_MESSAGES: u64 = ChannelPermission::GrantAllSafe as u64;
pub static DEFAULT_PERMISSION_DIRECT_MESSAGE: Lazy<u64> = Lazy::new(|| {
DEFAULT_PERMISSION.add(ChannelPermission::ManageChannel + ChannelPermission::React)
});
pub static DEFAULT_PERMISSION_SERVER: Lazy<u64> = Lazy::new(|| {
DEFAULT_PERMISSION.add(
ChannelPermission::React
+ ChannelPermission::ChangeNickname
+ ChannelPermission::ChangeAvatar,
)
});
pub static DEFAULT_WEBHOOK_PERMISSIONS: Lazy<u64> = Lazy::new(|| {
ChannelPermission::SendMessage
+ ChannelPermission::SendEmbeds
+ ChannelPermission::Masquerade
+ ChannelPermission::React
});