Змагання
Мета цього завдання - створити чат, який може працювати в чатах Stack Exchange. Ваш бот повинен вміти визначати, коли користувач розміщує конкретні команди та відповідати на нього. Це список команд і що ваш бот повинен робити:
!!newest
: виведіть заголовок (не посилання, а заголовок) останнього питання, розміщеного на цьому веб-сайті (codegolf.SE).!!metanewest
: виведіть назву останнього питання, розміщеного на мета-сайті (meta.codegolf.SE).!!questioncount
: вивести поточну кількість питань.!!metaquestioncount
: вивести поточну кількість питань на мета-сайті.!!tag tagname
: виведіть уривок тегу (короткий опис) тегу, який задається як перший параметр.!!metatag tagname
: те саме, що вище, але для мета-сайту.!!featured
: виведіть кількість запитань, які наразі мають велику суму.!!metafeatured
: виведіть кількість запитань, які мають тег [Featured] на Meta.
Правила
- Ви повинні написати повну програму, а не фрагмент чи функцію.
- У разі необхідності ви можете запитати ім'я користувача та пароль як вхідні (запит на введення, STDIN, аргументи командного рядка). Це буде потрібно, якщо ви використовуєте, наприклад, Python або Ruby, але це не буде потрібно, якщо ви використовуєте JavaScript і запустите скрипт на самій сторінці чату.
- Ви можете використовувати зовнішні бібліотеки, щоб робити такі речі, як WebSockets. Ці бібліотеки не повинні вважати вашу кількість персонажів.
Ви можете скористатися зовнішньою обгорткою чату (але не потрібно, рекомендується писати свою власну), і тоді це має враховувати кількість символів. Вам також заборонено змінювати код обгортки. Якщо ви користуєтесь ним, ви використовуєте його без модифікацій, і всі символи повинні рахуватися (це як штраф за не написання власної обгортки).
Потрібно рахувати лише код самої обгортки. Якщо є інші файли, такі як приклади, їх не потрібно вважати.
- Не використовуйте засоби для скорочення URL-адрес чи інші способи, що дозволяють скоротити URL-адреси: завдання полягає в тому, щоб грати в чат, а не гольфувати URL.
- Жодних веб-запитів, крім тих, які необхідні для чату та отримання інформації, необхідної для відповіді на команди.
- Використання стандартних "прорізів" не дозволяється.
- Якщо хто - то відправляє команду, ви повинні реагувати з повідомленням чату цього формату:
@user response
. Отже, якщо я напишу команду!!featured
і є 5 пропонованих питань, ваш бот повинен опублікувати@ProgramFOX 5
. - Якщо я перевіряю вашого бота, я запускатиму його зі свого акаунта чат- ботів і запускатиму його в цій чаті . Я завжди перевіряю ботів у цій кімнаті, тому не потрібно вказувати ідентифікатор кімнати як вхід, він завжди буде 14697. Цей ідентифікатор не вводиться як вхід, він повинен бути жорстко закодований.
- Якщо команда не знайдена, виведіть
@user The command [command] does not exist
. Замініть[command]
на ім’я неіснуючої команди. Якщо аргументи надаються команді, не виводите аргументи, а лише ім'я команди. - Якщо команда має багато аргументів, ігноруйте аргументи, які не потрібні.
- Якщо в команді недостатньо аргументів, виведіть
@user You have not provided enough arguments
- Система запобігає розміщенню повторюваних повідомлень протягом короткого проміжку часу. Отже, під час тестування вашого бота я ніколи не запускаю дві команди, які дають один і той же результат послідовно (це означає, що вам не доведеться реалізовувати систему, яка робить повідомлення різними, якщо вони є дублікатами, додаючи, наприклад, крапку).
- Система запобігає надсиланню занадто багато повідомлень за короткий проміжок часу, тому під час тестування я ніколи не надсилатимуть занадто багато команд за короткий проміжок часу, а це означає, що ваш бот не повинен про це піклуватися (чекаючи деякого часу перед публікацією, наприклад).
- Це кодовий гольф , програма з найменшою кількістю байтів виграє.
Починаємо
Ось трохи інформації, щоб розпочати роботу зі створенням бота. Не потрібно цим користуватися, але це може бути настановою.
- Щоб увійти, спочатку увійдіть до постачальника OpenID. Це завжди буде Stack Exchange OpenID (
https://openid.stackexchange.com
). Форма для входу знаходиться за адресоюhttps://openid.stackexchange.com/account/login
та вкажіть ім’я користувача та пароль там. - Потім увійдіть до
stackexchange.com
. Форма для входу знаходиться за адресоюhttps://stackexchange.com/users/login
. Виберіть Stack Exchange як постачальника OpenID. - Після цього увійдіть у чат. Бланк реєстрації для цього знаходиться за адресою
http://stackexchange.com/users/chat-login
. Виберіть Stack Exchange як постачальника OpenID. - Тоді вам потрібно отримати своє
fkey
. Для цього перейдітьhttp://chat.stackexchange.com/chats/join/favorite
і дістаньтеfkey
з прихованого поля введення. - Щоб опублікувати повідомлення, надішліть запит
http://chat.stackexchange.com/chats/14697/messages/new
та надайте два параметри POST:text
параметр, що містить текст повідомлення, іfkey
параметр, що міститьfkey
. Щоб побачити, коли публікується нове повідомлення, ви можете використовувати WebSockets (але не потрібно, сміливо використовуйте щось інше, якщо воно коротше). Будь ласка, дивіться цю відповідь Meta Stack Exchange :
Чат
(wss://chat.sockets.stackexchange.com/events/<roomnumber>/<somehash>?l=<timethingy>)
Хеш можна отримати за допомогою POSTing id номера та fkey для
http://chat.stackexchange.com/ws-auth
Тимчасовий - це часовий ключ json, що повертається
/chats/<roomno>/events
.Ідентифікатор події, коли повідомлення розміщено, є
1
.- Корисно подивитися на існуючі обгортки чату, такі як Doorknob 's StackExchange-Chatty і Manishearth's ChatExchange , щоб побачити, як це працює.
metafeatured
це означає надумані питання щодо мета, але ... дякую :-)