рдмреЙрдЯ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдореБрдбрд╝ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рдмреЗрд╢рдХ, рдЕрдЬрдЧрд░ рдореЗрдВ рдЖрдИрд╕реАрдХреНрдпреВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╡рд┐рд╢реЗрд╖ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реИрдВред рдЬреИрд╕реЗ рдХрд┐ рдкрд╛рдЗрдХ - рдЖрдЗрдХрд┐рдХ рдпрд╛ рдиреИрдиреЛрдЗрдХ ред рд▓реЗрдХрд┐рди рдЪреВрдВрдХрд┐ рдореИрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЯреНрд╡рд┐рд╕реНрдЯ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рдерд╛, рдЗрд╕рд▓рд┐рдП рдЪреБрдирд╛рд╡ рдЙрд╕ рдкрд░ рднрд╛рд░реА рдкрдбрд╝рд╛ред
рдкрд╣рд┐рдпрд╛ рдХреЛ рд╕реБрджреГрдврд╝ рдирд╣реАрдВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП , рдЙрджрд╛рд╣рд░рдг рд╕реЗ рд╢реЗрд░ рдХреЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд▓реЗрдВ:
# 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 .
# 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 .
# 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 .
# 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 .
# 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 .
рдпрд╣рд╛рдВ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рднрд╛рдЧ рд╣рдорд╛рд░реЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИред рдЖрд╡рд╢реНрдпрдХ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВред
* рдЗрд╕ рд╕реЛрд░реНрд╕ рдХреЛрдб рдХреЛ рд╕реЛрд░реНрд╕ рдХреЛрдб рд╣рд╛рдЗрд▓рд╛рдЗрдЯрд░ рдХреЗ рд╕рд╛рде рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
- twisted.words.protocols рд╕реЗ рдСрд╕реНрдХрд░ рдЖрдпрд╛рдд рдХрд░реЗрдВ
 - Twisted.internet рдЖрдпрд╛рдд рдкреНрд░реЛрдЯреЛрдХреЙрд▓, рд░рд┐рдПрдХреНрдЯрд░ рд╕реЗ
 - рдЖрдпрд╛рдд рдлреАрдбрд░
 - рдЖрдпрд╛рдд urllib2 # рдХреГрдкрдпрд╛ рдЕрднреА рддрдХ рдЗрд╕рд╕реЗ рдкрд░реЗрд╢рд╛рди рди рд╣реЛрдВред рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рд╣реИ, рдореИрдВ рдЖрдкрдХреЛ рдереЛрдбрд╝реА рджреЗрд░ рдмрд╛рдж рдмрддрд╛рдКрдВрдЧрд╛
 
рд╣рдореЗрдВ рд╣рдм рдХреЗ рдЖрд░рдПрд╕ рдЯреЗрдк рдХреЛ рдЦреАрдВрдЪрдиреЗ рдФрд░ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдлреАрдбрдкреИрд╕рд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЕрдм рдмреЙрдЯ рд╣реАред рдпрд╣рд╛рдБ, рдорд╛рдореВрд▓реА рдмрджрд▓рд╛рд╡ рдХреЗ рдЕрдкрд╡рд╛рдж рдХреЗ рд╕рд╛рде, рдЙрджрд╛рд╣рд░рдг рд╕реЗ рд▓рдЧрднрдЧ рд╕рдм рдХреБрдЫ ...
* рдЗрд╕ рд╕реЛрд░реНрд╕ рдХреЛрдб рдХреЛ рд╕реЛрд░реНрд╕ рдХреЛрдб рд╣рд╛рдЗрд▓рд╛рдЗрдЯрд░ рдХреЗ рд╕рд╛рде рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
- # рдХреНрд▓рд╛рд╕ рдмреЙрдЯ
 - рд╡рд░реНрдЧ рдмреЙрдЯ (рдСрд╕реНрдХрд░ред BOSConnection):
 - рдХреНрд╖рдорддрд╛рдУрдВ = [рдСрд╕реНрдХрд░ред CAP_CHAT]
 - initDone (self) рдХреЛ рд╣рд░рд╛рдпрд╛:
 - рдкреНрд░рд┐рдВрдЯ "рдХрдиреЗрдХреНрдЯ" , рдпреВрдЖрдИрдПрди, "рд╕рд░реНрд╡рд░ рд╕реЗ" , рдореЗрдЬрдмрд╛рди [0], рдореЗрдЬрдмрд╛рди [1]
 - self.requestSelfInfo ()ред AddCallback (self.gotSelfInfo)
 - рд╕реЗрд▓реНрдлрдХреНрд╡реЗрд╕реНрдЯрдПрд╕рдПрд╕рдЖрдИ ()ред рдПрдбрдмреИрдХрдмреИрдХ (рд╕реНрд╡.рдЧреЙрдЯрдмреЙрдбреА рд▓рд▓рд┐рд╕реНрдЯ)
 - self.setAway (AMSG)
 - рдорд┐рд▓ рдЧрдпрд╛ gotSInInfo (рд╕реНрд╡рдпрдВ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛):
 - рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреНрд░рд┐рдВрдЯ рдХрд░реЗрдВред
 - self.name = user.name
 - рдбреАрдПрдб рдмреНрдпреВрдбрд▓реАрд╕реНрдЯрд┐рд╕реНрдЯ (рд╕реЗрд▓реНрдл, рдПрд▓):
 - рдкреНрд░рд┐рдВрдЯ рдПрд▓
 - рд╕реНрд╡.рдкреНрд░рддрд┐рдкрд╛рджрд┐ ()
 - self.setProfile ( "" "ICQBot" "" )
 - self.setIdleTime (0)
 - рд╕реНрд╡рдпрдВред
 - рдорд┐рд▓ рдЧрдпрд╛ рдЧреЗрдЯрд╡реЗ (рд╕реНрд╡рдпрдВ, рджреВрд░, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛):
 - рдЕрдЧрд░ рджреВрд░:
 - "рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛" , рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛, ":" , рджреВрд░ рдкреНрд░рд┐рдВрдЯ рдХрд░реЗрдВ
 
рдпрд╣рд╛рдВ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╕рдмрд╕реЗ рд╕реНрд╡рд╛рджрд┐рд╖реНрдЯ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИред рдЗрдирдХрдорд┐рдВрдЧ рд╕рдВрджреЗрд╢ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг:
* рдЗрд╕ рд╕реЛрд░реНрд╕ рдХреЛрдб рдХреЛ рд╕реЛрд░реНрд╕ рдХреЛрдб рд╣рд╛рдЗрд▓рд╛рдЗрдЯрд░ рдХреЗ рд╕рд╛рде рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
- рдбреАрдИрдПрдо рдореЗрд╕реЗрдЬреЗрдЬрд╝ (рд╕реНрд╡, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛, рдорд▓реНрдЯреАрдкрд╛рд░реНрдЯреНрд╕, рдЭрдВрдбреЗ):
 - "\ n <From:" , user.name рдкреНрд░рд┐рдВрдЯ рдХрд░реЗрдВ
 - "<рд╕рдВрджреЗрд╢:" рдкреНрд░рд┐рдВрдЯ рдХрд░реЗрдВ, рдорд▓реНрдЯреАрдкрд╛рд░реНрдЯреНрд╕ [0] [0] .рдбреЙрд╕реНрдХреЛрдк ( 'cp1251' )
 - рдХрдорд╛рдВрдб = рдорд▓реНрдЯреАрдкрд╛рд░реНрдЯреНрд╕ [0] [0] .lower ()ред рд╕реНрдкреНрд▓рд┐рдЯ ( '' ) # рд╕рдВрджреЗрд╢ рдХреЛ рд░рд┐рдХреНрдд рд╕реНрдерд╛рди рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░реЗрдВ
 - PREF_C = "!" # рд╣рдорд╛рд░реЗ рд╕рд╛рде рдЯреАрдо рд╢реБрд░реВ рд╣реЛрдЧреА!
 
рдкрд╣рд▓реА рдЯреАрдо рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╣реЛрдЧреА! рд╣рдмрд░, рд▓реЗрдХрд┐рди рдЫреЛрдЯреЗ рдЕрдкрд╡рд╛рдж рд╣реИрдВред рдпрджрд┐ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрдорд╛рдВрдб рд╣реИ! рд╣рдмрд░ рдПрди, рддреЛ рдЕрдВрддрд┐рдо рдПрди рдкреЛрд╕реНрдЯ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдП рдЬрд╛рдПрдВрдЧреЗред рдпрджрд┐ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдХрдорд╛рдВрдб рд╣реИ! Habr n1 n2, рддреЛ n1 рд╕реЗ n2 рдкрджреЛрдВ (рдореЗрд░реА рдЫреЛрдЯреА рд╕реА рд╕реАрдЯреА) рддрдХред рдмреЗрд╢рдХ, рдирд┐рд╖реНрдХрд░реНрд╖ 20 рдкрджреЛрдВ рддрдХ рд╕реАрдорд┐рдд рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ xml рдкреГрд╖реНрда рдореЗрдВ рдЙрдирдореЗрдВ рд╕реЗ рдареАрдХ 20 рд╣реИрдВред
* рдЗрд╕ рд╕реЛрд░реНрд╕ рдХреЛрдб рдХреЛ рд╕реЛрд░реНрд╕ рдХреЛрдб рд╣рд╛рдЗрд▓рд╛рдЗрдЯрд░ рдХреЗ рд╕рд╛рде рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
- рдЕрдЧрд░ рдХрдорд╛рдВрдб [0] == (PREF_C + "рд╣рдмреНрд░" ):
 - rss = feedparser.parse ( 'http://habrahabr.ru/rss' ) # xml рдкреЗрдЬ рдФрд░ рдкрд░реНрд╕рд┐рдо рд▓реЗрдВ
 - рдлрд╝реАрдбреНрд╕ = [0,20] # рдпрд╣ рдЕрддрд┐рд░рд┐рдХреНрдд рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗ рд▓рд┐рдП рд╣реИ)
 - рдЕрдЧрд░ рд▓реЗрди (рдХрдорд╛рдВрдб) == 2:
 - рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ :
 - рдлрд╝реАрдбреНрд╕ [1] = рдЗрдВрдЯ (рдХрдорд╛рдВрдб [1])
 - рд╕рд┐рд╡рд╛рдп:
 - рдЦрд┐рд▓рд╛рдирд╛ [рез] = реж
 - рдЕрдЧрд░ рдлрд╝реАрдбреНрд╕ [1] <1: рдлрд╝реАрдбреНрд╕ [1] = рез
 - рдЕрдЧрд░ рдлрд╝реАрдбреНрд╕ [1]> реиреж: рдлрд╝реАрдбреНрд╕ [рез] = реиреж
 - рдПрд▓рд┐рдл рд▓реЗрди (рдХрдорд╛рдВрдб) == 3:
 - рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ :
 - рдлрд╝реАрдбреНрд╕ [0] = рдЗрдВрдЯ (рдХрдорд╛рдВрдб [1]) - 1
 - рдлрд╝реАрдбреНрд╕ [1] = рдЗрдВрдЯ (рдХрдорд╛рдВрдб [2])
 - рд╕рд┐рд╡рд╛рдп:
 - рдЦрд┐рд▓рд╛рдирд╛ [реж] = реж
 - рдлрд╝реАрдбреНрд╕ [1] = рез реп
 - рдЕрдЧрд░ рдлрд╝реАрдбреНрд╕ [0] <0: рдлрд╝реАрдбреНрд╕ [0] = 0
 - рдЕрдЧрд░ рдлрд╝реАрдбреНрд╕ [0]> 19: рдлрд╝реАрдбреНрд╕ [0] = 19
 - рдЕрдЧрд░ рдлрд╝реАрдбреНрд╕ [1] <1: рдлрд╝реАрдбреНрд╕ [1] = рез
 - рдЕрдЧрд░ рдлрд╝реАрдбреНрд╕ [1]> реиреж: рдлрд╝реАрдбреНрд╕ [рез] = реиреж
 - рдореЗрд╕ = ''
 - рд╕реАрдорд╛ рдореЗрдВ рдлрд╝реАрдб рдХреЗ рд▓рд┐рдП (рдлрд╝реАрдб [0], рдлрд╝реАрдб [1]):
 - рдореЗрд╕ + = rss.entries [рдлрд╝реАрдб] .title + '\ n'
 - self.sendMessage (user.name, mes)
 
рд╣рдмреНрд░рди рдПрди рдХрдорд╛рдВрдб рдлреАрд▓реНрдб рдПрди рдХреЗ рд╡рд┐рд╡рд░рдг рдХреНрд╖реЗрддреНрд░ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдЧрд╛
* рдЗрд╕ рд╕реЛрд░реНрд╕ рдХреЛрдб рдХреЛ рд╕реЛрд░реНрд╕ рдХреЛрдб рд╣рд╛рдЗрд▓рд╛рдЗрдЯрд░ рдХреЗ рд╕рд╛рде рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
- рдПрд▓рд┐рдл рдХрдорд╛рдВрдб [0] == (PREF_C + "рд╣рдмреНрд░рди" ):
 - rss = feedparser.parse ( 'http://habrahabr.ru/rss' )
 - рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ :
 - feedn = int (рдХрдорд╛рдВрдб [1]) - рез
 - рд╕рд┐рд╡рд╛рдп:
 - рдЦрд┐рд▓рд╛рдпрд╛ = реж
 - рдЕрдЧрд░ рдЦрд┐рд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ <0: feedn = 0
 - рдЕрдЧрд░ рдлрд╝реАрдб> 19: рдлреАрдб = 19
 - self.sendMessage (user.name, rss.entries [feedn] .title + '\ n' + rss.entries [feedn] .description)ред
 
рдлрд┐рд░ рдореИрдВ рдЖрдпрд╛рдд urllib2 рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рдЬрд┐рд╕реЗ рдореИрдВрдиреЗ рд╢реБрд░реБрдЖрдд рдореЗрдВ рджрд░реНрдЬ рдХрд┐рдпрд╛ рдерд╛ред рдХрднреА-рдХрднреА рдореБрдЭреЗ рдЕрдкрдиреЗ рдШрд░ рд╕рд░реНрд╡рд░ рдХреЗ рдЖрдИрдкреА рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рддрд╛рдХрд┐ рдЗрд╕реЗ ssh рдХреЗ рджреНрд╡рд╛рд░рд╛ рдПрдХреНрд╕реЗрд╕ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред рдФрд░ рд╣рд╛рдВ, рдореИрдВ рдирд╣реАрдВ рдЪрд╛рд╣реВрдВрдЧрд╛ рдХрд┐ рдХреЛрдИ рдФрд░ рдЙрд╕рдХрд╛ рдкрддрд╛ рдЬрд╛рдиреЗред
* рдЗрд╕ рд╕реЛрд░реНрд╕ рдХреЛрдб рдХреЛ рд╕реЛрд░реНрд╕ рдХреЛрдб рд╣рд╛рдЗрд▓рд╛рдЗрдЯрд░ рдХреЗ рд╕рд╛рде рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
- рдПрд▓рд┐рдл рдХрдорд╛рдВрдб [0] == (PREF_C + "ip" ) рдФрд░ user.name == '3685766 # :
 - file_s = urllib2.urlopen (urllib2.Request ( 'http://api.wipmania.com/' ))
 - рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ = file_s.read ()
 - self.sendMessage (user.name, response.split ( "<br>" ) [0]
 - f.close ()
 
рдпрджрд┐ рдЖрдк http://api.wipmania.com/ рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ , рддреЛ рдЖрдк рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд░рд▓ HTML рдкреГрд╖реНрда рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕ рдкрд░ рд╣рдорд╛рд░рд╛ рдмрд╛рд╣рд░реА рдЖрдИрдкреА рд╣реЛрдЧрд╛ред
рдЦреИрд░, рдЕрдВрддрд┐рдо рднрд╛рдЧ:
* рдЗрд╕ рд╕реЛрд░реНрд╕ рдХреЛрдб рдХреЛ рд╕реЛрд░реНрд╕ рдХреЛрдб рд╣рд╛рдЗрд▓рд╛рдЗрдЯрд░ рдХреЗ рд╕рд╛рде рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
- рд╡рд░реНрдЧ рдмреЙрдЯрде (рдСрд╕реНрдХрд░рдСрд╕реНрдХрд░ рдСрдереЗрдВрдЯрд┐рдХреЗрдЯрд░):
 - рдмреЙрд╕рдХреНрд▓рд╛рд╕ = рдмреЙрдЯ
 - рдкреНрд░реЛрдЯреЛрдХреЙрд▓ .ClientCreator (рд░рд┐рдПрдХреНрдЯрд░, рдмреЙрдЯреВрде, рдпреВрдЖрдИрдПрди, рдкрд╛рд╕, icq = icqMode) .connectTCP (* рд╣реЛрд╕реНрдЯ)ред
 - reactor.run ()
 
рд╡рд╣ рд╕рдм рд╣реИред рдореИрдВ рдЙрд╕ рд╡реНрдпрдХреНрддрд┐ рдХреЛ рдзрдиреНрдпрд╡рд╛рдж рдХрд╣рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдЬрд┐рд╕рдиреЗ рдЖрдЦрд┐рд░реА рдХрдорд╛рдВрдб рдХреЗ рд▓рд┐рдП рдЖрдИрдкреА тАЛтАЛрдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХреА ред
рдпрд╣рд╛рдБ рдкреВрд░рд╛ рдХреЛрдб рд╣реИ:
* рдЗрд╕ рд╕реЛрд░реНрд╕ рдХреЛрдб рдХреЛ рд╕реЛрд░реНрд╕ рдХреЛрдб рд╣рд╛рдЗрд▓рд╛рдЗрдЯрд░ рдХреЗ рд╕рд╛рде рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
- # - * - рдХреЛрдбрд┐рдВрдЧ: utf-8 - * -
 - # рдЖрдИрд╕реАрдХреНрдпреВ рдмреЙрдЯ
 - # рдпреВрдЖрдИрдПрди
 - рдпреВрдЖрдИрдПрди = "123456"
 - рдкрд╛рд╕ = "рдкрд╛рд╕"
 - # рд╕рд░реНрд╡рд░
 - рд╣реЛрд╕реНрдЯ = ( "login.icq.com" , 5238)
 - icqMode = 1
 - # рд╕реНрдерд┐рддрд┐ рд╕рдВрджреЗрд╢
 - AMSG = "рдореИрдВ рдпрд╣рд╛рдВ рд╣реВрдВ +)"
 - twisted.words.protocols рд╕реЗ рдСрд╕реНрдХрд░ рдЖрдпрд╛рдд рдХрд░реЗрдВ
 - Twisted.internet рдЖрдпрд╛рдд рдкреНрд░реЛрдЯреЛрдХреЙрд▓, рд░рд┐рдПрдХреНрдЯрд░ рд╕реЗ
 - рдЖрдпрд╛рдд рдлреАрдбрд░
 - рдЖрдпрд╛рдд urllib2
 - # рдХреНрд▓рд╛рд╕ рдмреЙрдЯ
 - рд╡рд░реНрдЧ рдмреЙрдЯ (рдСрд╕реНрдХрд░ред BOSConnection):
 - рдХреНрд╖рдорддрд╛рдУрдВ = [рдСрд╕реНрдХрд░ред CAP_CHAT]
 - initDone (self) рдХреЛ рд╣рд░рд╛рдпрд╛:
 - рдкреНрд░рд┐рдВрдЯ "рдХрдиреЗрдХреНрдЯ" , рдпреВрдЖрдИрдПрди, "рд╕рд░реНрд╡рд░ рд╕реЗ" , рдореЗрдЬрдмрд╛рди [0], рдореЗрдЬрдмрд╛рди [1]
 - self.requestSelfInfo ()ред AddCallback (self.gotSelfInfo)
 - рд╕реЗрд▓реНрдлрдХреНрд╡реЗрд╕реНрдЯрдПрд╕рдПрд╕рдЖрдИ ()ред рдПрдбрдмреИрдХрдмреИрдХ (рд╕реНрд╡.рдЧреЙрдЯрдмреЙрдбреА рд▓рд▓рд┐рд╕реНрдЯ)
 - self.setAway (AMSG)
 - рдорд┐рд▓ рдЧрдпрд╛ gotSInInfo (рд╕реНрд╡рдпрдВ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛):
 - рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреНрд░рд┐рдВрдЯ рдХрд░реЗрдВред
 - self.name = user.name
 - рдбреАрдПрдб рдмреНрдпреВрдбрд▓реАрд╕реНрдЯрд┐рд╕реНрдЯ (рд╕реЗрд▓реНрдл, рдПрд▓):
 - рдкреНрд░рд┐рдВрдЯ рдПрд▓
 - рд╕реНрд╡.рдкреНрд░рддрд┐рдкрд╛рджрд┐ ()
 - self.setProfile ( "" "ICQBot" "" )
 - self.setIdleTime (0)
 - рд╕реНрд╡рдпрдВред
 - рдорд┐рд▓ рдЧрдпрд╛ рдЧреЗрдЯрд╡реЗ (рд╕реНрд╡рдпрдВ, рджреВрд░, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛):
 - рдЕрдЧрд░ рджреВрд░:
 - "рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛" , рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛, ":" , рджреВрд░ рдкреНрд░рд┐рдВрдЯ рдХрд░реЗрдВ
 - рдбреАрдИрдПрдо рдореЗрд╕реЗрдЬреЗрдЬрд╝ (рд╕реНрд╡, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛, рдорд▓реНрдЯреАрдкрд╛рд░реНрдЯреНрд╕, рдЭрдВрдбреЗ):
 - "\ n <From:" , user.name рдкреНрд░рд┐рдВрдЯ рдХрд░реЗрдВ
 - "<рд╕рдВрджреЗрд╢:" рдкреНрд░рд┐рдВрдЯ рдХрд░реЗрдВ, рдорд▓реНрдЯреАрдкрд╛рд░реНрдЯреНрд╕ [0] [0] .рдбреЙрд╕реНрдХреЛрдк ( 'cp1251' )
 - рдХрдорд╛рдВрдб = рдорд▓реНрдЯреАрдкрд╛рд░реНрдЯреНрд╕ [0] [0]ред рд▓реЙрд╡рд░ ()ред рд╕реНрдкреНрд▓рд┐рдЯ ( '' )
 - PREF_C = "!"
 - рдЕрдЧрд░ рдХрдорд╛рдВрдб [0] == (PREF_C + "рд╣рдмреНрд░" ):
 - rss = feedparser.parse ( 'http://habrahabr.ru/rss' )
 - рдлрд╝реАрдбреНрд╕ = [0.20]
 - рдЕрдЧрд░ рд▓реЗрди (рдХрдорд╛рдВрдб) == 2:
 - рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ :
 - рдлрд╝реАрдбреНрд╕ [1] = рдЗрдВрдЯ (рдХрдорд╛рдВрдб [1])
 - рд╕рд┐рд╡рд╛рдп:
 - рдЦрд┐рд▓рд╛рдирд╛ [рез] = реж
 - рдЕрдЧрд░ рдлрд╝реАрдбреНрд╕ [1] <1: рдлрд╝реАрдбреНрд╕ [1] = рез
 - рдЕрдЧрд░ рдлрд╝реАрдбреНрд╕ [1]> реиреж: рдлрд╝реАрдбреНрд╕ [рез] = реиреж
 - рдПрд▓рд┐рдл рд▓реЗрди (рдХрдорд╛рдВрдб) == 3:
 - рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ :
 - рдлрд╝реАрдбреНрд╕ [0] = рдЗрдВрдЯ (рдХрдорд╛рдВрдб [1]) - 1
 - рдлрд╝реАрдбреНрд╕ [1] = рдЗрдВрдЯ (рдХрдорд╛рдВрдб [2])
 - рд╕рд┐рд╡рд╛рдп:
 - рдЦрд┐рд▓рд╛рдирд╛ [реж] = реж
 - рдлрд╝реАрдбреНрд╕ [1] = рез реп
 - рдЕрдЧрд░ рдлрд╝реАрдбреНрд╕ [0] <0: рдлрд╝реАрдбреНрд╕ [0] = 0
 - рдЕрдЧрд░ рдлрд╝реАрдбреНрд╕ [0]> 19: рдлрд╝реАрдбреНрд╕ [0] = 19
 - рдЕрдЧрд░ рдлрд╝реАрдбреНрд╕ [1] <1: рдлрд╝реАрдбреНрд╕ [1] = рез
 - рдЕрдЧрд░ рдлрд╝реАрдбреНрд╕ [1]> реиреж: рдлрд╝реАрдбреНрд╕ [рез] = реиреж
 - рдореЗрд╕ = ''
 - рд╕реАрдорд╛ рдореЗрдВ рдлрд╝реАрдб рдХреЗ рд▓рд┐рдП (рдлрд╝реАрдб [0], рдлрд╝реАрдб [1]):
 - рдореЗрд╕ + = rss.entries [рдлрд╝реАрдб] .title + '\ n'
 - self.sendMessage (user.name, mes)
 - рдПрд▓рд┐рдл рдХрдорд╛рдВрдб [0] == (PREF_C + "рд╣рдмреНрд░рди" ):
 - rss = feedparser.parse ( 'http://habrahabr.ru/rss' )
 - рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ :
 - feedn = int (рдХрдорд╛рдВрдб [1]) - рез
 - рд╕рд┐рд╡рд╛рдп:
 - рдЦрд┐рд▓рд╛рдпрд╛ = реж
 - рдЕрдЧрд░ рдЦрд┐рд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ <0: feedn = 0
 - рдЕрдЧрд░ рдлрд╝реАрдб> 19: рдлреАрдб = 19
 - self.sendMessage (user.name, rss.entries [feedn] .title + '\ n' + rss.entries [feedn] .description)ред
 - рдПрд▓рд┐рдл рдХрдорд╛рдВрдб [0] == (PREF_C + "ip" ) рдФрд░ user.name == '123456' :
 - file_s = urllib2.urlopen (urllib2.Request ( 'http://api.wipmania.com/' ))
 - рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ = file_s.read ()
 - self.sendMessage (user.name, response.split ( " <br> " ) [0]
 - f.close ()
 - рд╡рд░реНрдЧ рдмреЙрдЯрде (рдСрд╕реНрдХрд░рдСрд╕реНрдХрд░ рдСрдереЗрдВрдЯрд┐рдХреЗрдЯрд░):
 - рдмреЙрд╕рдХреНрд▓рд╛рд╕ = рдмреЙрдЯ
 - рдкреНрд░реЛрдЯреЛрдХреЙрд▓ .ClientCreator (рд░рд┐рдПрдХреНрдЯрд░, рдмреЙрдЯреВрде, рдпреВрдЖрдИрдПрди, рдкрд╛рд╕, icq = icqMode) .connectTCP (* рд╣реЛрд╕реНрдЯ)ред
 - reactor.run ()
 
рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!