2016-12-26 10 views
2

私はボットテレグラムで欲しいです。リクエストは、Webフォームによってボットのユーザ側からリクエストされたときに応答しますが、rs.messageの値がnullの場合、プログラムエラーです。視覚的な2013でtelegrambotでこのエラーを処理する方法は?

エラー:

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メッセージ

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

のC#2013 2013概要コード

Update3とウェブフォーム Update3とボットからのgg.result`メッセージの数はnullです。ヌルメッセージを受け取らない方法。

  1. ユーザーがメッセージを送信したときにボットでメッセージを送信したいが、できない。

  2. webhookメソッドの使用方法代わりにこの例のメソッドを更新しますか?

responeから: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

あなたは更新オブジェクトが多くの種類になることが知っていますか?あなたのコード – anatol

+0

のchannel_postオブジェクトをどのようにパースするのかわかりませんので、間違いなくNULLです – anatol

+0

channel-postのためにヌルですか? – 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.ローカルテスト後に使用したウェブバッグ。 3. nullをスキップするには、callbackQueryを使用してテストします。

+0

ありがとう。このコードをテストしますが、(BotTelegramWeb.TaktopBot.message.Equals(rs、null))は、rs.messageがnullの場合でも常にfalseです。 – RedArmy

+0

ok、test == true?!!! – cyrus2500

+0

は常にfalseです、私はこのコードについて知りません。 – RedArmy

関連する問題