gpt4 book ai didi

Python IRC Bot,区分 channel 消息和私有(private)消息

转载 作者:行者123 更新时间:2023-12-01 03:38:08 25 4
gpt4 key购买 nike

我正在用 Python 编写一个简单的 IRC 机器人。实际上,它可以连接到特定的 channel ,读取消息并发送响应,但它无法区分 channel 消息和私有(private)消息。

示例:
连接到同一 channel 的约翰向机器人的聊天室发送一条私有(private)消息,例如“!打个招呼”;机器人必须向同一个私有(private)聊天发送“hello”,仅发送给 John。
相反,当机器人在 channel 板上读取“!say hello”时,必须向 channel 发送“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 sendmsg(channel, msg):
ircsock.send(str.encode("PRIVMSG " + channel +" :" + msg + "\n"))

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

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

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

抱歉我的英语不好。

最佳答案

消息的来源包含在协议(protocol)消息中,现在您只是不使用它。

在您执行此操作的部分

parts = ircmsg_clean.split()

您将其放入列表零件中。

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

:John!something@something.org PRIVMSG BotName :Are you receiving this message ?

所以拆分会导致这样的结果:

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

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

消息的目标位于parts[2],可以是您的名字,也可以是 channel 名称,然后您需要将目标与您自己的名字进行比较,以确定是否是给您或 channel 的消息。

如果这是真的,那么您可以执行以下操作:

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

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

关于Python IRC Bot,区分 channel 消息和私有(private)消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40076143/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com