Tâche
Créez un bot IRC simple qui fait une tâche simple comme saluer l'utilisateur.
Détail
(Vous pouvez voir ce document RFC .)
Écrivez un programme complet qui les exécute:
Les entrées du programme
nickname
etrealname
de l'utilisateur.- Tout
nickname
etrealname
quel formulaire[A-Za-z0-9]+
doit être autorisé, mais il n'est pas important que d'autres formulaires soient autorisés. Par exemple, si l'utilisateur veut au1234qwerty
furnickname
et à5319009
mesurerealname
, le programme doit utiliser ces noms, mais il n'est pas important que le programme puisse utiliser^^☆Rick Astley☆^^
(qui inclut les caractères non alphabétiques et décimaux) comme (nickname
ourealname
) ou non, même si ce nom peut être rejeté par le serveur.
- Tout
Le programme
serverAddress
entre de l'utilisateur.- La forme de
serverAddress
estserverIP:serverPort
, oùserverIP
est l'adresse IP du serveur etserverPort
le numéro de port du serveur.
- La forme de
Le programme se connecte au port
serverPort
sur le serveur IRCserverIP
, et il doit définir son pseudo asnickname
et realname asrealname
en envoyantUSER realname 0 * :realname
etNICK nickname
.Le programme entre un single
channelName
qui n'inclut pas#
et rejoint le canal#channelName
.Envoyez un message privé
Hello, world!
à la#channelName
chaîne comme ceci:PRIVMSG #channelName :Hello, world!
Ensuite, le programme procède comme suit:
A. Si quelqu'un se joint, le saluer en disant
Hello, @!
à#channelName
, où @ est le surnom de lui / elle.B. Si le programme est lancé, essayez de vous réinscrire.
C. Si une personne est expulsée ou bannie, dites
POW HAHA
.D. Si une personne quitte (
PART
ouQUIT
), disonsGoodbye, @!
, où @ est son surnom.E. Si quelqu'un dit du texte, y compris
Turing test
outuring test
, disonsI'm a human!
.F. Si quelqu'un dit du texte
6*9
, quittez en envoyantQUIT :42
au serveur.G. Si quelqu'un dit du texte, y compris
all your base are belong to us
(insensible à la casse), quittez en envoyantQUIT :What you say!
au serveur.H. Si quelqu'un dit qu'un texte précédé d'un espace et au-dessus des actes n'est pas exécuté par le texte, dites la somme du code de tous les caractères (sauf le premier espace) dans le texte.
En cas d'erreur
Si une erreur (telle qu'une erreur de connexion ou non valide nickname
) s'est produite, vous pouvez faire ce que vous voulez faire. Par exemple, si le nickname
est déjà utilisé, le programme peut s'arrêter, en obtenir un nouveau nickname
de l'utilisateur ou modifier automatiquement le nickname
et réessayer.
Restriction
Le programme
- Ne doit pas utiliser de fonctions ou de bibliothèques internes destinées à la création de clients / bots IRC. c'est-à-dire quelque chose comme les bibliothèques clientes IRC
- Devrait demander ce qu'il entrera avant qu'il ne reçoive une entrée . Par exemple, avant les entrées
serverAddress
, il doit inviterWrite the address of server:
,serverIP:serverPort >
,serverAddress >
ou un texte que l'utilisateur peut reconnaître. - Devrait fonctionner sur plusieurs serveurs IRC utilisant UTF-8. (c'est-à-dire pas pour un seul serveur)
- Les messages envoyés au serveur ne devraient pas l'être
NOTICE
. (RFC 2812, 3.3.2 Remarque: la différence entreNOTICE
etPRIVMSG
est que les réponses automatiques NE DOIVENT JAMAIS être envoyées en réponse à unNOTICE
message.) - Devrait envoyer un message d'où provenait la demande (
#channelName
ounickname
). - Devrait
PONG
quandPING
ed, bien sûr.
PS
Eh bien, je viens de le faire, car il n'y avait pas de puzzle sur le bot IRC.
Éditer
Après avoir lu le commentaire de @ dmckee, j'ai changé la règle pour choisir le gagnant.
Par défaut
bonus
= +0Si le programme peut se connecter à une chaîne (même si ce n'est pas le cas
#channelName
),bonus
= 1Si le programme peut exécuter les étapes 1 à 5,
bonus
* = 2.Pour chaque tâche A ~ H à l'étape 6, si le programme implémente,
bonus
* =1.2
.Pour chaque six restrictions, si le programme suit cela,
bonus
* =1.05
.
et score = int(codelength/bonus)
.
Le programme avec le score le plus bas est gagnant. Si deux réponses ont le même score, alors la réponse avec les votes les plus élevés l'emporte.
EDIT Edit: Je pense 1.2
et 1.05
aux étapes 4 et 5 devrait être ajusté légèrement plus grand .. Que pensez-vous de cela?
Le gagnant est décidé, cependant, je pense qu'il y avait trop peu d'inscriptions.
N'importe qui peut toujours soumettre le code ..: P