Соревнование
Цель этой задачи - создать чат-бота, который может работать в чатах 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>)
Хеш можно получить, поместив идентификатор комнаты и fkey в
http://chat.stackexchange.com/ws-auth
Timethingy - это ключ времени, возвращаемый JSON
/chats/<roomno>/events
.Идентификатор события, когда сообщение отправлено
1
.- Полезно взглянуть на существующие обертки чата, такие как StackExchange-Chatty от Doorknob и ChatExchange от Manishearth , чтобы увидеть, как именно это работает.
metafeatured
что это будет означать обильные вопросы по мета, но ... спасибо :-)