我一直在c#中为一个投票电报机器人编写一个GetUpdates()方法。我想永远运行我的方法,但是当我的机器人完成并且我想进入/开始另一次运行时,我的机器人不再工作了。请帮我。当我停止程序并再次运行时,我的机器人只适合一次运行。
我的GetUpdates()代码:
public async Task GetUpdates()
{
try
{
DefineQuestion = false;
DefineOptions = false;
DefineTextQuestion = false;
while (true)
{
updates = bot.GetUpdatesAsync(offset).Result;
foreach (var update in updates)
{
offset = update.Id + 1;
if (update.Message == null)
{
continue;
}
TxT = update.Message.Text;
ChatID = update.Message.Chat.Id;
UserID = update.Message.MessageId;
NameTeleg = update.Message.From.FirstName + " " + update.Message.From.LastName;
URL = update.Message.Chat.InviteLink = "telegram.me/my_bot?startgroup=...";
if (Link)
{
TxT = "/start@my_bot";
Link = false;
}
if (TxT == "/start@my_bot")
{
await bot.SendTextMessageAsync(ChatID, "پرسش نظرسنجی\n" + QuestionAndOptions[0], Telegram.Bot.Types.Enums.ParseMode.Default, false, false, 0);
await Task.Delay(50);
for (int i = 1; i < QuestionAndOptions.Count; i++)
{
await bot.SendTextMessageAsync(ChatID, "<a> /" + i.ToString() + ". </a>" + QuestionAndOptions[i], Telegram.Bot.Types.Enums.ParseMode.Html, false, false, 0);
await Task.Delay(50);
}
DefineTextQuestion = false;
await bot.SendTextMessageAsync(ChatID, "برای پایان دادن به نظرسنجی <a>/EndVote</a> را وارد نمایید", Telegram.Bot.Types.Enums.ParseMode.Html, false, false, 0);
await Task.Delay(50);
}
if (TxT == "/start")
{
await bot.SendTextMessageAsync(ChatID, "به ربات نظرسنجی خوش آمدید\n" + "برای پایان دادن <a>/EndVote</a> را وارد نمایید", Telegram.Bot.Types.Enums.ParseMode.Html, false, false, 0, Keyboard.MainKey());
}
else if (TxT == "وارد نمودن پرسش نظرسنجی")
{
await bot.SendTextMessageAsync(ChatID, "لطفاً پرسش خود را برای نظرسنجی وارد کنید\n" + "برای پایان دادن <a>/EndVote</a> را وارد نمایید", Telegram.Bot.Types.Enums.ParseMode.Html, false, false, 0, Keyboard.RemoveKeys());
DefineTextQuestion = true;
}
else if (DefineTextQuestion)
{
if (TxT != "/End")
{
QuestionAndOptions.Add(TxT);
await bot.SendTextMessageAsync(ChatID, "لطفاً گزینه های خود را برای نظرسنجی وارد کنید. برای خاتمه <a> /End </a> را وارد نمایید", Telegram.Bot.Types.Enums.ParseMode.Html, false, false, 0);
}
else
{
await bot.SendTextMessageAsync(ChatID, "پرسش نظرسنجی\n" + QuestionAndOptions[0], Telegram.Bot.Types.Enums.ParseMode.Default, false, false, 0);
await Task.Delay(50);
for (int i = 1; i < QuestionAndOptions.Count; i++)
{
await bot.SendTextMessageAsync(ChatID, "<a> /" + i.ToString() + ". </a>" + QuestionAndOptions[i], Telegram.Bot.Types.Enums.ParseMode.Html, false, false, 0);
await Task.Delay(50);
}
DefineTextQuestion = false;
await bot.SendTextMessageAsync(ChatID, "لطفا روی لینک زیر کلیک نمایید\n" + "<a>" + URL + "</a>", Telegram.Bot.Types.Enums.ParseMode.Html, false, false, 0);
await Task.Delay(50);
Link = true;
}
}
else
{
for (int i = 1; i < QuestionAndOptions.Count; i++)
{
if (TxT == "/" + i)
{
for (int index = 0; index < NameTeleg.Length; index++)
{
if (!Result.ContainsKey(NameTeleg))
{
Result.Add(NameTeleg, i);
Sum += 1;
}
else
{
Result.Remove(NameTeleg);
Result.Add(NameTeleg, i);
}
}
await bot.SendTextMessageAsync(ChatID, "رای کاربر " + NameTeleg + " گزینه " + i.ToString() + " " + "می باشد\n" + "برای پایان دادن <a>/EndVote</a> را وارد نمایید", Telegram.Bot.Types.Enums.ParseMode.Html, false, false, 0);
await Task.Delay(50);
}
if (TxT == "/EndVote")
{
for (int index = 1; index < QuestionAndOptions.Count; index++)
{
VoteAve.Add(0);
}
for (int index1 = 1; index1 <= VoteAve.Count; index1++)
{
if (Result.ContainsValue(index1))
{
VoteAve[index1 - 1] += 1;
}
}
for (int index2 = 0; index2 < VoteAve.Count; index2++)
{
VoteAve[index2] /= Sum;
VoteAve[index2] *= 100;
}
await bot.SendTextMessageAsync(ChatID, Sum.ToString() + " " + "نفر در نظرسنجی شرکت کرده اند", Telegram.Bot.Types.Enums.ParseMode.Default, false, false, 0);
await Task.Delay(50);
for (int index3 = 0; index3 < VoteAve.Count; index3++)
{
var Counter = index3 + 1;
if (VoteAve[index3] == 0)
{
await bot.SendTextMessageAsync(ChatID, Counter.ToString() + "- " + QuestionAndOptions[index3 + 1] + "\n" + VoteAve[index3].ToString() + " %", Telegram.Bot.Types.Enums.ParseMode.Default, false, false, 0);
}
if (VoteAve[index3] >= 10 && VoteAve[index3] <= 20)
{
await bot.SendTextMessageAsync(ChatID, Counter.ToString() + "- " + QuestionAndOptions[index3 + 1] + "\n" + "\U0000270C\U0000270C" + VoteAve[index3].ToString() + " %", Telegram.Bot.Types.Enums.ParseMode.Default, false, false, 0);
}
...
}
DefineQuestion = false;
DefineOptions = false;
DefineTextQuestion = false;
QuestionAndOptions.Clear();
Result.Clear();
Sum = 0;
cts.Cancel();
break;
}
}
}
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
答案 0 :(得分:0)
通常getUpdates
用于调试。要发布您的漫游器,您需要使用Webhook
。 See this
getUpdates是一种拉机制,setWebhook是push。 使用Webhook而不是getUpdates有一些优点:
- 避免机器人经常要求更新。
- 避免在代码中使用某种轮询机制。
醇>