我尝试在 C# .net8-0 上编写简单的机器人,我需要按消息中的一些内联按钮,但我总是看到错误 BOT_RESPONSE_TIMEOUT,这是我的代码
bool result = false;
if (GetInputPeer(chatId, out InputPeer? inputPeer) && inputPeer is not null)
{
try
{
// get last messages in chat
var history = await Client.Messages_GetHistory(inputPeer, limit: 50); // taking more messages for reliability
Console.WriteLine($"Found {history.Messages.Length} messages in history.");
// finding first message with needed inline button by callbackData
foreach (var messageBase in history.Messages)
{
if (result) break;
if (messageBase is Message message && message.reply_markup is ReplyInlineMarkup replyMarkup)
{
Console.WriteLine($"Found message with inline buttons: ID={message.ID}");
// sorting out buttons lines
foreach (var row in replyMarkup.rows)
{
if (result) break;
foreach (var button in row.buttons)
{
if (result) break;
if (button is KeyboardButtonCallback callbackButton &&
callbackButton.data.SequenceEqual(Encoding.UTF8.GetBytes(inlineButtonCallbackData)))
{
Console.WriteLine($"Found matching inline button with callback data: {inlineButtonCallbackData}");
// pressing inline button
var response = await Client.Messages_GetBotCallbackAnswer(inputPeer, message.ID, callbackButton.data); //
Console.WriteLine("Button pressed successfully.");
result = true; // break after success press
break;
}
}
}
}
}
if (!result) Console.WriteLine("No matching button with specified callback data found.");
}
catch (Exception ex)
{
Console.WriteLine($"Error pressing inline button: {ex.Message}");
}
}
else
{
Console.WriteLine($"InputPeer is null, chatId: {chatId} is skipped!");
}
return result;
方法 GetInputPeer 效果很好,问题仅与 Messages_GetBotCallbackAnswer 有关,但也许是因为我的代码,但我不这么认为。 感谢您的帮助和浪费的时间
我尝试在 Google、stackoverflow 中搜索并询问 ChatGPT,但没有任何效果
当机器人在 10 秒内未确认按下按钮时,将返回(抛出)BOT_RESPONSE_TIMEOUT。
这要么意味着机器人离线,要么没有及时调用answerCallbackQuery。
无论如何,你这边没有任何问题。但你必须尝试..捕获此错误,因为它可能会发生。