【问题标题】:Python IRC bot questionPython IRC 机器人问题
【发布时间】:2011-07-28 02:44:50
【问题描述】:

我想制作一个机器人,它允许我从 irc 定义函数并将我的机器人也视为 Python 解释器。

例如,我想制作一个可以执行以下操作的机器人:

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

我的问题是如何做到这一点

【问题讨论】:

  • 我希望它是沙盒的,或者只允许 运行 Python 代码。 (不要这样做:)py __import__("subprocess").call(['rm -rf /'])
  • 太好了。你有什么问题?
  • 也许许多现有的机器人之一正是这样做的,可以作为必要的例子。这是我在谷歌上找到的随机点击,inamidst.com/phenny
  • @Jean-Paul 什么???您是否使用搜索引擎来实际搜索答案?你是怎么想到这样一个绝妙的主意的?
  • > Phenny 可以做一些简单的事情,比如评估表达式,但它不能定义函数并从 IRC 本身存储它们——这离你应该问的问题越来越近了。不是“我的问题是如何做到这一点”而是“我如何一次接受 Python 源代码,接受多行语句并保留结果以供以后使用?”

标签: python irc bots


【解决方案1】:

如果您不担心安全性(如果这是一个个人项目,那么这是一个有效的假设),那么 Python 有几个函数(compileexeceval)可以在这里提供帮助。请注意,Python 2 和 Python 3 之间存在差异,但以下示例适用于两者:

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

如果您打算让其他人使用此机器人,您需要非常小心地注意您让人们调用的功能。例如,os 模块中的大多数东西都有可能在 irc 机器人上下文中做不受欢迎的事情。

【讨论】:

    【解决方案2】:

    我写了skybot,它的功能接近你想要的。

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

    Python 解释器在 GAE 上运行,是 http://shell.appspot.com/ 的克隆,已修改为不存储状态,以防止人们破坏机器人。

    【讨论】:

      【解决方案3】:

      您可以将您的代码挂接到此: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 代码的方式。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-11-30
        • 2015-11-21
        • 2015-01-21
        • 2011-08-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多