feat: implement system privacy commands (yay system edit done)

This commit is contained in:
dusk 2025-04-04 06:14:17 +09:00
parent cb0a9eaf9f
commit 3eece261fd
No known key found for this signature in database
10 changed files with 154 additions and 75 deletions

View file

@ -202,12 +202,25 @@ pub fn edit() -> impl Iterator<Item = Command> {
let system_proxy = tokens!(system, "proxy");
let system_proxy_cmd = [
command!(system_proxy => "system_show_proxy_current").help("Shows your system's proxy setting for the guild you are in"),
command!(system_proxy => "system_show_proxy_current")
.help("Shows your system's proxy setting for the guild you are in"),
command!(system_proxy, Toggle => "system_toggle_proxy_current")
.help("Toggle your system's proxy for the guild you are in"),
command!(system_proxy, GuildRef => "system_show_proxy").help("Shows your system's proxy setting for a guild"),
command!(system_proxy, GuildRef => "system_show_proxy")
.help("Shows your system's proxy setting for a guild"),
command!(system_proxy, GuildRef, Toggle => "system_toggle_proxy")
.help("Toggle your system's proxy for a guild"),
]
.into_iter();
let system_privacy = tokens!(system, ("privacy", ["priv"]));
let system_privacy_cmd = [
command!(system_privacy => "system_show_privacy")
.help("Shows your system's privacy settings"),
command!(system_privacy, ("all", ["a"]), ("level", PrivacyLevel) => "system_change_privacy_all")
.help("Changes all privacy settings for your system"),
command!(system_privacy, ("privacy", SystemPrivacyTarget), ("level", PrivacyLevel) => "system_change_privacy")
.help("Changes a specific privacy setting for your system"),
].into_iter();
system_new_cmd
@ -222,6 +235,7 @@ pub fn edit() -> impl Iterator<Item = Command> {
.chain(system_server_avatar_self_cmd)
.chain(system_banner_self_cmd)
.chain(system_delete)
.chain(system_privacy_cmd)
.chain(system_proxy_cmd)
.chain(system_name_cmd)
.chain(system_server_name_cmd)

View file

@ -14,6 +14,7 @@ pub enum ParameterValue {
SystemRef(String),
GuildRef(String),
MemberPrivacyTarget(String),
SystemPrivacyTarget(String),
PrivacyLevel(String),
Toggle(bool),
Avatar(String),
@ -45,6 +46,7 @@ impl Display for Parameter {
ParameterKind::SystemRef => write!(f, "<target system>"),
ParameterKind::GuildRef => write!(f, "<target guild>"),
ParameterKind::MemberPrivacyTarget => write!(f, "<privacy target>"),
ParameterKind::SystemPrivacyTarget => write!(f, "<privacy target>"),
ParameterKind::PrivacyLevel => write!(f, "[privacy level]"),
ParameterKind::Toggle => write!(f, "on/off"),
ParameterKind::Avatar => write!(f, "<url|@mention>"),
@ -78,6 +80,7 @@ pub enum ParameterKind {
SystemRef,
GuildRef,
MemberPrivacyTarget,
SystemPrivacyTarget,
PrivacyLevel,
Toggle,
Avatar,
@ -92,6 +95,7 @@ impl ParameterKind {
ParameterKind::SystemRef => "target",
ParameterKind::GuildRef => "target",
ParameterKind::MemberPrivacyTarget => "member_privacy_target",
ParameterKind::SystemPrivacyTarget => "system_privacy_target",
ParameterKind::PrivacyLevel => "privacy_level",
ParameterKind::Toggle => "toggle",
ParameterKind::Avatar => "avatar",
@ -112,6 +116,9 @@ impl ParameterKind {
ParameterKind::SystemRef => Ok(ParameterValue::SystemRef(input.into())),
ParameterKind::MemberPrivacyTarget => MemberPrivacyTargetKind::from_str(input)
.map(|target| ParameterValue::MemberPrivacyTarget(target.as_ref().into())),
ParameterKind::SystemPrivacyTarget => SystemPrivacyTargetKind::from_str(input).map(
|target| ParameterValue::SystemPrivacyTarget(target.as_ref().into()),
),
ParameterKind::PrivacyLevel => PrivacyLevelKind::from_str(input)
.map(|level| ParameterValue::PrivacyLevel(level.as_ref().into())),
ParameterKind::Toggle => {
@ -176,6 +183,53 @@ impl FromStr for MemberPrivacyTargetKind {
}
}
pub enum SystemPrivacyTargetKind {
Name,
Avatar,
Description,
Banner,
Pronouns,
MemberList,
GroupList,
Front,
FrontHistory,
}
impl AsRef<str> for SystemPrivacyTargetKind {
fn as_ref(&self) -> &str {
match self {
Self::Name => "name",
Self::Avatar => "avatar",
Self::Description => "description",
Self::Banner => "banner",
Self::Pronouns => "pronouns",
Self::MemberList => "members",
Self::GroupList => "groups",
Self::Front => "front",
Self::FrontHistory => "fronthistory",
}
}
}
impl FromStr for SystemPrivacyTargetKind {
type Err = SmolStr;
fn from_str(s: &str) -> Result<Self, Self::Err> {
match s.to_lowercase().as_str() {
"name" => Ok(Self::Name),
"avatar" | "pfp" | "pic" | "icon" => Ok(Self::Avatar),
"description" | "desc" | "bio" | "info" => Ok(Self::Description),
"banner" | "splash" | "cover" => Ok(Self::Banner),
"pronouns" | "prns" | "pn" => Ok(Self::Pronouns),
"members" | "memberlist" | "list" => Ok(Self::MemberList),
"groups" | "gs" => Ok(Self::GroupList),
"front" | "fronter" | "fronters" => Ok(Self::Front),
"fronthistory" | "fh" | "switches" => Ok(Self::FrontHistory),
_ => Err("invalid system privacy target".into()),
}
}
}
pub enum PrivacyLevelKind {
Public,
Private,

View file

@ -169,7 +169,8 @@ fn get_param_ty(kind: ParameterKind) -> &'static str {
ParameterKind::MemberRef => "PKMember",
ParameterKind::SystemRef => "PKSystem",
ParameterKind::MemberPrivacyTarget => "MemberPrivacySubject",
ParameterKind::PrivacyLevel => "string",
ParameterKind::SystemPrivacyTarget => "SystemPrivacySubject",
ParameterKind::PrivacyLevel => "PrivacyLevel",
ParameterKind::Toggle => "bool",
ParameterKind::Avatar => "ParsedImage",
ParameterKind::GuildRef => "Guild",
@ -182,6 +183,7 @@ fn get_param_param_ty(kind: ParameterKind) -> &'static str {
ParameterKind::MemberRef => "Member",
ParameterKind::SystemRef => "System",
ParameterKind::MemberPrivacyTarget => "MemberPrivacyTarget",
ParameterKind::SystemPrivacyTarget => "SystemPrivacyTarget",
ParameterKind::PrivacyLevel => "PrivacyLevel",
ParameterKind::Toggle => "Toggle",
ParameterKind::Avatar => "Avatar",

View file

@ -12,6 +12,7 @@ interface Parameter {
SystemRef(string system);
GuildRef(string guild);
MemberPrivacyTarget(string target);
SystemPrivacyTarget(string target);
PrivacyLevel(string level);
OpaqueString(string raw);
Toggle(boolean toggle);

View file

@ -26,6 +26,7 @@ pub enum Parameter {
SystemRef { system: String },
GuildRef { guild: String },
MemberPrivacyTarget { target: String },
SystemPrivacyTarget { target: String },
PrivacyLevel { level: String },
OpaqueString { raw: String },
Toggle { toggle: bool },
@ -38,6 +39,7 @@ impl From<ParameterValue> for Parameter {
ParameterValue::MemberRef(member) => Self::MemberRef { member },
ParameterValue::SystemRef(system) => Self::SystemRef { system },
ParameterValue::MemberPrivacyTarget(target) => Self::MemberPrivacyTarget { target },
ParameterValue::SystemPrivacyTarget(target) => Self::SystemPrivacyTarget { target },
ParameterValue::PrivacyLevel(level) => Self::PrivacyLevel { level },
ParameterValue::OpaqueString(raw) => Self::OpaqueString { raw },
ParameterValue::Toggle(toggle) => Self::Toggle { toggle },