Завдання
Створіть простий бот 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на сервері IRCserverIP, і вона повинна встановлювати його псевдонім якnicknameі справжнє ім'я, якrealnameнадсилаючиUSER realname 0 * :realnameіNICK nickname.Програма вводить сингл,
channelNameякий не включає#, і приєднується до каналу#channelName.Надіслати ПП
Hello, world!для#channelNameканалу , як це:PRIVMSG #channelName :Hello, world!Потім програма виконує такі дії:
A. Якщо хто - то приєднується, вітаючи його, кажучи ,
Hello, @!щоб#channelName, де @ це прізвисько йому / їй.B. Якщо програму запустили, спробуйте знову приєднатися.
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. Якщо хтось каже, що текст, який передує пробілу та вище дії, не виконується текстом, скажіть суму текстових кодів усіх (крім першого пробілу) символів у тексті.
Якщо сталася помилка
Якщо сталася помилка (наприклад, помилка підключення або недійсна 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).
Перемагає програма з найнижчою оцінкою Якщо дві відповіді мають однаковий бал, то виграє відповідь з найвищими голосами.
EDIT Edit: Я думаю, 1.2і 1.05на кроках 4 і 5 слід відкоригувати трохи більше .. Що ви думаєте з цього приводу?
Переможець вирішується, однак, я думаю, що заявок було замало.
Кожен все ще може подати код ..: P