2011-08-13 7 views
1

私はSmartIRC4Netライブラリ(http://www.meebey.net/projects/smartirc4net/)を使用してC#でボットを作っています。あなたがその図書館に精通していない場合は、私に代替手段を教えてください。SmartIRC4Netはアクティビティを接続/表示しません

これは私が見つけることができる最もサポートされているライブラリなので、私はそれを使用しました。私は "テスト"の例のボットを読んで、クエリとレスポンスの入力を取り除いて基本的なものにしました。

より良いテストが不足しているため、ウェブチャンネルに接続しようとしましたが、接続していないようです。ボットをデバッグするときに私のクライアントに何も表示されません(私は自分のチャンネルにいます)。また、コンソールにはIRCのエラーメッセージや例外は表示されず、最後に入力したポーズだけが表示されます。 コード:

public static IrcClient irc = new IrcClient(); 

public static void Main(string[] args) 
{ 

     //Setup 
     irc.Encoding = System.Text.Encoding.UTF8; 
     irc.SendDelay = 200; 
     irc.ActiveChannelSyncing = true; 

     //Event Handlers 
     irc.OnError += new ErrorEventHandler(irc_OnError); 
     irc.OnConnected += new EventHandler(irc_OnConnected); 
     irc.OnRawMessage += new IrcEventHandler(irc_OnRawMessage); 

     try 
     { 
      //Connect, log in, join channel 
      irc.Connect("irc.freenode.org", 6667); 
      irc.Login("HGPBot", "HGP Bot"); 
      irc.RfcJoin("#smartirc"); 
     } 
     catch (Exception e) 
     { 
      Console.WriteLine("Could not connect, exception:" + Environment.NewLine 
       + e.Message + Environment.NewLine 
       + e.ToString()); 
     } 

     //pause 
     Console.WriteLine("Press any key to continue"); 
     Console.ReadKey(true); 

     //Disconnect 
     irc.Disconnect(); 

     //Exit 
     Environment.Exit(0); 
    } 

    static void irc_OnRawMessage(object sender, IrcEventArgs e) 
    { 
     Console.WriteLine("irc_OnRawMessage initiated"); 
    } 

    static void irc_OnConnected(object sender, EventArgs e) 
    { 
     Console.WriteLine("Connected"); 
     irc.SendMessage(SendType.Message, "#smartirc", "Connected"); 
    } 

    static void irc_OnError(object sender, ErrorEventArgs e) 
    { 
     Console.WriteLine("IRC Error: " + e.ErrorMessage); 
    } 

[更新:追加irc_OnConnectedイベントイベントが発生し、「接続」のコンソールに記録されている@Russ C.によって示唆されているように。それでも、チャンネルでは何も起こりません。 sendmessage行を追加して何が起こるかを確認します。]

[Update2:SendMessageイベントとOnRawMessageイベントが追加されました。チャネルに出力が表示されず、OnRawMessageイベントの下のテキストはコンソールに書き込まれません。 (私はOnMessageの正しいイベントを使用していますか? "OnMessage"イベントは存在せず、テストボットはOnMessageが "すべてのIRCメッセージを取得します"と言います))

+0

を、それがonConnected/onMessageのは、あなたがに接続することを意図しているイベントを受信して​​いませんか? –

+0

私はそれがOnConnectedイベントを持っていると信じています。それを追加して何が起こるかを見てみましょう。しかし、あなたが「あなたがつけようとしている」とはどういう意味ですか、そしてOnMessageReceivedイベントは何をしますか? –

+0

私はiPadを降りるときに答えを書くつもりです、私に数分を教えてください。 –

答えて

1

Ok;すべてのイベントベースのロジック(ここでは非同期ロジックを読み込みます)のように、ライブラリーが何かをしたときに通知するようイベントを購読する必要があります。 テストコードはSmartIRCライブラリのイベントに登録/添付していないため、ライブラリはまだ何もしていません。

あなたはirc.OnErrorラインでそれの一部をやっているが、あなたはあまりにもこれらのメソッドを追加する必要があります。

irc.OnQueryMessage += new IrcEventHandler(OnQueryMessage); 
irc.OnRawMessage += new IrcEventHandler(OnRawMessage); 

次にメソッドのカップル:

// this method we will use to analyse queries (also known as private messages) 
public static void OnQueryMessage(object sender, IrcEventArgs e) 
{ 
    switch (e.Data.MessageArray[0]) { 
     case "hello": 
      // this is where you decipher private messages posted to the bot. 
      // if someone does "/privmsg HGPBot hello" this will reply "Hello!" 
      irc.SendMessage(SendType.Message, "HGPBot, "Hello!"); 
      break; 
     default: 
      break; 
    } 
} 

// this method will get all IRC messages 
public static void OnRawMessage(object sender, IrcEventArgs e) 
{ 
    System.Console.WriteLine("Received: "+e.Data.RawMessage); 
} 

をあなたは置く場合このSystem.Console行のブレークポイントでは、ボットから届くものを見るべきです。 これはうまくいかない場合は、IRCサーバーで独自のチャンネルを作成してみてください。

また、あなたのボットが使用しているユーザー名が一意であり、動作していることがわかっている場合、チャンネルにいなくてもIRCに接続できます(つまり、ログインできますプログラムが接続されているように見えたら、あなたのbotに/ privmsgコマンドを送信しようとしています。

編集:また、あなたのプログラムにループがないことに気がつきました。 irc.Listen()を追加する必要があります。あなたの休止声明の前に。これはircボットをリッスンモードにしてブロッキングループになるので、その時点でプログラムを終了する唯一の方法はタスクを終了することですが、少なくともそれが動作することを示します。

編集2:ボットは聞きます

// here we tell the IRC API to go into a receive mode, all events 
// will be triggered by _this_ thread (main thread in this case) 
// Listen() blocks by default, you can also use ListenOnce() if you 
// need that does one IRC operation and then returns, so you need then 
// an own loop 
irc.Listen(); 
//pause 
Console.WriteLine("Press any key to continue"); 
Console.ReadKey(true); 
+0

irc.Listen()は動作させました。どうもありがとう。 –

+0

あなたも大歓迎です! –

関連する問題