feat: add affinities
This commit is contained in:
parent
f966a787d9
commit
e06bc147b4
|
@ -17,10 +17,11 @@ use crate::{
|
||||||
types::{
|
types::{
|
||||||
AuthorizeConnectionSchema, ConnectionType, CreateUserHarvestSchema,
|
AuthorizeConnectionSchema, ConnectionType, CreateUserHarvestSchema,
|
||||||
DeleteDisableUserSchema, GetPomeloEligibilityReturn, GetPomeloSuggestionsReturn,
|
DeleteDisableUserSchema, GetPomeloEligibilityReturn, GetPomeloSuggestionsReturn,
|
||||||
GetRecentMentionsSchema, GetUserProfileSchema, Harvest, HarvestBackendType, LimitType,
|
GetRecentMentionsSchema, GetUserProfileSchema, GuildAffinities, Harvest,
|
||||||
ModifyUserNoteSchema, PublicUser, Snowflake, User, UserModifyProfileSchema,
|
HarvestBackendType, LimitType, ModifyUserNoteSchema, PublicUser, Snowflake, User,
|
||||||
UserModifySchema, UserNote, UserProfile, UserProfileMetadata, UserSettings,
|
UserAffinities, UserModifyProfileSchema, UserModifySchema, UserNote, UserProfile,
|
||||||
VerifyUserEmailChangeResponse, VerifyUserEmailChangeSchema,
|
UserProfileMetadata, UserSettings, VerifyUserEmailChangeResponse,
|
||||||
|
VerifyUserEmailChangeSchema,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -571,6 +572,48 @@ impl ChorusUser {
|
||||||
) -> ChorusResult<()> {
|
) -> ChorusResult<()> {
|
||||||
User::set_note(self, target_user_id, note).await
|
User::set_note(self, target_user_id, note).await
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Fetches the current user's affinity scores for other users.
|
||||||
|
///
|
||||||
|
/// (Affinity scores are a measure of how likely a user is to be friends with another user.)
|
||||||
|
///
|
||||||
|
/// # Reference
|
||||||
|
/// See <https://docs.discord.sex/resources/user#get-user-affinities>
|
||||||
|
pub async fn get_user_affinities(&mut self) -> ChorusResult<UserAffinities> {
|
||||||
|
let request = Client::new()
|
||||||
|
.get(format!(
|
||||||
|
"{}/users/@me/affinities/users",
|
||||||
|
self.belongs_to.read().unwrap().urls.api,
|
||||||
|
))
|
||||||
|
.header("Authorization", self.token());
|
||||||
|
|
||||||
|
let chorus_request = ChorusRequest {
|
||||||
|
request,
|
||||||
|
limit_type: LimitType::default(),
|
||||||
|
};
|
||||||
|
|
||||||
|
chorus_request.deserialize_response(self).await
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Fetches the current user's affinity scores for their joined guilds.
|
||||||
|
///
|
||||||
|
/// # Reference
|
||||||
|
/// See <https://docs.discord.sex/resources/user#get-guild-affinities>
|
||||||
|
pub async fn get_guild_affinities(&mut self) -> ChorusResult<GuildAffinities> {
|
||||||
|
let request = Client::new()
|
||||||
|
.get(format!(
|
||||||
|
"{}/users/@me/affinities/guilds",
|
||||||
|
self.belongs_to.read().unwrap().urls.api,
|
||||||
|
))
|
||||||
|
.header("Authorization", self.token());
|
||||||
|
|
||||||
|
let chorus_request = ChorusRequest {
|
||||||
|
request,
|
||||||
|
limit_type: LimitType::default(),
|
||||||
|
};
|
||||||
|
|
||||||
|
chorus_request.deserialize_response(self).await
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl User {
|
impl User {
|
||||||
|
|
|
@ -307,7 +307,6 @@ pub struct UserProfile {
|
||||||
pub connected_accounts: Vec<PublicConnection>,
|
pub connected_accounts: Vec<PublicConnection>,
|
||||||
|
|
||||||
// TODO: Add application role connections!
|
// TODO: Add application role connections!
|
||||||
|
|
||||||
/// The type of premium (Nitro) a user has
|
/// The type of premium (Nitro) a user has
|
||||||
pub premium_type: Option<PremiumType>,
|
pub premium_type: Option<PremiumType>,
|
||||||
/// The date the user's premium (Nitro) subscribtion started
|
/// The date the user's premium (Nitro) subscribtion started
|
||||||
|
@ -786,3 +785,27 @@ pub struct UserNote {
|
||||||
/// The ID of the user who created the note (always the current user)
|
/// The ID of the user who created the note (always the current user)
|
||||||
pub user_id: Snowflake,
|
pub user_id: Snowflake,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Structure which defines an affinity the local user has with another user.
|
||||||
|
///
|
||||||
|
/// # Reference
|
||||||
|
/// See <https://docs.discord.sex/resources/user#user-affinity-structure>
|
||||||
|
#[derive(Debug, Deserialize, Serialize, Clone, Copy, PartialEq, PartialOrd)]
|
||||||
|
pub struct UserAffinity {
|
||||||
|
/// The other user's id
|
||||||
|
pub user_id: Snowflake,
|
||||||
|
/// The affinity score
|
||||||
|
pub affinity: f32,
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Structure which defines an affinity the local user has with a guild.
|
||||||
|
///
|
||||||
|
/// # Reference
|
||||||
|
/// See <https://docs.discord.sex/resources/user#guild-affinity-structure>
|
||||||
|
#[derive(Debug, Deserialize, Serialize, Clone, Copy, PartialEq, PartialOrd)]
|
||||||
|
pub struct GuildAffinity {
|
||||||
|
/// The guild's id
|
||||||
|
pub guild_id: Snowflake,
|
||||||
|
/// The affinity score
|
||||||
|
pub affinity: f32,
|
||||||
|
}
|
||||||
|
|
|
@ -7,7 +7,9 @@ use std::collections::HashMap;
|
||||||
use chrono::NaiveDate;
|
use chrono::NaiveDate;
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
|
|
||||||
use crate::types::{HarvestBackendType, Snowflake, ThemeColors, TwoWayLinkType};
|
use crate::types::{
|
||||||
|
GuildAffinity, HarvestBackendType, Snowflake, ThemeColors, TwoWayLinkType, UserAffinity,
|
||||||
|
};
|
||||||
|
|
||||||
#[derive(Debug, Default, Deserialize, Serialize, Clone, PartialEq, Eq)]
|
#[derive(Debug, Default, Deserialize, Serialize, Clone, PartialEq, Eq)]
|
||||||
#[serde(rename_all = "snake_case")]
|
#[serde(rename_all = "snake_case")]
|
||||||
|
@ -314,7 +316,7 @@ pub struct CreateConnectionCallbackSchema {
|
||||||
/// Additional parameters used for OpenID Connect
|
/// Additional parameters used for OpenID Connect
|
||||||
// FIXME: Is this correct? in other connections additional info
|
// FIXME: Is this correct? in other connections additional info
|
||||||
// is provided like this, only being string - string
|
// is provided like this, only being string - string
|
||||||
pub openid_params: Option<HashMap<String, String>>
|
pub openid_params: Option<HashMap<String, String>>,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Default, Deserialize, Serialize, Clone, PartialEq, Eq)]
|
#[derive(Debug, Default, Deserialize, Serialize, Clone, PartialEq, Eq)]
|
||||||
|
@ -374,3 +376,22 @@ pub struct ModifyConnectionSchema {
|
||||||
pub(crate) struct GetConnectionAccessTokenReturn {
|
pub(crate) struct GetConnectionAccessTokenReturn {
|
||||||
pub access_token: String,
|
pub access_token: String,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Debug, Deserialize, Serialize, Clone, PartialEq)]
|
||||||
|
/// Return type for the [crate::instance::ChorusUser::get_user_affinities] endpoint.
|
||||||
|
///
|
||||||
|
/// See <https://docs.discord.sex/resources/user#get-user-affinities>
|
||||||
|
pub struct UserAffinities {
|
||||||
|
pub user_affinities: Vec<UserAffinity>,
|
||||||
|
// FIXME: Is this also a UserAffinity vec?
|
||||||
|
// Also, no idea what this means
|
||||||
|
pub inverse_user_affinities: Vec<UserAffinity>,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Debug, Deserialize, Serialize, Clone, PartialEq)]
|
||||||
|
/// Return type for the [crate::instance::ChorusUser::get_guild_affinities] endpoint.
|
||||||
|
///
|
||||||
|
/// See <https://docs.discord.sex/resources/user#get-guild-affinities>
|
||||||
|
pub struct GuildAffinities {
|
||||||
|
pub guild_affinities: Vec<GuildAffinity>,
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue