使用PircBot

时间:2016-04-07 14:55:42

标签: java subclass irc sendmessage pircbot

我正在制作一个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);
    }
}

哪些ALSO工作正常。但是,如果我尝试在子类中发送消息,如

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

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

任何拥有IRC / pircbot知识的人都可以帮助我吗?

1 个答案:

答案 0 :(得分:1)

答案

你的问题是处理程序类根本没有对bot的引用,因为类本身没有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")
}