gpt4 book ai didi

java - 使用 PircBot 向 IRC channel 发送消息

转载 作者:行者123 更新时间:2023-11-30 07:28:37 24 4
gpt4 key购买 nike

我正在制作一个用于练习的 IRC 机器人,但遇到了困难。我使用 PircBot 库作为基础。

我遇到问题,我可以按如下方式向 channel 发送消息:

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

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

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

这是在正常的“bot”类中并且可以工作。但这很快就会变得困惑,所以我创建了两个类来解决这个问题。他们被称为:

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 知识的人都可以帮助我吗?

最佳答案

回答

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

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

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

说明

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

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

然后使用以下方式发送消息:

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

关于java - 使用 PircBot 向 IRC channel 发送消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36479908/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com