Завдання
Створіть простий бот IRC, який виконує прості завдання, як привітання користувача.
Деталь
(Ви можете побачити цей документ RFC .)
Напишіть повну програму, яка виконує такі:
Програма вводить
nickname
іrealname
від користувача.- Усі
nickname
та вrealname
якій формі[A-Za-z0-9]+
мають бути дозволені, але не важливо, чи дозволені інші форми. Наприклад, якщо користувач хоче1234qwerty
якnickname
і5319009
якrealname
, програма повинна використовувати ці імена, але не важливо, чи може програма^^☆Rick Astley☆^^
(яка включає в себе не алфавіт та десяткові знаки) як (nickname
абоrealname
) чи ні, навіть думала, що це ім'я може бути відхилено сервером.
- Усі
Програма вводить
serverAddress
користувач.- Форма
serverAddress
полягає в томуserverIP:serverPort
, деserverIP
IP-адреса сервера та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