0

我想制作解析器插件,它将自由形式的消息转换为机器人命令并从其他插件运行它们。假设我有依赖于 PluginA 的 PluginA 和 PluginB。在 PluginA 我有命令:

    @botcmd
    def do_on_a(self, msg):
      yield "yielding first msg from A {}".format(msg)
      sleep(5)
      yield "yielding second msg from A {}".format(msg)

我发现从 PluginB 运行它的唯一方法是从生成器中创建一个列表:

    @botcmd
    def get_from_a(self, msg, args):
      yield list(self.get_plugin('PluginA').do_on_A(msg))

但是通过这种方式,我可以同时收到两条 PluginA 消息。有没有办法在出现时从 PluginA 获取消息?另外,也许我可以在插件中形成一个机器人命令并将其发送到 errbot,就像我从后端发送它一样?就像是:

    @botcmd
    def get_from_a(self, msg, args):
      send "!do_on_a"
4

1 回答 1

1

您必须确保来自插件 B(调用 A)的命令是一个生成器,它产生来自插件 A 的命令正在生成的项目。最简单的是使用yield fromPython 3.3 引入的语法:

@botcmd
def get_from_a(self, msg, args):
  yield from self.get_plugin('PluginA').do_on_A(msg)
于 2016-11-05T12:59:55.327 回答