【问题标题】:Python IRC Bot, distinguish from channel messages and private messagesPython IRC Bot,区分频道消息和私信
【发布时间】:2017-02-25 19:58:57
【问题描述】:

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

示例:
连接到同一频道的 John 向 Bot 的聊天室发送私人消息,例如“!say hello”; 机器人必须向同一个私人聊天室发送“你好”,仅发送给 John。
相反,当机器人在频道板上读取“!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"))

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

对不起,我的英语不好。

【问题讨论】:

    标签: python networking bots irc channel


    【解决方案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。

    【讨论】:

      猜你喜欢
      • 2013-02-27
      • 1970-01-01
      • 1970-01-01
      • 2012-06-05
      • 2011-10-05
      • 2015-03-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多