mirror of
https://github.com/PluralKit/PluralKit.git
synced 2026-02-11 00:07:55 +00:00
feat: implement system avatar commands
This commit is contained in:
parent
293570c91c
commit
b62340cbb3
11 changed files with 155 additions and 101 deletions
|
|
@ -141,6 +141,23 @@ pub fn edit() -> impl Iterator<Item = Command> {
|
|||
]
|
||||
.into_iter();
|
||||
|
||||
let system_avatar = tokens!(system_target, ("avatar", ["pfp"]));
|
||||
let system_avatar_cmd =
|
||||
[command!(system_avatar => "system_show_avatar").help("Shows the system's avatar")]
|
||||
.into_iter();
|
||||
|
||||
let system_avatar_self = tokens!(system, ("avatar", ["pfp"]));
|
||||
let system_avatar_self_cmd = [
|
||||
command!(system_avatar_self => "system_show_avatar_self")
|
||||
.help("Shows your system's avatar"),
|
||||
command!(system_avatar_self, ("clear", ["c"]) => "system_clear_avatar")
|
||||
.flag(("yes", ["y"]))
|
||||
.help("Clears your system's avatar"),
|
||||
command!(system_avatar_self, ("avatar", Avatar) => "system_change_avatar")
|
||||
.help("Changes your system's avatar"),
|
||||
]
|
||||
.into_iter();
|
||||
|
||||
system_new_cmd
|
||||
.chain(system_name_self_cmd)
|
||||
.chain(system_server_name_self_cmd)
|
||||
|
|
@ -149,6 +166,7 @@ pub fn edit() -> impl Iterator<Item = Command> {
|
|||
.chain(system_tag_self_cmd)
|
||||
.chain(system_server_tag_self_cmd)
|
||||
.chain(system_pronouns_self_cmd)
|
||||
.chain(system_avatar_self_cmd)
|
||||
.chain(system_name_cmd)
|
||||
.chain(system_server_name_cmd)
|
||||
.chain(system_description_cmd)
|
||||
|
|
@ -156,5 +174,6 @@ pub fn edit() -> impl Iterator<Item = Command> {
|
|||
.chain(system_tag_cmd)
|
||||
.chain(system_server_tag_cmd)
|
||||
.chain(system_pronouns_cmd)
|
||||
.chain(system_avatar_cmd)
|
||||
.chain(system_info_cmd)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -15,6 +15,7 @@ pub enum ParameterValue {
|
|||
MemberPrivacyTarget(String),
|
||||
PrivacyLevel(String),
|
||||
Toggle(bool),
|
||||
Avatar(String),
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
|
||||
|
|
@ -44,6 +45,7 @@ impl Display for Parameter {
|
|||
ParameterKind::MemberPrivacyTarget => write!(f, "<privacy target>"),
|
||||
ParameterKind::PrivacyLevel => write!(f, "[privacy level]"),
|
||||
ParameterKind::Toggle => write!(f, "on/off"),
|
||||
ParameterKind::Avatar => write!(f, "<url|@mention>"),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -75,6 +77,7 @@ pub enum ParameterKind {
|
|||
MemberPrivacyTarget,
|
||||
PrivacyLevel,
|
||||
Toggle,
|
||||
Avatar,
|
||||
}
|
||||
|
||||
impl ParameterKind {
|
||||
|
|
@ -87,6 +90,7 @@ impl ParameterKind {
|
|||
ParameterKind::MemberPrivacyTarget => "member_privacy_target",
|
||||
ParameterKind::PrivacyLevel => "privacy_level",
|
||||
ParameterKind::Toggle => "toggle",
|
||||
ParameterKind::Avatar => "avatar",
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -96,6 +100,7 @@ impl ParameterKind {
|
|||
|
||||
pub(crate) fn match_value(&self, input: &str) -> Result<ParameterValue, SmolStr> {
|
||||
match self {
|
||||
// TODO: actually parse image url
|
||||
ParameterKind::OpaqueString | ParameterKind::OpaqueStringRemainder => {
|
||||
Ok(ParameterValue::OpaqueString(input.into()))
|
||||
}
|
||||
|
|
@ -108,6 +113,7 @@ impl ParameterKind {
|
|||
ParameterKind::Toggle => {
|
||||
Toggle::from_str(input).map(|t| ParameterValue::Toggle(t.into()))
|
||||
}
|
||||
ParameterKind::Avatar => Ok(ParameterValue::Avatar(input.into())),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -165,6 +165,7 @@ fn get_param_ty(kind: ParameterKind) -> &'static str {
|
|||
ParameterKind::MemberPrivacyTarget => "MemberPrivacySubject",
|
||||
ParameterKind::PrivacyLevel => "string",
|
||||
ParameterKind::Toggle => "bool",
|
||||
ParameterKind::Avatar => "ParsedImage",
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -176,6 +177,7 @@ fn get_param_param_ty(kind: ParameterKind) -> &'static str {
|
|||
ParameterKind::MemberPrivacyTarget => "MemberPrivacyTarget",
|
||||
ParameterKind::PrivacyLevel => "PrivacyLevel",
|
||||
ParameterKind::Toggle => "Toggle",
|
||||
ParameterKind::Avatar => "Avatar",
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -14,6 +14,7 @@ interface Parameter {
|
|||
PrivacyLevel(string level);
|
||||
OpaqueString(string raw);
|
||||
Toggle(boolean toggle);
|
||||
Avatar(string avatar);
|
||||
};
|
||||
dictionary ParsedCommand {
|
||||
string command_ref;
|
||||
|
|
|
|||
|
|
@ -28,6 +28,7 @@ pub enum Parameter {
|
|||
PrivacyLevel { level: String },
|
||||
OpaqueString { raw: String },
|
||||
Toggle { toggle: bool },
|
||||
Avatar { avatar: String },
|
||||
}
|
||||
|
||||
impl From<ParameterValue> for Parameter {
|
||||
|
|
@ -39,6 +40,7 @@ impl From<ParameterValue> for Parameter {
|
|||
ParameterValue::PrivacyLevel(level) => Self::PrivacyLevel { level },
|
||||
ParameterValue::OpaqueString(raw) => Self::OpaqueString { raw },
|
||||
ParameterValue::Toggle(toggle) => Self::Toggle { toggle },
|
||||
ParameterValue::Avatar(avatar) => Self::Avatar { avatar },
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue