using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Telegram.Bot.Types.ReplyMarkups; namespace TelegramBotBase.Form { /// /// Base class for an buttons array /// public class ButtonForm { List> Buttons = new List>(); public ButtonForm() { } public void AddButtonRow(List row) { Buttons.Add(row); } public void AddButtonRow(params ButtonBase[] row) { AddButtonRow(row.ToList()); } public static T[][] SplitTo(IEnumerable items, int itemsPerRow = 2) { T[][] splitted = default(T[][]); try { var t = items.Select((a, index) => new { a, index }) .GroupBy(a => a.index / itemsPerRow) .Select(a => a.Select(b => b.a).ToArray()).ToArray(); splitted = t; } catch { } return splitted; } /// /// Add buttons splitted in the amount of columns (i.e. 2 per row...) /// /// /// public void AddSplitted(IEnumerable buttons, int buttonsPerRow = 2) { var sp = SplitTo(buttons, buttonsPerRow); foreach(var bl in sp) { AddButtonRow(bl); } } public InlineKeyboardButton[][] ToArray() { var ikb = this.Buttons.Select(a => a.Select(b => InlineKeyboardButton.WithCallbackData(b.Text, b.Value)).ToArray()).ToArray(); return ikb; } public static implicit operator InlineKeyboardMarkup(ButtonForm form) { InlineKeyboardMarkup ikm = new InlineKeyboardMarkup(form.ToArray()); return ikm; } } }