पायथन में आईसीक्यू बॉट

ह% हबनस% ! यह मेरा पहला हैब्रोटोपिक है। जिसमें मैं आपको बताऊंगा कि अजगर पर आईसीक्यू बॉट कैसे बनाया जाता है। बॉट हम नेटवर्क पर बैठेंगे और उपयोगकर्ता के अनुरोध पर, हबर के नवीनतम लेखों की एक सूची भेजेंगे।
बॉट को लागू करने के लिए, हम मुड़ पुस्तकालय का उपयोग करेंगे। बेशक, अजगर में आईसीक्यू के साथ काम करने के लिए पहले से ही विशेष पुस्तकालय हैं। जैसे कि पाइक - आइकिक या नैनोइक । लेकिन चूंकि मैं पहले से ही ट्विस्ट से परिचित था, इसलिए चुनाव उस पर भारी पड़ा।

पहिया को सुदृढ़ नहीं करने के लिए , उदाहरण से शेर के कार्यक्रम का हिस्सा लें:

# UIN UIN = "" # PASS = "" # host = ( "login.icq.com" , 5238) # / icqMode = 1 # Status message AMSG = "I'm here +)" * This source code was highlighted with Source Code Highlighter .
  1. # UIN UIN = "" # PASS = "" # host = ( "login.icq.com" , 5238) # / icqMode = 1 # Status message AMSG = "I'm here +)" * This source code was highlighted with Source Code Highlighter .
  2. # UIN UIN = "" # PASS = "" # host = ( "login.icq.com" , 5238) # / icqMode = 1 # Status message AMSG = "I'm here +)" * This source code was highlighted with Source Code Highlighter .
  3. # UIN UIN = "" # PASS = "" # host = ( "login.icq.com" , 5238) # / icqMode = 1 # Status message AMSG = "I'm here +)" * This source code was highlighted with Source Code Highlighter .
  4. # UIN UIN = "" # PASS = "" # host = ( "login.icq.com" , 5238) # / icqMode = 1 # Status message AMSG = "I'm here +)" * This source code was highlighted with Source Code Highlighter .
  5. # UIN UIN = "" # PASS = "" # host = ( "login.icq.com" , 5238) # / icqMode = 1 # Status message AMSG = "I'm here +)" * This source code was highlighted with Source Code Highlighter .
  6. # UIN UIN = "" # PASS = "" # host = ( "login.icq.com" , 5238) # / icqMode = 1 # Status message AMSG = "I'm here +)" * This source code was highlighted with Source Code Highlighter .
  7. # UIN UIN = "" # PASS = "" # host = ( "login.icq.com" , 5238) # / icqMode = 1 # Status message AMSG = "I'm here +)" * This source code was highlighted with Source Code Highlighter .
# UIN UIN = "" # PASS = "" # host = ( "login.icq.com" , 5238) # / icqMode = 1 # Status message AMSG = "I'm here +)" * This source code was highlighted with Source Code Highlighter .


यहां प्रारंभिक भाग हमारे साथ समाप्त होता है। आवश्यक लाइब्रेरी डाउनलोड करें।

  1. twisted.words.protocols से ऑस्कर आयात करें
  2. Twisted.internet आयात प्रोटोकॉल, रिएक्टर से
  3. आयात फीडर
  4. आयात urllib2 # कृपया अभी तक इससे परेशान न हों। इसके लिए क्या है, मैं आपको थोड़ी देर बाद बताऊंगा
* इस सोर्स कोड को सोर्स कोड हाइलाइटर के साथ हाइलाइट किया गया था।


हमें हब के आरएस टेप को खींचने और पार्स करने के लिए फीडपैसर की आवश्यकता है। अब बॉट ही। यहाँ, मामूली बदलाव के अपवाद के साथ, उदाहरण से लगभग सब कुछ ...

  1. # क्लास बॉट
  2. वर्ग बॉट (ऑस्कर। BOSConnection):
  3. क्षमताओं = [ऑस्कर। CAP_CHAT]
  4. initDone (self) को हराया:
  5. प्रिंट "कनेक्ट" , यूआईएन, "सर्वर से" , मेजबान [0], मेजबान [1]
  6. self.requestSelfInfo ()। AddCallback (self.gotSelfInfo)
  7. सेल्फक्वेस्टएसएसआई ()। एडबैकबैक (स्व.गॉटबॉडी ललिस्ट)
  8. self.setAway (AMSG)
  9. मिल गया gotSInInfo (स्वयं, उपयोगकर्ता):
  10. उपयोगकर्ता प्रिंट करें।
  11. self.name = user.name
  12. डीएड ब्यूडलीस्टिस्ट (सेल्फ, एल):
  13. प्रिंट एल
  14. स्व.प्रतिपादि ()
  15. self.setProfile ( "" "ICQBot" "" )
  16. self.setIdleTime (0)
  17. स्वयं।
  18. मिल गया गेटवे (स्वयं, दूर, उपयोगकर्ता):
  19. अगर दूर:
  20. "उपयोगकर्ता" , उपयोगकर्ता, ":" , दूर प्रिंट करें
* इस सोर्स कोड को सोर्स कोड हाइलाइटर के साथ हाइलाइट किया गया था।


यहां हमारे पास सबसे स्वादिष्ट हिस्सा है। इनकमिंग संदेश प्रसंस्करण:

  1. डीईएम मेसेजेज़ (स्व, उपयोगकर्ता, मल्टीपार्ट्स, झंडे):
  2. "\ n <From:" , user.name प्रिंट करें
  3. "<संदेश:" प्रिंट करें, मल्टीपार्ट्स [0] [0] .डॉस्कोप ( 'cp1251' )
  4. कमांड = मल्टीपार्ट्स [0] [0] .lower ()। स्प्लिट ( '' ) # संदेश को रिक्त स्थान में विभाजित करें
  5. PREF_C = "!" # हमारे साथ टीम शुरू होगी!
* इस सोर्स कोड को सोर्स कोड हाइलाइटर के साथ हाइलाइट किया गया था।


पहली टीम हमारे पास होगी! हबर, लेकिन छोटे अपवाद हैं। यदि सिंटैक्स कमांड है! हबर एन, तो अंतिम एन पोस्ट प्रदर्शित किए जाएंगे। यदि वाक्यविन्यास कमांड है! Habr n1 n2, तो n1 से n2 पदों (मेरी छोटी सी सीटी) तक। बेशक, निष्कर्ष 20 पदों तक सीमित है, क्योंकि xml पृष्ठ में उनमें से ठीक 20 हैं।

  1. अगर कमांड [0] == (PREF_C + "हब्र" ):
  2. rss = feedparser.parse ( 'http://habrahabr.ru/rss' ) # xml पेज और पर्सिम लें
  3. फ़ीड्स = [0,20] # यह अतिरिक्त कार्यक्षमता के लिए है)
  4. अगर लेन (कमांड) == 2:
  5. कोशिश करें :
  6. फ़ीड्स [1] = इंट (कमांड [1])
  7. सिवाय:
  8. खिलाना [१] = ०
  9. अगर फ़ीड्स [1] <1: फ़ीड्स [1] = १
  10. अगर फ़ीड्स [1]> २०: फ़ीड्स [१] = २०
  11. एलिफ लेन (कमांड) == 3:
  12. कोशिश करें :
  13. फ़ीड्स [0] = इंट (कमांड [1]) - 1
  14. फ़ीड्स [1] = इंट (कमांड [2])
  15. सिवाय:
  16. खिलाना [०] = ०
  17. फ़ीड्स [1] = १ ९
  18. अगर फ़ीड्स [0] <0: फ़ीड्स [0] = 0
  19. अगर फ़ीड्स [0]> 19: फ़ीड्स [0] = 19
  20. अगर फ़ीड्स [1] <1: फ़ीड्स [1] = १
  21. अगर फ़ीड्स [1]> २०: फ़ीड्स [१] = २०
  22. मेस = ''
  23. सीमा में फ़ीड के लिए (फ़ीड [0], फ़ीड [1]):
  24. मेस + = rss.entries [फ़ीड] .title + '\ n'
  25. self.sendMessage (user.name, mes)
* इस सोर्स कोड को सोर्स कोड हाइलाइटर के साथ हाइलाइट किया गया था।


हब्रन एन कमांड फील्ड एन के विवरण क्षेत्र की सामग्री को प्रदर्शित करेगा

  1. एलिफ कमांड [0] == (PREF_C + "हब्रन" ):
  2. rss = feedparser.parse ( 'http://habrahabr.ru/rss' )
  3. कोशिश करें :
  4. feedn = int (कमांड [1]) - १
  5. सिवाय:
  6. खिलाया = ०
  7. अगर खिलाया जाता है <0: feedn = 0
  8. अगर फ़ीड> 19: फीड = 19
  9. self.sendMessage (user.name, rss.entries [feedn] .title + '\ n' + rss.entries [feedn] .description)।
* इस सोर्स कोड को सोर्स कोड हाइलाइटर के साथ हाइलाइट किया गया था।


फिर मैं आयात urllib2 का उल्लेख करना चाहता हूं, जिसे मैंने शुरुआत में दर्ज किया था। कभी-कभी मुझे अपने घर सर्वर के आईपी का पता लगाने की आवश्यकता होती है ताकि इसे ssh के द्वारा एक्सेस किया जा सके। और हां, मैं नहीं चाहूंगा कि कोई और उसका पता जाने।

  1. एलिफ कमांड [0] == (PREF_C + "ip" ) और user.name == '3685766 # :
  2. file_s = urllib2.urlopen (urllib2.Request ( 'http://api.wipmania.com/' ))
  3. प्रतिक्रिया = file_s.read ()
  4. self.sendMessage (user.name, response.split ( "<br>" ) [0]
  5. f.close ()
* इस सोर्स कोड को सोर्स कोड हाइलाइटर के साथ हाइलाइट किया गया था।


यदि आप http://api.wipmania.com/ को देखते हैं , तो आप एक बहुत ही सरल HTML पृष्ठ पा सकते हैं, जिस पर हमारा बाहरी आईपी होगा।

खैर, अंतिम भाग:

  1. वर्ग बॉटथ (ऑस्करऑस्कर ऑथेंटिकेटर):
  2. बॉसक्लास = बॉट
  3. प्रोटोकॉल .ClientCreator (रिएक्टर, बॉटूथ, यूआईएन, पास, icq = icqMode) .connectTCP (* होस्ट)।
  4. reactor.run ()
* इस सोर्स कोड को सोर्स कोड हाइलाइटर के साथ हाइलाइट किया गया था।

वह सब है। मैं उस व्यक्ति को धन्यवाद कहना चाहता हूं जिसने आखिरी कमांड के लिए आईपी ​​प्राप्त करने में मदद की

यहाँ पूरा कोड है:

  1. # - * - कोडिंग: utf-8 - * -
  2. # आईसीक्यू बॉट
  3. # यूआईएन
  4. यूआईएन = "123456"
  5. पास = "पास"
  6. # सर्वर
  7. होस्ट = ( "login.icq.com" , 5238)
  8. icqMode = 1
  9. # स्थिति संदेश
  10. AMSG = "मैं यहां हूं +)"
  11. twisted.words.protocols से ऑस्कर आयात करें
  12. Twisted.internet आयात प्रोटोकॉल, रिएक्टर से
  13. आयात फीडर
  14. आयात urllib2
  15. # क्लास बॉट
  16. वर्ग बॉट (ऑस्कर। BOSConnection):
  17. क्षमताओं = [ऑस्कर। CAP_CHAT]
  18. initDone (self) को हराया:
  19. प्रिंट "कनेक्ट" , यूआईएन, "सर्वर से" , मेजबान [0], मेजबान [1]
  20. self.requestSelfInfo ()। AddCallback (self.gotSelfInfo)
  21. सेल्फक्वेस्टएसएसआई ()। एडबैकबैक (स्व.गॉटबॉडी ललिस्ट)
  22. self.setAway (AMSG)
  23. मिल गया gotSInInfo (स्वयं, उपयोगकर्ता):
  24. उपयोगकर्ता प्रिंट करें।
  25. self.name = user.name
  26. डीएड ब्यूडलीस्टिस्ट (सेल्फ, एल):
  27. प्रिंट एल
  28. स्व.प्रतिपादि ()
  29. self.setProfile ( "" "ICQBot" "" )
  30. self.setIdleTime (0)
  31. स्वयं।
  32. मिल गया गेटवे (स्वयं, दूर, उपयोगकर्ता):
  33. अगर दूर:
  34. "उपयोगकर्ता" , उपयोगकर्ता, ":" , दूर प्रिंट करें
  35. डीईएम मेसेजेज़ (स्व, उपयोगकर्ता, मल्टीपार्ट्स, झंडे):
  36. "\ n <From:" , user.name प्रिंट करें
  37. "<संदेश:" प्रिंट करें, मल्टीपार्ट्स [0] [0] .डॉस्कोप ( 'cp1251' )
  38. कमांड = मल्टीपार्ट्स [0] [0]। लॉवर ()। स्प्लिट ( '' )
  39. PREF_C = "!"
  40. अगर कमांड [0] == (PREF_C + "हब्र" ):
  41. rss = feedparser.parse ( 'http://habrahabr.ru/rss' )
  42. फ़ीड्स = [0.20]
  43. अगर लेन (कमांड) == 2:
  44. कोशिश करें :
  45. फ़ीड्स [1] = इंट (कमांड [1])
  46. सिवाय:
  47. खिलाना [१] = ०
  48. अगर फ़ीड्स [1] <1: फ़ीड्स [1] = १
  49. अगर फ़ीड्स [1]> २०: फ़ीड्स [१] = २०
  50. एलिफ लेन (कमांड) == 3:
  51. कोशिश करें :
  52. फ़ीड्स [0] = इंट (कमांड [1]) - 1
  53. फ़ीड्स [1] = इंट (कमांड [2])
  54. सिवाय:
  55. खिलाना [०] = ०
  56. फ़ीड्स [1] = १ ९
  57. अगर फ़ीड्स [0] <0: फ़ीड्स [0] = 0
  58. अगर फ़ीड्स [0]> 19: फ़ीड्स [0] = 19
  59. अगर फ़ीड्स [1] <1: फ़ीड्स [1] = १
  60. अगर फ़ीड्स [1]> २०: फ़ीड्स [१] = २०
  61. मेस = ''
  62. सीमा में फ़ीड के लिए (फ़ीड [0], फ़ीड [1]):
  63. मेस + = rss.entries [फ़ीड] .title + '\ n'
  64. self.sendMessage (user.name, mes)
  65. एलिफ कमांड [0] == (PREF_C + "हब्रन" ):
  66. rss = feedparser.parse ( 'http://habrahabr.ru/rss' )
  67. कोशिश करें :
  68. feedn = int (कमांड [1]) - १
  69. सिवाय:
  70. खिलाया = ०
  71. अगर खिलाया जाता है <0: feedn = 0
  72. अगर फ़ीड> 19: फीड = 19
  73. self.sendMessage (user.name, rss.entries [feedn] .title + '\ n' + rss.entries [feedn] .description)।
  74. एलिफ कमांड [0] == (PREF_C + "ip" ) और user.name == '123456' :
  75. file_s = urllib2.urlopen (urllib2.Request ( 'http://api.wipmania.com/' ))
  76. प्रतिक्रिया = file_s.read ()
  77. self.sendMessage (user.name, response.split ( " <br> " ) [0]
  78. f.close ()
  79. वर्ग बॉटथ (ऑस्करऑस्कर ऑथेंटिकेटर):
  80. बॉसक्लास = बॉट
  81. प्रोटोकॉल .ClientCreator (रिएक्टर, बॉटूथ, यूआईएन, पास, icq = icqMode) .connectTCP (* होस्ट)।
  82. reactor.run ()
* इस सोर्स कोड को सोर्स कोड हाइलाइटर के साथ हाइलाइट किया गया था।


आपका ध्यान के लिए धन्यवाद!

Source: https://habr.com/ru/post/In111263/


All Articles