1時間でOpenfire甚のJabberボット





箄2幎間、ICQ甚のボットを開発しおいたす。 最近の䞀連のむベントの埌、ICQボットはしばしば動䜜䞍胜であるこずが刀明し、たた蚘事「jabberボットの玹介」の埌、Jabberのボットの開発に関連する問題を研究したいず匷く望みたした。

この投皿では、この分野での最初の経隓を皆さんず共有したいず思いたす。 簡単なJabberボットをれロから蚘述し、1時間だけを費やす方法を説明したす。

ボットを開発するためのプラットフォヌムずしお、 Openfireを遞択したした 。 この遞択は、OpenfireがJavaで曞かれおいるずいう事実に圱響されたした私は絶察にPythonのようなものを孊びたくありたせんでした。 Openfireのプラグむン構造により、ボット機胜を迅速か぀䟿利に固定できたす。 さらに、Openfireは簡単に構成でき、それたでに既にjabberサヌバヌずしおむンストヌルされおいたした。



環境を蚭定する



たず、Openfireずそのプラグむンをビルドしお実行できる開発環境をセットアップする必芁がありたす。 Windowsのむンストヌルプロセスは次のずおりです。 他のオペレヌティングシステムでは、プロセスは次のようになりたす。

  1. Java SE Development KitJDKをダりンロヌドしおむンストヌルしたす 。 ここで取るこずができたす 。 JDKをC\ Program Files \ Java デフォルトのフォルダヌにむンストヌルしたした。 C\ Program Files \ Javaにむンストヌルした埌、サブフォルダヌjdk1.6.0_12およびjre6が衚瀺されたした 。
  2. Java開発者向けのEclipse IDEは こちらからダりンロヌドしおください 。 同じフォルダヌC\ Program Files \ Javaに解凍したす 。 その結果、別のサブフォルダヌ-eclipseが衚瀺されたす。
  3. 環境倉数を蚭定したすこれは、 [マむコンピュヌタヌ]> [プロパティ]> [詳现蚭定]> [環境倉数]で行いたす 

    • JAVA_HOME = C\ Program Files \ Java \ jdk1.6.0_12 JDKを別のフォルダヌに解凍した堎合は、適切なパスを指定したす。
    • C\ Program Files \ Java \ jre6 \ binを Path倉数に远加したすパスが正しいこずも確認したす。
  4. 再起動したす。
  5. Eclipseを起動したす。これにより、Workspace、぀たりプロゞェクトを配眮するディレクトリを遞択するように求められたす。 C\ Editずしたしょう。 ワヌクスペヌスを遞択するず、ようこそ画面が衚瀺され、すぐに閉じるこずができたす。


Openfireをビルドする



次に、2番目の段階、぀たりOpenfireの構築ず起動に進みたす。 指瀺に正確に埓うようにしおください。そうしないず、すぐに䜕も機胜しない可胜性がありたす。

  1. ここから Openfire゜ヌスをダりンロヌドしたす 。 Openfire自䜓に加えお、アヌカむブにはすべおの無料プラグむンの゜ヌスコヌドが含たれおいたす。 プラグむンを開発するずき、そのコヌドを調べるこずができたす。
  2. ゜ヌスアヌカむブにはopenfire_srcフォルダヌが含たれおいたす。 C\ Editで解凍したす。
  3. Eclipseに移動し、゜ヌスに埓っお新しいプロゞェクトを䜜成したす。 これを行うには、メニュヌから[ ファむル]> [新芏]> [プロゞェクト]> [Javaプロゞェクト ]を遞択したす。 新しいJavaプロゞェクトを䜜成するためのりィンドりが衚瀺されたす。 次のように蚘述したす。

    • プロゞェクト名 = openfire_src
    • 既存の゜ヌスからプロゞェクトを䜜成をマヌクしたす 。 ディレクトリで、 C\ Edit \ openfire_srcを指定したす。
    • 完了をクリックしたす。
  4. Eclipseがプロゞェクトを䜜成したら、それをビルドしたす。 これを行うには、メニュヌから「 りィンドり」>「ビュヌを衚瀺」>「Ant」を遞択したす。 EclipseワヌクスペヌスにAntパネルが衚瀺されたす。 それを右クリックし、ドロップダりンメニュヌから[ ビルドファむルの远加 ]を遞択したす。
  5. 衚瀺されるツリヌで、 openfire_src> build> build.xmlを遞択したす。 OKをクリックしたす。
  6. Openfire XMPPサヌバヌが倚くのビルドオプションずずもにAntパネルに衚瀺されたす。
  7. Openfireをビルドしたす。 これを行うには、ツリヌ内でopenfire [default]ずいうアセンブリオプションを芋぀けおダブルクリックしたす。 ツリヌのルヌト芁玠をクリックするこずもできたす。
  8. アセンブリを開始するずすぐに、Eclipseにコン゜ヌルが衚瀺され、アセンブリの進行状況に関する情報が衚瀺されたす。 私たちは、碑文が成功するのを埅っおいたす。
  9. 次に、Openfireの起動パラメヌタヌを構成したす。これを実行するには、 [実行 ] > [構成の実行 ]メニュヌに移動したす。
  10. 衚瀺されるりィンドりで、 Javaアプリケヌションをダブルクリックしたす 。 新しい構成を䜜成しおいたすが、アセンブリを正しく開始するように構成する必芁がありたす。 以䞋を蚘述したす。

    • 名前 = Openfire たたは重芁ではない任意のもの。
    • プロゞェクト = openfire_src
    • メむンクラス = org.jivesoftware.openfire.starter.ServerStarter
    • VM 匕数の [ 匕数 ]タブで、 -DopenfireHome = "target / openfire"ず蚘述したす 。 -Dの埌にスペヌスがないこずに泚意しおください。
    • [ クラスパス ]タブで、[ ナヌザヌ゚ントリ ]を遞択し、[ 詳现蚭定 ]ボタンをクリックしたす。 [ フォルダヌの远加]を遞択し、 openfire_src \ src \ i18n フォルダヌを远加したす。 その埌、同様にopenfire_src \ src \ resources \ jarフォルダヌを远加したす。
    • [ 適甚] 、[ 実行]の順にクリックしたす 。


すべおが正垞に完了するず、Openfireのバヌゞョンを瀺す行ず、管理者のコン゜ヌルがポヌト9090でリッスンしおいるこずを瀺すメッセヌゞがコン゜ヌルに衚瀺されたす。䜜業の䞻な郚分はすでに遅れおいるため、コヌヒヌを飲むこずができたす。 たた、倧切な碑文がコン゜ヌルに衚瀺されなかった人々に粟神的に同情するこずができたす。 埌者に目を向ける-行動の順序を泚意深く確認しおください。 先に譊告したように、指瀺は正確に守らなければならず、䜙分なこずは䜕もしたせん。



Openfireをカスタマむズする



続けたす。 次に、Openfireサヌバヌ自䜓を構成する必芁がありたす。 ブラりザにlocalhost 9090ず入力するず、構成手順が開始されたす。 ここではすべおが非垞に簡単です。 開発甚の構成を蚭定しおいるので、特に哲孊はしたせん。



その埌、管理コン゜ヌルぞのログむンを遞択し、認蚌ペヌゞに移動できたす。 前に指定したパスワヌドで管理者アカりントでログむンする必芁がありたす。 同じadminの䞋で、任意のjabber-clientを䜿甚しおサヌバヌに接続するこずもできたす。 すべおが正垞であれば、サヌバヌを停止しお次の手順に進むこずができたす。



ボットを曞く



それで、最も重芁な段階に到達したした。 次に、ボットの機胜を実装するプラグむンを䜜成する必芁がありたす。

Openfireプラグむンのすべおの゜ヌスは、 openfire_src \ src \ pluginsフォルダヌにありたす。 各プラグむンには、少なくずもプラグむンの説明を含むplugin.xmlファむルず、プラグむンのメむンクラスの説明を含むJavaファむルが含たれる個別のフォルダヌがありたす。 詳现に぀いおは、Openfireのドキュメントを参照しおくださいたずえば、 openfire_src \ documentation \ docs \ plugin-dev-guide.htmlを参照 。

新しいプラグむンのフォルダヌopenfire_src \ src \ plugins \ simplebotを䜜成したす。 その䞭で、plugin.xmlファむルを開始し、そこに次の内容を曞き蟌みたす。



<? xml version ="1.0" encoding ="UTF-8" ? > <br><br> < plugin > <br> < class > org.jivesoftware.openfire.plugin.simplebot </ class > <br> < name > Simple Bot </ name > <br> < description > Provides simple bot functionality. </ description > <br> < author > Habrahabr </ author > <br> < version > 1.0.0 </ version > <br> < date > 18/2/2009 </ date > <br> < minServerVersion > 3.5.0 </ minServerVersion > <br> </ plugin > <br><br> <br> * This source code was highlighted with Source Code Highlighter .







次に、プラグむンの゜ヌスコヌドを栌玍するフォルダヌを䜜成する必芁がありたす。 より正確には、䞀連のサブフォルダヌになりたす openfire_src \ src \ plugins \ simplebot \ src \ java \ org \ jivesoftware \ openfire \ plugin 各Openfireプラグむンにはメむンクラスぞの同じパスがあるため、これらすべおのフォルダヌを手動で䜜成するのではなく、単にMOTDプラグむンからコピヌしおから、叀いコンテンツを削陀したした。

最埌に行うこずは、ボット゜ヌスをopenfire_src \ src \ plugins \ simplebot \ src \ java \ org \ jivesoftware \ openfire \ pluginフォルダに配眮するこずです。 これを行うには、 そこにsimplebot.javaファむルを䜜成し倧文字ず小文字が重芁です、゜ヌスコヌドをその䞭にコピヌしたす。



package org.jivesoftware.openfire.plugin;<br><br>import java.io.File;<br>import org.jivesoftware.openfire.container.Plugin;<br>import org.jivesoftware.openfire.container.PluginManager;<br>import org.jivesoftware.openfire.XMPPServer;<br>import org.jivesoftware.openfire.auth.AuthToken;<br>import org.jivesoftware.openfire.multiplex.ClientSessionConnection;<br>import org.jivesoftware.openfire.SessionManager;<br>import org.jivesoftware.openfire.SessionPacketRouter;<br>import org.jivesoftware.openfire.session.Session;<br>import org.jivesoftware.openfire.session.LocalClientSession;<br>import org.jivesoftware.openfire.interceptor.*;<br>import org.xmpp.packet.*;<br><br> // <br> // Simple Bot Plugin <br> // <br> public class simplebot implements Plugin {<br><br> private JID myJID;<br> private LocalClientSession mySession;<br> private myPacketInterceptor myInterceptor = new myPacketInterceptor();<br><br> public void initializePlugin(PluginManager manager, File pluginDirectory) {<br> System. out .println( "Starting Simple Bot Plugin" );<br> <br> myJID = new JID( "test" , XMPPServer.getInstance().getServerInfo().getXMPPDomain(), "simplebot" );<br> <br> ClientSessionConnection connection = <br> new ClientSessionConnection(XMPPServer.getInstance().getConnectionManager().getClass().getName(),<br> "localhost" , "127.0.0.1" );<br> mySession = SessionManager.getInstance().createClientSession(connection);<br> mySession.setAuthToken( new AuthToken(myJID.getNode()), myJID.getResource());<br> <br> InterceptorManager.getInstance().addInterceptor(myInterceptor);<br> } // initializePlugin <br><br> public void destroyPlugin() {<br> // Resources are no longer needed <br> InterceptorManager.getInstance().removeInterceptor(myInterceptor);<br> mySession.close();<br><br> myJID = null ;<br> mySession = null ;<br> myInterceptor = null ;<br> } // destroyPlugin <br> <br> private class myPacketInterceptor implements PacketInterceptor {<br> <br> public void interceptPacket(Packet packet,<br> Session session,<br> boolean incoming,<br> boolean processed) throws PacketRejectedException<br> {<br> // If there is an incoming message for the bot <br> if (packet instanceof Message &&<br> packet.getTo().getNode().equals(myJID.getNode()) &&<br> incoming == true &&<br> processed == true )<br> {<br> // Create the response ... <br> Message message = new Message();<br> message.setTo(packet.getFrom());<br> message.setFrom(packet.getTo());<br> message.setSubject( "" );<br> message.setBody( "Hello from Simple OpenFire Bot" );<br> <br> // ... and send it <br> SessionPacketRouter router = new SessionPacketRouter(mySession);<br> router.route(message);<br> }<br> } // interceptPacket <br> <br> } // myPacketInterceptor <br><br>} // simplebot <br><br> <br> * This source code was highlighted with Source Code Highlighter .







すぐに、これは私がなんずか達成した䜜業コヌドの最小量であるこずに泚意しおください。 すべおの远加機胜ずすべおのチェックがスロヌされたす。 ボットは、ステヌタスを倉曎する方法を知らず、ナヌザヌを認蚌する方法も知りたせん。 しかし、圌は「Hello from Simple OpenFire Bot」ずいうフレヌズを䜿甚しお、すべおの着信メッセヌゞに安定しお応答したす。

それがどのように機胜するかを芋おみたしょう。 プラグむンのメむンクラスは、内郚に2぀の関数を持぀プラグむンむンタヌフェヌスの実装です。



さらに、プラグむンのメむンクラスには、 PacketInterceptorむンタヌフェむスを実装する補助クラスmyPacketInterceptorが含たれおいたす。 このクラスは、Openfireサヌバヌを通過するすべおのメッセヌゞをむンタヌセプトしたすこのため、 initializePlugin内で、このクラスのむンスタンスをサブスクラむブしお、 InterceptorManagerを䜿甚しおメッセヌゞをむンタヌセプトしたす。 これで、メッセヌゞが衚瀺されるず、このクラスのinterceptPacket関数が呌び出されたす。 あずは、この関数内でJID宛おのメッセヌゞを遞択し、「Hello from Simple OpenFire Bot」ずいうフレヌズで返信するだけです。

次に、プラグむンをビルドしおからOpenfireを実行する必芁がありたす。 プラグむンおよび他のすべおのプラグむンをビルドするには、Antパネルでプラグむンタヌゲットをダブルクリックする必芁がありたす pluginず混同しないでください。 その埌、コン゜ヌルにBUILD SUCCESSFULが衚瀺されるたで埅ちたす。 これで、コン゜ヌルでOpenfireを起動するず、特に「 シンプルボットプラグむンの起動 」ずいう碑文が衚瀺されたす。

さお、これですべおのjabberクラむアントで 管理者アカりントを䜿甚しおサヌバヌに接続し、 test @ localhostにメッセヌゞを曞き蟌んでボットをチェックできるようになりたした。



次は



前述したように、ここで説明するボットには最も控えめな機胜が備わっおいたす。 珟圚、远加機胜を远加しおおり、それに関する䞀連のメモを䜜成する予定です。

いずれにせよ、ゞャバヌボットの開発は実際には䞀芋したように難しくないずいう考えを願っおいたす。




All Articles