internal static IEnumerable <string> FormatFractionInfo(IFractionInfo fractionInfo)
 {
     foreach (string fractionInfoItem in fractionInfo.AllInfo)
     {
         yield return(fractionInfoItem);
     }
 }
        public async Task HandleAsync(IUpdateContext context, UpdateDelegate next, CancellationToken cancellationToken)
        {
            int count = FractionsInfoWiki.Available.Count;

            if (count <= 0)
            {
                return;
            }

            //  Get random fraction info
            int           randomFractionInfo = Randomizer.Instance.Next(0, count);
            IFractionInfo fractionInfo       = FractionsInfoWiki.Available[randomFractionInfo];

            long       chatId;
            UpdateType updateType = context?.Update?.Type ?? UpdateType.Unknown;

            if (updateType == UpdateType.CallbackQuery)
            {
                chatId = context.Update.CallbackQuery.Message.Chat.Id;
                await context.Bot.Client.EditMessageTextAsync(
                    chatId : chatId,
                    messageId : context.Update.CallbackQuery.Message.MessageId,
                    text : fractionInfo.Topic,
                    replyMarkup : InlineKeyboardMarkup.Empty()
                    );
            }
            else
            {
                chatId = context.Update.Message.Chat.Id;
                await context.Bot.Client.SendTextMessageAsync(
                    chatId : chatId,
                    text : fractionInfo.Topic
                    );
            }

            foreach (string fractionInfoItem in FractionsInfoHandler.FormatFractionInfo(fractionInfo))
            {
                await context.Bot.Client.SendTextMessageAsync(
                    chatId : chatId,
                    text : fractionInfoItem
                    );
            }
        }