我想创建解析器插件,它将自由格式消息转换为bot命令并从其他插件运行它们。 假设我有PluginA和PluginB,它依赖于PluginA。在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"
答案 0 :(得分:1)
您必须确保来自插件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)