pub(crate) struct DiscordIdentity<'a> {
pub user_id: u64,
pub allowed_users: &'a [String],
pub allowed_roles: &'a [String],
pub bot_owner: &'a [String],
pub guild_roles: &'a [u64],
pub open_here: bool,
}
pub(crate) fn identity_admitted(id: &DiscordIdentity<'_>) -> bool {
let user_id = id.user_id.to_string();
let is_owner = crate::config::owner::is_owner(id.allowed_users, id.bot_owner, &user_id);
let in_allowlist = id
.allowed_users
.iter()
.any(|s| s.parse::<u64>().ok() == Some(id.user_id));
let role_granted = !id.guild_roles.is_empty()
&& !id.allowed_roles.is_empty()
&& id.guild_roles.iter().any(|held| {
id.allowed_roles
.iter()
.any(|allowed| allowed == &held.to_string())
});
let unconfigured =
id.allowed_users.is_empty() && id.allowed_roles.is_empty() && id.bot_owner.is_empty();
super::commands::identity_admitted(
unconfigured,
is_owner,
in_allowlist,
role_granted,
id.open_here,
)
}