我怎样才能直接发送bot ## run

时间:2017-08-25 13:20:17

标签: c# telegram telegram-bot

我一直在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);
        }
    }

1 个答案:

答案 0 :(得分:0)

通常getUpdates用于调试。要发布您的漫游器,您需要使用WebhookSee this

  

getUpdates是一种拉机制,setWebhook是push。   使用Webhook而不是getUpdates有一些优点:

     
      
  1. 避免机器人经常要求更新。
  2.   
  3. 避免在代码中使用某种轮询机制。
  4.