チャレンジ
この課題の目標は、Stack Exchangeのチャットルームで実行できるチャットボットを作成することです。ボットは、特定のコマンドがユーザーによって投稿されたときにそれを検出し、それに応答できる必要があります。これはコマンドのリストであり、ボットが行うべきことです:
!!newest
:このサイト(codegolf.SE)に投稿された最新の質問のタイトル(リンクではなくタイトル)を出力します。!!metanewest
:メタサイト(meta.codegolf.SE)に投稿された最新の質問のタイトルを出力します。!!questioncount
:現在の質問数を出力します。!!metaquestioncount
:メタサイトで現在の質問数を出力します。!!tag tagname
:最初のパラメーターとして指定されたタグの抜粋(短い説明)を出力します。!!metatag tagname
:上記と同じですが、メタサイト用です。!!featured
:現在賞金がある質問の数を出力します。!!metafeatured
:Metaに[featured]タグがある質問の数を出力します。
ルール
- スニペットや関数ではなく、完全なプログラムを作成する必要があります。
- 必要な場合は、入力としてユーザー名とパスワードを要求できます(入力、STDIN、コマンドライン引数の入力を求めます)。これは、たとえばPythonやRubyを使用する場合に必要になりますが、JavaScriptを使用してチャットルームページ自体でスクリプトを実行する場合には必要ありません。
- 外部ライブラリを使用して、WebSocketのようなことを行うことができます。これらのライブラリは、文字数をカウントする必要はありません。
あなたは、することができます(ただし、あなたが、あなた自身を書くことが奨励されている必要はありません)、外部チャットラッパーを使用して、文字カウントにカウントするように持っています。また、ラッパーのコードを変更することもできません。使用する場合は、変更せずに使用し、すべての文字をカウントする必要があります(独自のラッパーを作成しない場合のペナルティとして)。
ラッパー自体のコードのみが重要です。例などの他のファイルがある場合、これらはカウントする必要はありません。
- URL短縮サービスやURLを短くする他の方法を使用しません。チャレンジはURLをゴルフするのではなく、チャットボットをゴルフすることです。
- チャットやコマンドへの応答に必要な情報の取得に必要なものを除き、Webリクエストはありません。
- 標準の「抜け穴」の使用は許可されていません。
- 誰かがコマンドを投稿した場合、次の形式のチャットメッセージで応答する必要があります
@user response
。したがって、コマンドを作成し、!!featured
5つの注目すべき質問がある場合、ボットは投稿する必要があります@ProgramFOX 5
。 - ボットをテストする場合、チャットボットアカウントから実行し、このチャットルームで実行します。私は常にその部屋でボットをテストするので、部屋IDを入力として提供する必要はありません。常に14697です。このIDは入力として与えられないので、ハードコーディングする必要があります。
- コマンドが見つからない場合は、出力します
@user The command [command] does not exist
。[command]
存在しないコマンドの名前に置き換えます。引数がコマンドに提供されている場合、引数を出力せず、コマンド名のみを出力します。 - コマンドに多数の引数が必要な場合は、不要な引数を無視してください。
- コマンドに十分な引数がない場合、出力
@user You have not provided enough arguments
- システムは、重複したメッセージが短い時間範囲内に投稿されるのを防ぎます。したがって、ボットをテストするとき、同じ出力を連続して与える2つのコマンドを実行することはありません(つまり、たとえばドットを追加することで、メッセージが重複している場合にメッセージを変えるシステムを実装する必要はありません)。
- システムは、短い時間範囲内に投稿されるメッセージが多すぎることを防止するため、テスト時には、短い時間範囲内にあまり多くのコマンドを送信することはありません。つまり、ボットがこれを処理する必要はありません。たとえば、投稿する前に)。
- これはcode-golfで、バイト数が最小のプログラムが勝ちます。
入門
ボットの作成を開始するための情報を次に示します。これを使用する必要はありませんが、ガイダンスになる可能性があります。
- ログインするには、まずOpenIDプロバイダーにログインします。これは常にStack Exchange OpenID(
https://openid.stackexchange.com
)です。ログインフォームはにあり、https://openid.stackexchange.com/account/login
そこにユーザー名とパスワードを入力します。 - 次に、にログインし
stackexchange.com
ます。ログインフォームはにありますhttps://stackexchange.com/users/login
。OpenIDプロバイダーとしてStack Exchangeを選択します。 - その後、ログインしてチャットします。そのためのログインフォームはにあり
http://stackexchange.com/users/chat-login
ます。OpenIDプロバイダーとしてStack Exchangeを選択します。 - 次に、あなたが取得する必要があります
fkey
。そのhttp://chat.stackexchange.com/chats/join/favorite
ためにfkey
は、非表示の入力フィールドに移動して取得します。 - メッセージを投稿するには、にリクエストを送信し、メッセージテキストを含むパラメーターとを含む
http://chat.stackexchange.com/chats/14697/messages/new
パラメーターという2つのPOSTパラメーターを提供text
しfkey
ますfkey
。 新しいメッセージがいつ投稿されたかを確認するには、WebSocketsを使用できます(ただし、短くする必要がある場合は自由に使用してください)。このMeta Stack Exchangeの回答をご覧ください:
チャット
(wss://chat.sockets.stackexchange.com/events/<roomnumber>/<somehash>?l=<timethingy>)
ルームIDとfkeyをPOSTすることでハッシュを取得できます
http://chat.stackexchange.com/ws-auth
timethingyは、によって返されるjsonの時間キーです
/chats/<roomno>/events
。メッセージが投稿されたときのイベントIDは
1
です。- DoorknobのStackExchange-ChattyやManishearthのChatExchangeなどの既存のチャットラッパーを調べて、どのように機能するかを確認すると便利です。
metafeatured
メタ上bountied質問を意味しますが...ありがとう:-)