You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Discord机器人参数识别异常:输入指定用户却返回错误信息求助

问题分析与修复方案

嘿,我一眼就看出问题出在哪了——你的条件判断逻辑写错了,导致不管输入什么用户参数,机器人都会触发第一个if分支,返回mip232的信息。

问题根源

你看这段代码里的条件:

if name == "mip232" or name == "Mip" or "219884374378676224":

这里的第三个条件"219884374378676224"是个非空字符串,在Python里非空字符串会被直接判定为True。所以这个if语句等价于if (name == "mip232") or (name == "Mip") or True,不管前面两个条件是否满足,整个表达式永远为True,自然会执行第一个分支的代码。

同样的,你的elif里也有类似错误:elif name == "iamonf1r3" or "iamonf1r3" or "335014153460776962",这里的or "iamonf1r3"也是永远为True,不过因为第一个if已经总是触发了,这个分支根本不会被执行到。

修复后的代码

你需要给每个or后面的条件都完整写出name ==的判断逻辑,修正后的代码如下:

@client.command()
async def Whois(parameter):
    name = parameter
    if name == "mip232" or name == "Mip" or name == "219884374378676224":
        await client.say("Roblox Name: `mip232` \nDiscord Name: `Mip#3981` \nPin: `FS01` \nRank: `Chief Fire Officer` \nDivision: `All` \nActivity Level: `Active` \nDriving Level: `Advanced` \nDisciplinary Action: `None`")
    elif name == "iamonf1r3" or name == "335014153460776962":
        await client.say("Roblox Name: `iamonf1r3` \nDiscord Name: `iamonf1r3#7277` \nPin: `FS02` \nRank: `Deputy Chief Fire Officer` \nDivision: `All` \nActivity Level: `Active` \nDriving Level: `Advanced` \nDisciplinary Action: `None`")

另外我帮你去掉了elif里重复的"iamonf1r3"判断,避免冗余。

额外优化建议

如果以后要维护的用户信息越来越多,建议把数据放到字典里,这样更易维护也不容易出错:

# 先定义用户信息字典
user_database = {
    "mip232": {
        "roblox_name": "mip232",
        "discord_name": "Mip#3981",
        "pin": "FS01",
        "rank": "Chief Fire Officer",
        "division": "All",
        "activity": "Active",
        "driving_level": "Advanced",
        "disciplinary": "None"
    },
    "219884374378676224": "mip232",  # 用ID映射到用户名
    "iamonf1r3": {
        "roblox_name": "iamonf1r3",
        "discord_name": "iamonf1r3#7277",
        "pin": "FS02",
        "rank": "Deputy Chief Fire Officer",
        "division": "All",
        "activity": "Active",
        "driving_level": "Advanced",
        "disciplinary": "None"
    },
    "335014153460776962": "iamonf1r3"
}

@client.command()
async def Whois(parameter):
    # 处理ID映射的情况
    target = user_database.get(parameter, parameter)
    user_info = user_database.get(target)
    
    if user_info:
        response = (
            f"Roblox Name: `{user_info['roblox_name']}`\n"
            f"Discord Name: `{user_info['discord_name']}`\n"
            f"Pin: `{user_info['pin']}`\n"
            f"Rank: `{user_info['rank']}`\n"
            f"Division: `{user_info['division']}`\n"
            f"Activity Level: `{user_info['activity']}`\n"
            f"Driving Level: `{user_info['driving_level']}`\n"
            f"Disciplinary Action: `{user_info['disciplinary']}`"
        )
        await client.say(response)
    else:
        await client.say("未找到该用户的信息哦~")

这样后续添加或修改用户信息只需要更新字典,不用再改判断逻辑啦。

内容的提问来源于stack exchange,提问作者Soup

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:18:32