コード例 #1
0
 private TradeOfferTransaction UpdateTradeOffer(TradeOfferTransaction transaction)
 {
     try
     {
         var doc = new Document <dynamic>
         {
             Id      = Guid.NewGuid().ToString(),
             Content = transaction,
         };
         var r = _bucket.Upsert(doc);
         if (r.Success)
         {
             Log.Info("Trade Offer Persisted");
         }
         else
         {
             Log.Error("Error in persisting TradeOffer");
         }
     }
     catch (Exception e)
     {
         Log.Error(e);
     }
     return(transaction);
 }
コード例 #2
0
        private void Pay(PaymentMessage msg)
        {
            var transaction = new TradeOfferTransaction(msg.TransactionId);

            try
            {
                var doc = _dataAccess.Ask <DataAccessMessage <TradeOfferTransaction> >(new DataAccessMessage <TradeOfferTransaction>(transaction, DataAccessActionType.Retrieve)).Result;
                transaction = doc.Content;
                if (transaction != null)
                {
                    transaction = new TradeOfferTransaction(transaction, msg);
                }
                else
                {
                    transaction = new TradeOfferTransaction(msg);
                    Log.Warn($"No transaction id = {msg.TransactionId} found in the Database! Needs support");
                }
                var result = _dataAccess.Ask <DataAccessMessage <TradeOfferTransaction> >(new DataAccessMessage <TradeOfferTransaction>(transaction, DataAccessActionType.UpdateTradeOffer));
                if (transaction.State == TradeOfferTransactionState.Completed)
                {
                    Log.Info($"Transaction {transaction.Id} has been completed already, user paid extra ammount Price = {transaction.Price}, Paid ammount = {transaction.PaidAmmount}");
                }
                _bots.FirstOrDefault(b => b.Path.Name == transaction.BotPath)?.Tell(new PaymentNotificationMessage(transaction));
            }
            catch (Exception e)
            {
                Log.Error(e);
            }
        }
コード例 #3
0
        public void RetrieveTest()
        {
            var dataAccessor = Sys.ActorOf(DataAccessActor.Props(new List <IActorRef> {
                TestActor
            }), "data");
            var json        = File.ReadAllText("json/tradeOfferTransaction.json");
            var transaction = JsonConvert.DeserializeObject <TradeOfferTransaction>(json);

            transaction = new TradeOfferTransaction(transaction.TradeOfferId);
            var ob = dataAccessor.Ask(new DataAccessMessage <TradeOfferTransaction>(transaction, DataAccessActionType.Retrieve)).Result;
        }
コード例 #4
0
        private TradeOfferTransaction Retrieve(TradeOfferTransaction transaction)
        {
            List <TradeOfferTransaction> resultList = null;

            try
            {
                if (transaction.Id != Guid.Empty)
                {
                    var result =
                        _bucket.Query <TradeOfferTransaction>(
                            $"select id, offer, offerState, paidAmmount, price, state, timeStamp, tradeOfferId, buyer, botPath from `TreasureHunter` where id = '{transaction.Id}';");
                    if (result.Success)
                    {
                        resultList = result.Rows;
                    }
                    else
                    {
                        Log.Error("Cannot find");
                        return(null);
                    }
                }
                else if (transaction.TradeOfferId != null)
                {
                    var result = _bucket.Query <TradeOfferTransaction>($"select id, offer, offerState, paidAmmount, price, state, timeStamp, tradeOfferId, buyer, botPath from `TreasureHunter` where tradeOfferId = '{transaction.TradeOfferId}';");
                    if (result.Success)
                    {
                        resultList = result.Rows;
                    }
                    else
                    {
                        Log.Error("Cannot find");
                        return(null);
                    }
                }
            }
            catch (Exception e)
            {
                Log.Error(e);;
                return(null);
            }
            return(resultList?.OrderBy(t => t.TimeStamp)?.LastOrDefault());
        }
コード例 #5
0
        public override void OnTradeOfferUpdated(TradeOffer offer)
        {
            var escowDuration = Bot.GetEscrowDuration(offer.TradeOfferId);
            var error         = Bot.CheckIfBotCanAcceptTradeOffer(offer.TradeOfferId);

            if (error != null)
            {
                Log.Warn(error);
                if (error.Contains("unable to trade"))
                {
                    SendChatMessage("Bot Unable to Trade. Please Cancel your trade Offer");
                    return;
                }
                if (error.Contains("This trade offer is no longer valid."))
                {
                    return;
                }
            }
            var itemsTuple    = GetItems(offer);
            var ourItemString = Environment.NewLine + string.Join(Environment.NewLine + "              ",
                                                                  itemsTuple.Item1.Select(i => i.ToString()));
            var theirItemString = Environment.NewLine + string.Join(Environment.NewLine + "              ",
                                                                    itemsTuple.Item2.Select(i => i.ToString()));

            Log.Info($"Order Update from {Bot.SteamFriends.GetFriendPersonaName(offer.PartnerSteamId)} OrderId = " + offer.TradeOfferId);
            Log.Info("They want " + ourItemString);
            Log.Info("I will get " + theirItemString);
            double price       = Bot.Valuate(itemsTuple.Item1, itemsTuple.Item2);
            var    transaction = Bot
                                 .UpdateTradeOffer(new TradeOfferTransaction(offer.TradeOfferId), DataAccessActionType.Retrieve);
            var oldTransaction = transaction;

            if (transaction == null)
            {
                transaction = new TradeOfferTransaction(offer, TradeOfferTransactionState.New, price, Bot);
            }
            else
            {
                transaction = new TradeOfferTransaction(transaction, offer);
            }
            Log.Info(transaction);
            if (transaction.State != TradeOfferTransactionState.Paid && oldTransaction?.State == transaction.State && oldTransaction?.OfferState == transaction.OfferState) //force update paid status
            {
                Log.Info("Incoming TradeOffer is not updated, Skip");
                return;
            }
            switch (offer.OfferState)
            {
            case TradeOfferState.TradeOfferStateAccepted:
                Log.Info($"Trade offer {offer.TradeOfferId} from {Bot.SteamFriends.GetFriendPersonaName(offer.PartnerSteamId)} has been completed!");
                transaction = new TradeOfferTransaction(transaction, TradeOfferTransactionState.Completed);
                SendChatMessage("Trade completed, thank you!");
                Log.Info("Update the Offer...");
                Bot.UpdateTradeOffer(transaction, DataAccessActionType.UpdateTradeOffer);
                return;

            case TradeOfferState.TradeOfferStateActive:
                Log.Info("Update the Offer...");
                Bot
                .UpdateTradeOffer(transaction, DataAccessActionType.UpdateTradeOffer);
                if (!offer.IsOurOffer)
                {
                    switch (transaction.State)
                    {
                    case TradeOfferTransactionState.New:
                        Log.Info("New Trade Found");
                        if (escowDuration.DaysMyEscrow > 0)
                        {
                            SendChatMessage(
                                $"WARNING!!!!! This Bot is under Trade escowDuration and the items you buying will be hold by steam for {escowDuration.DaysMyEscrow}, if you don't want to proceed please cancel the tradeoffer and do not pay");
                        }
                        if (escowDuration.DaysTheirEscrow > 0)
                        {
                            SendChatMessage(
                                $"WARNING!!!!! You are under Trade escowDuration and the items you buying will be hold by steam for {escowDuration.DaysMyEscrow}, if you don't want to proceed please cancel the tradeoffer and do not pay");
                        }
                        SendChatMessage($"Please pay SGD ${transaction.Price} to {"Kiljaeden"} for Order {transaction.Id}");
                        break;

                    case TradeOfferTransactionState.Paid:
                    case TradeOfferTransactionState.Completed:
                        Log.Info($"Existing Trade, Paid completed {transaction.Id}");
                        Bot.PaymentNotifySelf(transaction);
                        break;

                    case TradeOfferTransactionState.PartialPaid:
                        Log.Info($"Existing Trade, Partial Paid, Price = {transaction.Price}, PaidAmmount = {transaction.PaidAmmount} {transaction.Id}");
                        SendChatMessage(
                            $"Please pay SGD ${transaction.Price - transaction.PaidAmmount} to {"Kiljaeden"} for Order {transaction.Id}");
                        break;

                    case TradeOfferTransactionState.Expired:
                        Log.Info($"Existing Trade, Transaction Expired");
                        SendChatMessage(
                            $"Payment Period Expired for Order {transaction.Id}");
                        offer.Decline();
                        break;

                    default:
                        throw new ArgumentOutOfRangeException();
                    }
                }
                break;

            case TradeOfferState.TradeOfferStateNeedsConfirmation:
                Log.Info("Update the Offer...");
                Bot
                .UpdateTradeOffer(transaction, DataAccessActionType.UpdateTradeOffer);
                Log.Info($"Trade offer {offer.TradeOfferId} from {Bot.SteamFriends.GetFriendPersonaName(offer.PartnerSteamId)} Needs Confirmation - " + Environment.NewLine
                         + "Bot:" + (offer.Items.GetMyItems().Count > 0) + Environment.NewLine
                         + "{Bot.SteamFriends.GetFriendPersonaName(offer.PartnerSteamId)}: " + (offer.Items.GetTheirItems().Count > 0));
                switch (transaction.State)
                {
                case TradeOfferTransactionState.Completed:
                    if (offer.Items.GetTheirItems().Count > 0)
                    {
                        SendChatMessage($"Please Confirm Trade");
                    }
                    break;

                case TradeOfferTransactionState.Paid:
                    if (offer.Items.GetTheirItems().Count > 0)
                    {
                        SendChatMessage($"Please Confirm Trade");
                    }
                    Bot.PaymentNotifySelf(transaction);
                    break;

                case TradeOfferTransactionState.New:
                case TradeOfferTransactionState.PartialPaid:
                    Log.Error("Trade reachs confirmation stage but transaction is at " + transaction.State);
                    break;
                }
                break;

            case TradeOfferState.TradeOfferStateInEscrow:
                Log.Info("Update the Offer...");
                Bot
                .UpdateTradeOffer(transaction, DataAccessActionType.UpdateTradeOffer);
                Log.Info($"Trade offer {offer.TradeOfferId} from {Bot.SteamFriends.GetFriendPersonaName(offer.PartnerSteamId)} in Escow");
                switch (transaction.State)
                {
                case TradeOfferTransactionState.Completed:
                    Log.Info($"Trade offer {offer.TradeOfferId} from {Bot.SteamFriends.GetFriendPersonaName(offer.PartnerSteamId)} Needs {(offer.IsOurOffer ? "bot" : offer.TradeOfferId)} Confirmation");
                    string @object = offer.IsOurOffer ? "Bot's" : "Your";
                    Log.Info($"Existing Trade, Paid completed {transaction.Id}¡£ Due to {@object} Account Limitation, the Trade is on-hold by steam");
                    SendChatMessage($"Due to {@object} Account Limitation, the Trade is on-hold by steam");
                    break;

                case TradeOfferTransactionState.New:
                case TradeOfferTransactionState.Paid:
                case TradeOfferTransactionState.PartialPaid:
                    Log.Error("Trade reachs escow stage but transaction is at " + transaction.State);
                    break;
                }

                break;

            case TradeOfferState.TradeOfferStateCountered:
                Log.Info("Update the Offer...");
                Bot
                .UpdateTradeOffer(transaction, DataAccessActionType.UpdateTradeOffer);
                Log.Info($"Trade offer {offer.TradeOfferId} was countered by " + (offer.IsOurOffer ? "bot" : Bot.SteamFriends.GetFriendPersonaName(offer.PartnerSteamId)));
                break;

            case TradeOfferState.TradeOfferStateInvalid:
            case TradeOfferState.TradeOfferStateExpired:
            case TradeOfferState.TradeOfferStateCanceled:
            case TradeOfferState.TradeOfferStateDeclined:
            case TradeOfferState.TradeOfferStateInvalidItems:
            case TradeOfferState.TradeOfferStateCanceledBySecondFactor:
            case TradeOfferState.TradeOfferStateUnknown:
                Log.Info("Update the Offer...");
                Bot
                .UpdateTradeOffer(transaction, DataAccessActionType.UpdateTradeOffer);
                Log.Info($"Trade offer {offer.TradeOfferId} failed because of {offer.OfferState}");
                switch (transaction.State)
                {
                case TradeOfferTransactionState.Completed:
                    Log.Info($"Existing Trade, Paid completed {transaction.Id}");
                    SendChatMessage($"Due to Unknown failure, we have received your payment but the item is not traded, Please contact our support");
                    break;

                case TradeOfferTransactionState.PartialPaid:
                    Log.Info($"Existing Trade, Paid partially ammount = {transaction.PaidAmmount} for {transaction.Id}");
                    SendChatMessage($"Due to Unknown failure, we have received your partial payment but the item is not traded, Please contact our support");
                    break;

                case TradeOfferTransactionState.New:
                case TradeOfferTransactionState.Paid:
                    Log.Error("Trade reachs escow stage but transaction is at " + transaction.State);
                    break;
                }
                break;
            }
            Log.Info("Update the Offer...");
            Bot
            .UpdateTradeOffer(transaction, DataAccessActionType.UpdateTradeOffer);
        }