рдкрд╛рдпрдерди рдореЗрдВ рдЖрдИрд╕реАрдХреНрдпреВ рдмреЙрдЯ

рд╣% рд╣рдмрдирд╕% ! рдпрд╣ рдореЗрд░рд╛ рдкрд╣рд▓рд╛ рд╣реИрдмреНрд░реЛрдЯреЛрдкрд┐рдХ рд╣реИред рдЬрд┐рд╕рдореЗрдВ рдореИрдВ рдЖрдкрдХреЛ рдмрддрд╛рдКрдВрдЧрд╛ рдХрд┐ рдЕрдЬрдЧрд░ рдкрд░ рдЖрдИрд╕реАрдХреНрдпреВ рдмреЙрдЯ рдХреИрд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдмреЙрдЯ рд╣рдо рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ рдмреИрдареЗрдВрдЧреЗ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдЕрдиреБрд░реЛрдз рдкрд░, рд╣рдмрд░ рдХреЗ рдирд╡реАрдирддрдо рд▓реЗрдЦреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рднреЗрдЬреЗрдВрдЧреЗред

рдмреЙрдЯ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдореБрдбрд╝ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рдмреЗрд╢рдХ, рдЕрдЬрдЧрд░ рдореЗрдВ рдЖрдИрд╕реАрдХреНрдпреВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╡рд┐рд╢реЗрд╖ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реИрдВред рдЬреИрд╕реЗ рдХрд┐ рдкрд╛рдЗрдХ - рдЖрдЗрдХрд┐рдХ рдпрд╛ рдиреИрдиреЛрдЗрдХ ред рд▓реЗрдХрд┐рди рдЪреВрдВрдХрд┐ рдореИрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЯреНрд╡рд┐рд╕реНрдЯ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рдерд╛, рдЗрд╕рд▓рд┐рдП рдЪреБрдирд╛рд╡ рдЙрд╕ рдкрд░ рднрд╛рд░реА рдкрдбрд╝рд╛ред



рдкрд╣рд┐рдпрд╛ рдХреЛ рд╕реБрджреГрдврд╝ рдирд╣реАрдВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП , рдЙрджрд╛рд╣рд░рдг рд╕реЗ рд╢реЗрд░ рдХреЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд▓реЗрдВ:



# 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 ()
* рдЗрд╕ рд╕реЛрд░реНрд╕ рдХреЛрдб рдХреЛ рд╕реЛрд░реНрд╕ рдХреЛрдб рд╣рд╛рдЗрд▓рд╛рдЗрдЯрд░ рдХреЗ рд╕рд╛рде рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред




рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!



All Articles