호출 시 특정 명령에 응답할 수 있는 Python(3.9.2)으로 기본 irc 봇을 만들려고 합니다. 예를 들어 응답에 공백이 포함된 경우 봇은 첫 번째 단어만 표시합니다.
me > @hello
bot > hi
me > @how is the weather?
bot > the
내가 말했어야 했는데,the weather seems nice today
이것은 코드입니다
import sys
import time
import socket
import string
server_address="irc.libera.chat"
server_port = 6667
botnick="lamebot"
channel_name="##megadouched"
irc = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
irc.connect((server_address,server_port))
irc.setblocking(False)
time.sleep(1)
irc.send(bytes("USER "+botnick+" "+botnick+" "+botnick+" bot has joined the chat\r\n", "UTF-8"))
time.sleep(1)
irc.send(bytes("NICK "+botnick+"\n", "UTF-8"))
time.sleep(1)
irc.send(bytes("JOIN "+channel_name+"\n", "UTF-8"))
irc_privmsg = 'b"PRIVMSG "+channel_name+" Hello\r\n"'
while True:
try:
text = irc.recv(4096)
except Exception:
pass
if text.find(bytes(":@hi", "UTF-8"))!=-1:
irc.sendall(bytes("PRIVMSG "+channel_name+" Hello\r\n", "UTF-8"))
text=b""
elif text.find(bytes(":@how is the weather?", "UTF-8"))!=-1:
irc.sendall(bytes("PRIVMSG "+channel_name+" the weather today seems nice\r\n", "UTF-8"))
text=b""
input()
답변1
IRC 프로토콜은 메시지를 공백으로 구분된 명령과 여러 매개변수로 분할합니다. 후행 매개변수 자체에 공백이 포함되도록 하기 위해 프로토콜에서는 매개변수 앞에 콜론을 붙일 수 있습니다. 이 예처럼RFC 2812:
PRIVMSG Angel :yes I'm receiving it !
; Command to send a message to Angel.
이제 이것이 실제로 RFC에 지정되어 있지 않지만 2.3.1 메시지의 BNF 구문에 숨겨져 있다는 것을 알게 되었습니다.
params = *14(가운데 공백) [뒤에 공백 ":"] =/ 14(가운데 공백) [공백[":"] 후행] 중간 = nospcrlfcl *( ":" / nospcrlfcl ) 후행 = *( ":" / " " / nospcrlfcl )
trailing
구문 요소는 콜론 뒤 끝에 나타날 수 있으며 와 달리 공백도 허용됩니다.params
middle
(예, 이는 이와 같은 메시지에 명령이 사용하는 것 PRIVMSG someone the weather today seems nice
보다 더 많은 매개변수가 있다는 것을 의미 PRIVMSG
하지만 어떤 이유로든 이는 오류로 간주되지 않습니다. 단순한 구현일 수도 있고 법률로 인한 우편의 어리석음일 수도 있습니다.)