Python IRC 机器人问题

0 投票
3 回答
1711 浏览
提问于 2025-04-16 14:56

我想做一个机器人,这个机器人可以让我在IRC上定义函数,并且像Python解释器一样使用我的机器人。

举个例子,我想让这个机器人能做到类似下面这样的事情:

<mynick> py print "test"
<bot> test
<mynick> define hi(): print "hi"
<mynick> hi()
<bot> hi

我想问的是,怎么才能做到这一点?

3 个回答

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机器人phenny是怎么执行'.py'命令的Python代码的。

0

我写了一个叫做 skybot 的程序,它的功能跟你想要的差不多。

<rmmh> .py print "hello %03d, %s" % (5, "blah")
<skybot> Scaevolus: hello 005, blah

这个Python解释器在GAE上运行,它是一个修改过的版本,类似于 http://shell.appspot.com/,不过它不保存状态,这样可以防止人们破坏这个机器人。

1

如果你不太担心安全问题(如果这是一个个人项目,那这样想也是可以的),那么Python有几个函数(compileexeceval)可以帮你实现这个功能。需要注意的是,Python 2和Python 3之间有一些区别,但下面的例子在两者中都能使用:

>>> s = "print('hello world')"
>>> code = compile(s, "<string>", "exec")
>>> exec(code)
hello world

如果你打算让其他人使用这个机器人,你就需要非常小心地控制他们可以调用哪些函数。例如,os模块里的大多数东西在irc机器人环境下可能会做一些不太好的事情。

撰写回答