งาน
ทำบอท 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ที่เซิร์ฟเวอร์ IRC- serverIPและควรตั้งค่าเป็นชื่อเล่น- nicknameและ realname เป็น- realnameโดยการส่งและ- USER realname 0 * :realname- NICK nickname
- โปรแกรมปัจจัยเดียว - channelNameซึ่งไม่รวมถึงและเข้าร่วมช่อง- #- #channelName
- ส่งข้อความส่วนตัว - Hello, world!ถึง- #channelNameช่องดังนี้:- PRIVMSG #channelName :Hello, world!
- จากนั้นโปรแกรมทำสิ่งเหล่านี้: - ตอบ: ถ้ามีคนเข้าร่วมทักทายเขาโดยกล่าวว่า - Hello, @!การ- #channelNameที่ @ เป็นชื่อเล่นของเขา / เธอ- B. หากโปรแกรมถูกเตะให้ลองเข้าร่วมอีกครั้ง - C. - POW HAHAถ้าคนที่ถูกเตะหรือห้ามพูด- D. หากมีคนออก ( - PARTหรือ- QUIT) ให้พูด- Goodbye, @!โดยที่ @ เป็นชื่อเล่นของเขา / เธอ- อีถ้ามีคนพูดข้อความบางส่วนรวมถึง - 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
- สำหรับแต่ละงาน ~ H ในขั้นตอนที่ 6 ถ้าการดำเนินการโปรแกรม - bonus*- 1.2=
- สำหรับแต่ละหกข้อ จำกัด หากโปรแกรมดังต่อไปนี้ที่ - bonus*- 1.05=
score = int(codelength/bonus)และ
โปรแกรมที่มีคะแนนต่ำสุดเป็นผู้ชนะ หากคำตอบสองข้อมีคะแนนเท่ากันคำตอบที่มีคะแนนสูงสุดจะเป็นฝ่ายชนะ
แก้ไขแก้ไข: ฉันคิดว่า1.2และ1.05ในขั้นตอนที่ 4 และ 5 ควรปรับให้ใหญ่ขึ้นเล็กน้อย .. คุณคิดอย่างไรเกี่ยวกับเรื่องนี้?
ผู้ชนะได้รับการตัดสินอย่างไรก็ตามฉันคิดว่ามีรายการน้อยเกินไป
ทุกคนยังสามารถส่งรหัส .. : P