задача
Сделайте простого IRC-бота, который выполняет простую задачу, например, приветствует пользователя.
подробность
(Вы можете увидеть этот документ RFC .)
Напишите полную программу, которая выполняет эти:
Программа ввода
nicknameиrealnameот пользователя.- Все
nicknameиrealnameкакая форма[A-Za-z0-9]+должна быть разрешена, но не важно, разрешены ли другие формы. Например, если пользователь хочет,1234qwertyкакnicknameи5319009какrealname, программа должна использовать эти имена, но не важно, может ли программа использовать^^☆Rick Astley☆^^(которая включает в себя не алфавит и десятичные дроби) как (nicknameилиrealname) или нет, даже если бы это имя могло быть отклонено на сервере.
- Все
Программа ввода
serverAddressот пользователя.- Форма
serverAddress:serverIP:serverPortгдеserverIPIP-адрес сервера иserverPortномер порта сервера.
- Форма
Программа подключается к порту
serverPortна IRC-сервереserverIP, и ей следует установить псевдоним какnicknameи реальное имяrealname, отправивUSER realname 0 * :realnameиNICK nickname.Программа вводит сингл,
channelNameкоторый не включает#, и присоединяется к каналу#channelName.Отправить личное сообщение
Hello, world!на#channelNameканал, как это:PRIVMSG #channelName :Hello, world!Затем программа делает это:
A. Если кто - то присоединяется, приветствуя его, говоря ,
Hello, @!чтобы#channelName, где @ это прозвище ему / ей.Б. Если программа запущена, попробуйте снова присоединиться.
C. Если человека пнут или забанят, скажем
POW HAHA.D. Если человек уходит (
PARTилиQUIT), скажемGoodbye, @!, где @ - его псевдоним.E. Если кто-то говорит какой-то текст, включая
Turing testилиturing test, скажемI'm a human!.F. Если кто-то говорит какой-либо текст, в том числе
6*9, выйдите, отправивQUIT :42на сервер.G. Если кто-то говорит какой-либо текст, в том числе
all your base are belong to us(без учета регистра), выйдите, отправивQUIT :What you say!его на сервер.H. Если кто-то говорит, что какой-то текст, предшествующий пробелу и выше, не выполняется в тексте, произнесите сумму charcode всех (кроме первого пробела) символов в тексте.
Если произошла ошибка
Если произошла ошибка (например, ошибка подключения или неверная nickname), вы можете делать то, что хотите. Например, если nicknameон уже используется, программа может остановиться, получить новое nicknameот пользователя или автоматически изменить nicknameи повторить попытку.
ограничение
Программа
- Не следует использовать какие-либо внутренние функции или библиотеки для IRC-клиентов / ботов. то есть что-то вроде клиентских библиотек IRC
- Должен подсказать, что он будет вводить, прежде чем получит ввод . Например, перед входами
serverAddress, он должен подсказатьWrite the address of server:,serverIP:serverPort >,serverAddress >или какой - нибудь текст , который пользователь может распознать. - Должен работать на нескольких IRC-серверах с использованием UTF-8. (т.е. не для одного сервера)
- сообщений отправлять на сервер не следует
NOTICE. (RFC 2812, 3.3.2 Примечание. Разница междуNOTICEиPRIVMSGзаключается в том, что автоматические ответы НЕ ДОЛЖНЫ отправляться в ответ наNOTICEсообщение.) - Следует отправить сообщение, откуда поступил запрос (
#channelNameилиnickname). - Должен,
PONGкогдаPINGед, конечно.
PS
Ну, я только что сделал это, потому что не было загадки о боте IRC.
редактировать
Прочитав комментарий @ dmckee, я изменил правило выбора победителя.
По умолчанию
bonus= +0Если каким-то образом программа может подключиться к каналу (даже если это не так
#channelName),bonus= 1Если программа может выполнить шаги 1 ~ 5,
bonus* = 2.Для каждой задачи A ~ H на шаге 6, если программа реализует,
bonus* =1.2.Для каждых шести ограничений, если программа следует этому,
bonus* =1.05.
и score = int(codelength/bonus).
Программа с наименьшим количеством баллов является победителем. Если два ответа имеют одинаковую оценку, то выигрывает ответ с наибольшим количеством голосов.
РЕДАКТИРОВАТЬ Редактировать: Я думаю, 1.2и 1.05в шаге 4 и 5 должны быть скорректированы немного больше .. Что вы думаете об этом?
Победитель определен, однако, я думаю, что было слишком мало заявок.
Кто-нибудь еще может отправить код ..: P