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

Discord.py开发:命令字符串字符提取错误导致Embed无输出

问题根因

你的代码存在多处逻辑错误,直接导致Embed无内容、判断失效:

  • 字符串切片计算完全错误:测试命令!en L BTC 19500总长度为15,你写的x[4:len(x)-11]等价于取索引4到4的空字符串,永远无法匹配到"L",message变量始终未被赋值,传入Embed自然没有内容
  • 权限判断逻辑写法规避了校验:if (ctx.author.id == 573284477158162433 or 244240895627624448)中,非0整数244240895627624448在布尔判断中恒为True,这个判断永远成立,完全没起到权限校验作用
  • 字符串拼接时直接硬换行没有转义,会触发语法错误
  • 频道发送逻辑放在for循环外部,循环仅做了频道获取没有执行发送,最终只会给频道列表最后一个频道发消息
  • 未编写"L"不在指定位置的处理分支,匹配失败时message无有效值,直接传入Embed就会出现空内容
修复后可直接运行的代码
@bot.command() 
async def en(ctx):
    # 修复权限判断逻辑
    if ctx.author.id not in [573284477158162433, 244240895627624448]:
        return
    global channels
    # 按空格拆分命令参数,替代手动算切片位置的写法,容错率更高
    args = ctx.message.content.strip().split()
    # 增加命令格式校验,避免参数缺失报错
    if len(args) < 4:
        await ctx.send("命令格式错误,正确用法:!en [L/S] [币种] [进场价格]")
        return
    position_type = args[1]
    ticker = args[2]
    entry_price = args[3]

    if position_type == "L":
        message = f"**Type:Long **\n**Ticker: **{ticker}\n**Entry Price:** {entry_price}"
    else:
        # 可自行替换L不在指定位置时需要发送的消息格式,示例为S空单格式
        message = f"**Type:Short **\n**Ticker: **{ticker}\n**Entry Price:** {entry_price}"
    
    await ctx.send(content="@everyone", allowed_mentions=allowed_mentions)
    embed = discord.Embed(title="Entry", description=message, color=0x70f508)
    embed.timestamp = datetime.datetime.utcnow()
    embed.set_footer(text="Viggy Analytics")
    # 修复循环逻辑,给所有配置的频道发送消息
    for channel_id in channels:
        disc_channel = bot.get_channel(channel_id)
        # 增加频道存在性判断,避免频道ID填错时机器人崩溃
        if disc_channel:
            await disc_channel.send(embed=embed)
优化说明
  • 放弃手动计算字符串切片位置的写法,直接用split()按空格拆分命令参数,不管价格是几位数、币种代码长度是多少都能正确识别,不会因为命令长度变化失效
  • 补充了命令格式校验,用户输错参数时会直接提示正确用法,不会抛出异常
  • 补全了非L仓位的消息分支,不会出现message未定义的情况
  • 修复了频道循环发送的逻辑,所有配置的频道都能收到消息
  • 用f字符串做字符串拼接,比原来的加号拼接可读性高很多,换行直接写\n不会有语法问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 16:57:23