Merge pull request #97 from polyphony-chat/feature/permissions-and-roles
Feature/permissions and roles
This commit is contained in:
commit
45a201331d
|
@ -1,8 +1,60 @@
|
||||||
use reqwest::Client;
|
use reqwest::Client;
|
||||||
|
use serde_json::from_str;
|
||||||
|
|
||||||
use crate::{instance::UserMeta, limit::LimitedRequester, types};
|
use crate::{errors::ChorusLibError, instance::UserMeta, limit::LimitedRequester, types};
|
||||||
|
|
||||||
impl types::GuildMember {
|
impl types::GuildMember {
|
||||||
|
/// Retrieves a guild member by their ID.
|
||||||
|
///
|
||||||
|
/// # Arguments
|
||||||
|
///
|
||||||
|
/// * `user` - A mutable reference to a [`UserMeta`] instance.
|
||||||
|
/// * `guild_id` - The ID of the guild.
|
||||||
|
/// * `member_id` - The ID of the member.
|
||||||
|
///
|
||||||
|
/// # Returns
|
||||||
|
///
|
||||||
|
/// A [`Result`] containing a [`GuildMember`] if the request succeeds, or a [`ChorusLibError`] if the request fails.
|
||||||
|
pub async fn get(
|
||||||
|
user: &mut UserMeta,
|
||||||
|
guild_id: &str,
|
||||||
|
member_id: &str,
|
||||||
|
) -> Result<types::GuildMember, ChorusLibError> {
|
||||||
|
let mut belongs_to = user.belongs_to.borrow_mut();
|
||||||
|
let url = format!(
|
||||||
|
"{}/guilds/{}/members/{}/",
|
||||||
|
belongs_to.urls.get_api(),
|
||||||
|
guild_id,
|
||||||
|
member_id
|
||||||
|
);
|
||||||
|
let request = Client::new().get(url).bearer_auth(user.token());
|
||||||
|
let response = LimitedRequester::new()
|
||||||
|
.await
|
||||||
|
.send_request(
|
||||||
|
request,
|
||||||
|
crate::api::limits::LimitType::Guild,
|
||||||
|
&mut belongs_to.limits,
|
||||||
|
&mut user.limits,
|
||||||
|
)
|
||||||
|
.await
|
||||||
|
.unwrap();
|
||||||
|
let response_text = match response.text().await {
|
||||||
|
Ok(string) => string,
|
||||||
|
Err(e) => {
|
||||||
|
return Err(ChorusLibError::InvalidResponseError {
|
||||||
|
error: e.to_string(),
|
||||||
|
})
|
||||||
|
}
|
||||||
|
};
|
||||||
|
let member = from_str::<types::GuildMember>(&response_text);
|
||||||
|
if member.is_err() {
|
||||||
|
return Err(ChorusLibError::InvalidResponseError {
|
||||||
|
error: member.err().unwrap().to_string(),
|
||||||
|
});
|
||||||
|
}
|
||||||
|
Ok(member.unwrap())
|
||||||
|
}
|
||||||
|
|
||||||
/// Adds a role to a guild member.
|
/// Adds a role to a guild member.
|
||||||
///
|
///
|
||||||
/// # Arguments
|
/// # Arguments
|
||||||
|
|
|
@ -7,7 +7,32 @@ async fn add_remove_role() {
|
||||||
let role_id = &bundle.role.id.to_string();
|
let role_id = &bundle.role.id.to_string();
|
||||||
let user_id = &bundle.user.object.id.to_string();
|
let user_id = &bundle.user.object.id.to_string();
|
||||||
chorus::types::GuildMember::add_role(&mut bundle.user, guild_id, user_id, role_id).await;
|
chorus::types::GuildMember::add_role(&mut bundle.user, guild_id, user_id, role_id).await;
|
||||||
|
let member = chorus::types::GuildMember::get(&mut bundle.user, &guild_id, &user_id)
|
||||||
|
.await
|
||||||
|
.unwrap();
|
||||||
|
let mut role_found = false;
|
||||||
|
for role in member.roles.iter() {
|
||||||
|
if role == role_id {
|
||||||
|
println!("Role found: {:?}", role);
|
||||||
|
role_found = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if !role_found {
|
||||||
|
assert!(false)
|
||||||
|
}
|
||||||
chorus::types::GuildMember::remove_role(&mut bundle.user, guild_id, user_id, role_id).await;
|
chorus::types::GuildMember::remove_role(&mut bundle.user, guild_id, user_id, role_id).await;
|
||||||
// TODO: Implement /guilds/{guild_id}/members/{member_id}/ GET route.
|
let member = chorus::types::GuildMember::get(&mut bundle.user, &guild_id, &user_id)
|
||||||
|
.await
|
||||||
|
.unwrap();
|
||||||
|
for role in member.roles.iter() {
|
||||||
|
if role != role_id {
|
||||||
|
role_found = false;
|
||||||
|
} else {
|
||||||
|
assert!(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if role_found {
|
||||||
|
assert!(false)
|
||||||
|
}
|
||||||
common::teardown(bundle).await
|
common::teardown(bundle).await
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue