public static void Process(CurrencyTrade trade) { if (trade == null || !Config.Data.SaveHistoricalTradesData) { return; } var tradePoco = new JsonTrade(trade); TradesToProcess.Add(tradePoco); }
public JsonTrade(CurrencyTrade trade) { OccurredAt = new JsonDateTime(DateTime.UtcNow); ShopName = trade.WorldObjectItem.Name; ShopOwner = trade.ShopOwner.Name; BuyerName = trade.Buyer.Name; SellerName = trade.Seller.Name; NumberOfItems = trade.NumberOfItems; IsBuyAction = trade.BoughtOrSold == BoughtOrSold.Buying; ItemTraded = trade.ItemUsed.DisplayName; CurrencyAmount = trade.CurrencyAmount; CurrencyName = trade.Currency.Name; Time = trade.Time; }
private async Task PostAccumulatedTrades() { foreach (List <CurrencyTrade> accumulatedTrades in _accumulatedTrades.Values) { if (accumulatedTrades.Count <= 0) { continue; } CurrencyTrade firstTrade = accumulatedTrades[0]; DiscordEmbedBuilder builder = new DiscordEmbedBuilder(); string leftName = firstTrade.Citizen.Name; string rightName = firstTrade.Citizen.Id == firstTrade.Buyer.Id ? firstTrade.Seller.Name : firstTrade.Buyer.Name; builder.Title = leftName + " traded with " + rightName; string boughtItemsDesc = string.Empty; float boughtTotal = 0; string soldItemsDesc = string.Empty; float soldTotal = 0; foreach (CurrencyTrade trade in accumulatedTrades) { if (trade.BoughtOrSold == Shared.Items.BoughtOrSold.Buying) { boughtItemsDesc += trade.NumberOfItems + " X " + trade.ItemUsed.DisplayName + " * " + trade.CurrencyAmount / trade.NumberOfItems + " = " + trade.CurrencyAmount + "\n"; boughtTotal += trade.CurrencyAmount; } else if (trade.BoughtOrSold == Shared.Items.BoughtOrSold.Selling) { soldItemsDesc += trade.NumberOfItems + " X " + trade.ItemUsed.DisplayName + " * " + trade.CurrencyAmount / trade.NumberOfItems + " = " + trade.CurrencyAmount + "\n"; soldTotal += trade.CurrencyAmount; } } if (!boughtItemsDesc.IsEmpty()) { boughtItemsDesc += "\nTotal = " + boughtTotal.ToString("n2"); builder.AddField("Bought", boughtItemsDesc); } if (!soldItemsDesc.IsEmpty()) { soldItemsDesc += "\nTotal = " + soldTotal.ToString("n2"); builder.AddField("Sold", soldItemsDesc); } float subTotal = soldTotal - boughtTotal; char sign = (subTotal > 0.0f ? '+' : '-'); builder.AddField("Total", sign + Math.Abs(subTotal).ToString("n2") + " " + firstTrade.Currency.Name); DiscordLink plugin = DiscordLink.Obj; if (plugin == null) { return; } foreach (ChannelLink tradeChannel in DLConfig.Data.TradeChannels) { if (!tradeChannel.IsValid()) { continue; } DiscordGuild discordGuild = plugin.GuildByNameOrId(tradeChannel.DiscordGuild); if (discordGuild == null) { continue; } DiscordChannel discordChannel = discordGuild.ChannelByNameOrId(tradeChannel.DiscordChannel); if (discordChannel == null) { continue; } _ = DiscordUtil.SendAsync(discordChannel, "", builder.Build()); } } _accumulatedTrades.Clear(); }
public EntityWrapper(CurrencyTrade currencyTrade) { Id = GetWrapperId(ItemType, currencyTrade.CurrencyTradeId); ItemType = ItemType.Currency; CurrencyTrade = currencyTrade; }
protected override async Task UpdateInternal(DiscordLink plugin, DLEventType trigger, object data) { if (DLConfig.Data.TradeChannels.Count <= 0) { return; } if (!(data is IEnumerable <List <CurrencyTrade> > accumulatedTrades)) { return; } // Each entry is the summarized trade events for a player and a store foreach (List <CurrencyTrade> accumulatedTradeList in accumulatedTrades) { if (accumulatedTradeList.Count <= 0) { continue; } CurrencyTrade firstTrade = accumulatedTradeList[0]; DiscordLinkEmbed embed = new DiscordLinkEmbed(); string leftName = firstTrade.Citizen.Name; string rightName = (firstTrade.WorldObject as WorldObject).Name; embed.WithTitle($"{leftName} traded at {MessageUtil.StripTags(rightName)}"); // Go through all acumulated trade events and create a summary string boughtItemsDesc = string.Empty; float boughtTotal = 0; string soldItemsDesc = string.Empty; float soldTotal = 0; foreach (CurrencyTrade trade in accumulatedTradeList) { if (trade.BoughtOrSold == Shared.Items.BoughtOrSold.Buying) { boughtItemsDesc += trade.NumberOfItems + " X " + trade.ItemUsed.DisplayName + " * " + trade.CurrencyAmount / trade.NumberOfItems + " = " + trade.CurrencyAmount + "\n"; boughtTotal += trade.CurrencyAmount; } else if (trade.BoughtOrSold == Shared.Items.BoughtOrSold.Selling) { soldItemsDesc += trade.NumberOfItems + " X " + trade.ItemUsed.DisplayName + " * " + trade.CurrencyAmount / trade.NumberOfItems + " = " + trade.CurrencyAmount + "\n"; soldTotal += trade.CurrencyAmount; } } if (!boughtItemsDesc.IsEmpty()) { boughtItemsDesc += "\nTotal = " + boughtTotal.ToString("n2"); embed.AddField("Bought", boughtItemsDesc); } if (!soldItemsDesc.IsEmpty()) { soldItemsDesc += "\nTotal = " + soldTotal.ToString("n2"); embed.AddField("Sold", soldItemsDesc); } float subTotal = soldTotal - boughtTotal; char sign = (subTotal > 0.0f ? '+' : '-'); embed.AddField("Total", sign + Math.Abs(subTotal).ToString("n2") + " " + MessageUtil.StripTags(firstTrade.Currency.Name)); // Post the trade summary in all trade channels foreach (ChannelLink tradeChannel in DLConfig.Data.TradeChannels) { if (!tradeChannel.IsValid()) { continue; } DiscordGuild discordGuild = plugin.GuildByNameOrId(tradeChannel.DiscordGuild); if (discordGuild == null) { continue; } DiscordChannel discordChannel = discordGuild.ChannelByNameOrId(tradeChannel.DiscordChannel); if (discordChannel == null) { continue; } _ = DiscordUtil.SendAsync(discordChannel, string.Empty, embed); ++_opsCount; } } }