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

Poo*_*deh 5 c# keyboard telegram telegram-bot

我想创建自定义键盘 telegram.bot

例如:
我们有一个从数据库获取的字符串数组或其他的recurses如何将数据从数组推送到InlineKeyboardMarkupfor循环或函数

//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"),
        }
    });
Run Code Online (Sandbox Code Playgroud)

Ama*_*Dev 8

您可以使用单独的函数来获取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;
}
Run Code Online (Sandbox Code Playgroud)

然后调用函数:

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


Nas*_*efi 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);
}
Run Code Online (Sandbox Code Playgroud)

然后像这样使用它:

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

选择True或False会使更新Update.CallbackQuery.Data等于所选项目键(0或1).