PluralKit/crates/command_definitions/src/member.rs

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)
}