示例#1
0
        private static string Content(Gem gem)
        {
            var networkEffectVisible = SharedMessageContent.NetworkEffectContent(gem.Recently, gem.Symbol, gem.Name);

            var statisticsVisible = SharedMessageContent.StatisticsContent(gem.Recently, gem.Id);

            var chartsVisible
                = gem.Recently == TokenActionType.ADDED
                ?
                  $"📊 *Charts*\n" +
                  $"ChartEx [${gem.Symbol}](https://chartex.pro/?symbol=UNISWAP:{gem.Symbol}) |" +
                  $" [${gem.Symbol}/$WETH](https://chartex.pro/?symbol=UNISWAP:{gem.Symbol}/WETH)\n\n"
                :
                  string.Empty;

            var warningAfterDelete = SharedMessageContent.WarningContent(gem.Recently, gem.Id);

            var result =
                $"{DexType.UNISWAP.GetDescription().ToUpperInvariant()}\n" +
                $"{SharedMessageContent.RecentlyEmoji(gem.Recently)} *{gem.Recently.GetDescription()}*\n\n" +
                $"💎 Token: *{gem.Name}*\n" +
                $"🚨 Symbol: *{gem.Symbol}*\n\n" +
                networkEffectVisible +
                statisticsVisible +
                chartsVisible +
                warningAfterDelete;

            return(result);
        }
示例#2
0
        public static Tuple <IReplyMarkup, string> ForFreeTelegram(Gem gem)
        {
            var banner =
                Content(gem) +
                $"👨‍👦‍👦 Our community:\n" +
                $"Chat - @GemTrackerCommunity\n" +
                $"Info - @GemTrackerAnnouncements\n\n" +
                $"📣 Ask for premium access and get:\n" +
                $"- info about *price, liquidity, contract, holders, txns, swaps*\n" +
                $"- links to *DEXT, Astro and UniCrypt*\n" +
                $"- insights about valueable gem or shitty scam";

            var buttons = new InlineKeyboardMarkup(new[]
            {
                UniswapButtons(gem),
                SharedMessageContent.EtherscanButtons(gem.Id),
                new []
                {
                    InlineKeyboardButton.WithUrl("⚙️ How to use?", $"https://gemtracker.club/#howtouse"),
                    InlineKeyboardButton.WithUrl("💰 Premium access?", $"https://gemtracker.club/#premium")
                },
                new []
                {
                    InlineKeyboardButton.WithUrl("📧 Author", $"https://twitter.com/tomkowalczyk")
                }
            });

            return(new Tuple <IReplyMarkup, string>(buttons, banner));
        }
示例#3
0
 public static string ForTwitterSummary(IEnumerable <Gem> gems, TokenActionType tokenAction, int interval)
 => $"🦄 Uniswap (for last {interval / 60} h) \n\n" +
 $" {SharedMessageContent.RecentlyEmoji(tokenAction)} {tokenAction.GetDescription()} \n\n" +
 $"💎 {gems.Count()} Tokens\n" +
 $"🚨 Some of them: {string.Join(" ", gems.Take(5).Select(g => $"${g.Symbol}"))}\n\n" +
 $"Join for free: https://t.me/GemTrackerClub \n" +
 $"💰 Ask for premium: https://gemtracker.club/#premium \n" +
 $"( $BTC $ETH $ALTS $UNI #uniswap #cryptocurrency #gem #gemtrackerclub )";
示例#4
0
        public static string Content(Gem gem)
        {
            var networkEffectVisible = SharedMessageContent.NetworkEffectContent(gem.Recently, gem.Symbol, gem.Name);

            var statisticsVisible = SharedMessageContent.StatisticsContent(gem.Recently, gem.Id);

            var warningAfterDelete = SharedMessageContent.WarningContent(gem.Recently, gem.Id);

            var result =
                $"{DexType.KYBER.GetDescription().ToUpperInvariant()}\n" +
                $"{SharedMessageContent.RecentlyEmoji(gem.Recently)} *{gem.Recently.GetDescription()}*\n\n" +
                $"💎 Token: *{gem.Name}*\n" +
                $"🚨 Symbol: *{gem.Symbol}*\n\n" +
                networkEffectVisible +
                statisticsVisible +
                warningAfterDelete;

            return(result);
        }
示例#5
0
        public static Tuple <IReplyMarkup, string> ForPremiumTelegram(
            Gem gem,
            SingleServiceResponse <TokenInfo> ethPlorerTokenInfoResponse,
            SingleServiceResponse <SmartContract> etherScanResponse,
            SingleServiceResponse <TopHolderList> ethPlorerTopHoldersResponse
            )
        {
            string tokenInfoDetails = string.Empty;

            if (gem.Recently == TokenActionType.KYBER_ADDED_TO_ACTIVE)
            {
                tokenInfoDetails += $"🥇 *Token Details*\n";

                if (ethPlorerTokenInfoResponse.Success)
                {
                    var dec = Convert.ToInt32(ethPlorerTokenInfoResponse.ObjectResponse.Decimals);
                    var val = BigInteger.Parse(ethPlorerTokenInfoResponse.ObjectResponse.TotalSupply);

                    var owner = string.IsNullOrWhiteSpace(ethPlorerTokenInfoResponse.ObjectResponse.Owner)
                        ? $"Owner: [0x](https://etherscan.io/)\n"
                        : $"Owner: [{ethPlorerTokenInfoResponse.ObjectResponse.Owner}](https://etherscan.io/address/{ethPlorerTokenInfoResponse.ObjectResponse.Owner})\n";

                    tokenInfoDetails +=
                        $"Transfers: _{ethPlorerTokenInfoResponse.ObjectResponse.TransfersCount}_\n" +
                        owner +
                        $"Total supply: _{UnitConversion.Convert.FromWei(val, dec)}_ {gem.Symbol} \n\n";
                }
                else
                {
                    tokenInfoDetails += $"`Data unavailable` \n\n";
                }
            }

            string contractInfo = string.Empty;

            if (gem.Recently == TokenActionType.KYBER_ADDED_TO_ACTIVE)
            {
                if (etherScanResponse.Success)
                {
                    contractInfo = etherScanResponse.ObjectResponse.IsVerified
                        ? $"✅ [Contract](https://etherscan.io/address/{gem.Id}#code) is verified \n\n"
                        : $"❌ [Contract](https://etherscan.io/address/{gem.Id}#code) is NOT verified \n\n";
                }
                else
                {
                    contractInfo += $"`Data unavailable` \n\n";
                }
            }

            string topHoldersInfo = string.Empty;

            if (gem.Recently == TokenActionType.KYBER_ADDED_TO_ACTIVE)
            {
                if (ethPlorerTokenInfoResponse.Success)
                {
                    topHoldersInfo += $"🌐 *Current hodlers*: {ethPlorerTokenInfoResponse.ObjectResponse.HoldersCount}.\n";
                }
                else
                {
                    topHoldersInfo += $"🌐 *Current hodlers*\n";
                }

                if (ethPlorerTopHoldersResponse.Success)
                {
                    topHoldersInfo += $"Top 5 below:\n";

                    var counter = 1;

                    foreach (var item in ethPlorerTopHoldersResponse.ObjectResponse.Holders)
                    {
                        topHoldersInfo += $"[Hodler - {counter++}](https://etherscan.io/token/{gem.Id}?a={item.Address}) - `{item.Share}%` \n";
                    }

                    topHoldersInfo += $"\n\n";
                }
                else
                {
                    topHoldersInfo += $"`Data unavailable` \n\n";
                }
            }

            var banner =
                Content(gem) +
                tokenInfoDetails +
                contractInfo +
                topHoldersInfo;

            var buttons = new InlineKeyboardMarkup(new[]
            {
                KyberButtons(gem),
                SharedMessageContent.EtherscanButtons(gem.Id),
                new []
                {
                    InlineKeyboardButton.WithUrl("📧 Support", $"https://t.me/GemTrackerCommunity")
                }
            });

            return(new Tuple <IReplyMarkup, string>(buttons, banner));
        }
示例#6
0
        public static Tuple <IReplyMarkup, string> ForPremiumTelegram(
            Gem gem,
            SingleServiceResponse <TokenData> uniResponse,
            SingleServiceResponse <TokenInfo> ethPlorerTokenInfoResponse,
            SingleServiceResponse <SmartContract> etherScanResponse,
            ListServiceResponse <PairData> pairResponse,
            SingleServiceResponse <TopHolderList> ethPlorerTopHoldersResponse
            )
        {
            string tokenInfo = string.Empty;

            if (gem.Recently == TokenActionType.ADDED)
            {
                tokenInfo = $"🥇 *Token - ${gem.Symbol}*\n";

                if (uniResponse.Success)
                {
                    tokenInfo +=
                        $"Initial Price: _${uniResponse.ObjectResponse.Price} USD_\n" +
                        $"Txns: _{uniResponse.ObjectResponse.DailyTxns}_\n\n";
                }
                else
                {
                    tokenInfo += $"`Data unavailable` \n\n";
                }
            }

            string tokenInfoDetails = string.Empty;

            if (gem.Recently == TokenActionType.ADDED)
            {
                tokenInfoDetails += $"🥇 *Token Details*\n";

                if (ethPlorerTokenInfoResponse.Success)
                {
                    var dec = Convert.ToInt32(ethPlorerTokenInfoResponse.ObjectResponse.Decimals);
                    var val = BigInteger.Parse(ethPlorerTokenInfoResponse.ObjectResponse.TotalSupply);

                    var owner = string.IsNullOrWhiteSpace(ethPlorerTokenInfoResponse.ObjectResponse.Owner)
                        ? $"Owner: [0x](https://etherscan.io/)\n"
                        : $"Owner: [{ethPlorerTokenInfoResponse.ObjectResponse.Owner}](https://etherscan.io/address/{ethPlorerTokenInfoResponse.ObjectResponse.Owner})\n";

                    tokenInfoDetails +=
                        $"Transfers: _{ethPlorerTokenInfoResponse.ObjectResponse.TransfersCount}_\n" +
                        owner +
                        $"Total supply: _{UnitConversion.Convert.FromWei(val, dec)}_ {gem.Symbol} \n\n";
                }
                else
                {
                    tokenInfoDetails += $"`Data unavailable` \n\n";
                }
            }

            string liquidityInfo = string.Empty;

            if (gem.Recently == TokenActionType.ADDED)
            {
                liquidityInfo = $"🥈 *Liquidity*\n";

                if (uniResponse.Success)
                {
                    liquidityInfo +=
                        $"USD: _${uniResponse.ObjectResponse.LiquidityUSD}_\n" +
                        $"ETH: _{uniResponse.ObjectResponse.LiquidityETH}_\n" +
                        $"{gem.Symbol}: _{uniResponse.ObjectResponse.LiquidityToken}_\n\n";
                }
                else
                {
                    liquidityInfo += $"`Data unavailable` \n\n";
                }
            }

            string contractInfo = string.Empty;

            if (gem.Recently == TokenActionType.ADDED)
            {
                if (etherScanResponse.Success)
                {
                    contractInfo = etherScanResponse.ObjectResponse.IsVerified
                        ? $"✅ [Contract](https://etherscan.io/address/{gem.Id}#code) is verified \n\n"
                        : $"❌ [Contract](https://etherscan.io/address/{gem.Id}#code) is NOT verified \n\n";
                }
                else
                {
                    contractInfo += $"`Data unavailable` \n\n";
                }
            }

            var formPair = string.Empty;

            if (gem.Recently == TokenActionType.ADDED)
            {
                formPair = $"🥉 *Pairs*\n";

                if (pairResponse.Success)
                {
                    foreach (var item in pairResponse.ListResponse)
                    {
                        formPair +=
                            $"`{item.Token0.Symbol}/{item.Token1.Symbol}`\n" +
                            $"Total value: _${item.TotalLiquidityUSD} USD_\n" +
                            $"Created at: _{item.CreatedAt:dd.MM.yyyy}_\n" +
                            $"[Uniswap](https://info.uniswap.org/pair/{item.Id}) |" +
                            $" [DEXT](https://www.dextools.io/app/uniswap/pair-explorer/{item.Id}) |" +
                            $" [Astro](https://app.astrotools.io/pair-explorer/{item.Id}) |" +
                            $" [MoonTools](https://app.moontools.io/pairs/{item.Id}) |" +
                            $" [UniCrypt](https://v2.unicrypt.network/pair/{item.Id})" +
                            $"\n\n";
                    }
                }
                else
                {
                    formPair += $"`Data unavailable` \n\n";
                }
            }

            string topHoldersInfo = string.Empty;

            if (gem.Recently == TokenActionType.ADDED)
            {
                if (ethPlorerTokenInfoResponse.Success)
                {
                    topHoldersInfo += $"🌐 *Current hodlers*: {ethPlorerTokenInfoResponse.ObjectResponse.HoldersCount}.\n";
                }
                else
                {
                    topHoldersInfo += $"🌐 *Current hodlers*\n";
                }

                if (ethPlorerTopHoldersResponse.Success)
                {
                    topHoldersInfo += $"Top 5 below:\n";

                    var counter = 1;

                    foreach (var item in ethPlorerTopHoldersResponse.ObjectResponse.Holders)
                    {
                        topHoldersInfo += $"[Hodler - {counter++}](https://etherscan.io/token/{gem.Id}?a={item.Address}) - `{item.Share}%` \n";
                    }

                    topHoldersInfo += $"\n\n";
                }
                else
                {
                    topHoldersInfo += $"`Data unavailable` \n\n";
                }
            }

            var banner =
                Content(gem) +
                tokenInfo +
                tokenInfoDetails +
                liquidityInfo +
                contractInfo +
                formPair +
                topHoldersInfo;

            var buttons = new InlineKeyboardMarkup(new[]
            {
                UniswapButtons(gem),
                SharedMessageContent.EtherscanButtons(gem.Id),
                new []
                {
                    InlineKeyboardButton.WithUrl("📧 Support", $"https://t.me/GemTrackerCommunity")
                }
            });

            return(new Tuple <IReplyMarkup, string>(buttons, banner));
        }