private void GetVotingListCompleted(IEnumerable<VotingDescriptor> votings, Exception exception)
        {
            if (exception == null)
            {
                StringTable table = new StringTable();

                table.AddColumn("No");
                table.AddColumn("Title");
                table.AddColumn("From");
                table.AddColumn("Until");
                table.AddColumn("Status");
                table.AddColumn("Votes");

                int number = 0;

                foreach (VotingDescriptor voting in votings.OrderBy(v => v.VoteFrom).Take(8))
                {
                    table.AddRow(number.ToString(), voting.Title.Text, voting.VoteFrom.ToShortDateString(), voting.VoteUntil.ToShortDateString(), voting.Status.Text(), voting.EnvelopeCount.ToString());
                    number++;
                }

                BotMethods.SendMessage(SendType.Message, Channel, "Pi-Vote: Voting list:");
                OutTable(table);
            }
            else
            {
                BotMethods.SendMessage(SendType.Message, Channel, "Pi-Vote: " + exception.Message);
            }

            OnCompleted();
        }
        private void GetResultComplete(VotingResult result, IDictionary<Guid, VoteReceiptStatus> voteReceiptsStatus, Exception exception)
        {
            if (exception == null)
            {
                var table = new StringTable();

                table.SetColumnCount(2);

                table.AddRow(result.Title.Text, string.Empty);
                table.AddRow("Total Ballots", result.TotalBallots.ToString());
                table.AddRow("Invalid Ballots", result.InvalidBallots.ToString());
                table.AddRow("Valid Ballots", result.ValidBallots.ToString());

                foreach (var question in result.Questions)
                {
                    table.AddRow(question.Text.Text, string.Empty);

                    foreach (var option in question.Options)
                    {
                        table.AddRow(option.Text.Text, option.Result.ToString());
                    }
                }

                BotMethods.SendMessage(SendType.Message, Channel, "Pi-Vote: Result of voting:");
                OutTable(table);
            }
            else
            {
                BotMethods.SendMessage(SendType.Message, Channel, "Pi-Vote: " + exception.Message);
            }

            OnCompleted();
        }
        protected void OutTable(StringTable table)
        {
            string[] lines = table.Render().Split(new[] { Environment.NewLine }, StringSplitOptions.None);

            foreach (string line in lines)
            {
                BotMethods.SendMessage(SendType.Message, Channel, line);
            }
        }