public static ExchangeStatus CurrentExchangeStatus(Exchange exchange) { try { if (IsDateBusinessDay(DateTime.Now)) { if (m_oOpeningHours == null) { GoogleHistoricalDataInterpreter oGHDI = new GoogleHistoricalDataInterpreter(); m_oOpeningHours = oGHDI.GetStartEndOfExchange(Instruments[0], exchange); //ugly, what happens when the first instruments doesn't exists at the exchange...? } if ((DateTime.Now >= m_oOpeningHours.Item1 && DateTime.Now <= m_oOpeningHours.Item2)) { m_oExchangeStatus = ExchangeStatus.Open; } else { m_oExchangeStatus = ExchangeStatus.Closed; } } else { m_oExchangeStatus = ExchangeStatus.Closed; } } catch { m_oExchangeStatus = ExchangeStatus.Undefined; } return(m_oExchangeStatus); }
private async Task HandleReactionInAdd(SocketReaction reaction, IUserMessage msg) { if (reaction.Emote.Equals(OneEmote) && reaction.UserId == P1.User.Id) { P1.Accepted = true; RestartTimer(); } else if (reaction.Emote.Equals(TwoEmote) && reaction.UserId == P2.User.Id) { P2.Accepted = true; RestartTimer(); } if (P1.Accepted && P2.Accepted) { State = ExchangeStatus.AcceptP1; Tips = $"{P1.User.Mention} daj {AcceptEmote} aby zaakceptować, lub {DeclineEmote} aby odrzucić."; await msg.RemoveAllReactionsAsync(); await msg.ModifyAsync(x => x.Embed = BuildEmbed()); await msg.AddReactionsAsync(new IEmote[] { AcceptEmote, DeclineEmote }); } }
public ObjInfo(Object _obj) { this.Obj = _obj; this.InsStatus = ExchangeStatus.none; this.UpdateStatus = ExchangeStatus.none; this.ApplyStatus = ExchangeStatus.none; Instance = null; }
public RefreashedEventArgs(double currentValue, double lastValue, StockStatus status, ExchangeStatus decision, double currentBTC, double currentJPY) { this.currentValue = currentValue; this.lastValue = lastValue; this.status = status; this.decision = decision; this.currentBTC = currentBTC; this.currentJPY = currentJPY; }
public void SetMemberValue(double buyThreshold = 0, double sellThreshold = 0, double requestFrequency = 10, double alertUpper = 0, double alertLower = 0) { BuyThreshold = buyThreshold; SellThreshold = sellThreshold; SetSleepTime(requestFrequency); AlertUpper = alertUpper; AlertLower = alertLower; IsAlert = false; Decision = ExchangeStatus.doNothing; }
public void ResetMemeber(string accessKey, string accessSecret) { AccessKey = accessKey; AccessSecret = accessSecret; blance = new GetBalanceApi(AccessKey, AccessSecret); blance.start(); CurrentBitcoinNum = getBitcoinNum(); CurrentCashNum = getCashNum(); LastBuyValue = getLastBuyValue(); LastSellValue = getLastSellValue(); NextStep = calNextStep(); }
public void SetMemberValue(Hashtable datas) { BuyThreshold = datas.ContainsKey("BuyThreshold") ? Convert.ToDouble(datas["BuyThreshold"]) : 0; SellThreshold = datas.ContainsKey("SellThreshold") ? Convert.ToDouble(datas["SellThreshold"]) : 0; AlertUpper = datas.ContainsKey("AlertUpper") ? Convert.ToDouble(datas["AlertUpper"]) : 0; AlertLower = datas.ContainsKey("AlertLower") ? Convert.ToDouble(datas["AlertLower"]) : 0; double requestFrequency = datas.ContainsKey("RequestFrequency") ? Convert.ToDouble(datas["RequestFrequency"]) : 2; SetSleepTime(requestFrequency); IsAlert = false; Decision = ExchangeStatus.doNothing; }
public ExchangeSession(IUser owner, IUser exchanger, IConfig config) : base(owner) { State = ExchangeStatus.Add; Event = ExecuteOn.AllEvents; AddParticipant(exchanger); RunMode = RunMode.Sync; TimeoutMs = 120000; _config = config; Message = null; OnExecute = ExecuteAction; OnDispose = DisposeAction; }
protected void Page_Load(object sender, EventArgs e) { this.btnSeach.Click += new EventHandler(this.btnSeach_Click); this.DelBtn.Click += new EventHandler(this.DelBtn_Click); if (base.Request.Params.AllKeys.Contains <string>("status")) { int i = 0; if (base.Request["status"].ToString().bInt(ref i)) { this.status = (ExchangeStatus)i; } } if (!base.IsPostBack) { this.BindData(); } }
protected void Page_Load(object sender, System.EventArgs e) { this.btnSeach.Click += new System.EventHandler(this.btnSeach_Click); this.DelBtn.Click += new System.EventHandler(this.DelBtn_Click); this.grdProducts.ItemCommand += new System.Web.UI.WebControls.RepeaterCommandEventHandler(this.grdProducts_ItemCommand); this.btnDelete.Click += new System.EventHandler(this.btnDelete_Click); string[] allKeys = base.Request.Params.AllKeys; if (allKeys.Contains("status")) { int num = 0; if (base.Request["status"].ToString().bInt(ref num)) { this.status = (ExchangeStatus)num; } } if (!base.IsPostBack) { this.BindData(); } }
public void MainLoop() { while (true) { Decision = Refreash(); if (Trader.CheckTrad(Decision, Ticker.CurrentValue) == ExchangeStatus.buy && firstBuyFlag) { firstBuyFlag = false; } RefreashedEventArgs refreashEA = new RefreashedEventArgs(Ticker.CurrentValue, Ticker.LastValue, Ticker.Status, Decision, Trader.CurrentBitcoinNum, Trader.CurrentCashNum); onRefreash(refreashEA); if (IsAlert && ((AlertUpper != 0 && Ticker.CurrentValue >= AlertUpper) || (AlertLower != 0 && Ticker.CurrentValue <= AlertLower))) { AlertEventArgs alertEA = new AlertEventArgs(Ticker.CurrentValue, AlertUpper, AlertLower); alerted(alertEA); } Thread.Sleep((int)SleepTime); } }
public CandidateMagicLinkExchangeResult(Candidate candidate) { Candidate = candidate; if (Candidate == null) { Status = ExchangeStatus.Invalid; } else if (Candidate.MagicLinkTokenAlreadyExchanged()) { Status = ExchangeStatus.AlreadyExchanged; } else if (Candidate.MagicLinkTokenExpired()) { Status = ExchangeStatus.Expired; } else { Status = ExchangeStatus.Valid; } }
private async Task SetStatusAsync(string exchangeName, ExchangeStatus exchangeStatus) { ExchangeSettings exchangeSettings = await GetByNameAsync(exchangeName); if (exchangeSettings == null) { throw new EntityNotFoundException(); } if (exchangeSettings.Status == exchangeStatus) { return; } exchangeSettings = exchangeSettings.Clone(); exchangeSettings.Status = exchangeStatus; await _exchangeSettingsRepository.UpdateAsync(exchangeSettings); _cache.Set(exchangeSettings); }
public ExchangeStatus CheckTrad(ExchangeStatus exStatus, double currentValue) { ExchangeStatus returnValue = ExchangeStatus.doNothing; if (exStatus == NextStep) { switch (exStatus) { case ExchangeStatus.buy: buy(currentValue); NextStep = ExchangeStatus.sell; returnValue = ExchangeStatus.buy; break; case ExchangeStatus.sell: sell(currentValue); NextStep = ExchangeStatus.buy; returnValue = ExchangeStatus.sell; break; } } return(returnValue); }
public async Task <IHttpActionResult> UpdateExchangeStatus([FromBody] ExchangeStatus i_Status) { string nickname = Thread.CurrentPrincipal.Identity.Name; using (CarWatchDBEntities entities = new CarWatchDBEntities()) { Exchange result = await entities.Exchanges.FirstOrDefaultAsync(e => (e.ConsumerNickname == nickname || e.ProviderNickname == nickname) && e.Status == 0); if (result == null) { return(BadRequest("you are not involved with an open exchange.")); } if (i_Status.status == (int)e_ExchangeStatus.Success) { pushToClient(result.ConsumerNickname, "exchangeStatusUpdate", k_ExchangeSuccessMessage); pushToClient(result.ProviderNickname, "exchangeStatusUpdate", k_ExchangeSuccessMessage); FacebookAccount proposer = await entities.FacebookAccounts.FirstOrDefaultAsync(e => e.Nickname == result.ProviderNickname); proposer.Rank += 5; } else if (i_Status.status == (int)e_ExchangeStatus.CanceledBySearcherPriorArrival) { pushToClient(result.ConsumerNickname, "exchangeStatusUpdate", k_ExchangeCancelBySearcherMessage); pushToClient(result.ProviderNickname, "exchangeStatusUpdate", k_ExchangeCancelBySearcherMessage); } else if (i_Status.status == (int)e_ExchangeStatus.CanceledByProposerPriorArrival) { pushToClient(result.ConsumerNickname, "exchangeStatusUpdate", k_ExchangeCancelByProposerMessage); pushToClient(result.ProviderNickname, "exchangeStatusUpdate", k_ExchangeCancelByProposerMessage); FacebookAccount proposerAccount = await entities.FacebookAccounts.FirstOrDefaultAsync(e => e.Nickname == result.ProviderNickname); proposerAccount.Rank -= 2; if (proposerAccount.Rank < 0) { proposerAccount.Rank = 0; } } else if (i_Status.status == (int)e_ExchangeStatus.CancelNoParkingSpot) { pushToClient(result.ConsumerNickname, "exchangeStatusUpdate", k_ExchangeCancelNoParkingSpotMessage); pushToClient(result.ProviderNickname, "exchangeStatusUpdate", k_ExchangeCancelNoParkingSpotMessage); FacebookAccount proposerAccount = await entities.FacebookAccounts.FirstOrDefaultAsync(e => e.Nickname == result.ProviderNickname); proposerAccount.Rank -= 3; if (proposerAccount.Rank < 0) { proposerAccount.Rank = 0; } } else { return(BadRequest("Illegal status code.")); } result.Status = i_Status.status; result.TimeExchanged = DateTime.UtcNow; await entities.SaveChangesAsync(); return(Ok(result)); } }
private void writeLog(double moveNum, double currentCash, double currentBitcoin, ExchangeStatus action, double serFee) { using (StreamWriter logStream = new StreamWriter("bitcoin.log", true)) { logStream.WriteLine("{0}\t{1}\t{2}\t{3}\t{4}\t{5}", DateTime.UtcNow.ToString(), moveNum.ToString(), currentCash.ToString(), currentBitcoin.ToString(), action.ToString(), serFee.ToString()); } }
// 接收WebRPC回傳 void OnWebRpcResponse(OperationResponse operationResponse) { if (operationResponse.ReturnCode != 0) { Debug.Log("WebRPC 操作失敗. Response: " + operationResponse.ToStringFull()); transformStatus = "finished"; waitProcess = ""; listenStatus = "finished"; ChangbuttonOnOrOff(true); return; } WebRpcResponse webRpcResponse = new WebRpcResponse(operationResponse); if (webRpcResponse.ReturnCode != 0) { Debug.Log("WebRPC '" + webRpcResponse.Name + "發生問題. Error: " + webRpcResponse.ReturnCode + " Message: " + webRpcResponse.DebugMessage); return; } Dictionary <string, object> parameters = webRpcResponse.Parameters; foreach (KeyValuePair <string, object> pair in parameters) { countObject++; if (countObject == parameters.Count) { tempReturnValue += string.Format(@"""{0}"" : ""{1}""", pair.Key, pair.Value); } else { tempReturnValue += string.Format(@"""{0}"" : ""{1}""", pair.Key, pair.Value) + ", "; } } //判斷事件 if ((string)parameters["callnumber"] == "1") { contractStatus = JsonUtility.FromJson <ContractStatus>("{" + tempReturnValue + "}"); } else if ((string)parameters["callnumber"] == "2") { listenEvent_New = JsonUtility.FromJson <ListenEvent_New>("{" + tempReturnValue + "}"); waitMessage = false; listenStatus = "finished"; } else if ((string)parameters["callnumber"] == "3") { allowance = JsonUtility.FromJson <Allowance>("{" + tempReturnValue + "}"); transformStatus = "finished"; waitProcess = ""; listenStatus = "finished"; ChangbuttonOnOrOff(true); CheckBalanceOf(); } else if ((string)parameters["callnumber"] == "4") { balanceOf = JsonUtility.FromJson <BalanceOf>("{" + tempReturnValue + "}"); transformStatus = "finished"; waitProcess = ""; listenStatus = "finished"; ChangbuttonOnOrOff(true); } else if ((string)parameters["callnumber"] == "5") { giveApprove = JsonUtility.FromJson <GiveApprove>("{" + tempReturnValue + "}"); transformStatus = "finished"; waitProcess = ""; listenStatus = "finished"; ChangbuttonOnOrOff(true); } else if ((string)parameters["callnumber"] == "6") { twoPointDeal = JsonUtility.FromJson <TwoPointDeal>("{" + tempReturnValue + "}"); transformStatus = "finished"; waitProcess = ""; listenStatus = "finished"; ChangbuttonOnOrOff(true); } else if ((string)parameters["callnumber"] == "7") { putExchange = JsonUtility.FromJson <PutExchange>("{" + tempReturnValue + "}"); transformStatus = "finished"; waitProcess = ""; listenStatus = "finished"; ChangbuttonOnOrOff(true); } else if ((string)parameters["callnumber"] == "8") { lookExchange_Self = JsonUtility.FromJson <LookExchange_Self>("{" + tempReturnValue + "}"); transformStatus = "finished"; waitProcess = ""; listenStatus = "finished"; ChangbuttonOnOrOff(true); CheckBalanceOf(); } else if ((string)parameters["callnumber"] == "9") { lookExchange_Other = JsonUtility.FromJson <LookExchange_Other>("{" + tempReturnValue + "}"); transformStatus = "finished"; waitProcess = ""; listenStatus = "finished"; ChangbuttonOnOrOff(true); StartLookExchange_Self(); } else if ((string)parameters["callnumber"] == "10") { exchangeStatus = JsonUtility.FromJson <ExchangeStatus>("{" + tempReturnValue + "}"); transformStatus = "finished"; waitProcess = ""; listenStatus = "finished"; ChangbuttonOnOrOff(true); } else if ((string)parameters["callnumber"] == "11") { cancelExchange = JsonUtility.FromJson <CancelExchange>("{" + tempReturnValue + "}"); transformStatus = "finished"; waitProcess = ""; listenStatus = "finished"; ChangbuttonOnOrOff(true); } else if ((string)parameters["callnumber"] == "12") { exchangeItem = JsonUtility.FromJson <ExchangeItem>("{" + tempReturnValue + "}"); transformStatus = "finished"; waitProcess = ""; listenStatus = "finished"; ChangbuttonOnOrOff(true); } else if ((string)parameters["callnumber"] == "13") { buyLottery = JsonUtility.FromJson <BuyLottery>("{" + tempReturnValue + "}"); transformStatus = "finished"; waitProcess = ""; listenStatus = "finished"; ChangbuttonOnOrOff(true); } else if ((string)parameters["callnumber"] == "14") { lookLottery = JsonUtility.FromJson <LookLottery>("{" + tempReturnValue + "}"); transformStatus = "finished"; waitProcess = ""; listenStatus = "finished"; ChangbuttonOnOrOff(true); CheckBalanceOf(); } //清空暫存內容 countObject = 0; tempReturnValue = ""; }
public async Task <int> PingAsync() { ExchangeStatus pingStatus = await _bitfinexApiManager.GetExchangeStatus(); return((int)pingStatus); }
public static ObjectList<AIS.SN.Model.DomainObjects.Views.ExchangeRequestAddress> GetByStatus(ExchangeStatus status, Area filterArea) { System.Collections.Generic.List<long> addresses = new System.Collections.Generic.List<long>(); ObjectList<ExchangeRequest> exchangeRequestsGroup = ExchangeRequest.GetExchangeRequestsGroup(ExchangeRequestType.Address, status); ObjectList<AIS.SN.Model.DomainObjects.Views.ExchangeRequestAddress> list3 = new ObjectList<AIS.SN.Model.DomainObjects.Views.ExchangeRequestAddress>(); foreach (ExchangeRequest request in exchangeRequestsGroup) { AIS.SN.Model.DomainObjects.Views.ExchangeRequestAddress address = Serializer.FromXml<AIS.SN.Model.DomainObjects.Views.ExchangeRequestAddress>(request.XmlIn); address.DateIn = request.DateIn; address.ExchangeRequestId = request.Id; address.LocalAddressId = request.AddressId; if (address.LocalAddressId != LocalAddress.Null.Id) { addresses.Add(address.LocalAddressId); } address.Address = string.Concat((string[]) new string[] { ((address.LastChangeDate != Constants.NullDate) ? ((string) address.LastChangeDate.ToShortDateString()) : ((string) address.DateIn.ToShortDateString())), ";", address.StreetSocr, " ", address.Street, ";", address.HouseSocr, " ", address.House, ";", address.FlatSocr, " ", address.Flat }); list3.Add(address); } ObjectList<AIS.SN.Model.DomainObjects.Views.ExchangeRequestAddress> list4 = new ObjectList<AIS.SN.Model.DomainObjects.Views.ExchangeRequestAddress>(); if ((filterArea == null) || (filterArea == Area.Null)) { return list3.ApplySort("Address"); } Area lhs = new Area { StatusTemporary = 1 }; lhs.SaveChanges(); lhs.SaveAddresses(addresses); System.Collections.Generic.IList<long> filteredApartmentLocalAddresses = Area.GetFilteredApartmentLocalAddresses(lhs, filterArea); for (int i = 0; i < list3.get_Count(); i = (int) (i + 1)) { long num2 = (list3.get_Item(i).RemoteAddressId == 0L) ? list3.get_Item(i).LocalAddressId : list3.get_Item(i).RemoteAddressId; if (filteredApartmentLocalAddresses.Contains(num2)) { list4.Add(list3.get_Item(i)); } } return list4.ApplySort("Address"); }
public ObjectList<ExchangeRequest> GetDuplicatesByOutId(ExchangeRequestType type, ExchangeStatus status) { return Mappers.ExchangeRequestMapper.GetDuplicatesByOutId(base.Id, this.OutId, type, status); }
private async Task <bool> HandleUserReactionInAccept(SocketReaction reaction, PlayerInfo player, IUserMessage msg) { bool end = false; if (reaction.UserId == player.User.Id) { if (reaction.Emote.Equals(AcceptEmote)) { if (State != ExchangeStatus.AcceptP2) { RestartTimer(); State = ExchangeStatus.AcceptP2; Tips = $"{P2.User.Mention} daj {AcceptEmote} aby zaakceptować, lub {DeclineEmote} aby odrzucić."; } else { Tips = $"Wymiana zakończona!"; end = true; if (P1.Cards.Count == 0 && P2.Cards.Count == 0) { return(end); } using (var db = new Database.UserContext(_config)) { var user1 = await db.GetUserOrCreateAsync(P1.User.Id); var user2 = await db.GetUserOrCreateAsync(P2.User.Id); double avgValueP1 = P1.Cards.Sum(x => x.MarketValue) / ((P1.Cards.Count == 0) ? 1 : P1.Cards.Count); double avgValueP2 = P2.Cards.Sum(x => x.MarketValue) / ((P2.Cards.Count == 0) ? 1 : P2.Cards.Count); if (double.IsInfinity(avgValueP1)) { avgValueP1 = double.MinValue; } if (double.IsInfinity(avgValueP2)) { avgValueP2 = double.MinValue; } var divP1 = P1.Cards.Count / ((avgValueP1 == 0) ? 1 : avgValueP1); var divP2 = P2.Cards.Count / ((avgValueP2 == 0) ? 1 : avgValueP2); if (double.IsInfinity(divP1)) { divP1 = double.MinValue; } if (double.IsInfinity(divP2)) { divP2 = double.MinValue; } var exchangeRateP1 = divP2 / ((P1.Cards.Count == 0) ? (divP2 * 0.5) : divP1); var exchangeRateP2 = divP1 / ((P2.Cards.Count == 0) ? (divP1 * 0.5) : divP2); if (double.IsInfinity(exchangeRateP1)) { exchangeRateP1 = double.MinValue; } if (double.IsInfinity(exchangeRateP2)) { exchangeRateP2 = double.MinValue; } foreach (var c in P1.Cards) { var card = user1.GameDeck.Cards.FirstOrDefault(x => x.Id == c.Id); if (card != null) { card.Active = false; card.TagList.Clear(); card.Affection -= 1.5; var valueDiff = card.MarketValue - exchangeRateP1; var changed = card.MarketValue - valueDiff * 0.735; if (!double.IsInfinity(changed) && !double.IsInfinity(valueDiff)) { card.MarketValue = changed; } if (card.FirstIdOwner == 0) { card.FirstIdOwner = user1.Id; } user1.GameDeck.Cards.Remove(card); user2.GameDeck.Cards.Add(card); user2.GameDeck.RemoveCharacterFromWishList(card.Character); user2.GameDeck.RemoveCardFromWishList(card.Id); } } foreach (var c in P2.Cards) { var card = user2.GameDeck.Cards.FirstOrDefault(x => x.Id == c.Id); if (card != null) { card.Active = false; card.TagList.Clear(); card.Affection -= 1.5; var valueDiff = card.MarketValue - exchangeRateP2; var changed = card.MarketValue - valueDiff * 0.735; if (!double.IsInfinity(changed) && !double.IsInfinity(valueDiff)) { card.MarketValue = changed; } if (card.FirstIdOwner == 0) { card.FirstIdOwner = user2.Id; } user2.GameDeck.Cards.Remove(card); user1.GameDeck.Cards.Add(card); user1.GameDeck.RemoveCharacterFromWishList(card.Character); user1.GameDeck.RemoveCardFromWishList(card.Id); } } await db.SaveChangesAsync(); QueryCacheManager.ExpireTag(new string[] { $"user-{P1.User.Id}", $"user-{P2.User.Id}", "users" }); } } } else if (reaction.Emote.Equals(DeclineEmote)) { RestartTimer(); Tips = $"{player.User.Mention} odrzucił propozycje wymiany!"; end = true; } if (msg != null) { await msg.ModifyAsync(x => x.Embed = BuildEmbed()); } } return(end); }
public static ObjectList<ExchangeRequest> GetExchangeRequestsGroup(ExchangeRequestType type, ExchangeStatus status) { return Mappers.ExchangeRequestMapper.GetExchangeRequestsGroup(type, status); }
public static ObjectList<ExchangeRequest> FindBy(ExchangeRequestType type, ExchangeStatus status) { return Mappers.ExchangeRequestMapper.FindBy(type, status); }
public ObjInfo(Object _obj) { this.Obj = _obj; this.status = ExchangeStatus.none; }
public async Task <IActionResult> StartMonitorAsync([FromBody] ExchangeRequestModel model) { var user = await _dbContext.GetCurrentUserAsync(User); if (user == null) { return(NotFound(new { error = "User not found" })); } if (string.IsNullOrEmpty(user.TempAddress)) { return(BadRequest(new { error = "Not set temp address" })); } var item = _dbContext.ExchangeStatuses.FirstOrDefault(s => s.StartTx == model.Tx); if (item == null) { var rate = await GetRateAsync(model.Count); item = new ExchangeStatus { StartTx = model.Tx, CurrentTx = model.Tx, CurrentStep = 0, Rate = rate.rate, CreatedByUser = user, EthAmount = rate.amount.ToString(), TokenCount = model.Count }; await _dbContext.AddAsync(item); await _dbContext.SaveChangesAsync(); } //if (string.IsNullOrEmpty(user.ExchangerContract)) //{ // var rate = await GetRateAsync(model.Count); // if (string.IsNullOrEmpty(user.Wallet) || !await _contract.CheckWhitelistAsync(user.Wallet)) // { // return BadRequest(new { rate, user.Wallet, error = "Not in whitelist" }); // } // var addr = await _dbContext.Addresses.FindAsync(user.TempAddress); // string newContractAddr = await _contract.CreateExchangerAsync( // _crypto.Decrypt(addr.Exchanger.StringToByteArray()), // user.Wallet, // new HexBigInteger(rate.amount), // new HexBigInteger(rate.rate)); // var hash = await _contract.AddAddressToWhitelistAsync(newContractAddr); // await _contract.WaitReciept(hash); // user.ExchangerContract = newContractAddr; // await _dbContext.SaveChangesAsync(); // await _dbContext.AddAsync(new ExchangeStatus // { // StartTx = model.Tx, // CurrentTx = model.Tx, // CreatedByUser = user, // EthAmount = rate.amount.ToString(), // }); // user.TempAddress = null; // await _dbContext.SaveChangesAsync(); //} return(Ok(item.Id)); }
private async Task <bool> HandleUserReactionInAccept(SocketReaction reaction, PlayerInfo player, IUserMessage msg) { bool end = false; if (reaction.UserId == player.User.Id) { if (reaction.Emote.Equals(AcceptEmote)) { if (State != ExchangeStatus.AcceptP2) { RestartTimer(); State = ExchangeStatus.AcceptP2; Tips = $"{P2.User.Mention} daj {AcceptEmote} aby zaakceptować, lub {DeclineEmote} aby odrzucić."; } else { Tips = $"Wymiana zakończona!"; end = true; using (var db = new Database.UserContext(_config)) { var user1 = await db.GetUserOrCreateAsync(P1.User.Id); var user2 = await db.GetUserOrCreateAsync(P2.User.Id); foreach (var c in P1.Cards) { var card = user1.GameDeck.Cards.FirstOrDefault(x => x.Id == c.Id); if (card != null) { card.Tags = null; card.Active = false; user1.GameDeck.Cards.Remove(card); user2.GameDeck.Cards.Add(card); } } foreach (var c in P2.Cards) { var card = user2.GameDeck.Cards.FirstOrDefault(x => x.Id == c.Id); if (card != null) { card.Tags = null; card.Active = false; user2.GameDeck.Cards.Remove(card); user1.GameDeck.Cards.Add(card); } } await db.SaveChangesAsync(); QueryCacheManager.ExpireTag(new string[] { $"user-{P1.User.Id}", $"user-{P2.User.Id}", "users" }); } } } else if (reaction.Emote.Equals(DeclineEmote)) { RestartTimer(); Tips = $"{player.User.Mention} odrzucił propozycje wymiany!"; end = true; } if (msg != null) { await msg.ModifyAsync(x => x.Embed = BuildEmbed()); } } return(end); }