2012-05-09 2 views
2

현재 im은 간단한 IRC Gui 클라이언트를 만들려고합니다. 그것들 중 가장지지가 많은 것으로 보이는 SmartIrc4net을 기본으로 사용하는 Im은 다음과 같습니다. http://www.codeproject.com/Articles/8323/SmartIrc4net-the-C-IRC-libraryIRC 클라이언트에서 명령어 사용

지금 문제는 동작 명령입니다. 예를 들어 자신에게 OPER을하려면, 당신은

/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 프로토콜을 찾을 수 있습니다 Rfc2812 표준에서 적어도 슬쩍하는 것이 좋습니다. IRC 클라이언트는 PRIVMSG로/oper를 서버에 보내지 않고 OPER 명령으로 보냅니다. 일부 서버에 연결된 IRC 클라이언트를 사용하여 wireshark를 실행하고, 명령을 입력하고, WS를 통해 정확하게 전송되는 WS를 조사하면됩니다. – nothrow

+0

예. Wireshark를 확인한 후 PRIVMSG를 사용하여 정상적인 메시지를 보내고 OPER 및 SETHOST와 같은 명령에 PRIVMSG Infront가없는 것으로 나타났습니다. 이제 내 명령에 PPRIVMSG가 있지 않도록하려면 어떻게해야합니까?답장을 보내 주셔서 감사합니다 –

답변

2

메시지를 명시 적으로 보내기 때문입니다. IRC 자체에는 /commands이라는 개념이 없으며, 이는 클라이언트에서 모두 수행됩니다. 지금하고있는 일은 /으로 시작하는 특정 텍스트의 메시지를 보내는 것입니다. 나는. 어떤 서버가 수신하는

PRIVMSG #channel :/oper admin mypass 

대신에 당신은 단지 서버에 원시 IRC 명령을 전송하는 방법을 알아낼 필요가

OPER admin mypass 

입니다. 링크 된 페이지는 해당 부분에 대한 많은 문서를 제공하지 않습니다. 그러나 레이어를 판단 할 때 레이어 2 또는 레이어 1에 있어야합니다.

+0

내 텍스트를 원시 데이터로 변환 할 수 있도록 사용하기 위해 필요한 특정 유형의 코드가 있습니까? –

+0

텍스트 상자에서 명령을 받으면 구문 분석을 통해 메시지 또는 명령을 보낼지 여부를 결정해야합니다. 'tbInput.Text.StartsWith ("/")'는이 경우를 검사하기에 좋은 조건 일 수 있습니다. 그런 다음 정확하게 전달해야 할 항목과 매개 변수를 파악해야합니다. – Joey

+0

안녕, 그래, 필자는 그것을 시도했지만 운이 없다. 하지만 예, 이제 저는 Wireshark를 실행하고 메시지를 보냈을 때 명령에 PRIVMSG를 본 것처럼 당신이 의미하는 것을 정확히 봅니다. 삽입 될 원시 데이터는 텍스트 상자에있는 것이 아니라 코드 숨김에 지정됩니다. PRIVMSG없이 msg를 보내려면 내가해야 할 일에 대한 조언을 주시겠습니까? 고마워요 –

1

SendMessages보다 많은 옵션이 있습니다.

Oper에는 irc.RfcOper (username, pasword)가 있습니다.

비행 예제 sethost에서 지원하지 않는 것들에 대해 원시 데이터 명령을 보내려는 경우 직접 WriteLine을 보낼 수 있습니다.

irc.WriteLine ("sethost mynewhost")

열고 IrcCommands.cs는이 옮겨진하는 방법을 볼 수 명령과 Rfc2812.cs의 목록을 볼 수 있습니다.

는 그러나 나는 당신이 읽거나 여기 http://tools.ietf.org/html/rfc2812

+0

안녕하세요, 저는 Rfc2812.cs와 IrcCommands.cs를 확인했습니다. Ive는 어떻게 작동하는지 보았습니다. 그러나 실제로는 그것을 보여주지 않습니다. 클래스에 sethost 함수를 추가하고 컴파일해야한다고 생각합니까? –

+0

나는 당신이해야 할 일을 이미 정확히 썼다. 두 코드 행을 확인하십시오. – Tenerezza

+0

OK 문제가 생겼다고 생각합니다. 이전 버전의 SmartIrc4Net을 사용하고 있습니다. 홈페이지는 http://www.meebey.net/projects/smartirc4net/입니다. 코드 프로젝트에서 가져온 버전은 0.2입니다. 0은 최신입니다 0.4.5.1 – Tenerezza

관련 문제