Python IRC Bot,区别于通道消息和私有消息



我正在用Python编写一个简单的IRC bot。实际上,它可以连接到一个特定的通道,读取消息并发送响应,但它不能区分通道消息和私人消息。

:
连接到同一频道的John向Bot的聊天发送了一条私信,比如"!说"你好";他们必须发送"你好"到同一个私人聊天,只有约翰。
相反,当他读到"!"在频道板上说"你好",必须向频道发送"你好"。

我的代码:

ircmsg = connection.ircsock.recv(2048)
ircmsg_clean = ircmsg.strip(str.encode('nr'))
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 sendmsg(channel, msg):
ircsock.send(str.encode("PRIVMSG " + channel +" :" + msg + "n"))

我知道如何向特定用户发送消息:

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

但必须知道消息来自何处,渠道或用户,并发送适当的响应。

对不起,我的英语不好。

消息的源包含在协议消息中,现在您只是没有使用它。

在你做这个的部分

parts = ircmsg_clean.split()

你把它放到列表parts

如果我没记错,并且对RFQ理解正确的话,您从服务器收到的irc消息看起来是这样的:

:John!something@something.org PRIVMSG BotName:你收到这个消息了吗?

所以拆分会得到这样的结果:

[':John!something@something.org', 'PRIVMSG', 'BotName', ':Are', 'you', 'receiving', 'this', 'message', '?']

消息的发送者是第一个元素parts,所以是parts[0]。你需要去掉多余的':'。

消息的目标在parts[2],它可以是您的名称或通道名称,然后您需要将目标与您自己的名称进行比较,以了解它是给您的消息还是给通道的消息。

如果为真,你可以这样做:

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

请注意,消息的实际内容也被拆分了,因此如果您这样做,则需要将其重新连接到字符串中。如果您点击了IndexError,这意味着您收到了一条只有一个单词的消息,因为第一个单词位于索引3,而不是4。

最新更新