From 1a917a668c4b067588a8f990dd2b257ce1936ce2 Mon Sep 17 00:00:00 2001 From: JustArchi Date: Sun, 4 Dec 2016 20:41:01 +0100 Subject: [PATCH] Misc --- ArchiSteamFarm/Bot.cs | 4 ++-- ArchiSteamFarm/Statistics.cs | 27 ++++++++++++++++++--------- ArchiSteamFarm/Trading.cs | 2 +- 3 files changed, 21 insertions(+), 12 deletions(-) diff --git a/ArchiSteamFarm/Bot.cs b/ArchiSteamFarm/Bot.cs index 7aec73ee1..9f4c1d734 100755 --- a/ArchiSteamFarm/Bot.cs +++ b/ArchiSteamFarm/Bot.cs @@ -1182,7 +1182,7 @@ namespace ArchiSteamFarm { } // Sometimes Steam won't send us our own PersonaStateCallback, so request it explicitly - SteamFriends.RequestFriendInfo(callback.ClientSteamID, EClientPersonaStateFlag.Presence); + SteamFriends.RequestFriendInfo(callback.ClientSteamID, EClientPersonaStateFlag.PlayerName | EClientPersonaStateFlag.Presence); if (BotDatabase.MobileAuthenticator == null) { // Support and convert SDA files @@ -1662,7 +1662,7 @@ namespace ArchiSteamFarm { return "Trade offer failed due to error!"; } - await Task.Delay(1000).ConfigureAwait(false); // Sometimes we can be too fast for Steam servers to generate confirmations, wait a short moment + await Task.Delay(3000).ConfigureAwait(false); // Sometimes we can be too fast for Steam servers to generate confirmations, wait a short moment await AcceptConfirmations(true, Steam.ConfirmationDetails.EType.Trade, BotConfig.SteamMasterID).ConfigureAwait(false); return "Trade offer sent successfully!"; } diff --git a/ArchiSteamFarm/Statistics.cs b/ArchiSteamFarm/Statistics.cs index fb1d218f8..99f8b4711 100644 --- a/ArchiSteamFarm/Statistics.cs +++ b/ArchiSteamFarm/Statistics.cs @@ -24,6 +24,7 @@ using System; using System.Collections.Generic; +using System.Linq; using System.Threading; using System.Threading.Tasks; using SteamKit2; @@ -37,6 +38,7 @@ namespace ArchiSteamFarm { private string LastAvatarHash; private DateTime LastHeartBeat = DateTime.MinValue; + private string LastNickname; private bool ShouldSendHeartBeats; internal Statistics(Bot bot) { @@ -108,32 +110,39 @@ namespace ArchiSteamFarm { return; } - if ((callback.AvatarHash == null) || (callback.AvatarHash.Length == 0)) { - return; + string nickname = callback.Name ?? ""; + string avatarHash = ""; + + if ((callback.AvatarHash != null) && (callback.AvatarHash.Length > 0) && callback.AvatarHash.Any(singleByte => singleByte != 0)) { + avatarHash = BitConverter.ToString(callback.AvatarHash).Replace("-", "").ToLowerInvariant(); + if (avatarHash.Equals("0000000000000000000000000000000000000000")) { + avatarHash = ""; + } } - string avatarHash = BitConverter.ToString(callback.AvatarHash).Replace("-", "").ToLowerInvariant(); - if (string.IsNullOrEmpty(avatarHash) || (!string.IsNullOrEmpty(LastAvatarHash) && avatarHash.Equals(LastAvatarHash))) { + if (!string.IsNullOrEmpty(LastNickname) && nickname.Equals(LastNickname) && !string.IsNullOrEmpty(LastAvatarHash) && avatarHash.Equals(LastAvatarHash)) { return; } await Semaphore.WaitAsync().ConfigureAwait(false); try { - if (!string.IsNullOrEmpty(LastAvatarHash) && avatarHash.Equals(LastAvatarHash)) { + if (!string.IsNullOrEmpty(LastNickname) && nickname.Equals(LastNickname) && !string.IsNullOrEmpty(LastAvatarHash) && avatarHash.Equals(LastAvatarHash)) { return; } const string request = SharedInfo.StatisticsServer + "/api/PersonaState"; - Dictionary data = new Dictionary(2) { + Dictionary data = new Dictionary(3) { { "SteamID", Bot.SteamID.ToString() }, + { "Nickname", nickname }, { "AvatarHash", avatarHash } }; - LastAvatarHash = avatarHash; - // We don't need retry logic here - await Program.WebBrowser.UrlPost(request, data).ConfigureAwait(false); + if (await Program.WebBrowser.UrlPost(request, data).ConfigureAwait(false)) { + LastNickname = nickname; + LastAvatarHash = avatarHash; + } } finally { Semaphore.Release(); } diff --git a/ArchiSteamFarm/Trading.cs b/ArchiSteamFarm/Trading.cs index 364461b4a..2e6320d34 100644 --- a/ArchiSteamFarm/Trading.cs +++ b/ArchiSteamFarm/Trading.cs @@ -110,7 +110,7 @@ namespace ArchiSteamFarm { if (Bot.HasMobileAuthenticator) { HashSet acceptedWithItemLoseTradeIDs = new HashSet(results.Where(result => (result != null) && (result.Result == ParseTradeResult.EResult.AcceptedWithItemLose)).Select(result => result.TradeID)); if (acceptedWithItemLoseTradeIDs.Count > 0) { - await Task.Delay(1000).ConfigureAwait(false); // Sometimes we can be too fast for Steam servers to generate confirmations, wait a short moment + await Task.Delay(3000).ConfigureAwait(false); // Sometimes we can be too fast for Steam servers to generate confirmations, wait a short moment await Bot.AcceptConfirmations(true, Steam.ConfirmationDetails.EType.Trade, 0, acceptedWithItemLoseTradeIDs).ConfigureAwait(false); } }