공백이 포함된 바이트를 보내는 데 문제가 있습니다 python irc bot

공백이 포함된 바이트를 보내는 데 문제가 있습니다 python irc bot

호출 시 특정 명령에 응답할 수 있는 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구문 요소는 콜론 뒤 끝에 나타날 수 있으며 와 달리 공백도 허용됩니다.paramsmiddle

(예, 이는 이와 같은 메시지에 명령이 사용하는 것 PRIVMSG someone the weather today seems nice보다 더 많은 매개변수가 있다는 것을 의미 PRIVMSG하지만 어떤 이유로든 이는 오류로 간주되지 않습니다. 단순한 구현일 수도 있고 법률로 인한 우편의 어리석음일 수도 있습니다.)

관련 정보