インターネットリレーチャット(IRC)を使用している場合は、ある時点でボットに遭遇した可能性があります。ボットは、人間と同じ方法でネットワークに接続する独立したプログラムまたはスクリプトです。ユーザーコマンドやチャットに応答するようにプログラムすることができます。このガイドでは、IRCボットを構築するためのオプションと、ゼロから構築する方法を見つけることができます。
ステップ
方法 1 2の: オプションの評価
- 1 クライアントスクリプトのインストールを検討してください。 単純なタスクを実行したいだけで、それを独立したプログラムにしたくない場合があります。その場合、スクリプトをIRCクライアントに添付できます。これは非常に一般的です mIRC 、堅牢なスクリプトエンジンと、さまざまな利用可能なスクリプトがあります。これは最も簡単なオプションであり、プログラミングの経験があまりない場合やまったくない場合に強くお勧めします。このガイドの残りの部分では、手順に従うためにコンピュータープログラミングの知識が必要です。
- 2 ボットの既存のコードベースを検討してください。 独自のカスタマイズされたボットをすばやくセットアップするのに役立つ多くのオープンソースおよび無料のプログラムがあります。そのような例の1つは エッグドロップ 、最も古いIRCボットはまだ維持されています。
- 3 独自のボットを作成することを検討してください。 プログラミング言語の使い方をすでに知っている上級IRCユーザーや開発者にとって、これは素晴らしいオプションです。ソケットをサポートしている限り、ほとんどすべての言語を使用できますが、一般的に使用される言語には、Python、Lua、PHP、C、Perlなどがあります。これらのどれも知らないが、別の言語を知っている場合、それは問題ではありません。通常、Web上で任意の言語の例を見つけることができます。この記事では、PHPの使用方法を示します。 PHPを使用するには、コンピューターまたはサーバーにPHP-CLIをインストールする必要があります。
- PHPはからダウンロードできます php.net
- PHPスクリプトは、コマンドラインから実行できます。 PHPの使用に関する追加情報とヘルプについては、を参照してください。 このPHPマニュアルページ 。
方法 2 2の: 独自のボットの開発
- 1 接続の詳細を収集します。 ネットワークに正常に接続するには、次の情報を取得する必要があります。
- サーバ :
chat.freenode.net
など、IRCへの接続に使用されるサーバーのドメイン名 - ポート :ほとんどの場合、これは6667ですが、よくわからない場合は、独自のIRCクライアントまたはネットワークのWebサイトを確認してください。
- ニックネーム :ボットが使用するニックネーム。一部の特殊文字は通常許可されていないことに注意してください(@#!〜)。
- 同一 :誰かが次のようなWHOISを実行すると、ニックネームの後にidentフィールドが表示されます:
nickname!ident@hostname
- GECOS :このフィールドには通常、ユーザーの本名またはボットの一般的な説明が含まれますが、必要なものを入力できます。
- チャネル :通常、ボットを1つ以上のチャネルに存在させたいと考えています。ほとんどのネットワークでは、これらのプレフィックスは「#」ですが、それ以外の場合もあります。
- サーバ :
- 2 スクリプトで構成を初期化します。 これを行う最も基本的な方法は、上記の構成名に従っていくつかの変数に名前を付けることです。それらを構成ファイルに保存して解析することもできますが、今のところは絶対的な必需品に固執します。
- 3 ネットワークに接続します。 これを行うには、指定されたポートでサーバーへのソケットを開く必要があります。また、何らかの理由で接続が失敗した場合に備えて、この部分にエラー処理コードを追加する必要があります。この場合、PHPは、エラーを効果的に処理するためのいくつかの優れた関数を提供します。
- 4 ボットを登録します。 これは、ニックネーム、ID、およびGECOSをサーバーに提供することを意味します。 ない NickServに登録します。これを行うには、NICKコマンドとUSERコマンドをサーバーに書き込み、その後にキャリッジリターンと改行を記述します。 IRCプロトコルの仕様であるRFC1459で指定されている方法であるため、示されているとおりに実行することが不可欠です。
- 真ん中の2つのパラメーター(この場合は*と8)を指定する必要がありますが、サーバーによって無視されることに注意してください。これら2つは、直接接続しているクライアントではなく、リンクされたサーバー間でのみ使用されます。
- 5 ループを使用してソケットからデータをフェッチし続けます。 ループを使用しなかった場合、スクリプトはすぐに終了し、ボットは基本的に役に立たなくなります。接続を維持するには、サーバーからデータをフェッチし、必要なストリーム内の入力を確認し、必要な場合はそれに応答する必要があります。ここでは、socket_read()を使用してデータを取得し、使用可能なデータを取得しています。ある場合は、ループ内のすべてのことを実行し続けます。ボットの観点から何が起こっているかを確認できるように、生データをコンソールに出力することも役立つ場合があります。
- 6 pingハンドラーを作成します。 これは重要。 pingにタイムリーに応答しない場合、サーバーは接続を切断します。最初にそれを処理しましょう。サーバーから送信されたpingは次のようになります:
PING :rajaniemi.freenode.net
。サーバーは「:」の後に名前を付ける必要はなく、必要なものを何でも提供できます。 PONGを使用する場合を除いて、サーバーが言ったことを正確に繰り返す必要があります。 - 7 チャンネルに参加してください。 さて、ネットワークに接続してpingに応答するボットがありますが、それ以外は何もしません。人々があなたのボットを見て使用するためには、それはチャネルにあるべきです(そうでなければ、プライベートメッセージに応答するようにボットに指示する必要があります)。
- これを行うために、サーバーのステータスコード376または422を確認します。376はMOTD(その日のメッセージ)が終了したことを意味します。 422は、送信するMOTDがなかったことを意味します。そのMOTDは、接続時にサーバーが送信するものにすぎませんが、チャネルへの参加を開始できる時期を示す良い指標です。
- JOINコマンドを発行する必要があります。このコマンドの後には、コンマで区切った1つ以上のチャネルを続けることができます。
- サーバーが送信するデータは、スペースで区切られていると便利です。このようにして、データを分割し、配列インデックスを使用して参照できます。
- 8 チャネルメッセージに応答します。 さて、楽しい部分です。ボットがチャネルに参加したので、これでボットを好きなように使用できます。 @mooというコマンドの例を作成しましょう。
- メッセージが始まるオフセットに注意してください(これはチャネルとプライベートメッセージの両方に適用されます)。それは常に同じ場所にあります。
- チャンク化されたデータをつなぎ合わせることで、スペースを含むコマンドを処理できます($ d)。それはこの記事の範囲を超えています。
- ターゲットがチャネル(#botters-testなど)の場合は、それに返信します。プライベートメッセージの場合、このビットがボットのニックネームになります。次に、自分のニックネームではなく、送信者のニックネームを使用して返信する必要があります(そうしないと、自分自身と話していることになり、それはばかげています)。
- 9 ボットを拡張します。 上記の実装を使用して、多くの新機能を追加できます。 opsの管理、キックと禁止、トピックの設定など、IRCネットワークに発行できるコマンドは他にもたくさんあります。広告
コミュニティQ&A
探す 新しい質問を追加- 質問メモ帳+に追加した後、これらのコードはどこに追加しますか? フライング8lack PHPをサポートするWebサーバー(Apacheなど)に配置します。 XXAMPをローカルコンピューターにインストールするか、別のWebサーバーでホストすることができます。
広告
チップ
- 次のようにメッセージの前に付けることで、「/ me」コマンドの結果を生成できます。
- PRIVMSG #channel: 001ACTIONテキストはこちら 001 。
- 001はASCII文字1を意味し、二重引用符で囲まれたPHP文字列でそのように解釈されます。または、
chr(1)
を使用することもできます文字列の外側。
- メッセージでは、「 003」(ASCIIコード3)の前に色の番号を付けて、色を生成できます。 0 =白、1 =黒、2 =青、3 =緑、4 =赤[...]。見る mIRC より多くの色のためののページ。
- 礼儀として、ボットをオンラインにする前に、チャネル所有者とIRCオペレーターの同意を得てください。すべてのネットワークとチャネルが、行儀の良いボットであっても、ボットに対して歓迎すべきポリシーを持っているわけではありません。
- 一部のIRCデーモンは、プロトコルの仕様を超えて、他の機能を実装します。特定のネットワーク向けに調整している場合、それらのプロトコルについて知っていれば、確かにそれらの機能を利用できます。ただし、ボットを複数のネットワークにデプロイする場合は、RFCの内容を維持するようにしてください。
広告ヒントを送信するすべてのヒントの送信は、公開される前に慎重に確認されます。レビューのためにヒントを送信していただきありがとうございます。