我想制作一个机器人,允许我从irc定义函数,并将我的机器人视为Python解释器。
例如,我想制作一个可以执行以下操作的机器人:
<mynick> py print "test"
<bot> test
<mynick> define hi(): print "hi"
<mynick> hi()
<bot> hi
我的问题是如何做到这一点
答案 0 :(得分:1)
如果您不担心安全性(如果这是个人项目,那么这是一个有效的假设),那么Python有几个功能(compile
,exec
,eval
)这可以帮到这里。请注意,Python 2和Python 3之间存在差异,但以下示例适用于两者:
>>> s = "print('hello world')"
>>> code = compile(s, "<string>", "exec")
>>> exec(code)
hello world
如果您要让其他人使用此机器人,您需要非常小心地关注您让人们呼叫的功能。例如,os
模块中的大多数内容都有可能在irc bot上下文中执行不需要的操作。
答案 1 :(得分:0)
我写了skybot,其功能接近你想要的功能。
<rmmh> .py print "hello %03d, %s" % (5, "blah")
<skybot> Scaevolus: hello 005, blah
Python解释器在GAE上运行,是http://shell.appspot.com/的一个克隆,修改为不存储状态,以防止人们破坏机器人。
答案 2 :(得分:0)
您可以将代码挂钩:http://tumbolia.appspot.com/py/
import urllib, urllib2
uri = 'http://tumbolia.appspot.com/py/'
response = urllib2.urlopen(uri + urllib.quote("print 'hello world!'")).read()
print response
此解决方案的优点在于您无需担心服务器上正在执行的代码。这就是IRC bot phenny如何为'.py'命令执行python代码。