gpt4 book ai didi

Python 插件,如 Minecraft Bukkit

转载 作者:行者123 更新时间:2023-11-30 23:39:01 24 4
gpt4 key购买 nike

我一直在读这个:
http://lkubuntu.wordpress.com/2012/10/02/writing-a-python-plugin-api/
我正在尝试做类似 Minecraft 帮助系统的事情。
假设我有主模块,帮助命令是:

help
test1
test2

然后,加载插件后,我将拥有相同的集合,以及插件可用的集合。
另外,在处理命令时,如何区分来自内部程序的命令和来自插件的命令?!
到目前为止,我已经想出了这个:

import imp
import os

PluginFolder = "./plugins"
MainModule = "__init__"

def getPlugins():
plugins = []
possibleplugins = os.listdir(PluginFolder)
for i in possibleplugins:
location = os.path.join(PluginFolder,i)
if not os.path.isdir(location) or not MainModule + ".py" in os.listdir(location):
continue
info = imp.find_module(MainModule, [location])
plugins.append({"name":i, "info": info})
return plugins

def loadPlugin(plugin):
return imp.load_module(MainModule, *plugin["info"])

disponiveis = []
for i in getPlugins():
print("Loading plugin "+ i["name"])
plugin = loadPlugin(i)
plugin.run()
disponiveis.append(i["name"])

while 1:
foo = raw_input(":")
if foo == 'quit':
break;
elif foo in disponiveis:
print "ok"
else:
continue

与原始示例相差不大:|
我的大问题是加载所有插件的循环。
目前我有 2 个插件,hellotesting。我怎样才能拥有这样的东西:

send_command(plugin_name, action)

此外,if/elif 有点蹩脚...可用的命令应该来自插件。
也许使用字典?!?!然后在加载插件时,它会将附加命令添加到该字典中?!?!

最佳答案

正如您引用的博客文章的最后一行所说:“当然,现在这个插件 API 非常简单,并且可以轻松(并且应该)根据您的程序的需求进行扩展。”

示例代码中定义的唯一“api”是一个不返回任何内容的 plugin.run() 方法。因此,至少从您的问题来看,您似乎需要一个描述加载插件具有的可用“命令”的命令。一种方法是定义所有插件都必须提供的另一种方法,称为 available_commands() ,它返回一个命令字典,其中键都是命令名称,值是执行这些命令的相应函数。

但是,这可能需要使用某种机制进行扩展,以将命令参数信息提供回客户端应用程序。如何做到这一点仅受您想象力的限制,您可以自己发明一些东西,也可以了解其他人是如何做到的,也许可以通过在 StackOverflow 上提出更具体的问题来实现。

关于Python 插件,如 Minecraft Bukkit,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13897330/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com