为什么我的Python函数会被register命令拒绝?

编程语言 2026-07-08

我在用PySpigot为一台Minecraft服务器构建一个插件,专门用来管理服务器工作人员。但我遇到了下面这个错误:

[16:46:33 INFO]: moha_ali250 issued server command: /pyspigot reload player_manager.py
[16:46:33 INFO]: [PySpigot] Unloaded script 'player_manager.py'
[16:46:33 INFO]: [PySpigot] Loading script 'player_manager.py'
[16:46:34 INFO]: [PySpigot/player_manager.py] [STDOUT] Failed to load the script. Please check your internet connection and try again.
[16:46:34 INFO]: [PySpigot/player_manager.py] [STDOUT] ('Error details:', TypeError("registerCommand(): 1st arg can't be coerced to org.python.core.PyFunction",))
[16:46:34 INFO]: [PySpigot] Loaded script 'player_manager.py'

我确定 onCommand 是一个Python函数。我像这样注册命令:

for c in ["promote","suspend","demote","staff_ban","staff_unban","punish","activate","status"]:
    ps.command.registerCommand(c, onCommand, onTabComplete)

下面是我定义该函数的方式(前几行):

def onCommand(sender,command,label,args):
    if gdata is None:
        print("[Staff] Failed to load remote config")
        return
    cmd=command.getName().lower()
    if hasattr(sender, "getUniqueId"):
        u=uuid(sender)
        ensure(u)
        f=data[u]
    allowed = ["owner","manager"]
    ...

它不在一个类里,也不在其他函数内。

解决方案

如果我对文档中 Code Example 的理解没错,你必须把 c(带字符串)作为最后一个参数,而不是第一个。
这会导致问题 1st arg can't be coerced to org.python.core.PyFunction

所以你需要这样的代码:

ps.command.registerCommand(onCommand, onTabComplete, c)

下面是文档中的示例代码:

import pyspigot as ps 

def kick_command(sender, label, args): 
    #Do something...
    return True 

def tab_kick_command(sender, alias, args): 
    #Do something...
    return ['',] 

registered_command = ps.command.registerCommand(kick_command, tab_kick_command, 'kickplayer')
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章