Die Herausforderung
Ziel dieser Herausforderung ist es, einen Chatbot zu erstellen, der in den Chatrooms von Stack Exchange ausgeführt werden kann. Ihr Bot muss in der Lage sein, zu erkennen, wann bestimmte Befehle von einem Benutzer gesendet wurden, und darauf zu antworten. Dies ist die Liste der Befehle und was Ihr Bot tun sollte:
!!newest
: gibt den Titel (kein Link, aber den Titel) der neuesten Frage auf dieser Seite aus (codegolf.SE).!!metanewest
: gibt den Titel der neuesten Frage aus, die auf der Meta-Site (meta.codegolf.SE) veröffentlicht wurde.!!questioncount
: gibt die aktuelle Anzahl der Fragen aus.!!metaquestioncount
: gibt die aktuelle Anzahl der Fragen auf der Meta-Site aus.!!tag tagname
: gibt den Tag-Auszug (die Kurzbeschreibung) des Tags aus, der als erster Parameter angegeben wurde.!!metatag tagname
: wie oben, aber für die Meta-Site.!!featured
: Gibt die Anzahl der Fragen aus, für die derzeit ein Kopfgeld gezahlt wird.!!metafeatured
: Gibt die Anzahl der Fragen mit dem [featured] -Tag auf Meta aus.
Regeln
- Sie sollten ein vollständiges Programm schreiben, kein Snippet oder eine Funktion.
- Falls erforderlich, können Sie Benutzername und Kennwort als Eingabe anfordern (Eingabeaufforderung, STDIN, Befehlszeilenargumente). Dies ist erforderlich, wenn Sie beispielsweise Python oder Ruby verwenden. Wenn Sie jedoch JavaScript verwenden und das Skript auf der Chatroom-Seite selbst ausführen, ist dies nicht erforderlich.
- Sie dürfen externe Bibliotheken verwenden, um Dinge wie WebSockets zu erledigen. Diese Bibliotheken müssen nicht für Ihre Zeichenzahl zählen.
Sie können einen externen Chat-Wrapper verwenden (müssen dies aber nicht, es wird empfohlen, einen eigenen zu schreiben), und dieser muss dann für die Anzahl der Zeichen zählen. Sie dürfen auch den Code des Wrappers nicht ändern. Wenn Sie es verwenden, verwenden Sie es ohne Änderungen und alle Zeichen müssen gezählt werden (das ist eine Strafe, wenn Sie nicht Ihren eigenen Wrapper schreiben).
Nur der Code des Wrappers selbst muss zählen. Wenn es andere Dateien wie Beispiele gibt, müssen diese nicht gezählt werden.
- Keine Verwendung von URL-Kürzern oder anderen Möglichkeiten, um URLs zu verkürzen: Die Herausforderung besteht darin, einen Chatbot zu spielen, nicht eine URL.
- Keine Webanfragen, außer denjenigen, die zum Chatten und Abrufen der für die Beantwortung der Befehle erforderlichen Informationen erforderlich sind.
- Die Verwendung der Standard "Lücken" ist nicht gestattet.
- Wenn jemand Beiträge ein Befehl, müssen Sie reagieren mit einer Chat - Nachricht dieses Format:
@user response
. Wenn ich also den Befehl schreibe!!featured
und es gibt 5 vorgestellte Fragen, sollte Ihr Bot posten@ProgramFOX 5
. - Wenn ich Ihren Bot teste, starte ich ihn von meinem Chatbot-Konto aus und starte ihn in diesem Chatroom . Ich werde die Bots in diesem Raum immer testen, daher ist es nicht erforderlich, eine Raum-ID als Eingabe anzugeben. Es ist immer 14697. Diese ID wird nicht als Eingabe angegeben, sie sollte fest codiert sein.
- Wird der Befehl nicht gefunden, wird ausgegeben
@user The command [command] does not exist
. Ersetzen Sie[command]
durch den Namen des nicht vorhandenen Befehls. Wenn dem Befehl Argumente bereitgestellt werden, geben Sie nicht die Argumente, sondern nur den Befehlsnamen aus. - Wenn ein Befehl zu viele Argumente enthält, ignorieren Sie die nicht erforderlichen Argumente.
- Wenn ein Befehl nicht genügend Argumente enthält, wird ausgegeben
@user You have not provided enough arguments
- Das System verhindert, dass doppelte Nachrichten innerhalb eines kurzen Zeitraums gebucht werden. Wenn Sie Ihren Bot testen, führe ich niemals zwei Befehle aus, die nacheinander die gleiche Ausgabe liefern (was bedeutet, dass Sie kein System implementieren müssen, das Nachrichten unterscheidet, wenn sie Duplikate sind, indem Sie beispielsweise einen Punkt hinzufügen).
- Das System verhindert, dass zu viele Nachrichten innerhalb eines kurzen Zeitraums gesendet werden. Daher sende ich beim Testen niemals zu viele Befehle innerhalb eines kurzen Zeitraums. Das bedeutet, dass Ihr Bot sich nicht darum kümmern muss (indem er einige Zeit wartet) zum Beispiel vor dem Posten).
- Dies ist Code-Golf , das Programm mit der geringsten Anzahl von Bytes gewinnt.
Loslegen
Hier finden Sie einige Informationen, um mit dem Schreiben Ihres Bots zu beginnen. Sie müssen dies nicht verwenden, aber es kann eine Anleitung sein.
- Um sich anzumelden, melden Sie sich zuerst bei einem OpenID-Anbieter an. Dies ist immer die Stack Exchange OpenID (
https://openid.stackexchange.com
). Das Anmeldeformular befindet sich unterhttps://openid.stackexchange.com/account/login
und gibt dort den Benutzernamen und das Passwort an. - Dann melden Sie sich an
stackexchange.com
. Das Anmeldeformular befindet sich unterhttps://stackexchange.com/users/login
. Wählen Sie Stack Exchange als OpenID-Provider. - Danach melde dich an, um zu chatten. Das Anmeldeformular dafür befindet sich unter
http://stackexchange.com/users/chat-login
. Wählen Sie Stack Exchange als OpenID-Provider. - Dann müssen Sie Ihre bekommen
fkey
. Gehen Sie dazu zuhttp://chat.stackexchange.com/chats/join/favorite
und holen Sie sich dasfkey
von einem versteckten Eingabefeld. - Senden Sie zum Posten einer Nachricht eine Anfrage an
http://chat.stackexchange.com/chats/14697/messages/new
und geben Sie zwei POST-Parameter an: einentext
Parameter mit dem Nachrichtentext und einenfkey
Parameter mit demfkey
. Um zu sehen, wann eine neue Nachricht veröffentlicht wird, können Sie WebSockets verwenden (müssen Sie aber nicht, können Sie auch etwas anderes verwenden, wenn es kürzer ist). Bitte lesen Sie diese Meta Stack Exchange-Antwort :
Plaudern
(wss://chat.sockets.stackexchange.com/events/<roomnumber>/<somehash>?l=<timethingy>)
Der Hash kann durch POSTING der Raum-ID und der F-Taste zu abgerufen werden
http://chat.stackexchange.com/ws-auth
Der timethingy ist der Zeitschlüssel des von zurückgegebenen json
/chats/<roomno>/events
.Die Ereignis-ID beim Versenden einer Nachricht lautet
1
.- Es ist hilfreich, sich die vorhandenen Chat-Wrapper wie StackExchange -Chatty von Doorknob und ChatExchange von Manishearth anzusehen , um zu sehen, wie dies genau funktioniert.
metafeatured
, dass es viele Fragen zu Meta geben würde, aber ... danke :-)