//! Open a direct message with another user use revolt_quark::{Error, Result, Ref, models::{User, Channel}, Database, perms, UserPermission}; use mongodb::bson::doc; use rocket::{State, serde::json::Json}; use ulid::Ulid; #[get("//dm")] pub async fn req(db: &State, user: User, target: Ref) -> Result> { let target = target.as_user(db).await?; if let Ok(channel) = db.find_direct_message_channel(&user.id, &target.id).await { Ok(Json(channel)) } else if perms(&user).user(&target).calc_user(db).await.get_send_message() { let new_channel = Channel::DirectMessage { id: Ulid::new().to_string(), active: false, recipients: vec! [ user.id.clone(), target.id.clone() ], last_message_id: None, }; db.insert_channel(&new_channel).await?; Ok(Json(new_channel)) } else { Error::from_permission(UserPermission::SendMessage) } }