ArchiSteamFarm.Statistics.OnPersonaState C# (CSharp) Метод

OnPersonaState() приватный Метод

private OnPersonaState ( SteamFriends callback ) : Task
callback SteamKit2.SteamFriends
Результат Task
		internal async Task OnPersonaState(SteamFriends.PersonaStateCallback callback) {
			if (callback == null) {
				ASF.ArchiLogger.LogNullError(nameof(callback));
				return;
			}

			// Don't announce if we don't meet conditions
			if (!HasAutomatedTrading || !SteamTradeMatcher) {
				ShouldSendHeartBeats = false;
				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 = "";
				}
			}

			bool matchEverything = Bot.BotConfig.TradingPreferences.HasFlag(BotConfig.ETradingPreferences.MatchEverything);

			// Skip announcing if we already announced this bot with the same data
			if (!string.IsNullOrEmpty(LastNickname) && nickname.Equals(LastNickname) && !string.IsNullOrEmpty(LastAvatarHash) && avatarHash.Equals(LastAvatarHash) && LastMatchEverything.HasValue && (matchEverything == LastMatchEverything.Value)) {
				return;
			}

			await Semaphore.WaitAsync().ConfigureAwait(false);

			try {
				// Skip announcing if we already announced this bot with the same data
				if (!string.IsNullOrEmpty(LastNickname) && nickname.Equals(LastNickname) && !string.IsNullOrEmpty(LastAvatarHash) && avatarHash.Equals(LastAvatarHash) && LastMatchEverything.HasValue && (matchEverything == LastMatchEverything.Value)) {
					return;
				}

				// Even if following request fails, we want to send HeartBeats regardless
				ShouldSendHeartBeats = true;

				string request = await GetURL().ConfigureAwait(false) + "/api/Announce";
				Dictionary<string, string> data = new Dictionary<string, string>(5) {
					{ "SteamID", Bot.SteamID.ToString() },
					{ "Guid", Program.GlobalDatabase.Guid.ToString("N") },
					{ "Nickname", nickname },
					{ "AvatarHash", avatarHash },
					{ "MatchEverything", matchEverything ? "1" : "0" }
				};

				// We don't need retry logic here
				if (await Program.WebBrowser.UrlPost(request, data).ConfigureAwait(false)) {
					LastNickname = nickname;
					LastAvatarHash = avatarHash;
					LastMatchEverything = matchEverything;
				}
			} finally {
				Semaphore.Release();
			}
		}