Python IRC Bot,区别于频道消息和私人消息

时间:2016-10-16 22:25:06

标签: python networking bots irc channel

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

示例
John连接到同一个频道,向Bot的聊天发送私信,比如"!打招呼&#34 ;; Bot必须发送"你好"同一个私人聊天,只有约翰 相反,当机器人阅读"!打招呼"在频道的董事会中,必须发送"你好"到频道。

我的代码:

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"))

但必须知道消息来自何处,频道或用户,并发送适当的回复。

抱歉我的英语不好。

1 个答案:

答案 0 :(得分:1)

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

在你这样做的部分

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。