Skip to content

Commit

Permalink
Handle offline messages, closes #42
Browse files Browse the repository at this point in the history
  • Loading branch information
JustArchi committed Dec 21, 2015
1 parent e837098 commit 5038527
Show file tree
Hide file tree
Showing 2 changed files with 88 additions and 58 deletions.
145 changes: 88 additions & 57 deletions ArchiSteamFarm/Bot.cs
Original file line number Diff line number Diff line change
Expand Up @@ -142,6 +142,7 @@ internal Bot(string botName) {
SteamFriends = SteamClient.GetHandler<SteamFriends>();
CallbackManager.Subscribe<SteamFriends.FriendsListCallback>(OnFriendsList);
CallbackManager.Subscribe<SteamFriends.FriendMsgCallback>(OnFriendMsg);
CallbackManager.Subscribe<SteamFriends.FriendMsgHistoryCallback>(OnFriendMsgHistory);

if (UseAsfAsMobileAuthenticator && File.Exists(MobileAuthenticatorFile)) {
SteamGuardAccount = JsonConvert.DeserializeObject<SteamGuardAccount>(File.ReadAllText(MobileAuthenticatorFile));
Expand Down Expand Up @@ -517,6 +518,67 @@ private async Task ResponseStop(ulong steamID, string botName) {
}
}

private async Task HandleMessage(ulong steamID, string message) {
if (IsValidCdKey(message)) {
ArchiHandler.RedeemKey(message);
return;
}

if (!message.StartsWith("!")) {
return;
}

if (!message.Contains(" ")) {
switch (message) {
case "!2fa":
Response2FA(steamID);
break;
case "!2faoff":
Response2FAOff(steamID);
break;
case "!exit":
await ShutdownAllBots().ConfigureAwait(false);
break;
case "!farm":
SendMessageToUser(steamID, "Please wait...");
await CardsFarmer.StartFarming().ConfigureAwait(false);
SendMessageToUser(steamID, "Done!");
break;
case "!restart":
await Program.Restart().ConfigureAwait(false);
break;
case "!status":
ResponseStatus(steamID);
break;
case "!stop":
await Shutdown().ConfigureAwait(false);
break;
}
} else {
string[] args = message.Split(' ');
switch (args[0]) {
case "!2fa":
Response2FA(steamID, args[1]);
break;
case "!2faoff":
Response2FAOff(steamID, args[1]);
break;
case "!redeem":
ArchiHandler.RedeemKey(args[1]);
break;
case "!start":
ResponseStart(steamID, args[1]);
break;
case "!stop":
await ResponseStop(steamID, args[1]).ConfigureAwait(false);
break;
case "!status":
ResponseStatus(steamID, args[1]);
break;
}
}
}




Expand Down Expand Up @@ -623,74 +685,44 @@ private async void OnFriendMsg(SteamFriends.FriendMsgCallback callback) {
return;
}

ulong steamID = callback.Sender;
if (steamID != SteamMasterID) {
await HandleMessage(callback.Sender, callback.Message).ConfigureAwait(false);
}

private async void OnFriendMsgHistory(SteamFriends.FriendMsgHistoryCallback callback) {
if (callback == null) {
return;
}

string message = callback.Message;
if (string.IsNullOrEmpty(message)) {
if (callback.Result != EResult.OK) {
return;
}

if (IsValidCdKey(message)) {
ArchiHandler.RedeemKey(message);
ulong steamID = callback.SteamID;

if (steamID != SteamMasterID) {
return;
}

if (!message.StartsWith("!")) {
var messages = callback.Messages;
if (messages.Count == 0) {
return;
}

if (!message.Contains(" ")) {
switch (message) {
case "!2fa":
Response2FA(steamID);
break;
case "!2faoff":
Response2FAOff(steamID);
break;
case "!exit":
await ShutdownAllBots().ConfigureAwait(false);
break;
case "!farm":
SendMessageToUser(steamID, "Please wait...");
await CardsFarmer.StartFarming().ConfigureAwait(false);
SendMessageToUser(steamID, "Done!");
break;
case "!restart":
await Program.Restart().ConfigureAwait(false);
break;
case "!status":
ResponseStatus(steamID);
break;
case "!stop":
await Shutdown().ConfigureAwait(false);
break;
}
} else {
string[] args = message.Split(' ');
switch (args[0]) {
case "!2fa":
Response2FA(steamID, args[1]);
break;
case "!2faoff":
Response2FAOff(steamID, args[1]);
break;
case "!redeem":
ArchiHandler.RedeemKey(args[1]);
break;
case "!start":
ResponseStart(steamID, args[1]);
break;
case "!stop":
await ResponseStop(steamID, args[1]).ConfigureAwait(false);
break;
case "!status":
ResponseStatus(steamID, args[1]);
break;
}
// Get last message
var lastMessage = messages[messages.Count - 1];

// If message is read already, return
if (!lastMessage.Unread) {
return;
}

// If message is too old, return
if (DateTime.UtcNow.Subtract(lastMessage.Timestamp).TotalMinutes > 1) {
return;
}

// Handle the message
await HandleMessage(steamID, lastMessage.Message).ConfigureAwait(false);
}

private void OnAccountInfo(SteamUser.AccountInfoCallback callback) {
Expand Down Expand Up @@ -866,8 +898,7 @@ private void OnOfflineMessage(ArchiHandler.OfflineMessageCallback callback) {
return;
}

// TODO: Enable this after SK2 1.7+ gets released
//SteamFriends.RequestOfflineMessages();
SteamFriends.RequestOfflineMessages();
}

private async void OnPurchaseResponse(ArchiHandler.PurchaseResponseCallback callback) {
Expand Down
1 change: 0 additions & 1 deletion ArchiSteamFarm/config/example.xml
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,6 @@
<!-- This switch defines if bot should handle offline messages when it sees them -->
<!-- Basically it should be used only when "FarmOffline" property above is true, so bot can handle offline messages -->
<!-- Reading offline messages will also mark them as received, therefore it should not be used if you want to keep them for later -->
<!-- WARNING: This switch doesn't work yet (is false for now, but will be used in future) -->
<HandleOfflineMessages type="bool" value="false"/>

<!-- This switch defines if bot should disconnect once farming is finished -->
Expand Down

0 comments on commit 5038527

Please sign in to comment.