gpt4 book ai didi

c# - C# 中的 Telegram Bot 自定义键盘

转载 作者:太空狗 更新时间:2023-10-29 20:27:05 27 4
gpt4 key购买 nike

我尝试使用自定义键盘创建消息。所以我发送请求

reply_markup = {"keyboard":[["1"],["2"]],"resize_keyboard":"True","one_time_keyboard":"True"}

但是,它不起作用。

我尝试了所有的内容类型:

  1. application/x-www-form-urlencoded(使用默认创建消息键盘)
  2. application/json(使用默认键盘创建消息)
  3. multipart/form-data(根本不起作用,尽管有 this Post)

我还尝试通过两种不同的方式发送消息。这段代码有什么问题?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using System.Net;

namespace DutyReminder
{
class Program
{
static void Main(string[] args)
{

string message = "message";
string message1 = "message1";
string botid = "165749848:AAGtjn42bajF-WxdKosTF07sLwJPYlqiDZE";
string chatid = "38651047";

Sender.send("", "https://api.telegram.org/bot" + botid + "/sendmessage?chat_id=" + chatid + "&text=" + message + "&reply_markup={\"keyboard\":[[\"1\"],[\"2\"]],\"resize_keyboard\":\"True\",\"one_time_keyboard\":\"True\"}");
Sender.HttpPost("https://api.telegram.org/bot" + botid + "/sendmessage?chat_id=" + chatid + "&text=" + message1 + "&reply_markup={\"keyboard\":[[\"1\"],[\"2\"]],\"resize_keyboard\":\"True\",\"one_time_keyboard\":\"True\"}", "");

}
}

static class Sender
{
static public void send(string message, string url)
{
// Create a request using a URL that can receive a post.
WebRequest request = WebRequest.Create(url);
// Set the Method property of the request to POST.
request.Method = "POST";
// Create POST data and convert it to a byte array.
//string postData = "{\"value1\":\"" + message + "\"}";
string postData = message;
byte[] byteArray = Encoding.UTF8.GetBytes(postData);
// Set the ContentType property of the WebRequest.
request.ContentType = "application/x-www-form-urlencoded";
// Set the ContentLength property of the WebRequest.
// request.ContentLength = byteArray.Length;
// Get the request stream.
Stream dataStream = request.GetRequestStream();
// Write the data to the request stream.
dataStream.Write(byteArray, 0, byteArray.Length);
// Close the Stream object.
dataStream.Close();
// Get the response.
WebResponse response = request.GetResponse();
// Display the status.
Console.WriteLine(((HttpWebResponse)response).StatusDescription);
// Get the stream containing content returned by the server.
dataStream = response.GetResponseStream();
// Open the stream using a StreamReader for easy access.
StreamReader reader = new StreamReader(dataStream);
// Read the content.
string responseFromServer = reader.ReadToEnd();
// Display the content.
Console.WriteLine(responseFromServer);
// Clean up the streams.
reader.Close();
dataStream.Close();
response.Close();
}


static public string HttpPost(string URI, string Parameters)
{
System.Net.WebRequest req = System.Net.WebRequest.Create(URI);
// req.Proxy = new System.Net.WebProxy(ProxyString, true);
//Add these, as we're doing a POST
req.ContentType = "application/x-www-form-urlencoded";
req.Method = "POST";
//We need to count how many bytes we're sending. Post'ed Faked Forms should be name=value&
byte[] bytes = System.Text.Encoding.ASCII.GetBytes(Parameters);
req.ContentLength = bytes.Length;
System.IO.Stream os = req.GetRequestStream();
os.Write(bytes, 0, bytes.Length); //Push it out there
os.Close();
System.Net.WebResponse resp = req.GetResponse();
if (resp == null) return null;
System.IO.StreamReader sr = new System.IO.StreamReader(resp.GetResponseStream());
return sr.ReadToEnd().Trim();
}

}
}

最佳答案

使用以下而不是 URI 消息发送:

var bot = new Api("YourApiToken");
.
.
.

var rmu = new ReplyKeyboardMarkup();

rmu.Keyboard =
new string[][]
{
new string[] {"1-1", "1-2"},
new string[] {"2"},
new string[] {"3-1", "3-2" , "3-3" }
};

await bot.SendTextMessage(update.Message.Chat.Id, msg, false, 0, rmu);


已更新
使用较新版本的 API:

var bot = new Api("YourApiToken");
.
.
.

var rkm = new ReplyKeyboardMarkup();

rkm.Keyboard =
new KeyboardButton[][]
{
new KeyboardButton[]
{
new KeyboardButton("1-1"),
new KeyboardButton("1-2")
},

new KeyboardButton[]
{
new KeyboardButton("2")
},

new KeyboardButton[]
{
new KeyboardButton("3-1"),
new KeyboardButton("3-2"),
new KeyboardButton("3-3")
}
};

await bot.SendTextMessage(update.Message.Chat.Id, msg, false, false, 0, rkm );

关于c# - C# 中的 Telegram Bot 自定义键盘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34899614/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com