[英]C# WTelegramClient Telegram-API How to programmatically click a button in a message from Telegram-Bot
[英]How to place a button(inline keyboard) in a column on the telegram-api?
我尝试为电报机器人创建自定义键盘。 使用AmatuerDev的解决方案: 在 c#、MrRoundRobin API 中创建动态键盘电报机器人,它看起来像这样:
如何在列中放置按钮?
感谢您!
聚苯乙烯源代码:
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;
}
GetInlineKeyboard
到InlineKeyboardMarkup
而不是InlineKeyboardButton[][]
var
)List<InlineKeyboardButton>
而不是 Array ( InlineKeyboardButton[]
)IDictionary<string, string>
获取文本和回调数据每个IEnumerable<InlineKeyboardButton>
都是单行,这意味着您应该传递行列表。
你不应该使用var keyboardInline = new InlineKeyboardButton[1][];
因为这意味着该行中只有一行带有按钮!
下面有两种方式:
我不建议使用此代码
private static InlineKeyboardButton[][] GetInlineKeyboard(string[] stringArray)
{
var keyboardInline = new InlineKeyboardButton[stringArray.Length][];
for (var i = 0; i < stringArray.Length; i++)
{
keyboardInline[i] = new InlineKeyboardButton[]
{
new InlineKeyboardButton
{
Text = stringArray[i],
CallbackData = "Some Callback Data",
};
}
}
return keyboardInline;
}
我建议使用以下代码:
private static InlineKeyboardMarkup GetInlineKeyboard(IDictionary<string, string> buttonsData)
{
// Rows Count
int count = buttonsData.Length;
// List of rows
// Every 'List<InlineKeyboardButton>' is row
List<List<InlineKeyboardButton>> buttons = new List<List<InlineKeyboardButton>>(count);
for (int i = 0; i < count; i++)
{
// Add new row with one button capacity
buttons.Add(new List<InlineKeyboardButton>(1)
{
// Add button to this row
new InlineKeyboardButton
{
Text = buttonsData.Values.ElementAt(i),
CallbackData = buttonsData.Keys.ElementAt(i),
}
});
}
return new InlineKeyboardMarkup(buttons);
}
我不确定代码是否发生了巨大变化,因为我没有尝试过上述方法(由 Muaath 回答),但这对我来说是解决方法,灵感来自上面的 Muaath 回答:
public async Task<InlineKeyboardMarkup> GetInlineKeyboardMarkup(IReadOnlyList<SomeClassObject> someClassObject)
{
int count = someClassObject.Count;
List<List<InlineKeyboardButton>> buttons = new List<List<InlineKeyboardButton>>(someClassObject.Count);
for (int i = 0; i < count; i++)
{
// Add new row with one button capacity
buttons.Add(new List<InlineKeyboardButton>(1)
{
InlineKeyboardButton.WithCallbackData(text: $"{someClassObject[i].Title}", callbackData: $"{someClassObject[i].Id}"),
});
}
return new InlineKeyboardMarkup(buttons);
}
请注意不同之处在于现在有一个新方法: InlineKeyboardButton.WithCallbackData()
根据文档: https://telegrambots.github.io/book/2/reply-markup.html
您需要将每个按钮放在数组中。 回复标记:键盘和内联键盘
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.