2016-10-05 3 views
4

я хочу, чтобы создать пользовательскую клавиатуру в telegram.bot Например: У нас есть массив строки, которые получают из базы данных или другими рекурсивно как мы можем передавать данные из массива InlineKeyboardMarkup в течение петля или функциясоздание динамической клавиатуры телеграммы бота в C#, MrRoundRobin API

//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"), 
     } 
    }); 

ответ

6

Вы можете использовать отдельную функцию, чтобы получить массив 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)); 
+0

помогите мне по этой ссылке: http: //stackoverflow.com/questions/41519495/how-to-solve-disturbance-in-my-bot-in-c? Noredirect = 1 # comment70247673_41519495 – cyrus2500

5

Создание InlineKeyboardMarkup в методе:

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

Затем использовать его как это:

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

Выбор ИСТИНА или ЛОЖЬ сделать обновление с Update.CallbackQuery.Data равным выбранному ключу элемента (0 или 1).

+0

привет, я не понимаю этого Вы используете массив JSON? –

+1

Я обновил свое решение, если вы видите, что снова вы, вероятно, его нашли. –

+0

помогите мне эту ссылку: http: //stackoverflow.com/questions/41519495/how-to-solve-disturbance-in-my-bot-in-c? Noredirect = 1 # comment70247673_41519495 – cyrus2500

1

Создать InlineKeyboardButton с определенными столбцами методом ниже.

   public static IReplyMarkup CreateInlineKeyboardButton(Dictionary<string, string> 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<string, string> buttonsList = new Dictionary<string, string>(); 
     buttonsList.Add("one", "DATA1"); 
     buttonsList.Add("two", "DATA2"); 
     buttonsList.Add("three", "DATA3"); 

     return CreateInlineKeyboardButton(buttonsList, 2); 
    } 

Благодаря pouladpld создать эту функцию.

Смежные вопросы