2016-10-16 4 views
1

저는 파이썬에서 간단한 IRC 봇을 코딩하고 있습니다. 실제로 특정 채널에 연결하고 메시지를 읽고 응답을 보낼 수 있지만 채널 메시지와 개인 메시지를 구별 할 수는 없습니다.Python IRC Bot, 채널 메시지 및 개인 메시지와 구별

:
요한은, 동일한 채널에 연결! "안녕하세요 말"처럼 봇의 채팅에 개인 메시지를 보내; 봇이 동일한 비공개 채팅에 "hello"를 보내야하며 John에게만 보내야합니다.
대신 봇이 채널의 보드에서 "! say hello"를 읽을 때 채널에 "hello"를 보내야합니다.

내 코드 :

ircmsg = connection.ircsock.recv(2048) 
ircmsg_clean = ircmsg.strip(str.encode('\n\r')) 
if ircmsg.find(str.encode("!say")) != -1: 
    try: 
     parts = ircmsg_clean.split() 
     content = parts[4] 
     connection.sendMsg(channel, content) 
    except IndexError: 
     connection.sendMsg(channel, "Invalid syntax") 

연결 파일 :

def sendPrivateMsg(username, msg): 
ircsock.send(str.encode("PRIVMSG " + username + " :" + msg + "\n")) 

을하지만에 있습니다

def sendmsg(channel, msg): 
ircsock.send(str.encode("PRIVMSG " + channel +" :" + msg + "\n")) 

내가 특정 사용자에게 메시지를 보내는 방법을 알고 메사가 어디 있는지 아십시오. 채널이나 사용자가 방문하여 적절한 응답을 보냅니다.

죄송합니다.

답변

1

메시지 원본은 프로토콜 메시지에 포함되어 있으므로 이제는 사용하지 않고 있습니다. 당신이 목록 parts에 그것을 얻을이

parts = ircmsg_clean.split() 

할 부분에서

.

:! 존 [email protected] PRIVMSG BotName :이 메시지를 수신하고 있습니까

내가 정확히 기억하고 RFQ 권리를 이해한다면

는 서버로부터받은 IRC 메시지는 다음과 같이 보입니다 ? 이 초래

이렇게 분할은 :

[':[email protected]', 'PRIVMSG', 'BotName', ':Are', 'you', 'receiving', 'this', 'message', '?'] 

메시지의 발신자는 상기 제 1 요소 parts 때문에 parts[0]. 여분의 ':'을 제거해야합니다.

메시지의 대상은 parts[2]이며 사용자 이름이나 채널 이름이 될 수 있습니다. 그런 다음 대상을 자신의 이름으로 비교하여 자신이나 채널에 대한 메시지인지 확인해야합니다. 당신이 문자열로이 다시 가입 할 필요가 있으므로

source = parts[0].strip(':') 
content = ' '.join(parts[3:]).strip(':') 
connection.sendMsg(source, content) 

메시지의 실제 내용도 갈라진다주의, 당신이 그 일을하는 경우 : 그것이 사실 인 경우

, 당신은 다음과 같이 뭔가를 할 수 그런 식으로. 그 단어를 IndexError으로 치면 첫 단어의 색인이 3이 아니고 4가 아니므로 한 단어 만있는 메시지를 받았습니다.