【问题标题】:sendMessage to IRC channel with PircBot使用 PircBot 向 IRC 频道发送消息
【发布时间】:2016-04-07 14:55:41
【问题描述】:

我正在制作一个用于练习的 IRC 机器人,但被卡住了。我使用 PircBot 库作为基础。

我有一个问题,我可以按如下方式向频道发送消息:

public void onMessage(String channel, String sender,
String login, String hostname, String message){

    if(message.equalsIgnoreCase("hello")){

    sendMessage(channel, "Hello "+sender);
    }
}

这是在普通的“机器人”类中并且有效。 但这很快就会变得一团糟,所以我创建了两个类来解决这个问题。它们被称为:

public void onMessage(String channel, String sender, String message) {`
    MessageHandler mh = new MessageHandler();
    CommandHandler ch = new CommandHandler();

    if (message.startsWith("+")){
    ch.commandQuery(channel, sender, message);
    }
    else{mh.messageRespondQuery(channel, sender, message);
    }
}

这也可以正常工作。但是,如果我尝试在子类中发送消息,例如

if (message.contains("test")){
            sendMessage("test successful");
        }

它根本不发送消息。即使我将 sendMessage() 方法“嵌套”在“bot”类的另一个方法中,它也不起作用。仅在 onMessage() 方法内部。我调试了它,它正确地移动到任何地方,除了它不发送消息。同样的问题也适用于 sendRawLine() 方法。

有 IRC/pircbot 知识的人可以帮助我吗?

【问题讨论】:

    标签: java subclass irc sendmessage pircbot


    【解决方案1】:

    回答

    您的问题是处理程序类根本没有对机器人的引用,并且由于该类本身没有 sendMessage 函数,因此它不会发送消息。

    您应该在处理程序类的构造函数中包含 bot 对象,即;

    MessageHandler mh = new MessageHandler(this);
    CommandHandler ch = new CommandHandler(this);
    

    说明

    this 是 Java 中的一个关键字,它指代类本身的实例。通过将 bot 类的实例发送到构造函数并设置构造函数以接受它,您实际上已将 bot 实例的副本发送到处理程序类。您可以使用如下构造函数接受它:

    public MessageHandler(BotClassName b) {
        this.b = b;
    }
    

    然后使用以下命令发送消息:

    if (message.contains("test")) {
        b.sendMessage("test successful")
    }
    

    【讨论】:

      猜你喜欢
      • 2021-12-05
      • 2015-11-17
      • 2013-02-27
      • 1970-01-01
      • 2015-05-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-24
      相关资源
      最近更新 更多