]>
jfr.im git - erebus.git/blob - modules/eval.py
1 # Erebus IRC bot - Author: Erebus Team
2 # vim: fileencoding=utf-8
3 # !EVAL and !EXEC commands
4 # This file is released into the public domain; see http://unlicense.org/
8 'author' : 'Erebus Team' ,
9 'license' : 'public domain' ,
17 lib
= modlib
. modlib ( __name__
)
18 modstart
= lib
. modstart
25 # import these to make life easier using this module
32 @lib.hook ( 'eval' , needchan
= False , wantchan
= True , glevel
= lib
. OWNER
)
33 @lib.help ( "<python>" , "eval" )
35 def cmd_eval ( bot
, user
, chan
, realtarget
, * args
):
36 if chan
is not None : replyto
= chan
39 try : ret
= eval ( ' ' . join ( args
))
40 except Exception : bot
. msg ( replyto
, "Error: %s %s " % ( sys
. exc_info ()[ 0 ], sys
. exc_info ()[ 1 ]))
41 else : bot
. msg ( replyto
, "Done: %r " % ( ret
,))
44 @lib.hook ( 'exec' , needchan
= False , wantchan
= True , glevel
= lib
. OWNER
)
45 @lib.help ( "<python>" , "exec" )
47 def cmd_exec ( bot
, user
, chan
, realtarget
, * args
):
48 if chan
is not None : replyto
= chan
51 try : exec ( ' ' . join ( args
))
52 except Exception : bot
. msg ( replyto
, "Error: %s %s " % ( sys
. exc_info ()[ 0 ], sys
. exc_info ()[ 1 ]))
53 else : bot
. msg ( replyto
, "Done." )
55 @lib.hook ( needchan
= False , wantchan
= True , glevel
= lib
. OWNER
)
56 @lib.help ( '<command line>' , 'think os.system' )
58 def system ( bot
, user
, chan
, realtarget
, * args
):
59 if chan
is not None : replyto
= chan
63 proc
= subprocess
. Popen ( ' ' . join ( args
), shell
= True , stdout
= subprocess
. PIPE
, stderr
= subprocess
. STDOUT
, close_fds
= True )
65 bot
. msg ( replyto
, "Error: %s %s " % ( sys
. exc_info ()[ 0 ], sys
. exc_info ()[ 1 ]))
67 for line
in proc
. stdout
:
68 bot
. msg ( replyto
, line
. decode ( 'utf-8' , 'surrogateescape' ))
70 @lib.hook ( 'exception' , needchan
= False , glevel
= lib
. OWNER
)
71 @lib.help ( None , "cause an exception" )
72 def cmd_exception (* args
, ** kwargs
):
75 @lib.hook ( needchan
= False , wantchan
= True , glevel
= lib
. ADMIN
)
76 @lib.help ( "<nick> <message>" , "inject a line as though it came from <nick>" , "note that this injects lines, not commands" , "ex: INJECT DimeCadmium !WHOAMI" )
77 def inject ( bot
, user
, chan
, realtarget
, * args
):
78 targetuser
= bot
. parent
. user ( args
[ 0 ], create
= False )
79 if targetuser
is None :
80 bot
. msg ( user
, "User is unknown." )
82 if targetuser
. glevel
> user
. glevel
:
83 bot
. msg ( user
, "That user has a higher access level than you." )
87 bot
. parsemsg ( bot
. parent
. user ( args
[ 0 ], create
= False ), str ( chan
), ' ' . join ( args
[ 1 :]))
89 bot
. parsemsg ( bot
. parent
. user ( args
[ 0 ], create
= False ), str ( bot
), ' ' . join ( args
[ 1 :]))