[पायथन] आयआरसीसाठी एक बॉट प्रोग्राम

आज मी तुम्हाला प्रोग्राम कसा शिकवायचा हे शिकवणार आहे बॉट साठी IRC. सर्व प्रथम, ज्यांना माहित नाही त्यांच्यासाठी, एक बॉट एक प्रोग्राम आहे जो आयआरसी चॅनेलशी कनेक्ट होतो आणि त्याच्याशी संवाद साधतो, जो आपल्याला उदाहरणार्थ उदाहरणार्थ चॅनेल नियंत्रित करण्यास अनुमती देतो. की आम्ही कनेक्ट झालो आहोत आणि अशा प्रकारे स्पॅम टाळा, किंवा हे ऑर्डरची मालिका ओळखते आणि संबंधित कोडची अंमलबजावणी करते.
आधीच तेथे बॉट्स सज्ज आहेत, तरीही मी त्या लोकांपैकी प्रामाणिकपणे आहे ज्यांना स्वतःचे प्रोग्राम शिकण्यास आवडते आणि जे कार्य केल्याचे पाहून आम्हाला मिळालेला मोठा समाधान ^^

असे म्हटल्यावर ट्यूटोरियल वर जाऊ.

बॉट प्रोग्राम करण्यासाठी आम्हाला एक आवश्यक आहे साधा मजकूर संपादक cualquiera (नॅनो, जेडिट, ध्यान, इ) आणि अजगर दुभाषे (2.6 किंवा 2.7 आवश्यक असेल, अजगर 3.x सह कार्य करत नाही).

प्रथम आम्ही आयात करतो आवश्यक मॉड्यूल, या प्रकरणात आम्हाला फक्त दोन आवश्यक असतील:

[कोड] #! / यूएसआर / बिन / एनव्हीव्ही अजगर
# - * - कोडिंग: utf-8 - * -

आयात सॉकेट
आयात स्ट्रिंग
[/ कोड]

आता आम्ही पुढे जाऊ सेट अप सांगकामे:

[code] HOST=»irc.desdelinux.net»
पोर्ट = 6667
निक = »कॅलिकोबॉट
ओळखपत्र = »कॅलीकॉबॉट
REALNAME = »CalicoBot
चॅन = Home # मुख्यपृष्ठ »
रीडबफर = »
[/ कोड]

मी प्रत्येक चल स्पष्ट करेल:

  • होस्ट: ज्या सर्व्हरवर आपण कनेक्ट करू त्याची URL
  • पोर्ट: सर्व्हर पोर्ट. डीफॉल्टनुसार ते 6667 आहे.
  • निक, ओळख आणि वास्तविक नाव: ते बॉटचे टोपणनाव, त्याची ओळख आणि वास्तविक नावाशी संबंधित आहेत.
  • चॅन: चॅनेल बॉट प्रविष्ट करेल
  • रीडबफर: या व्हेरिएबलमध्ये सर्व्हरद्वारे पाठविलेला डेटा जतन होईल.

एकदा आमची बॉट कॉन्फिगर झाली की आम्ही पुढे जाऊ कनेक्शन

[कोड] एस = सॉकेट.सकेट ()
s.connect ((होस्ट, पोर्ट))
s.send ("निक% s \ r \ n"% निक)
sndsend ("USER% s% s bla:% s \ r \ n"% (ID, HOST, REALNAME))
s.send ("सामील व्हा:% s \ r \ n"% चेन)
[/ कोड]

पहिल्या ओळीत जास्त गूढ नसते, दुसरी ओळ तयार करते सर्व्हर कनेक्शन आणि शेवटचे तीन लॉगिनसह पुढे जाण्यासाठी बॉटचा डेटा सर्व्हरला पाठवतात.

एकदा कनेक्ट झाल्यावर आपण एक तयार करू अनंत पळवाट ज्यामध्ये आपण जाऊ सर्व्हरकडून / वरून डेटा प्राप्त करणे आणि पाठविणे:

[कोड] असताना 1:
रीडबफर = रीडबफर + s.recv (1024)
टेम्प = स्ट्रिंग. स्प्लिट (रीडबफर, "\ n")
readbuffer = temp.pop ()
तात्पुरत्या ओळीसाठी:
ओळ = स्ट्रिंग.स्ट्रिप (ओळ)
ओळ = लाइन.एसप्लिट (CHAN + ':')

जर ओळ [0] .find ("पिंग")! = -1:
पिंगिड = ओळ [0]. स्प्लिट () [1] s.send ("पोंग% s \ r \ n"% पिंगिड)
[/ कोड]

वर लिहिलेल्या सर्व ओळींपैकी मी फक्त महत्वाच्या गोष्टींवरच टिप्पणी करीन.
सह ओळ = लाइन.एसप्लिट (CHAN + ':') आम्ही काय करतो जेव्हा सर्व्हर आपल्याला पाठवते तेव्हा विभाजित करते चला चॅनेलकडून काहीतरी घेऊया.
उदाहरणार्थ खालील ओळ सूचित करते की कोणीतरी चॅनेलवर काहीतरी लिहिले आहे:

:son_link!sonlink@127.0.0.1 PRIVMSG #Home :Hola ^^

पहिली गोष्ट म्हणजे वापरकर्त्याचे टोपणनाव आणि त्याचा कनेक्शन डेटा (विभक्त!), आज्ञा (या प्रकरणात हे त्याने सूचित केले आहे की सूचित करते), चॅनेल आणि अखेरीस, कोलन नंतर संदेश पाठविला. या ट्यूटोरियल मध्ये नसल्यामुळे मी आणखीन अनेक कमांड्स समजावून सांगणार नाही.

इतर महत्त्वपूर्ण ओळी त्या आहेत तर आहेत. वापरकर्ता अद्याप कनेक्ट केलेला आहे की नाही हे तपासण्यासाठी सर्व्हर वारंवार वारंवार पिंग आज्ञा पाठवते. अशा परिस्थितीत, बॉट पीओजीने पिंगला कमांड पाठविलेल्या आयडीसह पाठवते जे सर्व्हरला ते अद्याप कनेक्ट आहे हे सूचित करण्यासाठी पाठवले आहे.

यासह आपल्याकडे आधीपासूनच बोटचा पाया आहे. आता मी सांगत आहोत की आम्हाला काही कमांड कशा पाहिजे आहेत त्यानुसार बॉट कसे प्रतिसाद द्यायचे ते स्वत: च्या आयआरसी कडून किंवा वापरकर्त्यांकडून.

आयआरसी आदेशांना प्रतिसाद देणे:

पिंग आणि PRIVMSG ही आयआरसी आदेशांची उदाहरणे आहेत. बर्‍याच आज्ञा आहेत, परंतु मी आधी म्हटल्याप्रमाणे, ही अशी एक गोष्ट आहे ज्याबद्दल मी तपशीलवार जाऊ शकत नाही.
उदाहरणार्थ, कनेक्ट करणार्‍या वापरकर्त्यांना आम्ही सांगकास हॅलो म्हणू शकतो:

[कोड] असल्यास लाइन [0]. शोधा ('जॉइन')! = -1:
नाव = ओळ [0]. स्प्लिट ('!') [0]. स्प्लिट (':') [1] नाव असल्यास! = एनआयसीके आणि नेम.फाइंड (हॉस्ट) == -1:
s.send ("PRIVMSG% s: आपले स्वागत आहे @% s ^^" n "% (CHAN, नाव))
[/ कोड]

प्रथम आम्ही सर्व्हर आज्ञा पाठवितो की नाही हे तपासतो सामील व्हा हे सूचित करते की कोणीतरी सर्व्हरशी कनेक्ट केलेले आहे. मग आम्ही निक काढतो, आम्ही तपासणी करतो की निक आयआरसी url नाही (जर आपण बॉट चालवत नाही तर ते url ला अभिवादन करेल) आणि शेवटी आम्ही अभिवादन संदेश पाठवितो.

बॉट आज्ञा:

आता मी माझा बॉट कसा बनवू? माझ्या स्वत: च्या आज्ञांना उत्तर द्या? चला अधिक चांगले उदाहरण पाहू या:

[कोड] ओळ असल्यास [1] == '$ आवृत्ती':
s.send (IV PRIVMSG% s: CalicoBot 0.1.2 (c) 2012 Son Link \ n »% CHAN)
[/ कोड]

या उदाहरणात कोणी लिहित असेल तर . आवृत्ती बॉट संदेश, त्याचे नाव, आवृत्ती आणि लेखक दर्शवेल. उदाहरणाचा पूर्ण कोड असाः

[कोड] आयात सॉकेट
आयात स्ट्रिंग

HOST = »लोकल होस्ट
पोर्ट = 6667
निक = »कॅलिकोबॉट
ओळखपत्र = »कॅलीकॉबॉट
REALNAME = »CalicoBot
चॅन = Home # मुख्यपृष्ठ »
रीडबफर = »
s = सॉकेट.सकेट ()
s.connect ((होस्ट, पोर्ट))
s.send ("निक% s \ r \ n"% निक)
sndsend ("USER% s% s bla:% s \ r \ n"% (ID, HOST, REALNAME))
s.send ("सामील व्हा:% s \ r \ n"% चेन)

1:

रीडबफर = रीडबफर + s.recv (1024)
टेम्प = स्ट्रिंग. स्प्लिट (रीडबफर, "\ n")
readbuffer = temp.pop ()
तात्पुरत्या ओळीसाठी:
प्रिंट लाइन
ओळ = स्ट्रिंग.स्ट्रिप (ओळ)
ओळ = लाइन.एसप्लिट (CHAN + ':')

जर ओळ [0] .find ("पिंग")! = -1:
पिंगिड = ओळ [0]. स्प्लिट () [1] s.send ("पोंग% s \ r \ n"% पिंगिड)

जर ओळ [0] .find ('जॉइन')! = -1:
नाव = ओळ [0]. स्प्लिट ('!') [0]. स्प्लिट (':') [1] नाव असल्यास! = एनआयसीके आणि नेम.फाइंड (हॉस्ट) == -1:
s.send ("PRIVMSG% s: आपले स्वागत आहे @% s ^^" n "% (CHAN, नाव))

जर लेन (रेखा) <1:
जर ओळ [1] == '$ आवृत्ती':
s.send (IV PRIVMSG% s: CalicoBot 0.1.2 (c) 2012 Son Link \ n »% CHAN)
[/ कोड]

मला आशा आहे की आपणास हे ट्यूटोरियल आवडले असेल, आणि अर्थातच, मी माझ्या बॉटच्या कोडची लिंक आपल्याला सोडतो जेणेकरुन आपण त्याचा कोड पूर्ण पाहू शकाल आणि हे कसे कार्य करते ते आपण चांगले पाहू शकता. (जरी मी वैयक्तिक वापरासाठी काही आज्ञा काढल्या आहेत).

कॅलिकोबॉट


आपली टिप्पणी द्या

आपला ई-मेल पत्ता प्रकाशित केला जाणार नाही. आवश्यक फील्ड चिन्हांकित केले आहेत *

*

*

  1. डेटा जबाबदार: मिगुएल Áन्गल गॅटन
  2. डेटाचा उद्देशः नियंत्रण स्पॅम, टिप्पणी व्यवस्थापन.
  3. कायदे: आपली संमती
  4. डेटा संप्रेषण: कायदेशीर बंधन वगळता डेटा तृतीय पक्षास कळविला जाणार नाही.
  5. डेटा संग्रहण: ओकेन्टस नेटवर्क (EU) द्वारा होस्ट केलेला डेटाबेस
  6. अधिकारः कोणत्याही वेळी आपण आपली माहिती मर्यादित, पुनर्प्राप्त आणि हटवू शकता.

  1.   ऑरोसझेडएक्स म्हणाले

    अहो, आपण आयआरसीवर चालत असलेल्या बुलशीटचा बॉट मला चुकवता आला नाही 😛 खूप मजेशीर लेख.

  2.   सीझर म्हणाले

    खूप सोपे आणि स्पष्ट स्पष्टीकरण.
    काय तर, अजगर कोड सर्व इंडेंटेशन गहाळ आहे.

  3.   रफा म्हणाले

    बॉट प्रोग्राम करण्यासाठी IRC शी कनेक्ट करणे किती उत्कृष्ट लेख आणि सोपे आहे:)…

    आम्हाला त्या वेळाची आठवण येते जेव्हा आम्हाला असे वाटत होते की एमएसआरसी किंवा एमएसएन ग्रुप्स चॅटमध्ये प्रोग्रामर एमआयआरसीसाठी स्क्रिप्ट लिहितात.

  4.   ट्रुको 22 म्हणाले

    स्वारस्यपूर्ण मी ते ठेवतो 😀

  5.   एलिन्क्स म्हणाले

    खूप उपयुक्त, धन्यवाद सोन_लिंक!

    धन्यवाद!

  6.   dbillyx म्हणाले

    चीअर्स…

    आपल्या ओळींचे अनुसरण करणे आणि कार्य करणार्‍या एकमेव गोष्टीची चाचणी घेणे
    आयात सॉकेट
    आयात स्ट्रिंग

    HOST = »लोकल होस्ट
    पोर्ट = 6667
    निक = »कॅलिकोबॉट
    ओळखपत्र = »कॅलीकॉबॉट
    REALNAME = »CalicoBot
    चॅन = Home # मुख्यपृष्ठ »
    रीडबफर = »
    s = सॉकेट.सकेट ()
    s.connect ((होस्ट, पोर्ट))
    s.send ("NICK% srn"% NICK)
    s.send ("USER% s% s bla:% srn"% (IDENT, HOST, REALNAME)
    s.send ("जॉइन:% srn"% CHAN)

    चॅनेल बदलणे आणि आता खाली मला त्रुटी वाक्यरचना फेकते

    मी इतर परिचितांना विचारले आणि ते मला सांगतात की अजगर दिसत नाही

    मी काय चूक करीत आहे ते मला माहित नाही किंवा मी सर्वकाही कॉपी करुन अजगरीत का पेस्ट करुन त्यास एंटर देतो आणि हे चॅनेलशी कनेक्ट होते परंतु 250 सेकंदानंतर चॅनेलने ते काढून टाकले कारण पोंगकडून कोणताही प्रतिसाद मिळाला नाही ...

  7.   पिनफ्राय म्हणाले

    संपूर्ण कोड माझ्यासाठी कार्य करत नाही, शेवटचा परिच्छेद काय अपयशी ठरतो आणि मला त्रुटी सापडत नाही. जर मी तो भाग हटविला तर तो जोडतो आणि उत्तम प्रकारे कार्य करतो. विंडोज 2.7.3 वर पायथन 7 सह चाचणी केली.

    पुनश्च: माझ्या बाबतीत मी एका संकेतशब्दासह सर्व्हरशी कनेक्ट होतो आणि या ओळी जोडतो:
    पास = »पासडेलबॉट
    s.send ("PASS% s \ r \ n"% PASS)

  8.   डोएलपीएचएन म्हणाले

    हाय सोन लिंक, लेखाबद्दल तुमचे आभारी आहे, हे खूप मनोरंजक आहे, मी पाठविलेल्या आदेशांना प्रतिसाद देऊ शकत नाही. प्रोग्राम शेवटच्या टप्प्यात जात नाही आणि मी हे का शोधू शकत नाही: "जर लेन (लाइन)> 1:"
    मी तुझ्या उत्तराची वाट पाहत आहे.
    धन्यवाद