空白を含むバイトの送信に問題があります 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が、何らかの理由でこれはエラーとは見なされません。単純な実装でも法律による郵便の愚かさでもあります。)

おすすめ記事