2013-08-25 64 views
0

這是代碼:我做了一個簡單的irc bot如何在加入頻道後向頻道發送消息?

private void connectToIrc() 
     { 
      //Connect to irc server and get input and output text streams from TcpClient. 
      nick = textBox1.Text; 
      owner = textBox2.Text; 
      server = textBox3.Text; 
      port = Convert.ToInt32(textBox4.Text); 
      chan = "#" + textBox5.Text; 
      sock.Connect(server, port);//server, port); 

      richTextBox1.Invoke((MethodInvoker)delegate 
      { 
       ColorText.AppendText(richTextBox1, "Server: ", Color.Green); 
       ColorText.AppendText(richTextBox1, server+"   ", Color.Red); 
       ColorText.AppendText(richTextBox1, "Port: ", Color.Green); 
       ColorText.AppendText(richTextBox1, port.ToString() + Environment.NewLine + Environment.NewLine, Color.Red); 
      }); 
      if (!sock.Connected) 
      { 
       Console.WriteLine("Failed to connect!"); 
       return; 
      } 
      input = new System.IO.StreamReader(sock.GetStream()); 
      output = new System.IO.StreamWriter(sock.GetStream()); 

      //Starting USER and NICK login commands 
     output.Write(
      "USER " + nick + " 0 * :" + owner + "\r\n" + 
      "NICK " + nick + "\r\n" 
     ); 
     output.Flush(); 

     //Process each line received from irc server 
     //buf = input.ReadLine(); 
     while ((buf = input.ReadLine()) != null) 
     { 
      buf = buf + Environment.NewLine; 
      //Display received irc message 
      //Console.WriteLine(buf); 
      richTextBox1.Invoke((MethodInvoker)delegate 
      { 
       ColorText.AppendText(richTextBox1, buf,Color.Black); 
      }); 
      if (buf.StartsWith("ERROR")) break; 

      //Send pong reply to any ping messages 
      if (buf.StartsWith("PING ")) { output.Write(buf.Replace("PING", "PONG") + "\r\n"); output.Flush(); } 
      if (buf[0] != ':') continue; 

      //After server sends 001 command, we can set mode to bot and join a channel 
      if (buf.Split(' ')[1] == "001") 
      { 
       output.Write(
        "MODE " + nick + " +B\r\n" + 
        "JOIN " + chan + "\r\n" + "PRIVMSG " + chan + " :hello" 
       ); 
       output.Flush(); 
      } 
      buf = input.ReadLine(); 
     } 

     } 

我加入這部分的代碼:+「PRIVMSG」 +瓚+「:你好」 但它確實沒有什麼我沒有看到任何「你好」的通道。

我使用的例子在這個網站:

http://jakash3.wordpress.com/2012/02/13/simple-vb-net-and-csharp-irc-client/

的C#示例。

如何在加入某個通道後向該通道發送消息?我想發送一條消息,如果它的下一步工作是在隊列中添加消息,並且它們將被逐個自動發送。

我該怎麼辦?

回答

0

您在PRIVMSG命令結束時忘記了\ r \ n。

+0

Nickolay我做了:「JOIN」+ chan +「\ r \ n」+「PRIVMSG」+ chan +「:hello \ r \ n」在最後添加了\ r \ n,但我仍然沒有看到hello這個頻道。爲什麼? – DanielVest

+0

如果我通過通道中的程序mirc鍵入當我進入服務器和通道中的另一個暱稱和類型時:jello然後在我的窗體上我的c#程序窗口我看到你好,但我想要做的是另一種方式。我希望它會自動將我的程序中的單詞hello發送到該通道,以便通道中的每個人都能看到單詞hello。現在,如果我輸入頻道,它會起作用:你好,只有我會在我的節目中看到它。我希望當我運行我的程序後,它連接到服務器,並進入通道它會自動發送一條消息到通道:大家好 – DanielVest

+0

這PRIVMSG不是從我身邊發送到通道。它使得如果我輸入頻道:你好,然後我在我身邊看到你好。我想讓它從我的程序發送到頻道的單詞hello。因此,如果在頻道中有20人,他們都會看到Hello – DanielVest

1

只是因爲你發送到服務器,你加入了它,並不意味着你立即在頻道。您需要等待直到您進入實際頻道,(等待服務器返回JOIN命令),然後發送privmsg。

相關問題