Tantangan
Tujuan dari tantangan ini adalah untuk membuat chatbot yang dapat berjalan di chatroom Stack Exchange. Bot Anda harus dapat mendeteksi kapan perintah spesifik diposting oleh pengguna dan menanggapinya. Ini adalah daftar perintah, dan apa yang harus dilakukan bot Anda:
!!newest
: output judul (tanpa tautan, tetapi judul) dari pertanyaan terbaru yang diposting di situs ini (codegolf.SE).!!metanewest
: output judul pertanyaan terbaru yang diposting di situs meta (meta.codegolf.SE).!!questioncount
: output jumlah pertanyaan saat ini.!!metaquestioncount
: menampilkan jumlah pertanyaan saat ini di situs meta.!!tag tagname
: output kutipan tag (deskripsi singkat) dari tag yang diberikan sebagai parameter pertama.!!metatag tagname
: sama seperti di atas, tetapi untuk situs meta.!!featured
: menampilkan hitungan pertanyaan yang saat ini memiliki karunia.!!metafeatured
: menampilkan hitungan pertanyaan yang memiliki tag [fitur] di Meta.
Aturan
- Anda harus menulis program yang lengkap, bukan cuplikan atau fungsi.
- Jika perlu, Anda dapat meminta nama pengguna dan kata sandi sebagai input (meminta input, STDIN, argumen baris perintah). Ini akan diperlukan jika Anda menggunakan, misalnya, Python atau Ruby, tetapi tidak perlu jika Anda menggunakan JavaScript dan menjalankan skrip di halaman ruang obrolan itu sendiri.
- Anda diizinkan menggunakan perpustakaan eksternal untuk melakukan hal-hal seperti WebSockets. Perpustakaan ini tidak harus menghitung untuk jumlah karakter Anda.
Anda dapat menggunakan bungkus obrolan eksternal (tetapi Anda tidak harus, menulis sendiri milik Anda), dan kemudian itu harus dihitung untuk jumlah karakter. Anda juga tidak diperbolehkan mengubah kode pembungkus. Jika Anda menggunakannya, Anda menggunakannya tanpa modifikasi dan semua karakter harus dihitung (itu sebagai hukuman karena tidak menulis bungkus Anda sendiri).
Hanya kode bungkus itu sendiri yang harus dihitung. Jika ada file lain seperti contoh, ini tidak harus dihitung.
- Tidak ada penggunaan penyingkat URL atau cara lain yang dapat membuat URL lebih pendek: tantangannya adalah untuk golf chatbot, bukan untuk golf URL.
- Tidak ada permintaan web, kecuali yang diperlukan untuk mengobrol dan mendapatkan informasi yang diperlukan untuk menanggapi perintah.
- Penggunaan "celah" Standar tidak diperbolehkan.
- Jika seseorang pos komando, Anda perlu merespon dengan pesan chat dari format ini:
@user response
. Jadi, jika saya menulis perintah!!featured
dan ada 5 pertanyaan utama, bot Anda harus dikirim@ProgramFOX 5
. - Jika saya menguji bot Anda, saya akan menjalankannya dari akun chatbot saya dan saya akan menjalankannya di chatroom ini . Saya akan selalu menguji bot di ruangan itu, jadi tidak perlu memberikan ID kamar sebagai input, itu akan selalu 14697. ID ini tidak akan diberikan sebagai input, itu harus hard-coded.
- Jika perintah tidak ditemukan, output
@user The command [command] does not exist
. Ganti[command]
dengan nama perintah yang tidak ada. Jika argumen disediakan untuk perintah, jangan tampilkan argumen, hanya nama perintah. - Jika suatu perintah memiliki banyak argumen, abaikan argumen yang tidak perlu.
- Jika suatu perintah tidak memiliki cukup argumen, keluaran
@user You have not provided enough arguments
- Sistem mencegah pesan duplikat diposting dalam rentang waktu singkat. Jadi, saat menguji bot Anda, saya tidak akan pernah menjalankan dua perintah yang memberikan output yang sama secara berurutan (yang berarti bahwa Anda tidak harus mengimplementasikan sistem yang membuat pesan berbeda jika duplikat, dengan menambahkan titik misalnya).
- Sistem mencegah terlalu banyak pesan yang diposting dalam rentang waktu singkat, jadi saat pengujian, saya tidak akan pernah mengirim terlalu banyak perintah dalam rentang waktu singkat, yang berarti bahwa bot Anda tidak harus mengurus ini (dengan menunggu beberapa saat) sebelum memposting, misalnya).
- Ini adalah kode-golf , program dengan jumlah byte terkecil yang menang.
Mulai
Berikut adalah beberapa info untuk memulai menulis bot Anda. Anda tidak harus menggunakan ini, tetapi ini bisa menjadi panduan.
- Untuk masuk, pertama masuk ke penyedia OpenID. Ini akan selalu menjadi Stack Exchange OpenID (
https://openid.stackexchange.com
). Formulir login terletak dihttps://openid.stackexchange.com/account/login
, dan berikan nama pengguna dan kata sandi di sana. - Lalu, masuk ke
stackexchange.com
. Formulir login terletak dihttps://stackexchange.com/users/login
. Pilih Stack Exchange sebagai penyedia OpenID. - Setelah melakukan itu, masuk untuk mengobrol. Formulir masuk untuk yang terletak di
http://stackexchange.com/users/chat-login
. Pilih Stack Exchange sebagai penyedia OpenID. - Maka Anda harus mendapatkan
fkey
. Untuk itu, bukahttp://chat.stackexchange.com/chats/join/favorite
dan dapatkanfkey
dari bidang input tersembunyi. - Untuk mengirim pesan, kirim permintaan ke
http://chat.stackexchange.com/chats/14697/messages/new
, dan berikan dua parameter POST:text
parameter yang berisi teks pesan, danfkey
parameter yang berisifkey
. Untuk melihat kapan pesan baru diposting, Anda dapat menggunakan WebSockets (tetapi tidak harus, jangan ragu untuk menggunakan sesuatu yang lain jika lebih pendek). Silakan lihat jawaban Meta Stack Exchange ini :
Obrolan
(wss://chat.sockets.stackexchange.com/events/<roomnumber>/<somehash>?l=<timethingy>)
Hash dapat diambil dengan POSTing id dan fkey kamar
http://chat.stackexchange.com/ws-auth
Ketepatan waktu adalah kunci waktu dari json yang dikembalikan oleh
/chats/<roomno>/events
.ID acara saat pesan diposting adalah
1
.- Sangat berguna untuk melihat pembungkus obrolan yang ada, seperti Doorknob's StackExchange-Chatty dan Manishearth's ChatExchange , untuk melihat bagaimana cara kerjanya.
metafeatured
akan berarti pertanyaan pada meta, tapi ... terima kasih :-)Jawaban:
JavaScript + jQuery,
13621258 byteGolf menggunakan minifier:
Anda harus menjalankan skrip langsung di browser (menggunakan karya jQuery Stack Exchange):
Bisa bermain golf lebih banyak, tetapi tidak bisa diganggu.
Tidak golf:
sumber
update
danlatestMessage
.0==e.items.length
dengan1>e.items.length
karena panjangnya tidak akan pernah di bawah nol.