2012-05-09 35 views
2

當前正在嘗試製作一個簡單的IRC Gui客戶端。我使用SmartIrc4net作爲基礎,因爲它似乎是所有這些中最支持的,在這裏找到:http://www.codeproject.com/Articles/8323/SmartIrc4net-the-C-IRC-library在我的IRC客戶端中使用命令

現在我遇到的問題是操作命令。例如,爲了讓自己的OPER,您可以鍵入

/歌劇管理員密碼或changehost,將/ sethost mynewhost

我的問題是,當我通過該值通過一個文本框,而不是讓我聯繫,或更換我的主機。我的輸入只是在聊天中顯示爲文本。

這裏是我的代碼:

 string[] serverlist; 
     serverlist = new string[] { "mydomain.com" }; 
     int port = 6667; 
     string channel = "#MyChannel#"; 
     try 
     { 
      irc.Connect(serverlist, port); 
      irc.Login("SmartIRC", "SmartIrc4net Test Bot"); 
      irc.RfcJoin(channel); 

       irc.SendMessage(SendType.Message, channel, "/oper admin mypass"); 
       irc.SendMessage(SendType.Action, channel, "/sethost mynewhost"); 

      irc.Listen(); 

但是當我通過這些值,它所做的只是顯示我在聊天打字,而無需實際讓我OPER,或改變我sethost。

有什麼方法可以讓我們將命令傳遞給IRC服務器,而不僅僅是在聊天中顯示原始文本?

任何幫助,將不勝感激,謝謝

+0

研究IRC協議。 IRC客戶端不會以PRIVMSG方式將/ oper發送到服務器,而是作爲OPER命令發送。您可以從運行wireshark開始,使用連接到某個服務器的IRC客戶端,輸入命令並查看WS究竟是通過線路發送的。 – nothrow

+0

是的,我剛剛檢查過Wireshark,發現使用PRIVMSG發送的正常消息,而OPER和SETHOST等命令沒有PRIVMSG Infront。現在我怎麼讓我的命令沒有PPRIVMSG盈方呢?感謝您的回覆 –

回答

2

這是因爲你明確地發送消息。 IRC本身沒有/commands的概念,這完全在客戶端完成。你所做的只是發送一條特定文本的消息,以/開頭。即服務器收到什麼是

PRIVMSG #channel :/oper admin mypass 

,而不是

OPER admin mypass 

你只需要找出原始發送IRC命令到服務器的方式。不過,鏈接到的頁面並不提供很多文檔。但從圖層判斷,這應該在第2層或第1層。

+0

那麼是否有任何特定類型的代碼需要輸入才能將我的文本轉換爲原始數據? –

+0

如果您從文本框中獲得命令,那麼您需要解析它以確定您是否只想發送消息或命令。 'tbInput.Text.StartsWith(「/」)'可能是檢查這種情況的好條件。然後你只需要弄清楚你需要發送什麼以及使用什麼參數。 – Joey

+0

嗨,是的,我曾試過,但沒有運氣。但是,現在我明白你的意思了,當我運行Wireshark並在發送消息時看到命令中的PRIVMSG。要插入的原始數據不是來自文本框,而是將在代碼隱藏中指定。你能給我一些提示,告訴我在沒有PRIVMSG的情況下發送信息需要做什麼,所以我可以試着弄清楚。非常感謝 –

1

SendMessages有很多選項。

你有一個用於操作的例子irc.RfcOper(username,pasword)。

如果你想發送原始數據命令,它不支持飛行中的示例sethost,你可以直接發送一個WriteLine。

irc.WriteLine( 「sethost mynewhost」)

打開IrcCommands.cs看到的命令和Rfc2812.cs的名單,看看他們是如何轉移。

不過我建議你閱讀或Rfc2812標準至少偷看,你可以在這裏找到http://tools.ietf.org/html/rfc2812

+0

嗨,我剛剛檢查過Rfc2812.cs和IrcCommands.cs,我看過它是如何工作的,但它並不真正告訴我如何去做。你認爲我應該在類中添加一個sethost函數,然後重新編譯它? –

+0

我已經完全寫了你需要做的事情。檢查兩條代碼行。 – Tenerezza

+0

好吧,我想我得到你的問題,你使用的方式很多舊版本的SmartIrc4Net它的主頁是在這裏http://www.meebey.net/projects/smartirc4net/如果你從代碼項目中抓住它的版本是0.2。 0最新版本是0.4.5.1 – Tenerezza