use steamid::SteamID;
use super::super::{RemoteSteamUser, RemoteSteamUserError};
use crate::types::{GroupInfoXml, GroupOverview, InvitableGroup};
impl RemoteSteamUser {
pub async fn join_group(&self, group_id: SteamID) -> Result<(), RemoteSteamUserError> {
self.call_void("/api/groups/join", serde_json::json!({"group_id": group_id.steam_id64()})).await
}
pub async fn leave_group(&self, group_id: SteamID) -> Result<(), RemoteSteamUserError> {
self.call_void("/api/groups/leave", serde_json::json!({"group_id": group_id.steam_id64()})).await
}
pub async fn get_group_members(&self, group_id: SteamID) -> Result<Vec<SteamID>, RemoteSteamUserError> {
self.call_typed("/api/groups/members", serde_json::json!({"group_id": group_id.steam_id64()})).await
}
pub async fn post_group_announcement(&self, group_id: SteamID, headline: &str, content: &str) -> Result<(), RemoteSteamUserError> {
self.call_void("/api/groups/announcement", serde_json::json!({"group_id": group_id.steam_id64(), "headline": headline, "content": content})).await
}
pub async fn kick_group_member(&self, group_id: SteamID, member_id: SteamID) -> Result<(), RemoteSteamUserError> {
self.call_void("/api/groups/kick", serde_json::json!({"group_id": group_id.steam_id64(), "member_id": member_id.steam_id64()})).await
}
pub async fn invite_user_to_group(&self, user_id: SteamID, group_id: SteamID) -> Result<(), RemoteSteamUserError> {
self.call_void("/api/groups/invite", serde_json::json!({"user_id": user_id.steam_id64(), "group_id": group_id.steam_id64()})).await
}
pub async fn invite_users_to_group(&self, user_ids: &[SteamID], group_id: SteamID) -> Result<(), RemoteSteamUserError> {
let ids: Vec<u64> = user_ids.iter().map(|id| id.steam_id64()).collect();
self.call_void("/api/groups/invite_multiple", serde_json::json!({"user_ids": ids, "group_id": group_id.steam_id64()})).await
}
pub async fn accept_group_invite(&self, group_id: SteamID) -> Result<(), RemoteSteamUserError> {
self.call_void("/api/groups/accept_invite", serde_json::json!({"group_id": group_id.steam_id64()})).await
}
pub async fn ignore_group_invite(&self, group_id: SteamID) -> Result<(), RemoteSteamUserError> {
self.call_void("/api/groups/ignore_invite", serde_json::json!({"group_id": group_id.steam_id64()})).await
}
pub async fn get_group_overview(&self, gid: Option<SteamID>, group_url: Option<&str>, page: Option<i32>, search_key: Option<&str>) -> Result<GroupOverview, RemoteSteamUserError> {
self.call_typed("/api/groups/overview", serde_json::json!({"gid": gid.map(|g| g.steam_id64()), "group_url": group_url, "page": page.unwrap_or(1), "search_key": search_key})).await
}
pub async fn get_group_steam_id_from_vanity_url(&self, vanity_url: &str) -> Result<String, RemoteSteamUserError> {
self.call_typed("/api/groups/resolve_vanity", serde_json::json!({"vanity_url": vanity_url})).await
}
pub async fn get_group_info_xml(&self, gid: Option<SteamID>, group_url: Option<&str>, page: Option<u32>) -> Result<GroupInfoXml, RemoteSteamUserError> {
self.call_typed("/api/groups/info_xml", serde_json::json!({"gid": gid.map(|g| g.steam_id64()), "group_url": group_url, "page": page})).await
}
pub async fn get_group_info_xml_full(&self, gid: Option<SteamID>, group_url: Option<&str>) -> Result<GroupInfoXml, RemoteSteamUserError> {
self.call_typed("/api/groups/info_xml_full", serde_json::json!({"gid": gid.map(|g| g.steam_id64()), "group_url": group_url})).await
}
pub async fn get_invitable_groups(&self, user_steam_id: SteamID) -> Result<Vec<InvitableGroup>, RemoteSteamUserError> {
self.call_typed("/api/groups/invitable", serde_json::json!({"user_steam_id": user_steam_id.steam_id64()})).await
}
pub async fn invite_all_friends_to_group(&self, group_id: SteamID) -> Result<(), RemoteSteamUserError> {
self.call_void("/api/groups/invite_all_friends", serde_json::json!({"group_id": group_id.steam_id64()})).await
}
}