Le défi
Le but de ce défi est de créer un chatbot pouvant s'exécuter dans les salles de discussion de Stack Exchange. Votre bot doit pouvoir détecter le moment où un utilisateur envoie des commandes spécifiques et y répondre. Voici la liste des commandes, et ce que votre bot devrait faire:
!!newest
: affiche le titre (pas de lien, mais le titre) de la dernière question postée sur ce site (codegolf.SE).!!metanewest
: affiche le titre de la dernière question publiée sur le méta-site (meta.codegolf.SE).!!questioncount
: affiche le nombre de questions actuel.!!metaquestioncount
: affiche le nombre de questions actuel sur le méta-site.!!tag tagname
: affiche l'extrait de balise (la description courte) de la balise donnée en tant que premier paramètre.!!metatag tagname
: idem que ci-dessus, mais pour le méta-site.!!featured
: affiche le nombre de questions pour lesquelles une prime est actuellement disponible.!!metafeatured
: affiche le nombre de questions portant la balise [en vedette] sur Meta.
Règles
- Vous devriez écrire un programme complet, pas un extrait ou une fonction.
- Si cela est nécessaire, vous pouvez demander un nom d'utilisateur et un mot de passe (invite à saisir, STDIN, arguments de ligne de commande). Cela sera nécessaire si vous utilisez, par exemple, Python ou Ruby, mais pas si vous utilisez JavaScript et exécutez le script sur la page de la salle de conversation.
- Vous êtes autorisé à utiliser des bibliothèques externes pour effectuer des tâches telles que WebSockets. Ces bibliothèques ne doivent pas compter pour votre nombre de personnages.
Vous pouvez utiliser un wrapper de discussion externe (mais vous n’avez pas à le faire, la rédaction de votre propre est encouragée), et cela doit compter pour le nombre de caractères. Vous n'êtes pas non plus autorisé à modifier le code du wrapper. Si vous l'utilisez, vous l'utilisez sans modifications et tous les caractères doivent être comptés (c'est une pénalité pour ne pas écrire votre propre wrapper).
Seul le code du wrapper lui-même doit compter. S'il existe d'autres fichiers tels que des exemples, ceux-ci ne doivent pas compter.
- Aucune utilisation de raccourcisseurs d'URL ou d'autres moyens permettant de raccourcir les URL: le défi consiste à jouer au golf avec un chat, et non à jouer au golf avec une URL.
- Pas de demandes Web, sauf celles nécessaires pour discuter et obtenir les informations nécessaires pour répondre aux commandes.
- L'utilisation des "échappatoires" standard n'est pas autorisée.
- Si quelqu'un poste une commande, vous devez répondre avec un message de chat de ce format:
@user response
. Donc, si j'écris la commande!!featured
et qu'il y a 5 questions en vedette, votre bot devrait poster@ProgramFOX 5
. - Si je teste votre bot, je le lancerai à partir de mon compte chatbot et je le lancerai dans ce salon de discussion . Je vais toujours tester les robots dans cette salle, il n'est donc pas nécessaire de fournir un ID de salle en tant qu'entrée, il s'agira toujours de 14697. Cet ID ne sera pas donné en entrée, il devrait être codé en dur.
- Si la commande est introuvable, affichez
@user The command [command] does not exist
. Remplacez[command]
par le nom de la commande inexistante. Si des arguments sont fournis à la commande, ne les affichez pas, mais uniquement le nom de la commande. - Si une commande comporte plusieurs arguments, ignorez les arguments inutiles.
- Si une commande n'a pas assez d'arguments, sortie
@user You have not provided enough arguments
- Le système évite que les messages en double ne soient publiés dans un court laps de temps. Ainsi, lors du test de votre bot, je n'exécuterai jamais deux commandes donnant le même résultat (ce qui signifie que vous n'avez pas à implémenter un système qui différencie les messages s'ils sont en double, en ajoutant un point par exemple).
- Le système évite que trop de messages ne soient envoyés dans un court laps de temps. Ainsi, lors des tests, je n’enverrai jamais trop de commandes dans un court laps de temps, ce qui signifie que votre bot n’a pas à s’occuper de cela (en attendant un certain temps). avant de poster, par exemple).
- C’est le code-golf , le programme avec le moins d’octets gagnés.
Commencer
Voici quelques informations pour commencer à écrire votre bot. Vous n'êtes pas obligé de l'utiliser, mais cela peut être une indication.
- Pour vous connecter, connectez-vous d'abord à un fournisseur OpenID. Ce sera toujours Stack Exchange OpenID (
https://openid.stackexchange.com
). Le formulaire de connexion se trouve àhttps://openid.stackexchange.com/account/login
l'adresse et indiquez le nom d'utilisateur et le mot de passe à cet endroit. - Ensuite, connectez-vous à
stackexchange.com
. Le formulaire de connexion est situé àhttps://stackexchange.com/users/login
. Choisissez Stack Exchange en tant que fournisseur OpenID. - Après cela, connectez-vous pour discuter. Le formulaire de connexion pour cela est situé à
http://stackexchange.com/users/chat-login
. Choisissez Stack Exchange en tant que fournisseur OpenID. - Ensuite, vous devez obtenir votre
fkey
. Pour cela, accédez àhttp://chat.stackexchange.com/chats/join/favorite
et obtenez le àfkey
partir d'un champ de saisie masqué. - Pour publier un message, envoyez une demande à
http://chat.stackexchange.com/chats/14697/messages/new
et indiquez deux paramètres POST: untext
paramètre contenant le texte du message et unfkey
paramètre contenant lefkey
. Pour voir quand un nouveau message est posté, vous pouvez utiliser WebSockets (mais vous n’avez pas à le faire, n'hésitez pas à utiliser autre chose si c'est plus court). S'il vous plaît voir cette réponse Meta Stack Exchange :
Bavarder
(wss://chat.sockets.stackexchange.com/events/<roomnumber>/<somehash>?l=<timethingy>)
Le hachage peut être récupéré en postant l'identifiant de la salle et la touche fkey sur
http://chat.stackexchange.com/ws-auth
Le timethingy est la clé de temps du json retourné par
/chats/<roomno>/events
.L'ID d'événement lorsqu'un message est publié est
1
.- Il est utile de regarder les wrappers de discussion existants, tels que StackExchange-Chatty de Doorknob et ChatExchange de Manishearth , pour voir comment cela fonctionne exactement.
metafeatured
cela signifierait des questions sur les primes sur méta, mais ... merci :-)