Python IRC Bot,区别于通道消息和私有消息
我正在用Python编写一个简单的IRC机器人。实际上,它可以连接到特定的通道,读取消息并发送响应,但它不能区分通道消息和私人消息 示例:Python IRC Bot,区别于通道消息和私有消息,python,networking,bots,irc,channel,Python,Networking,Bots,Irc,Channel,我正在用Python编写一个简单的IRC机器人。实际上,它可以连接到特定的通道,读取消息并发送响应,但它不能区分通道消息和私人消息 示例: 连接到同一频道的John向机器人的聊天室发送私人消息,如“!打招呼”; Bot必须向同一个私人聊天室发送“hello”,只发送给John。 相反,当bot在通道板上读到“!say hello”时,必须向通道发送“hello” 我的代码: ircmsg = connection.ircsock.recv(2048) ircmsg_clean = ircmsg.
连接到同一频道的John向机器人的聊天室发送私人消息,如“!打招呼”; Bot必须向同一个私人聊天室发送“hello”,只发送给John。
相反,当bot在通道板上读到“!say hello”时,必须向通道发送“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"))
但必须知道消息来自何处、渠道或用户,并发送适当的响应
对不起,我的英语不好。协议消息中包含消息源,现在您只是不使用它 在你这样做的部分
parts = ircmsg_clean.split()
您可以将其放入列表零件
如果我没有记错,并且正确理解RFQ,那么您从服务器收到的irc消息如下所示:
source = parts[0].strip(':')
content = ' '.join(parts[3:]).strip(':')
connection.sendMsg(source, content)
:约翰!something@something.orgPRIVMSG BotName:您是否收到此消息
因此,拆分将导致以下情况:
[':John!something@something.org', 'PRIVMSG', 'BotName', ':Are', 'you', 'receiving', 'this', 'message', '?']
消息的发送者是第一个元素部分
,因此部分[0]
。您需要去掉多余的“:”
消息的目标位于部分[2]
,可以是您的姓名或频道名称,然后您需要将目标与您自己的姓名进行比较,以了解它是发送给您的消息还是发送给频道的消息
如果这是真的,那么您可以这样做:
source = parts[0].strip(':')
content = ' '.join(parts[3:]).strip(':')
connection.sendMsg(source, content)
请注意,消息的实际内容也被拆分,因此如果这样做,则需要将其重新连接到字符串中。如果您点击的是索引器
,则表示您收到的消息只有一个单词,因为第一个单词位于索引3,而不是索引4