งาน
ทำบอท 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
ที่เซิร์ฟเวอร์ IRCserverIP
และควรตั้งค่าเป็นชื่อเล่น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