【问题标题】:how to create custom keyboard in telegram .net api?如何在电报 .net api 中创建自定义键盘?
【发布时间】:2023-11-29 18:19:01
【问题描述】:
if (update.Message.Text == "/hi" || update.Message.Text == "hi")
{
    bot.MakeRequestAsync(new SendMessage(update.Message.Chat.Id, "TEST!")).Wait();
}

.net 的电报 api 具有键盘类型,但在我看到的任何示例中都没有用户。我可以在电报 bot api 中实现自定义键盘,以从按钮而不是命令文本中获取用户命令吗?

【问题讨论】:

    标签: .net telegram-bot


    【解决方案1】:

    绝对是的。您永远不会在代码中看到 ReplyKeyboardMarkup,而是在电报机器人 documnetation 中看到。如果您查看此文档,您会看到许多部分(例如 ReplyKeyboardMarkup 并且每个部分都有一些 Field。您必须发送这些字段(特别是那些 Required 字段)及其值,Telegram 会识别那些没有提到标题(标题例如 ReplyKeyboardMarkup),您不得在代码中提及这些标题。 您可以在 php here 中看到一个有效的键盘。 每件事都像发送消息一样简单,keybords 的重点是使用相互嵌套的三重数组

    pseudo code:
    keyboard = [[ [key element 1 data] , [key element 2 data] ,[key element 3 data] ]]
    

    【讨论】:

    • 在 .net 中实现为每个请求生成动态键盘有点复杂。请在我的回复键盘标记中告诉我有关设置文本和值的信息。我创建的键盘只返回文本我想返回值
    • 您自己应该解析文本,例如在switch case 循环中。您自己应该将文本转换为其他类型,例如integer
    【解决方案2】:

    在c#中你可以这样做:

        using NetTelegramBotApi.Types;
        enter code here
    
       ReplyKeyboardMarkup myKeyboard = new ReplyKeyboardMarkup()
      {
          Keyboard = new string[][]
          {
             new string[] { "raw1 key1", "raw1 key2","raw1 key3 " },
             new string[] { "raw2 key1", "raw2 key2","raw2 key3 " }
    
          }
      };
    

    第一个字符串数组显示在第一个 raw 中,第二个数组显示在第二个 raw ... 您可以通过 sendMessage 将此键盘发送给用户:

    var req =new SendMessage(chatId,"Text if you want") { ReplyMarkup = myKeyboard };
    
    await bot.MakeRequestAsync(req);
    

    【讨论】: