我有一些电报机器人C#应用程序,使用"bot.telegram“核,有同样的问题。
我通过getUpdate()方法获得用户消息和命令。下面有一个简单的例子:
private void Form1_Load(object sender, EventArgs e)
{
try
{
a = new Thread(new ThreadStart(GetUpdates));
a.Start();
}
catch (Exception ex)
{
bot.SendTextMessageAsync({myId}, ex.ToString());
}
}
public void GetUpdates()
{
try
{
offset = 0;
while (true)
{
updates = bot.GetUpdatesAsync(offset, 100, 360000).Result;
foreach (var update in updates)
{
offset = update.Id + 1;
if (update.Message == null || update.Message.Text == null)
continue;
switch (update.Message.Text)
{
case "/start":
job1();
break;
case "Msg2":
job2();
break;
case "Msg3":
job3();
break;
default:
job(4)
break;
}
}
}
}
catch (Exception ex)
{
bot.SendTextMessageAsync({myId}, ex.ToString());
}
}
过了几个小时(2-24小时),它就停止了,没有收到来自user.In的“捕捉异常”的消息,我得到了以下错误:
System.AggregateException:发生了一个或多个错误。-> Telegram.Bot.Exceptions.ApiRequestException:请求超时-> System.Threading.Tasks.TaskCanceledException:任务被取消。在System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task任务)在System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task任务)在System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd(Task任务)在Telegram.Bot.TelegramBotClient.d__125
1.MoveNext() --- End of inner exception stack trace --- at Telegram.Bot.TelegramBotClient.<SendWebRequestAsync>d__125
1.MoveNext() -内部异常堆栈跟踪- System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions)。Threading.Tasks.Task1.GetResultCore(Boolean waitCompletionNotification) at System.Threading.Tasks.Task
1.get_Result() at mahramanehBot.Main.GetUpdates()在C:\mahramanehBot.Main.GetUpdates\Soroush\documents\visual studio 2015\Projects\mahramanehBot\mahramanehBot\Main.cs:line 45 ->(内部异常#0) Telegram.Bot.Exceptions.ApiRequestException:请求超时-> System.Threading.Tasks.TaskCanceledException:任务被取消。在System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task任务)在System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task任务)在System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd(Task任务)在Telegram.Bot.TelegramBotClient.d__1251.MoveNext() --- End of inner exception stack trace --- at Telegram.Bot.TelegramBotClient.<SendWebRequestAsync>d__125
1.MoveNext()<
在没有停止的情况下,我应该怎么做才能使“从用户那里获取消息和命令”工作?
我通过将代码放在“尝试”之后解决了这个问题:
catch (AggregateException e)
{
Thread a = new Thread(GetUpdates);
a.Start();
}
发布于 2017-10-05 02:48:55
更新可能会超时,您需要处理这个问题--我猜应用程序崩溃了?
捕获异常并处理结果(最可能的方法是忽略它)。您还可能需要等待结果。
while (true)
{
try
{
updates = await bot.GetUpdatesAsync(offset, 100, 360000);
foreach (var update in updates)
{
offset = update.Id + 1;
if (update.Message == null || update.Message.Text == null)
continue;
switch (update.Message.Text)
{
case "/start":
job1();
break;
case "Msg2":
job2();
break;
case "Msg3":
job3();
break;
default:
job(4)
break;
}
}
}
catch (ApiRequestException ex)
{
//handle or ignore
}
}
发布于 2017-10-09 22:22:06
通常用于调试的getUpdates
。为了发布你的机器人,你需要使用电报Webhook
。看这个。
getUpdates是一种拉力机构,setWebhook是一种推杆。在getUpdates上使用Web钩子有一些优点:
https://stackoverflow.com/questions/46583569
复制相似问题