Files
managing-apps/src/Managing.Infrastructure.Messengers/Discord/DiscordHelpers.cs

155 lines
5.3 KiB
C#

using Discord;
using Managing.Domain.Statistics;
using Managing.Domain.Trades;
namespace Managing.Infrastructure.Messengers.Discord;
public static class DiscordHelpers
{
public static Embed GetTradersEmbed(List<Trader> traders, string title)
{
var fields = new List<EmbedFieldBuilder>();
traders = traders.OrderByDescending(t => t.Winrate).ToList();
foreach (var trader in traders)
{
fields.Add(new EmbedFieldBuilder
{
Name = $"{GetExplorerUrl(trader.Address)}",
Value =
$"Avg Win / Avg Loss / Winrate / ROI \n {trader.AverageWin:#.##}$ / {trader.AverageLoss:#.##}$ / {trader.Winrate}% / {Convert.ToDecimal(trader.Roi) * 100:#.##}%",
});
}
var embed = new EmbedBuilder
{
Author = new EmbedAuthorBuilder() { Name = "GMX v2" },
Title = $"{title} {DateTime.UtcNow:d}",
Color = Color.Gold,
Fields = fields,
}.Build();
return embed;
}
public static Embed GetFundingRateEmbed(FundingRate fundingRate, string title, FundingRate? oldRate = null)
{
var fields = new List<EmbedFieldBuilder>();
decimal ratePerYear = fundingRate.Rate; // Rate per year
decimal ratePerDay = ratePerYear / 365; // Rate per day
decimal ratePerMonth = ratePerYear / 12; // Rate per month
decimal ratePerHour = ratePerDay / 24; // Rate per hour
if (oldRate != null)
{
var oldRatePerYear = oldRate.Rate; // Rate per year
var oldRatePerDay = oldRatePerYear / 365; // Rate per day
var oldRatePerMonth = oldRatePerYear / 12; // Rate per month
var oldRatePerHour = oldRatePerDay / 24; // Rate per hour
fields.Add(new EmbedFieldBuilder
{
Name = $"{fundingRate.Direction} {fundingRate.Ticker} - Previous Rate",
Value =
$"Hour: {oldRatePerHour:#.##}% / Day: {oldRatePerDay:#.##}% / Month: {oldRatePerMonth:#.##}% / Year: {oldRatePerYear:#.##}%",
});
}
fields.Add(new EmbedFieldBuilder
{
Name = $"{fundingRate.Direction} {fundingRate.Ticker} - Current rate",
Value =
$"Hour: {ratePerHour:#.##}% / Day: {ratePerDay:#.##}% / Month: {ratePerMonth:#.##}% / Year: {ratePerYear:#.##}%",
});
var embed = new EmbedBuilder
{
Author = new EmbedAuthorBuilder() { Name = "GMX" },
Title = $"{title} {DateTime.UtcNow:d}",
Color = Color.DarkGreen,
Fields = fields,
}.Build();
return embed;
}
public static Embed GetEmbed(string address, string title, List<EmbedFieldBuilder> fields, Color color)
{
return new EmbedBuilder
{
Author = new EmbedAuthorBuilder() { Name = address },
Title = title,
Color = color,
Fields = fields,
Url = GetExplorerUrl(address)
}.Build();
}
private static string GetExplorerUrl(string key)
{
return $"https://www.tradao.xyz/#/user/{key}/arb-gmx-v2/";
}
internal static Embed GetTradesEmbed(List<Trade> trades, string title)
{
var fields = new List<EmbedFieldBuilder>();
foreach (var trade in trades)
{
fields.Add(new EmbedFieldBuilder
{
Name = $"{GetExplorerUrl(trade.ExchangeOrderId)}",
Value =
$"Side / Ticker / Open / Qty / Leverage / LiqPrice \n {trade.Direction} / {trade.Ticker} / {trade.Price:#.##}$ / {trade.Quantity:#.##}$ / x{trade.Leverage:#.##} / {Convert.ToDecimal(trade.Message):#.##}$",
});
}
fields.Add(new EmbedFieldBuilder
{
Name = "Summary",
Value =
$"Long / Short / \n {trades.Count(t => t.Direction == Common.Enums.TradeDirection.Long)} / {trades.Count(t => t.Direction == Common.Enums.TradeDirection.Short)}"
});
var embed = new EmbedBuilder
{
Author = new EmbedAuthorBuilder() { Name = "GMX" },
Title = $"{title} {DateTime.UtcNow:d}",
Color = Color.DarkBlue,
Fields = fields,
}.Build();
return embed;
}
public static Embed GetFundingRatesEmbed(List<FundingRate> fundingRates, string leaderboardOpenPosition)
{
var fields = new List<EmbedFieldBuilder>();
foreach (var fundingRate in fundingRates)
{
decimal ratePerYear = fundingRate.Rate; // Rate per year
decimal ratePerDay = ratePerYear / 365; // Rate per day
decimal ratePerMonth = ratePerYear / 12; // Rate per month
decimal ratePerHour = ratePerDay / 24; // Rate per hour
fields.Add(new EmbedFieldBuilder
{
Name = $"{fundingRate.Ticker}",
Value =
$"Hour: {ratePerHour:#.##}% / Day: {ratePerDay:#.##}% / Month: {ratePerMonth:#.##}% / Year: {ratePerYear:#.##}%",
});
}
var embed = new EmbedBuilder
{
Author = new EmbedAuthorBuilder() { Name = "GMX" },
Title = $"Best Funding Rate {DateTime.UtcNow:d}",
Color = Color.DarkGreen,
Fields = fields,
}.Build();
return embed;
}
}