2016-04-07 52 views
1

我正在製作一個IRC bot的練習過程,但是卡住了。我使用PircBot庫作爲基礎。sendMessage與PircBot的IRC頻道

我有問題,我可以將消息發送到通道如下:

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"); 
     } 

它根本不發送消息。即使我在「bot」類的另一個方法中「嵌套」sendMessage()方法,它也不起作用。只在onMessage()方法內。我調試了它,它正確地移動到任何地方,但是它不發送消息。 sendRawLine()方法也適用同樣的問題。

任何具有IRC/pircbot知識的人都能幫助我嗎?

回答

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") 
}