use steamid::SteamID;
use crate::{error::SteamError, SteamClient};
#[derive(Debug, Clone, Default)]
pub struct TradeRestrictions {
pub steamguard_required_days: u32,
pub new_device_cooldown_days: u32,
pub default_password_reset_probation_days: u32,
pub password_reset_probation_days: u32,
pub default_email_change_probation_days: u32,
pub email_change_probation_days: u32,
}
impl SteamClient {
pub async fn trade(&mut self, steam_id: SteamID) -> Result<(), SteamError> {
if !self.is_logged_in() {
return Err(SteamError::NotLoggedOn);
}
let msg = steam_protos::CMsgTradingInitiateTradeRequest { other_steamid: Some(steam_id.steam_id64()), ..Default::default() };
self.send_message(steam_enums::EMsg::EconTrading_InitiateTradeRequest, &msg).await
}
pub async fn cancel_trade_request(&mut self, steam_id: SteamID) -> Result<(), SteamError> {
if !self.is_logged_in() {
return Err(SteamError::NotLoggedOn);
}
let msg = steam_protos::CMsgTradingCancelTradeRequest { other_steamid: Some(steam_id.steam_id64()) };
self.send_message(steam_enums::EMsg::EconTrading_CancelTradeRequest, &msg).await
}
pub async fn respond_to_trade(&mut self, trade_request_id: u32, accept: bool) -> Result<(), SteamError> {
if !self.is_logged_in() {
return Err(SteamError::NotLoggedOn);
}
let response = if accept { steam_enums::EEconTradeResponse::Accepted } else { steam_enums::EEconTradeResponse::Declined };
let msg = steam_protos::CMsgTradingInitiateTradeResponse { trade_request_id: Some(trade_request_id), response: Some(response as u32), ..Default::default() };
self.send_message(steam_enums::EMsg::EconTrading_InitiateTradeResponse, &msg).await
}
}