在c#中使用键盘按钮创建动态键盘电报机器人而不是c#中的内联按钮

时间:2017-08-31 06:52:32

标签: c# keyboard bots telegram

如何创建动态键盘按钮我发现了一些代码,但它们用于内联按钮? 我想从数据库中获取数据,并使用键盘按钮

在每一行中创建一个按钮
var keyboard = new ReplyKeyboardMarkup(
    new[] {
        new[]{
            new KeyboardButton("a"),
        },
        new[]{
            new KeyboardButton("b"),
        },
    });

3 个答案:

答案 0 :(得分:0)

第一部分(即从db添加按钮)可以使用您编写的相同代码。

据我所知,我担心的第二部分(即改变按钮布局)是不可能的。因为布局是由客户端设备中的Telegram应用程序完成的,并且基于包括设备屏幕大小在内的许多内容,并且可能会在不同的应用程序版本中进行更改。

答案 1 :(得分:0)

使用InlineKeyboardMarkupInlineKeyboardButton代替它,您可以参考this example

请在下次查看您的图书馆文档。

答案 2 :(得分:0)

private static ReplyKeyboardMarkup calendarMenu;

SqlDataAdapter sc3 = new SqlDataAdapter("select KeyboardName from  dbo.Keyboards", SqlConnection);
DataTable dt3 = new DataTable();
sc3.Fill(dt3);

int keyboardRows = 0;
if (dt3.Rows.Count % 2 == 0)
{
    keyboardRows = dt3.Rows.Count / 2;
}
else
{
    keyboardRows = (dt3.Rows.Count / 2) + 1;
}

KeyboardButton[][] kbc = new KeyboardButton[(keyboardRows + 1)][];

KeyboardButton[] keys = new KeyboardButton[dt3.Rows.Count];

var i = 0;
foreach (DataRow cn3 in dt3.Rows)
{
    keys[i] = new KeyboardButton(cn3["KeyboardName"].ToString());
    i++;
}

for (int r = 0, s = 0; r < keyboardRows; r++, s++)
{
    if (dt3.Rows.Count % 2 == 0)
    {
        kbc[r] = new KeyboardButton[] {keys[r + s], keys[r + s + 1]};
    }
    else
    {
        if ((r + s) != keys.Length)
        {
            kbc[r] = new KeyboardButton[] { keys[r + s], keys[r + s + 1] };
        }
        else
        {
            kbc[r] = new KeyboardButton[] { keys[r + s] };
        }
     }
 }

 kbc[keyboardRows] = new KeyboardButton[] { new KeyboardButton("Return to Main Menu"), };

 calendarMenu = new ReplyKeyboardMarkup
 {
     Keyboard = kbc
 };