pub use {badges::*, bot_information::*, flags::*, profile::*, status::*};
mod badges;
mod bot_information;
mod flags;
mod profile;
mod status;
use serde::Deserialize;
use crate::{
models::{Attachment, DirectMessageChannel, Id},
Context, Result,
};
#[derive(Debug, Deserialize, Clone, PartialEq)]
pub struct User {
#[serde(rename = "_id")]
pub id: Id,
pub username: String,
pub avatar: Option<Attachment>,
pub status: Option<UserStatus>,
#[serde(default)]
pub badges: Badges,
#[serde(default)]
pub flags: UserFlags,
#[serde(default)]
pub online: bool,
pub bot: Option<BotInformation>,
}
impl User {
pub async fn fetch(cx: &Context, id: &Id) -> Result<Self> {
#[cfg(feature = "cache")]
if let Some(user) = cx.cache.user(id).await {
return Ok(user);
}
cx.http_client.get(format!("users/{}", id)).await
}
pub fn is_bot(&self) -> bool {
self.bot.is_some()
}
pub async fn profile(&self, cx: &Context) -> Result<UserProfile> {
cx.http_client
.get(format!("users/{}/profile", self.id))
.await
}
pub async fn dm(&self, cx: &Context) -> Result<DirectMessageChannel> {
DirectMessageChannel::open(cx, &self.id).await
}
}