使用 PircBot 将消息发送到 IRC 频道
sendMessage to IRC channel with PircBot
我正在制作一个用于练习的 IRC 机器人,但卡住了。我使用 PircBot 库作为基础。
我有问题,我可以按如下方式向频道发送消息:
public void onMessage(String channel, String sender,
String login, String hostname, String message){
if(message.equalsIgnoreCase("hello")){
sendMessage(channel, "Hello "+sender);
}
}
这在正常 "bot" class 中有效。
但这很快就会变得混乱,所以我创建了两个 classes 来解决这个问题。他们被称为:
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);
}
}
这也很好用。但是,如果我尝试在子 class 中发送消息,例如
if (message.contains("test")){
sendMessage("test successful");
}
它根本不发送消息。即使我 "nest" "bot" class 中的另一个方法中的 sendMessage() 方法也不起作用。仅在 onMessage() 方法内部。我调试了它,它正确地移动到任何地方,除了它不发送消息。同样的问题适用于 sendRawLine() 方法。
有 IRC/pircbot 知识的人可以帮助我吗?
回答
你的问题是处理程序 classes 根本没有引用机器人,并且由于 class 本身没有 sendMessage 函数,它不会发送消息。
您应该在处理程序的构造函数中包含 bot 对象 class,即;
MessageHandler mh = new MessageHandler(this);
CommandHandler ch = new CommandHandler(this);
说明
this
是 Java 中的关键字,它指的是 class 本身的实例。通过将你的 bot class 的实例发送到构造函数并设置构造函数来接受它,你实际上已经将 bot 实例的副本发送到处理程序 class。您可以使用如下构造函数接受它:
public MessageHandler(BotClassName b) {
this.b = b;
}
然后使用以下方式发送消息:
if (message.contains("test")) {
b.sendMessage("test successful")
}
我正在制作一个用于练习的 IRC 机器人,但卡住了。我使用 PircBot 库作为基础。
我有问题,我可以按如下方式向频道发送消息:
public void onMessage(String channel, String sender,
String login, String hostname, String message){
if(message.equalsIgnoreCase("hello")){
sendMessage(channel, "Hello "+sender);
}
}
这在正常 "bot" class 中有效。 但这很快就会变得混乱,所以我创建了两个 classes 来解决这个问题。他们被称为:
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);
}
}
这也很好用。但是,如果我尝试在子 class 中发送消息,例如
if (message.contains("test")){
sendMessage("test successful");
}
它根本不发送消息。即使我 "nest" "bot" class 中的另一个方法中的 sendMessage() 方法也不起作用。仅在 onMessage() 方法内部。我调试了它,它正确地移动到任何地方,除了它不发送消息。同样的问题适用于 sendRawLine() 方法。
有 IRC/pircbot 知识的人可以帮助我吗?
回答
你的问题是处理程序 classes 根本没有引用机器人,并且由于 class 本身没有 sendMessage 函数,它不会发送消息。
您应该在处理程序的构造函数中包含 bot 对象 class,即;
MessageHandler mh = new MessageHandler(this);
CommandHandler ch = new CommandHandler(this);
说明
this
是 Java 中的关键字,它指的是 class 本身的实例。通过将你的 bot class 的实例发送到构造函数并设置构造函数来接受它,你实际上已经将 bot 实例的副本发送到处理程序 class。您可以使用如下构造函数接受它:
public MessageHandler(BotClassName b) {
this.b = b;
}
然后使用以下方式发送消息:
if (message.contains("test")) {
b.sendMessage("test successful")
}