在c#,MrRoundRobin API中创建动态键盘电报机器人

我想在telegram.bot创建自定义键盘例如:我们有从数据库或其他InlineKeyboardMarkup得到的字符串数组如何将数据从数组推送到InlineKeyboardMarkup for for循环或函数

 //array of Button string[] ButtonItem= new string[] { "one", "two", "three", "Four" }; //function or solution to create keyboard like this var keyboard = new InlineKeyboardMarkup(new[] { new[] { new InlineKeyboardButton("one"), new InlineKeyboardButton("two"), }, new[] { new InlineKeyboardButton("three"), new InlineKeyboardButton("Four"), } }); 

您可以使用单独的函数来获取InlineKeyboardButton数组

 private static InlineKeyboardButton[][] GetInlineKeyboard(string [] stringArray) { var keyboardInline = new InlineKeyboardButton[1][]; var keyboardButtons = new InlineKeyboardButton[stringArray.Length]; for (var i = 0; i < stringArray.Length; i++) { keyboardButtons[i] = new InlineKeyboardButton { Text = stringArray[i], CallbackData = "Some Callback Data", }; } keyboardInline[0] = keyboardButtons; return keyboardInline; } 

然后调用函数:

 var buttonItem = new[] { "one", "two", "three", "Four" }; var keyboardMarkup = new InlineKeyboardMarkup(GetInlineKeyboard(buttonItem)); 

在方法中创建InlineKeyboardMarkup:

 public static InlineKeyboardMarkup InlineKeyboardMarkupMaker(Dictionary items) { InlineKeyboardButton[][] ik = items.Select(item => new[] { new InlineKeyboardButton(item.Key, item.Value) }).ToArray(); return new InlineKeyboardMarkup(ik); } 

然后像这样使用它:

 var items=new Dictionary() { {0 , "True" } {1 , "False" } }; var inlineKeyboardMarkup = InlineKeyboardMarkupMaker(items); Bot.SendTextMessageAsync(message.Chat.Id, messageText, replyMarkup: inlineKeyboardMarkup); 

选择True或False会使Update.CallbackQuery.Data等于所选项密钥(0或1)进行更新。

通过以下方法创建具有特定列的InlineKeyboardButton。

  public static IReplyMarkup CreateInlineKeyboardButton(Dictionary buttonList, int columns) { int rows = (int)Math.Ceiling((double)buttonList.Count / (double)columns); InlineKeyboardButton[][] buttons = new InlineKeyboardButton[rows][]; for (int i = 0; i < buttons.Length; i++) { buttons[i] = buttonList .Skip(i * columns) .Take(columns) .Select(direction => new InlineKeyboardCallbackButton( direction.Key, direction.Value ) as InlineKeyboardCallbackButton) .ToArray(); } return new InlineKeyboardMarkup(buttons); } 

使用这样的方法:

  public static IReplyMarkup CreateInLineMainMenuMarkup() { Dictionary buttonsList = new Dictionary(); buttonsList.Add("one", "DATA1"); buttonsList.Add("two", "DATA2"); buttonsList.Add("three", "DATA3"); return CreateInlineKeyboardButton(buttonsList, 2); } 

感谢pouladpld创建此function。