PySpigot中registerCommand报错:无法转换Python函数为PyFunction
PySpigot命令注册TypeError问题解决
错误核心
报错TypeError("registerCommand(): 1st arg can't be coerced to org.python.core.PyFunction"),说明registerCommand方法要求第一个参数是Python函数,但你传入的是命令名称字符串,问题出在参数顺序错误。
解决步骤
1. 修正registerCommand参数顺序
PySpigot的registerCommand方法签名应为函数在前,命令名在后,把调用代码改成:
for c in ["promote","suspend","demote","staff_ban","staff_unban","punish","activate","status"]: ps.command.registerCommand(onCommand, c, onTabComplete)
2. 修复onCommand返回值类型
Bukkit API要求onCommand必须返回布尔值(True表示命令处理成功,False表示显示用法),你的当前代码缺少正确返回值,修改如下:
def onCommand(sender,command,label,args): if gdata is None: print("[Staff] Failed to load remote config") return False # 添加布尔返回值 cmd=command.getName().lower() if hasattr(sender, "getUniqueId"): u=uuid(sender) ensure(u) f=data[u] allowed = ["owner","manager"] # ... 其余业务逻辑 return True # 处理完成返回True
3. 确保onTabComplete符合要求
如果onTabComplete未正确定义,也可能引发连锁问题,确保它的签名和返回值符合规范:
def onTabComplete(sender, command, alias, args): # 这里编写你的补全逻辑 return [] # 返回补全选项列表
测试
调整后重新执行/pyspigot reload player_manager.py,验证错误是否消失。
内容的提问来源于stack exchange,提问作者Mohamed Ali Martins Agoussine
相关产品推荐
相关产品推荐

