2016-12-26 34 views
2

我想用機器人的電報響應任何消息當請求來自用戶的一方爲機器人的webform,但是當rs.message的值爲空時,程序錯誤。如何使用visual 2013處理telegrambot中的這個錯誤?

錯誤:

An exception of type 'System.NullReferenceException' occurred in BotTelegramWeb.dll but was not handled in user code

C#2013 UPDATE3 網絡表單2013 UPDATE3

摘要代碼:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using Telegram.Bot; 
using Telegram.Bot.Types; 
using Telegram.Bot.Helpers; 
using System.IO; 
using Newtonsoft.Json; 
using System.Net; 


namespace BotTelegramWeb 
{ 
    public partial class TaktopBot : System.Web.UI.Page 
    { 
     //Api bot = new Api("Token"); 
     Telegram.Bot.TelegramBotClient Bot = new Telegram.Bot.TelegramBotClient("Token"); 


     public class mydata 
     { 
      public result[] result; 
     } 
     public class result 
     { 
      public int update_id { get; set; } 
      public message message { get; set; } 
     } 
     public class message 
     { 
      public int message_id { get; set; } 
      public message_from from { get; set; } 
      public message_chat chat { get; set; } 
      public int date { get; set; } 
      public string text { get; set; } 
     } 
     public class message_from 
     { 
      public int ind { get; set; } 
      public string first_name { get; set; } 
      public string username { get; set; } 
     } 
     public class message_chat 
     { 
      public int id { get; set; } 
      public string first_name { get; set; } 
      public string username { get; set; } 
     } 




     public static void SendMessage(string chat_id, string message) 
     { 
      WebRequest req = WebRequest.Create("https://api.telegram.org/Token/[email protected]&text=123"); 
      req.UseDefaultCredentials = true; 

      var result = req.GetResponse(); 
      req.Abort(); 
     } 


     protected void Page_Load(object sender, EventArgs e) 
     { 



      WebRequest req = WebRequest.Create("https://api.telegram.org/bot" + "Token" + "/getUpdates"); 
      req.UseDefaultCredentials = true; 
      WebResponse resp = req.GetResponse(); 
      Stream stream = resp.GetResponseStream(); 
      StreamReader sr = new StreamReader(stream); 
      string s = sr.ReadToEnd(); 
      sr.Close(); 
      var jobject = Newtonsoft.Json.Linq.JObject.Parse(s); 
      mydata gg = JsonConvert.DeserializeObject<mydata>(jobject.ToString()); 
      List<result> results = new List<result>(); 
      foreach (result rs in gg.result) 
      { 
       results.Add(rs); 
       SendMessage(rs.message.chat.id.ToString(), "hello" + " " + "Dear" + rs.message.chat.first_name); 
      } 

     } 
    } 
} 

錯誤:

An exception of type 'System.NullReferenceException' occurred in BotTelegramWeb.dll but was not handled in user code

1.one消息來自bot的gg.result`messages是null.How不能得到空消息。

  1. 我想在用戶發送消息時發送消息但是我不能。

  2. 如何才能使用webhook方法在這個例子中改用update方法?

從輸入反應:https://api.telegram.org/Token/getUpdates

{"ok":true,"result":[{"update_id":547758881, 
"message":{"message_id":11,"from":{"id":301646351,"first_name":"s","last_name":"s"},"chat":{"id":301646351,"first_name":"s","last_name":"s","type":"private"},"date":1482667543,"text":"s"}},{"update_id":547758882, 
"message":{"message_id":12,"from":{"id":301646351,"first_name":"s","last_name":"s"},"chat":{"id":301646351,"first_name":"s","last_name":"s","type":"private"},"date":1482667701,"text":"a"}},{"update_id":547758883, 
"channel_post":{"message_id":26,"chat":{"id":-1001096443511,"title":"BestLaptopBuyTest","username":"BestLaptopBuyTest","type":"channel"},"date":1482671517,"text":"hello"}},{"update_id":547758884, 
"message":{"message_id":21,"from":{"id":301646351,"first_name":"s","last_name":"s","username":"TestMohsen1"},"chat":{"id":301646351,"first_name":"s","last_name":"s","username":"TestMohsen1","type":"private"},"date":1482676503,"text":"s"}},{"update_id":547758885, 
"message":{"message_id":45,"from":{"id":301646351,"first_name":"s","last_name":"s","username":"TestMohsen1"},"chat":{"id":301646351,"first_name":"s","last_name":"s","username":"TestMohsen1","type":"private"},"date":1482677210,"text":"ab"}},{"update_id":547758886, 
"channel_post":{"message_id":112,"chat":{"id":-1001096443511,"title":"BestLaptopBuyTest","username":"BestLaptopBuyTest","type":"channel"},"date":1482741137,"text":"mohsen"}},{"update_id":547758887, 
"message":{"message_id":144,"from":{"id":301646351,"first_name":"s","last_name":"s","username":"TestMohsen1"},"chat":{"id":301646351,"first_name":"s","last_name":"s","username":"TestMohsen1","type":"private"},"date":1482741149,"text":"mohsen"}},{"update_id":547758888, 
"message":{"message_id":145,"from":{"id":301646351,"first_name":"s","last_name":"s","username":"TestMohsen1"},"chat":{"id":301646351,"first_name":"s","last_name":"s","username":"TestMohsen1","type":"private"},"date":1482741163,"text":"ma"}},{"update_id":547758889, 
"message":{"message_id":146,"from":{"id":301646351,"first_name":"s","last_name":"s","username":"TestMohsen1"},"chat":{"id":301646351,"first_name":"s","last_name":"s","username":"TestMohsen1","type":"private"},"date":1482747400,"text":"salam"}}]} 
+0

你知道更新對象可以是多種類型嗎?沒有看到你如何解析channel_post對象在你的代碼 – anatol

+0

,所以它肯定是NULL – anatol

+0

所以null爲通道發佈? – RedArmy

回答

1

試試下面的代碼

  int Offset = 0 ; 
      WebRequest req = WebRequest.Create("https://api.telegram.org/bot" + "Token" + "/getUpdates?offset=" + Offset;); 
      req.UseDefaultCredentials = true; 
      WebResponse resp = req.GetResponse(); 
      Stream stream = resp.GetResponseStream(); 
      StreamReader sr = new StreamReader(stream); 
      string s = sr.ReadToEnd(); 
      sr.Close(); 
      var jobject = Newtonsoft.Json.Linq.JObject.Parse(s); 
      mydata gg = JsonConvert.DeserializeObject<mydata>(jobject.ToString()); 
      List<result> results = new List<result>(); 
      foreach (result rs in gg.result) 
      { 
       results.Add(rs); 
       SendMessage(rs.message.chat.id.ToString(), "hello" + " " + "Dear" + rs.message.chat.first_name); 
      } 

1.offset只有新的更新。 2.webhook在本地測試後使用。 3.對於skip null,使用和測試callbackQuery。

+0

感謝您的回答。測試此代碼,但(BotTelegramWeb.TaktopBot.message.Equals(rs,null))始終爲false,即使rs.message爲null。 – RedArmy

+0

好的,test == true?!!! – cyrus2500

+0

總是錯誤的,我不知道這個代碼。 – RedArmy