Các thách thức
Mục tiêu của thử thách này là tạo ra một chatbot có thể chạy trong các phòng chat của Stack Exchange. Bot của bạn cần có khả năng phát hiện khi các lệnh cụ thể được đăng bởi người dùng và phản hồi nó. Đây là danh sách các lệnh và bot của bạn nên làm gì:
!!newest
: xuất tiêu đề (không có liên kết, nhưng tiêu đề) của câu hỏi mới nhất được đăng trên trang web này (codegolf.SE).!!metanewest
: xuất tiêu đề của câu hỏi mới nhất được đăng trên trang web meta (meta.codegolf.SE).!!questioncount
: xuất số lượng câu hỏi hiện tại.!!metaquestioncount
: xuất số lượng câu hỏi hiện tại trên trang web meta.!!tag tagname
: xuất đoạn trích thẻ (mô tả ngắn) của thẻ được đưa ra làm tham số đầu tiên.!!metatag tagname
: giống như trên, nhưng đối với trang meta.!!featured
: xuất số lượng câu hỏi hiện có tiền thưởng.!!metafeatured
: xuất số lượng câu hỏi có thẻ [đặc trưng] trên Meta.
Quy tắc
- Bạn nên viết một chương trình hoàn chỉnh, không phải là một đoạn hoặc chức năng.
- Trong trường hợp cần thiết, bạn có thể yêu cầu tên người dùng và mật khẩu làm đầu vào (nhắc nhở về đầu vào, STDIN, đối số dòng lệnh). Điều này sẽ cần thiết nếu bạn sử dụng, ví dụ như Python hoặc Ruby, nhưng sẽ không cần thiết nếu bạn sử dụng JavaScript và chạy tập lệnh trên chính trang phòng trò chuyện.
- Bạn được phép sử dụng các thư viện bên ngoài để làm những thứ như WebSockets. Các thư viện này không phải tính cho số lượng nhân vật của bạn.
Bạn có thể sử dụng trình bao bọc trò chuyện bên ngoài (nhưng bạn không cần phải, việc viết riêng của bạn được khuyến khích), và sau đó phải tính cho số lượng ký tự. Bạn cũng không được phép thay đổi mã của trình bao bọc. Nếu bạn sử dụng nó, bạn sử dụng nó mà không cần sửa đổi và tất cả các ký tự phải được tính (đó là một hình phạt cho việc không viết trình bao bọc của riêng bạn).
Chỉ có mã của trình bao bọc chính nó phải được tính. Nếu có các tệp khác như ví dụ, chúng không phải tính.
- Không sử dụng các công cụ rút ngắn URL hoặc các cách khác có thể làm cho URL ngắn hơn: thách thức là đánh gôn một chatbot, không phải đánh gôn URL.
- Không có yêu cầu web, ngoại trừ những yêu cầu cần thiết để trò chuyện và nhận thông tin cần thiết để đáp ứng các lệnh.
- Không được phép sử dụng "sơ hở" tiêu chuẩn .
- Nếu ai đó gửi lệnh, bạn cần trả lời bằng tin nhắn trò chuyện có định dạng này :
@user response
. Vì vậy, nếu tôi viết lệnh!!featured
và có 5 câu hỏi nổi bật, bot của bạn nên đăng@ProgramFOX 5
. - Nếu tôi kiểm tra bot của bạn, tôi sẽ chạy nó từ tài khoản chatbot của mình và tôi sẽ chạy nó trong phòng chat này . Tôi sẽ luôn kiểm tra các bot trong phòng đó, vì vậy không cần thiết phải cung cấp ID phòng làm đầu vào, nó sẽ luôn là 14697. ID này sẽ không được cung cấp làm đầu vào, nên được mã hóa cứng.
- Nếu lệnh không được tìm thấy, đầu ra
@user The command [command] does not exist
. Thay thế[command]
bằng tên của lệnh không tồn tại. Nếu các đối số được cung cấp cho lệnh, không xuất ra các đối số, chỉ tên lệnh. - Nếu một lệnh có nhiều đối số, bỏ qua các đối số không cần thiết.
- Nếu một lệnh không đủ đối số, đầu ra
@user You have not provided enough arguments
- Hệ thống ngăn chặn các tin nhắn trùng lặp được đăng trong một khoảng thời gian ngắn. Vì vậy, khi kiểm tra bot của bạn, tôi sẽ không bao giờ chạy hai lệnh cho cùng một đầu ra liên tiếp (điều đó có nghĩa là bạn không phải thực hiện một hệ thống làm cho các thông báo khác nhau nếu chúng trùng lặp, bằng cách thêm một dấu chấm chẳng hạn).
- Hệ thống ngăn chặn quá nhiều tin nhắn được đăng trong một khoảng thời gian ngắn, vì vậy khi kiểm tra, tôi sẽ không bao giờ gửi quá nhiều lệnh trong một khoảng thời gian ngắn, điều đó có nghĩa là bot của bạn không phải lo việc này (bằng cách chờ một thời gian trước khi đăng, ví dụ).
- Đây là code-golf , chương trình có số lượng byte thắng ít nhất.
Bắt đầu
Đây là một số thông tin để bắt đầu với việc viết bot của bạn. Bạn không cần phải sử dụng nó, nhưng nó có thể là một hướng dẫn.
- Để đăng nhập, trước tiên hãy đăng nhập vào nhà cung cấp OpenID. Đây sẽ luôn là Stack Exchange OpenID (
https://openid.stackexchange.com
). Biểu mẫu đăng nhập được đặt tạihttps://openid.stackexchange.com/account/login
, và cung cấp tên người dùng và mật khẩu ở đó. - Sau đó, đăng nhập vào
stackexchange.com
. Các hình thức đăng nhập được đặt tạihttps://stackexchange.com/users/login
. Chọn Stack Exchange là nhà cung cấp OpenID. - Sau khi làm điều đó, đăng nhập để trò chuyện. Các hình thức đăng nhập cho đó được đặt tại
http://stackexchange.com/users/chat-login
. Chọn Stack Exchange là nhà cung cấp OpenID. - Sau đó, bạn cần phải có được của bạn
fkey
. Đối với điều đó, đi đếnhttp://chat.stackexchange.com/chats/join/favorite
và lấyfkey
từ một trường đầu vào ẩn. - Để gửi tin nhắn, gửi yêu cầu đến
http://chat.stackexchange.com/chats/14697/messages/new
và cung cấp hai tham số POST:text
tham số chứa văn bản thông báo vàfkey
tham số chứafkey
. Để xem khi nào một tin nhắn mới được đăng, bạn có thể sử dụng WebSockets (nhưng không phải, cứ thoải mái sử dụng thứ khác nếu nó ngắn hơn). Vui lòng xem câu trả lời Meta Stack Exchange này :
Trò chuyện
(wss://chat.sockets.stackexchange.com/events/<roomnumber>/<somehash>?l=<timethingy>)
Băm có thể được tìm nạp bằng cách POST id phòng và fkey để
http://chat.stackexchange.com/ws-auth
Thời gian biểu là chìa khóa thời gian của json được trả về
/chats/<roomno>/events
.ID sự kiện khi một tin nhắn được đăng là
1
.- Thật hữu ích khi xem xét các trình bao bọc trò chuyện hiện có, chẳng hạn như StackExchange-Chatty và Manishearth's ChatExchange , để xem chính xác cách thức hoạt động của nó.
metafeatured
sẽ có nghĩa là câu hỏi tiền thưởng trên meta, nhưng ... cảm ơn :-)