diff --git a/ArchiSteamFarm/ArchiHandler.cs b/ArchiSteamFarm/ArchiHandler.cs index 6e3d52a6a..f57278827 100644 --- a/ArchiSteamFarm/ArchiHandler.cs +++ b/ArchiSteamFarm/ArchiHandler.cs @@ -30,6 +30,14 @@ using System.IO; namespace ArchiSteamFarm { internal sealed class ArchiHandler : ClientMsgHandler { + internal sealed class OfflineMessageCallback : CallbackMsg { + internal List Users; + internal uint OfflineMessages; + internal OfflineMessageCallback(CMsgClientOfflineMessageNotification body) { + OfflineMessages = body.offline_messages; + Users = body.friends_with_offline_messages; + } + } internal sealed class PurchaseResponseCallback : CallbackMsg { internal enum EPurchaseResult { @@ -149,7 +157,8 @@ namespace ArchiSteamFarm { return; } - // TODO: Handle offline messages? + var response = new ClientMsgProtobuf(packetMsg); + Client.PostCallback(new OfflineMessageCallback(response.Body)); } private void HandlePurchaseResponse(IPacketMsg packetMsg) { diff --git a/ArchiSteamFarm/Bot.cs b/ArchiSteamFarm/Bot.cs index 97977e99d..76bb1d4f5 100755 --- a/ArchiSteamFarm/Bot.cs +++ b/ArchiSteamFarm/Bot.cs @@ -67,7 +67,8 @@ namespace ArchiSteamFarm { internal ulong SteamMasterID { get; private set; } = 0; internal ulong SteamMasterClanID { get; private set; } = 0; internal bool CardDropsRestricted { get; private set; } = false; - internal bool FarmOnline { get; private set; } = true; + internal bool FarmOffline { get; private set; } = false; + internal bool HandleOfflineMessages { get; private set; } = false; internal bool UseAsfAsMobileAuthenticator { get; private set; } = false; internal bool ShutdownOnFarmingFinished { get; private set; } = false; internal HashSet Blacklist { get; private set; } = new HashSet { 303700, 335590, 368020, 425280 }; @@ -151,6 +152,7 @@ namespace ArchiSteamFarm { CallbackManager.Subscribe(OnMachineAuth); CallbackManager.Subscribe(OnNotification); + CallbackManager.Subscribe(OnOfflineMessage); CallbackManager.Subscribe(OnPurchaseResponse); ArchiWebHandler = new ArchiWebHandler(this, SteamApiKey); @@ -302,10 +304,13 @@ namespace ArchiSteamFarm { case "CardDropsRestricted": CardDropsRestricted = bool.Parse(value); break; - case "FarmOnline": - FarmOnline = bool.Parse(value); + case "FarmOffline": + FarmOffline = bool.Parse(value); break; - case "ShutdownOnFarmingFinished": + case "HandleOfflineMessages": + HandleOfflineMessages = bool.Parse(value); + break; + case "ShutdownOnFarmingFinished": ShutdownOnFarmingFinished = bool.Parse(value); break; case "Blacklist": @@ -692,7 +697,7 @@ namespace ArchiSteamFarm { return; } - if (FarmOnline) { + if (!FarmOffline) { SteamFriends.SetPersonaState(EPersonaState.Online); } } @@ -855,6 +860,19 @@ namespace ArchiSteamFarm { } } + private void OnOfflineMessage(ArchiHandler.OfflineMessageCallback callback) { + if (callback == null) { + return; + } + + if (!HandleOfflineMessages) { + return; + } + + // TODO: Enable this after SK2 1.7+ gets released + //SteamFriends.RequestOfflineMessages(); + } + private async void OnPurchaseResponse(ArchiHandler.PurchaseResponseCallback callback) { if (callback == null) { return; diff --git a/ArchiSteamFarm/config/example.xml b/ArchiSteamFarm/config/example.xml index 0d26110a8..fd795ce4d 100644 --- a/ArchiSteamFarm/config/example.xml +++ b/ArchiSteamFarm/config/example.xml @@ -63,10 +63,16 @@ - - - - + + + + + + + + + +