依赖插件的收益?

Yield from dependency plugin?

我想制作解析器插件,它将自由格式的消息转换为机器人命令,并 运行 来自其他插件的消息。 假设我有依赖于 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 获取消息?也许我可以在插件中形成一个 bot 命令并将其发送到 errbot 就像我从后端发送它一样? 类似于:

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

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

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