[英]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.