feat: add create_pomelo_migration
This commit is contained in:
parent
926f89e1cf
commit
7683ce49a3
|
@ -12,7 +12,10 @@ use crate::{
|
|||
instance::{ChorusUser, Instance},
|
||||
ratelimiter::ChorusRequest,
|
||||
types::{
|
||||
DeleteDisableUserSchema, GetPomeloEligibilityReturn, GetPomeloSuggestionsReturn, GetUserProfileSchema, LimitType, PublicUser, Snowflake, User, UserModifyProfileSchema, UserModifySchema, UserProfile, UserProfileMetadata, UserSettings, VerifyUserEmailChangeResponse, VerifyUserEmailChangeSchema
|
||||
DeleteDisableUserSchema, GetPomeloEligibilityReturn, GetPomeloSuggestionsReturn,
|
||||
GetUserProfileSchema, LimitType, PublicUser, Snowflake, User, UserModifyProfileSchema,
|
||||
UserModifySchema, UserProfile, UserProfileMetadata, UserSettings,
|
||||
VerifyUserEmailChangeResponse, VerifyUserEmailChangeSchema,
|
||||
},
|
||||
};
|
||||
|
||||
|
@ -225,6 +228,9 @@ impl ChorusUser {
|
|||
/// This endpoint returns a token which can be used with [Self::modify]
|
||||
/// to set a new email address (email_token).
|
||||
///
|
||||
/// As of 2024/08/08, Spacebar does not yet implement this endpoint.
|
||||
// FIXME: Does this mean PUT users/@me/email is different?
|
||||
///
|
||||
/// # Reference
|
||||
/// See <https://docs.discord.sex/resources/user#modify-user-email>
|
||||
pub async fn verify_email_change(
|
||||
|
@ -258,6 +264,8 @@ impl ChorusUser {
|
|||
/// If a user has already migrated, this endpoint will likely return a 401 Unauthorized
|
||||
/// ([ChorusError::NoPermission])
|
||||
///
|
||||
/// As of 2024/08/08, Spacebar does not yet implement this endpoint.
|
||||
///
|
||||
/// See <https://docs.discord.sex/resources/user#get-pomelo-suggestions>
|
||||
pub async fn get_pomelo_suggestions(&mut self) -> ChorusResult<String> {
|
||||
let request = Client::new()
|
||||
|
@ -281,6 +289,8 @@ impl ChorusUser {
|
|||
///
|
||||
/// Returns whether the username is not taken yet.
|
||||
///
|
||||
/// As of 2024/08/08, Spacebar does not yet implement this endpoint.
|
||||
///
|
||||
/// See <https://docs.discord.sex/resources/user#get-pomelo-eligibility>
|
||||
pub async fn get_pomelo_eligibility(&mut self, username: &String) -> ChorusResult<bool> {
|
||||
let request = Client::new()
|
||||
|
@ -302,6 +312,52 @@ impl ChorusUser {
|
|||
.await
|
||||
.map(|returned| !returned.taken)
|
||||
}
|
||||
|
||||
/// Migrates the user from the username#discriminator to the unique username system.
|
||||
///
|
||||
/// Fires a [UserUpdate](crate::types::UserUpdate) gateway event.
|
||||
///
|
||||
/// Updates [Self::object] to an updated representation returned by the server.
|
||||
// FIXME: Is this appropriate behaviour?
|
||||
///
|
||||
/// Note:
|
||||
///
|
||||
/// "This endpoint is used during the pomelo migration flow.
|
||||
///
|
||||
/// The user must be in the rollout to use this endpoint."
|
||||
///
|
||||
/// If a user has already migrated, this endpoint will likely return a 401 Unauthorized
|
||||
/// ([ChorusError::NoPermission])
|
||||
//
|
||||
/// As of 2024/08/08, Spacebar does not yet implement this endpoint.
|
||||
///
|
||||
/// See <https://docs.discord.sex/resources/user#create-pomelo-migration>
|
||||
pub async fn create_pomelo_migration(&mut self, username: &String) -> ChorusResult<()> {
|
||||
let request = Client::new()
|
||||
.post(format!(
|
||||
"{}/users/@me/pomelo",
|
||||
self.belongs_to.read().unwrap().urls.api
|
||||
))
|
||||
.header("Authorization", self.token())
|
||||
// FIXME: should we create a type for this?
|
||||
.body(format!(r#"{{ "username": {:?} }}"#, username))
|
||||
.header("Content-Type", "application/json");
|
||||
|
||||
let chorus_request = ChorusRequest {
|
||||
request,
|
||||
limit_type: LimitType::default(),
|
||||
};
|
||||
|
||||
let result = chorus_request.deserialize_response::<User>(self).await;
|
||||
|
||||
// FIXME: Does UserUpdate do this automatically? or would a user need to manually observe ChorusUser::object
|
||||
if let Ok(new_object) = result {
|
||||
*self.object.write().unwrap() = new_object;
|
||||
return ChorusResult::Ok(());
|
||||
}
|
||||
|
||||
ChorusResult::Err(result.err().unwrap())
|
||||
}
|
||||
}
|
||||
|
||||
impl User {
|
||||
|
|
Loading…
Reference in New Issue