La sfida
L'obiettivo di questa sfida è creare un chatbot che possa essere eseguito nelle chat room di Stack Exchange. Il tuo bot deve essere in grado di rilevare quando un utente inserisce comandi specifici e rispondere ad esso. Questo è l'elenco dei comandi e cosa dovrebbe fare il tuo bot:
!!newest: visualizza il titolo (nessun link, ma il titolo) dell'ultima domanda pubblicata su questo sito (codegolf.SE).!!metanewest: visualizza il titolo dell'ultima domanda pubblicata sul meta sito (meta.codegolf.SE).!!questioncount: visualizza il conteggio delle domande corrente.!!metaquestioncount: genera il conteggio delle domande corrente sul meta sito.!!tag tagname: genera l'output del tag (la breve descrizione) del tag che viene fornito come primo parametro.!!metatag tagname: come sopra, ma per il meta sito.!!featured: genera il conteggio delle domande che attualmente hanno una taglia.!!metafeatured: genera il conteggio delle domande che hanno il tag [in evidenza] su Meta.
Regole
- Dovresti scrivere un programma completo, non uno snippet o una funzione.
- Nel caso sia necessario, è possibile richiedere nome utente e password come input (richiesta di input, STDIN, argomenti della riga di comando). Ciò sarà necessario se si utilizza, ad esempio, Python o Ruby, ma non sarà necessario se si utilizza JavaScript ed si esegue lo script nella stessa pagina della chat room.
- Puoi usare librerie esterne per fare cose come WebSocket. Queste librerie non devono contare per il conteggio dei personaggi.
È possibile utilizzare una chat involucro esterno (ma non è necessario, scrivere il proprio è incoraggiato), e quindi che deve contare per il conteggio dei caratteri. Inoltre, non è consentito modificare il codice del wrapper. Se lo usi, lo usi senza modifiche e tutti i personaggi devono essere contati (è una penalità per non aver scritto il tuo wrapper).
Deve contare solo il codice del wrapper stesso. Se ci sono altri file come esempi, questi non devono contare.
- Nessun uso di accorciatori di URL o altri modi per accorciare gli URL: la sfida è giocare a golf un chatbot, non giocare a golf un URL.
- Nessuna richiesta web, ad eccezione di quelle necessarie per chattare e ottenere le informazioni necessarie per rispondere ai comandi.
- L'uso delle "scappatoie" standard non è consentito.
- Se qualcuno pubblica un comando, è necessario rispondere con un messaggio di chat di questo formato:
@user response. Quindi, se scrivo il comando!!featurede ci sono 5 domande in primo piano, il tuo bot dovrebbe pubblicare@ProgramFOX 5. - Se collaudo il tuo bot, lo eseguirò dal mio account chatbot e lo eseguirò in questa chatroom . Metterò sempre alla prova i robot in quella stanza, quindi non è necessario fornire l'ID stanza come input, sarà sempre 14697. Questo ID non verrà fornito come input, dovrebbe essere codificato.
- Se il comando non viene trovato, output
@user The command [command] does not exist. Sostituisci[command]con il nome del comando inesistente. Se vengono forniti argomenti al comando, non generare gli argomenti, ma solo il nome del comando. - Se un comando ha molti argomenti, ignora gli argomenti che non sono necessari.
- Se un comando non ha argomenti sufficienti, output
@user You have not provided enough arguments - Il sistema impedisce che messaggi duplicati vengano pubblicati in un breve intervallo di tempo. Quindi, quando collaudo il tuo bot, non eseguirò mai due comandi che danno lo stesso output in successione (il che significa che non devi implementare un sistema che rende i messaggi diversi se sono duplicati, aggiungendo un punto per esempio).
- Il sistema impedisce che troppi messaggi vengano pubblicati entro un breve intervallo di tempo, quindi durante il test non invierò mai troppi comandi in un breve intervallo di tempo, il che significa che il tuo bot non deve occuparsene (aspettando un po 'di tempo prima di pubblicare, per esempio).
- Questo è code-golf , vince il programma con il minor numero di byte.
Iniziare
Ecco alcune informazioni per iniziare a scrivere il tuo bot. Non è necessario utilizzare questo, ma può essere una guida.
- Per accedere, accedi prima a un provider OpenID. Questo sarà sempre Stack Exchange OpenID (
https://openid.stackexchange.com). Il modulo di accesso si trova all'indirizzohttps://openid.stackexchange.com/account/logine fornire nome utente e password lì. - Quindi, accedi a
stackexchange.com. Il modulo di accesso si trova all'indirizzohttps://stackexchange.com/users/login. Scegli Stack Exchange come provider OpenID. - Dopo averlo fatto, accedi per chattare. Il modulo di accesso per questo si trova in
http://stackexchange.com/users/chat-login. Scegli Stack Exchange come provider OpenID. - Quindi devi ottenere il tuo
fkey. Per questo, vai ahttp://chat.stackexchange.com/chats/join/favoritee ottieni ilfkeyda un campo di input nascosto. - Per inviare un messaggio, inviare una richiesta a
http://chat.stackexchange.com/chats/14697/messages/newe fornire due parametri POST: untextparametro contenente il testo del messaggio e unfkeyparametro contenente ilfkey. Per vedere quando viene pubblicato un nuovo messaggio, puoi usare WebSocket (ma non è necessario, sentiti libero di usare qualcos'altro se è più corto). Si prega di vedere questa risposta scambio Meta Stack :
Chiacchierare
(wss://chat.sockets.stackexchange.com/events/<roomnumber>/<somehash>?l=<timethingy>)L'hash può essere recuperato POSTANDO l'id della stanza e toccando
http://chat.stackexchange.com/ws-authIl segnatempo è la chiave del tempo del json restituito
/chats/<roomno>/events.L'ID evento al momento della pubblicazione di un messaggio è
1.- È utile esaminare i wrapper di chat esistenti, come StackExchange-Chatty di Doorknob e ChatExchange di Manishearth , per vedere come funziona esattamente.
metafeaturedche significasse domande abbondanti su meta, ma ... grazie :-)