Meydan okuma
Bu zorluğun amacı, Stack Exchange'in sohbet odalarında yayınlanabilecek bir chatbot oluşturmaktır. Botunuzun belirli komutların bir kullanıcı tarafından ne zaman gönderileceğini algılaması ve ona cevap vermesi gerekir. Bu komutların listesi ve botunuzun yapması gerekenler:
!!newest
: Bu sitede yayınlanan en yeni sorunun başlığını (bağlantı yok, ancak başlığı) yazınız (codegolf.SE).!!metanewest
: meta sitesinde yayınlanan en yeni sorunun başlığını çıkar (meta.codegolf.SE).!!questioncount
: mevcut soru sayısını gösterir.!!metaquestioncount
: güncel soru sayısını meta sitede yayınlar.!!tag tagname
: ilk parametre olarak verilen etiketin etiketini (kısa açıklaması) çıktı.!!metatag tagname
: yukarıdakiyle aynı, ancak meta site için.!!featured
: şu anda ödül alan soruların sayısını gösterir.!!metafeatured
: Meta'da [özellikli] etiketi olan soru sayısını gösterir .
kurallar
- Snippet veya fonksiyon değil, tam bir program yazmalısınız.
- Gerekirse, kullanıcı adı ve şifreyi giriş olarak isteyebilirsiniz (giriş soran, STDIN, komut satırı argümanları). Örneğin Python veya Ruby kullanıyorsanız, bu gerekli olacaktır, ancak JavaScript kullanıyorsanız ve komut dosyasını sohbet odası sayfasının kendisinde çalıştırıyorsanız, bu gerekli olmayacaktır.
- WebSockets gibi şeyler yapmak için harici kütüphaneleri kullanmanıza izin verilir. Bu kütüphanelerin karakter sayınız için sayması gerekmez.
Sen edebilirsiniz karakter sayısı saymak zorunda olduğu daha sonra harici bir sohbet sarıcı kullanır (ama kendi yazma teşvik edilmektedir gerekmez) ve. Paketleyicinin kodunu değiştirmenize de izin verilmez. Kullanırsanız, herhangi bir değişiklik yapmadan kullanırsınız ve tüm karakterlerin sayılması gerekir (bu, kendi paketleyicinizi yazmamanın cezasıdır).
Sadece ambalajın kodunun sayması gerekir. Örnekler gibi başka dosyalar varsa, bunların sayılması gerekmez.
- URL kısaltıcıları veya URL'leri kısaltabilecek başka yollar kullanmamak: Zorluk bir URL'yi golf oynamak değil, bir sohbetçi ile golf oynamaktır.
- Sohbet etmek ve komutlara cevap verebilmek için gerekli bilgileri almak için gerekli olanlar dışında hiçbir web isteği yoktur.
- Kullanımı Standardı "boşluklar" izin verilmez.
- Birisi mesajların bir komut varsa, bu biçimin bir sohbet mesajıyla yanıt verdiklerini gerekir:
@user response
. Eğer emri yazarsam!!featured
ve 5 tane soru varsa, botunuz göndermelidir@ProgramFOX 5
. - Botunuzu test edersem, onu chatbot hesabımdan çalıştıracağım ve bu sohbet odasında çalıştıracağım . Botları her zaman o odada test edeceğim, bu yüzden oda kimliğini giriş olarak sağlamak gerekli değil, her zaman 14697 olacak. Bu kimlik giriş olarak verilmeyecek, kodlanmış olmalıdır.
- Komut bulunamazsa, çıktı
@user The command [command] does not exist
.[command]
Var olmayan komutun adıyla değiştirin . Eğer argüman komuta verildiyse, argümanları değil, sadece komut adını çıkarmayın. - Bir komutun birçok argümana sahip olması durumunda, gerekli olmayan argümanları dikkate almayın.
- Bir komutun yeterli argümanı yoksa, çıktı
@user You have not provided enough arguments
- Sistem, tekrarlanan mesajların kısa bir zaman aralığında gönderilmesini önler. Bu yüzden, botunuzu test ederken, aynı çıktısını art arda veren iki komutu asla çalıştırmayacağım (bu, örneğin kopyalarsa, örneğin bir nokta ekleyerek mesajları farklı kılan bir sistemi uygulamak zorunda olmadığınız anlamına gelir).
- Sistem kısa sürede çok fazla mesajın gönderilmesini önler, bu nedenle test ederken kısa süre içinde çok fazla komut göndermeyeceğim, bu da botunuzun buna dikkat etmesi gerekmediği anlamına gelir (bir süre bekleyerek) örneğin göndermeden önce).
- Bu kod golf , programın en az bayt sayısına sahip kazanmasıdır.
Başlamak
Botunuzu yazmaya başlamak için bazı bilgiler. Bunu kullanmak zorunda değilsin, ama bir rehber olabilir.
- Giriş yapmak için önce bir OpenID sağlayıcısına giriş yapın. Bu her zaman Yığın Değişim OpenID (
https://openid.stackexchange.com
) olacaktır. Giriş formu bulunurhttps://openid.stackexchange.com/account/login
ve orada kullanıcı adı ve şifreyi girin. - Ardından, giriş yapın
stackexchange.com
. Giriş formu adresinde bulunurhttps://stackexchange.com/users/login
. OpenID sağlayıcısı olarak Exchange Değişimi'ni seçin. - Bunu yaptıktan sonra sohbet etmek için giriş yapın. Bunun için giriş formu adresinde bulunur
http://stackexchange.com/users/chat-login
. OpenID sağlayıcısı olarak Exchange Değişimi'ni seçin. - Öyleyse seninkini almalısın
fkey
. Bunun için gizli bir giriş alanına gidinhttp://chat.stackexchange.com/chats/join/favorite
ve alınfkey
. - Bir mesaj göndermek için bir istek gönderin
http://chat.stackexchange.com/chats/14697/messages/new
ve iki POST parametresi sağlayın:text
mesaj metninifkey
içeren bir parametre vefkey
. Yeni bir mesajın ne zaman yayınlandığını görmek için WebSockets kullanabilirsiniz (ancak, daha kısa ise başka bir şey kullanmaktan çekinmeyin). Lütfen şu Meta Stack Exchange cevabına bakınız :
Sohbet
(wss://chat.sockets.stackexchange.com/events/<roomnumber>/<somehash>?l=<timethingy>)
Oda kimliği ve fkey ile POST gönderilerek karma alınabilir.
http://chat.stackexchange.com/ws-auth
Zaman, geri dönen json'un zaman anahtarı
/chats/<roomno>/events
.Bir mesaj gönderildiğinde olay kimliği
1
.- Tam olarak nasıl çalıştığını görmek için Doorknob'un StackExchange -Chatty ve Manishearth's ChatExchange gibi mevcut sohbet paketlerine bakmak faydalı olacaktır .
metafeatured
Meta ile ilgili sorular sormayı umuyordum , ama ... teşekkürler :-)