ความท้าทาย
เป้าหมายของความท้าทายนี้คือการสร้าง chatbot ที่สามารถทำงานได้ใน chatrooms ของ Stack Exchange บอตของคุณต้องสามารถตรวจจับได้เมื่อผู้ใช้โพสต์คำสั่งเฉพาะและตอบกลับ นี่คือรายการคำสั่งและสิ่งที่บอทของคุณควรทำ:
!!newest
: แสดงชื่อ (ไม่มีลิงก์ แต่เป็นชื่อ) ของคำถามล่าสุดที่โพสต์บนเว็บไซต์นี้ (codegolf.SE)!!metanewest
: แสดงชื่อคำถามล่าสุดที่โพสต์บนเว็บไซต์ meta (meta.codegolf.SE)!!questioncount
: เอาท์พุทนับคำถามปัจจุบัน!!metaquestioncount
: แสดงผลจำนวนคำถามปัจจุบันบนไซต์เมตา!!tag tagname
: เอาท์แท็กข้อความที่ตัดตอนมา (คำอธิบายสั้น ๆ ) ของแท็กที่ได้รับเป็นพารามิเตอร์แรก!!metatag tagname
: เหมือนด้านบน แต่สำหรับไซต์เมตา!!featured
: เอาท์พุทนับคำถามที่ปัจจุบันมีความโปรดปราน!!metafeatured
: แสดงจำนวนคำถามที่มีแท็ก[เด่น]บน Meta
กฎระเบียบ
- คุณควรเขียนโปรแกรมที่สมบูรณ์ไม่ใช่ตัวอย่างหรือฟังก์ชั่น
- ในกรณีที่จำเป็นคุณสามารถขอชื่อผู้ใช้และรหัสผ่านเป็นอินพุต (พร้อมท์ใส่, STDIN, อาร์กิวเมนต์บรรทัดคำสั่ง) สิ่งนี้จะจำเป็นถ้าคุณใช้เช่น Python หรือ Ruby แต่ไม่จำเป็นถ้าคุณใช้ JavaScript และรันสคริปต์บนหน้าห้องสนทนาเอง
- คุณได้รับอนุญาตให้ใช้ไลบรารีภายนอกเพื่อทำสิ่งต่าง ๆ เช่น WebSockets ไลบรารีเหล่านี้ไม่จำเป็นต้องนับสำหรับการนับตัวละครของคุณ
คุณสามารถใช้ wrapper การแชทภายนอก (แต่คุณไม่จำเป็นต้องเขียนตัวคุณเอง) และจากนั้นต้องนับจำนวนตัวอักษร คุณไม่ได้รับอนุญาตให้เปลี่ยนรหัสของ wrapper ถ้าคุณใช้มันคุณจะใช้มันโดยไม่มีการดัดแปลงและต้องนับตัวอักษรทั้งหมด (นั่นเป็นโทษสำหรับการไม่เขียนเสื้อคลุมของคุณเอง)
มีเพียงการนับรหัสของ wrapper เท่านั้น หากมีไฟล์อื่น ๆ เช่นตัวอย่างสิ่งเหล่านี้ไม่จำเป็นต้องนับ
- ไม่มีการใช้ตัวย่อ URL หรือวิธีอื่น ๆ ที่ทำให้ URL สั้นลง: ความท้าทายคือการเล่นแชทบ็อตไม่ใช่เล่นกอล์ฟ URL
- ไม่มีคำขอทางเว็บยกเว้นที่จำเป็นในการแชทและรับข้อมูลที่จำเป็นในการตอบสนองต่อคำสั่ง
- ไม่อนุญาตให้ใช้"ช่องโหว่" มาตรฐาน
@user response
ถ้าคนโพสต์คำสั่งคุณจำเป็นต้องตอบสนองด้วยข้อความแชทของรูปแบบนี้: ดังนั้นถ้าผมเขียนคำสั่ง!!featured
และมี 5 คำถามที่โดดเด่น,@ProgramFOX 5
บอทของคุณควรโพสต์- หากฉันทดสอบบอทของคุณฉันจะเรียกใช้จากบัญชี chatbotของฉันและฉันจะเรียกใช้ในห้องสนทนานี้ ฉันจะทดสอบบ็อตในห้องนั้นเสมอดังนั้นจึงไม่จำเป็นที่จะต้องระบุ ID ห้องเป็นอินพุตมันจะเป็น 14,697 เสมอ ID นี้จะไม่ได้รับเป็นข้อมูลเข้าควรเป็นรหัสที่ยาก
@user The command [command] does not exist
ถ้าคำสั่งไม่พบการส่งออก แทนที่[command]
ด้วยชื่อของคำสั่งที่ไม่มีอยู่ หากมีการระบุอาร์กิวเมนต์ให้กับคำสั่งห้ามส่งออกอาร์กิวเมนต์เพียงชื่อคำสั่งเท่านั้น- หากคำสั่งมีหลายอาร์กิวเมนต์ให้ข้ามข้อโต้แย้งที่ไม่จำเป็น
- หากคำสั่งมีอาร์กิวเมนต์ไม่เพียงพอเอาต์พุต
@user You have not provided enough arguments
- ระบบป้องกันไม่ให้มีการโพสต์ข้อความที่ซ้ำกันภายในช่วงเวลาสั้น ๆ ดังนั้นเมื่อทดสอบบอทของคุณฉันจะไม่รันคำสั่งสองคำสั่งที่ให้เอาต์พุตเดียวกันอย่างต่อเนื่อง (ซึ่งหมายความว่าคุณไม่จำเป็นต้องใช้ระบบที่ทำให้ข้อความแตกต่างหากพวกเขาซ้ำกันโดยเพิ่มจุดเป็นตัวอย่าง)
- ระบบป้องกันไม่ให้มีการโพสต์ข้อความมากเกินไปในช่วงเวลาสั้น ๆ ดังนั้นเมื่อทำการทดสอบฉันจะไม่ส่งคำสั่งมากเกินไปในช่วงเวลาสั้น ๆ ซึ่งหมายความว่าบอทของคุณไม่ต้องคอยดูแล (โดยรอสักครู่ ก่อนโพสต์ตัวอย่าง)
- นี่คือรหัสกอล์ฟโปรแกรมที่มีจำนวนไบต์น้อยที่สุดจะเป็นผู้ชนะ
เริ่มต้นใช้งาน
นี่คือข้อมูลบางส่วนในการเริ่มต้นเขียน bot ของคุณ คุณไม่จำเป็นต้องใช้สิ่งนี้ แต่สามารถเป็นแนวทางได้
- เพื่อเข้าสู่ระบบก่อนเข้าสู่ผู้ให้บริการ 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>)
สามารถแฮชสามารถดึงข้อมูลได้โดยโพสต์ ID ห้องและ fkey ไปที่
http://chat.stackexchange.com/ws-auth
timethingy เป็นกุญแจสำคัญเวลาของการ JSON
/chats/<roomno>/events
กลับโดยเหตุการณ์ ID
1
เมื่อข้อความถูกโพสต์- มันจะมีประโยชน์ในการดู chat-wrappers ที่มีอยู่แล้วเช่นStackExchange-Chattyของ Doorknob และ ChatExchange ของManishearthเพื่อดูว่ามันทำงานอย่างไร
metafeatured
จะหมายถึงคำถามเกี่ยวกับเมตาดาต้า แต่ ... ขอบคุณ :-)