Wyzwanie
Celem tego wyzwania jest stworzenie chatbota, który będzie działał na czatach Stack Exchange. Twój bot musi być w stanie wykryć, kiedy użytkownik opublikuje określone polecenia i na nie odpowiedzieć. Oto lista poleceń i to, co powinien zrobić twój bot:
!!newest
: wypisuje tytuł (bez linku, ale tytuł) najnowszego pytania opublikowanego na tej stronie (codegolf.SE).!!metanewest
: wypisuje tytuł najnowszego pytania opublikowanego na stronie meta (meta.codegolf.SE).!!questioncount
: wyświetla bieżącą liczbę pytań.!!metaquestioncount
: wyświetla bieżącą liczbę pytań w witrynie meta.!!tag tagname
: wypisuje fragment znacznika (krótki opis) znacznika, który jest podany jako pierwszy parametr.!!metatag tagname
: tak samo jak powyżej, ale dla strony z meta.!!featured
: wypisz liczbę pytań, które aktualnie mają nagrodę.!!metafeatured
: wypisz liczbę pytań, które mają tag [polecany] w Meta.
Zasady
- Powinieneś napisać pełny program, a nie fragment kodu lub funkcję.
- W razie potrzeby możesz podać nazwę użytkownika i hasło jako dane wejściowe (monit o podanie, STDIN, argumenty wiersza poleceń). Będzie to konieczne, jeśli używasz na przykład Python lub Ruby, ale nie będzie konieczne, jeśli używasz JavaScript i uruchamiasz skrypt na samej stronie pokoju czatu.
- Możesz używać bibliotek zewnętrznych do robienia rzeczy takich jak WebSockets. Te biblioteki nie muszą liczyć się do liczby twoich postaci.
Państwo może użyć zewnętrznego czat opakowanie (ale nie muszą, pisząc własną zachęca), a następnie, że musi liczyć na liczby znaków. Nie możesz również zmieniać kodu opakowania. Jeśli go używasz, używasz go bez modyfikacji, a wszystkie postacie muszą być policzone (jest to kara za nie napisanie własnego opakowania).
Tylko kod samego opakowania musi się liczyć. Jeśli istnieją inne pliki, takie jak przykłady, nie muszą się one liczyć.
- Bez użycia skracaczy URL lub innych sposobów, które mogą skrócić adresy URL: wyzwaniem jest gra w chatbota w golfa, a nie URL.
- Brak żądań internetowych, z wyjątkiem tych niezbędnych do czatu i uzyskania informacji niezbędnych do odpowiedzi na polecenia.
- Korzystanie ze standardowych „luk” jest niedozwolone.
- Jeśli ktoś stanowisk polecenia, trzeba odpowiedzieć za pomocą wiadomości czatu w tym formacie:
@user response
. Więc jeśli napiszę polecenie!!featured
i pojawi się 5 polecanych pytań, twój bot powinien opublikować@ProgramFOX 5
. - Jeśli przetestuję twojego bota, uruchomię go z mojego konta chatbota i uruchomię w tym pokoju rozmów . Zawsze będę testować boty w tym pokoju, więc nie trzeba podawać identyfikatora pokoju jako danych wejściowych, zawsze będzie to 14697. Ten identyfikator nie będzie podawany jako dane wejściowe, powinien być zakodowany na stałe.
- Jeśli polecenie nie zostanie znalezione, wyjdź
@user The command [command] does not exist
. Zastąp[command]
nazwą nieistniejącego polecenia. Jeśli argumenty zostaną przekazane do polecenia, nie wysyłaj argumentów, tylko nazwa polecenia. - Jeśli polecenie ma wiele argumentów, zignoruj niepotrzebne argumenty.
- Jeśli polecenie nie ma wystarczającej liczby argumentów, wyjdź
@user You have not provided enough arguments
- System zapobiega wysyłaniu zduplikowanych wiadomości w krótkim czasie. Dlatego podczas testowania bota nigdy nie uruchamiam dwóch poleceń, które dają te same dane wyjściowe kolejno (co oznacza, że nie musisz implementować systemu, który odróżnia komunikaty, jeśli są duplikatami, na przykład poprzez dodanie kropki).
- System zapobiega wysyłaniu zbyt wielu wiadomości w krótkim czasie, więc podczas testowania nigdy nie wyślę zbyt wielu poleceń w krótkim czasie, co oznacza, że twój bot nie musi się tym zajmować (czekając trochę czasu na przykład przed opublikowaniem).
- Jest to golfowy program, który wygrywa najmniej bajtów.
Pierwsze kroki
Oto kilka informacji na temat pisania bota. Nie musisz tego używać, ale może to być wskazówka.
- Aby się zalogować, najpierw zaloguj się do dostawcy OpenID. Zawsze będzie to Stack Exchange OpenID (
https://openid.stackexchange.com
). Formularz logowania znajduje się pod adresemhttps://openid.stackexchange.com/account/login
i podaje tam nazwę użytkownika i hasło. - Następnie zaloguj się do
stackexchange.com
. Formularz logowania znajduje się pod adresemhttps://stackexchange.com/users/login
. Wybierz Stack Exchange jako dostawcę OpenID. - Po wykonaniu tej czynności zaloguj się na czacie. Formularz logowania znajduje się na stronie
http://stackexchange.com/users/chat-login
. Wybierz Stack Exchange jako dostawcę OpenID. - Następnie musisz zdobyć
fkey
. W tym celu przejdź do ukrytego pola wejściowegohttp://chat.stackexchange.com/chats/join/favorite
i pobierz gofkey
. - Aby opublikować wiadomość, wyślij żądanie
http://chat.stackexchange.com/chats/14697/messages/new
i podaj dwa parametry POST:text
parametr zawierający tekst wiadomości orazfkey
parametr zawierającyfkey
. Aby zobaczyć, kiedy zostanie opublikowana nowa wiadomość, możesz użyć WebSockets (ale nie musisz, możesz użyć czegoś innego, jeśli jest krótsza). Zobacz odpowiedź na Meta Stack Exchange :
Czat
(wss://chat.sockets.stackexchange.com/events/<roomnumber>/<somehash>?l=<timethingy>)
Hash można pobrać, POSTując identyfikator pokoju i fkey do
http://chat.stackexchange.com/ws-auth
Harmonogram to klucz czasowy jsona zwróconego przez
/chats/<roomno>/events
.Identyfikator zdarzenia po opublikowaniu wiadomości to
1
.- Przydatne jest spojrzenie na istniejące opakowania czatów, takie jak StackExchange-Chatty Doorknob i ChatExchange Manishearth , aby zobaczyć, jak to dokładnie działa.
metafeatured
że oznaczą to szczere pytania na temat meta, ale ... dzięki :-)Odpowiedzi:
JavaScript + jQuery,
13621258 bajtówGra w golfa za pomocą minifikatora:
Musisz uruchomić skrypt bezpośrednio w przeglądarce (używając jQuery Stack Stack):
Można było grać w golfa o wiele więcej, ale nie przeszkadzało.
Bez golfa:
źródło
update
ilatestMessage
.0==e.items.length
z1>e.items.length
ponieważ długość nigdy nie spada poniżej zera.