mirror of
https://github.com/PluralKit/PluralKit.git
synced 2026-02-04 04:56:49 +00:00
328 lines
13 KiB
Rust
328 lines
13 KiB
Rust
use std::iter::once;
|
|
|
|
use command_parser::token::TokensIterator;
|
|
|
|
use crate::utils::get_list_flags;
|
|
|
|
use super::*;
|
|
|
|
pub fn member() -> (&'static str, [&'static str; 1]) {
|
|
("member", ["m"])
|
|
}
|
|
|
|
pub fn targetted() -> TokensIterator {
|
|
tokens!(member(), MemberRef)
|
|
}
|
|
|
|
pub fn cmds() -> impl Iterator<Item = Command> {
|
|
let member = member();
|
|
let member_target = targetted();
|
|
|
|
let name = ("name", ["n"]);
|
|
let description = ("description", ["desc"]);
|
|
let pronouns = ("pronouns", ["pronoun", "prns", "pn"]);
|
|
let privacy = ("privacy", ["priv"]);
|
|
let new = ("new", ["n"]);
|
|
let banner = ("banner", ["bn"]);
|
|
let color = ("color", ["colour"]);
|
|
let birthday = ("birthday", ["bday", "bd"]);
|
|
let display_name = ("displayname", ["dname", "dn"]);
|
|
let server_name = ("servername", ["sname", "sn"]);
|
|
let keep_proxy = ("keepproxy", ["kp"]);
|
|
let server_keep_proxy = ("serverkeepproxy", ["skp"]);
|
|
let autoproxy = ("autoproxy", ["ap"]);
|
|
let proxy = ("proxy", ["tags", "proxytags", "brackets"]);
|
|
let tts = ("tts", ["texttospeech"]);
|
|
let delete = ("delete", ["del", "remove"]);
|
|
|
|
let member_new_cmd = once(
|
|
command!(member, new, ("name", OpaqueString) => "member_new")
|
|
.help("Creates a new system member"),
|
|
);
|
|
|
|
let member_info_cmd = once(
|
|
command!(member_target => "member_show")
|
|
.flag("pt")
|
|
.help("Shows information about a member"),
|
|
);
|
|
|
|
let member_name_cmd = {
|
|
let member_name = tokens!(member_target, name);
|
|
[
|
|
command!(member_name => "member_name_show").help("Shows a member's name"),
|
|
command!(member_name, Remainder(("name", OpaqueString)) => "member_name_update")
|
|
.flag(YES)
|
|
.help("Changes a member's name"),
|
|
]
|
|
};
|
|
|
|
let member_description_cmd = {
|
|
let member_desc = tokens!(member_target, description);
|
|
[
|
|
command!(member_desc => "member_desc_show").help("Shows a member's description"),
|
|
command!(member_desc, CLEAR => "member_desc_clear")
|
|
.flag(YES)
|
|
.help("Clears a member's description"),
|
|
command!(member_desc, Remainder(("description", OpaqueString)) => "member_desc_update")
|
|
.help("Changes a member's description"),
|
|
]
|
|
};
|
|
|
|
let member_privacy_cmd = {
|
|
let member_privacy = tokens!(member_target, privacy);
|
|
[
|
|
command!(member_privacy => "member_privacy_show")
|
|
.help("Displays a member's current privacy settings"),
|
|
command!(
|
|
member_privacy, MemberPrivacyTarget, ("new_privacy_level", PrivacyLevel)
|
|
=> "member_privacy_update"
|
|
)
|
|
.help("Changes a member's privacy settings"),
|
|
]
|
|
};
|
|
|
|
let member_pronouns_cmd = {
|
|
let member_pronouns = tokens!(member_target, pronouns);
|
|
[
|
|
command!(member_pronouns => "member_pronouns_show")
|
|
.help("Shows a member's pronouns"),
|
|
command!(member_pronouns, Remainder(("pronouns", OpaqueString)) => "member_pronouns_update")
|
|
.help("Changes a member's pronouns"),
|
|
command!(member_pronouns, CLEAR => "member_pronouns_clear")
|
|
.flag(YES)
|
|
.help("Clears a member's pronouns"),
|
|
]
|
|
};
|
|
|
|
let member_banner_cmd = {
|
|
let member_banner = tokens!(member_target, banner);
|
|
[
|
|
command!(member_banner => "member_banner_show").help("Shows a member's banner image"),
|
|
command!(member_banner, ("banner", Avatar) => "member_banner_update")
|
|
.help("Changes a member's banner image"),
|
|
command!(member_banner, CLEAR => "member_banner_clear")
|
|
.flag(YES)
|
|
.help("Clears a member's banner image"),
|
|
]
|
|
};
|
|
|
|
let member_color_cmd = {
|
|
let member_color = tokens!(member_target, color);
|
|
[
|
|
command!(member_color => "member_color_show").help("Shows a member's color"),
|
|
command!(member_color, ("color", OpaqueString) => "member_color_update")
|
|
.help("Changes a member's color"),
|
|
command!(member_color, CLEAR => "member_color_clear")
|
|
.flag(YES)
|
|
.help("Clears a member's color"),
|
|
]
|
|
};
|
|
|
|
let member_birthday_cmd = {
|
|
let member_birthday = tokens!(member_target, birthday);
|
|
[
|
|
command!(member_birthday => "member_birthday_show").help("Shows a member's birthday"),
|
|
command!(member_birthday, ("birthday", OpaqueString) => "member_birthday_update")
|
|
.help("Changes a member's birthday"),
|
|
command!(member_birthday, CLEAR => "member_birthday_clear")
|
|
.flag(YES)
|
|
.help("Clears a member's birthday"),
|
|
]
|
|
};
|
|
|
|
let member_display_name_cmd = {
|
|
let member_display_name = tokens!(member_target, display_name);
|
|
[
|
|
command!(member_display_name => "member_displayname_show")
|
|
.help("Shows a member's display name"),
|
|
command!(member_display_name, Remainder(("name", OpaqueString)) => "member_displayname_update")
|
|
.help("Changes a member's display name"),
|
|
command!(member_display_name, CLEAR => "member_displayname_clear")
|
|
.flag(YES)
|
|
.help("Clears a member's display name"),
|
|
]
|
|
};
|
|
|
|
let member_server_name_cmd = {
|
|
let member_server_name = tokens!(member_target, server_name);
|
|
[
|
|
command!(member_server_name => "member_servername_show")
|
|
.help("Shows a member's server name"),
|
|
command!(member_server_name, Remainder(("name", OpaqueString)) => "member_servername_update")
|
|
.help("Changes a member's server name"),
|
|
command!(member_server_name, CLEAR => "member_servername_clear")
|
|
.flag(YES)
|
|
.help("Clears a member's server name"),
|
|
]
|
|
};
|
|
|
|
let member_proxy_cmd = {
|
|
let member_proxy = tokens!(member_target, proxy);
|
|
[
|
|
command!(member_proxy => "member_proxy_show")
|
|
.help("Shows a member's proxy tags"),
|
|
command!(member_proxy, ("add", ["a"]), ("tag", OpaqueString) => "member_proxy_add")
|
|
.help("Adds proxy tag to a member"),
|
|
command!(member_proxy, ("remove", ["r", "rm"]), ("tag", OpaqueString) => "member_proxy_remove")
|
|
.help("Removes proxy tag from a member"),
|
|
command!(member_proxy, CLEAR => "member_proxy_clear")
|
|
.flag(YES)
|
|
.help("Clears all proxy tags from a member"),
|
|
command!(member_proxy, Remainder(("tags", OpaqueString)) => "member_proxy_set")
|
|
.help("Sets a member's proxy tags"),
|
|
]
|
|
};
|
|
|
|
let member_proxy_settings_cmd = {
|
|
let member_keep_proxy = tokens!(member_target, keep_proxy);
|
|
let member_server_keep_proxy = tokens!(member_target, server_keep_proxy);
|
|
[
|
|
command!(member_keep_proxy => "member_keepproxy_show")
|
|
.help("Shows a member's keep-proxy setting"),
|
|
command!(member_keep_proxy, ("value", Toggle) => "member_keepproxy_update")
|
|
.help("Changes a member's keep-proxy setting"),
|
|
command!(member_server_keep_proxy => "member_server_keepproxy_show")
|
|
.help("Shows a member's server-specific keep-proxy setting"),
|
|
command!(member_server_keep_proxy, CLEAR => "member_server_keepproxy_clear")
|
|
.flag(YES)
|
|
.help("Clears a member's server-specific keep-proxy setting"),
|
|
command!(member_server_keep_proxy, ("value", Toggle) => "member_server_keepproxy_update")
|
|
.help("Changes a member's server-specific keep-proxy setting"),
|
|
]
|
|
};
|
|
|
|
let member_message_settings_cmd = {
|
|
let member_tts = tokens!(member_target, tts);
|
|
let member_autoproxy = tokens!(member_target, autoproxy);
|
|
[
|
|
command!(member_tts => "member_tts_show")
|
|
.help("Shows whether a member's messages are sent as TTS"),
|
|
command!(member_tts, ("value", Toggle) => "member_tts_update")
|
|
.help("Changes whether a member's messages are sent as TTS"),
|
|
command!(member_autoproxy => "member_autoproxy_show")
|
|
.help("Shows whether a member can be autoproxied"),
|
|
command!(member_autoproxy, ("value", Toggle) => "member_autoproxy_update")
|
|
.help("Changes whether a member can be autoproxied"),
|
|
]
|
|
};
|
|
|
|
let member_avatar_cmd = {
|
|
let member_avatar = tokens!(
|
|
member_target,
|
|
(
|
|
"avatar",
|
|
["profile", "picture", "icon", "image", "pfp", "pic"]
|
|
)
|
|
);
|
|
[
|
|
command!(member_avatar => "member_avatar_show").help("Shows a member's avatar"),
|
|
command!(member_avatar, ("avatar", Avatar) => "member_avatar_update")
|
|
.help("Changes a member's avatar"),
|
|
command!(member_avatar, CLEAR => "member_avatar_clear")
|
|
.flag(YES)
|
|
.help("Clears a member's avatar"),
|
|
]
|
|
};
|
|
|
|
let member_webhook_avatar_cmd = {
|
|
let member_webhook_avatar = tokens!(
|
|
member_target,
|
|
(
|
|
"proxyavatar",
|
|
[
|
|
"proxypfp",
|
|
"webhookavatar",
|
|
"webhookpfp",
|
|
"pa",
|
|
"pavatar",
|
|
"ppfp"
|
|
]
|
|
)
|
|
);
|
|
[
|
|
command!(member_webhook_avatar => "member_webhook_avatar_show")
|
|
.help("Shows a member's proxy avatar"),
|
|
command!(member_webhook_avatar, ("avatar", Avatar) => "member_webhook_avatar_update")
|
|
.help("Changes a member's proxy avatar"),
|
|
command!(member_webhook_avatar, CLEAR => "member_webhook_avatar_clear")
|
|
.flag(YES)
|
|
.help("Clears a member's proxy avatar"),
|
|
]
|
|
};
|
|
|
|
let member_server_avatar_cmd = {
|
|
let member_server_avatar = tokens!(
|
|
member_target,
|
|
(
|
|
"serveravatar",
|
|
[
|
|
"sa",
|
|
"servericon",
|
|
"serverimage",
|
|
"serverpfp",
|
|
"serverpic",
|
|
"savatar",
|
|
"spic",
|
|
"guildavatar",
|
|
"guildpic",
|
|
"guildicon",
|
|
"sicon",
|
|
"spfp"
|
|
]
|
|
)
|
|
);
|
|
[
|
|
command!(member_server_avatar => "member_server_avatar_show")
|
|
.help("Shows a member's server-specific avatar"),
|
|
command!(member_server_avatar, ("avatar", Avatar) => "member_server_avatar_update")
|
|
.help("Changes a member's server-specific avatar"),
|
|
command!(member_server_avatar, CLEAR => "member_server_avatar_clear")
|
|
.flag(YES)
|
|
.help("Clears a member's server-specific avatar"),
|
|
]
|
|
};
|
|
|
|
let member_group = tokens!(member_target, ("groups", ["group"]));
|
|
let member_list_group_cmds = once(
|
|
command!(member_group, Optional(Remainder(("query", OpaqueString))) => "member_groups"),
|
|
)
|
|
.map(|cmd| cmd.flags(get_list_flags()));
|
|
let member_add_remove_group_cmds = [
|
|
command!(member_group, "add", Optional(("groups", GroupRefs)) => "member_group_add")
|
|
.help("Adds a member to one or more groups"),
|
|
command!(member_group, ("remove", ["rem"]), Optional(("groups", GroupRefs)) => "member_group_remove")
|
|
.help("Removes a member from one or more groups"),
|
|
];
|
|
|
|
let member_display_id_cmd =
|
|
[command!(member_target, "id" => "member_id").help("Displays a member's ID")];
|
|
|
|
let member_delete_cmd =
|
|
[command!(member_target, delete => "member_delete").help("Deletes a member")];
|
|
|
|
let member_easter_eggs =
|
|
[command!(member_target, "soulscream" => "member_soulscream").show_in_suggestions(false)];
|
|
|
|
member_new_cmd
|
|
.chain(member_info_cmd)
|
|
.chain(member_name_cmd)
|
|
.chain(member_description_cmd)
|
|
.chain(member_privacy_cmd)
|
|
.chain(member_pronouns_cmd)
|
|
.chain(member_banner_cmd)
|
|
.chain(member_color_cmd)
|
|
.chain(member_birthday_cmd)
|
|
.chain(member_display_name_cmd)
|
|
.chain(member_server_name_cmd)
|
|
.chain(member_proxy_cmd)
|
|
.chain(member_avatar_cmd)
|
|
.chain(member_webhook_avatar_cmd)
|
|
.chain(member_server_avatar_cmd)
|
|
.chain(member_proxy_settings_cmd)
|
|
.chain(member_message_settings_cmd)
|
|
.chain(member_display_id_cmd)
|
|
.chain(member_delete_cmd)
|
|
.chain(member_easter_eggs)
|
|
.chain(member_add_remove_group_cmds)
|
|
.chain(member_list_group_cmds)
|
|
}
|