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

Discord鼓励消息机器人报索引越界及误触发新增提示问题求解

问题修复方案

问题A:任意输入都返回新增成功提示

根因:发送「New encouraging message added :)」的代码行缩进错误,没有放到+new命令的判断逻辑块内,所以无论是否触发+new命令都会执行。
修复方法:将该行缩进,嵌套到if msg.startswith('+new')的代码块中。

问题B:列表索引超出范围错误

根因有2个:

  • if "encouragements" in db.keys() 对应的代码块缩进错误,和+del命令的判断逻辑平级,无论用户是否发送+del命令,只要数据库存在encouragements键,都会执行msg.split("+del",1)[1]代码,用户没发+del时split返回的列表只有1个元素,取索引1自然越界
  • 未判断用户发送的+del命令后是否携带了有效数字参数,若用户只发送+del不带后缀,split后同样不存在索引1的元素

修复后完整代码

if msg.startswith('+inspire'):
    quote = get_quote()
    await message.channel.send(quote)

options = starter_encouragements
if "encouragements" in db.keys():
    options = options + db["encouragements"].value

if any(word in msg for word in sad_words):
    await message.channel.send(random.choice(options))

# 修复+new逻辑缩进
if msg.startswith('+new'):
    encouraging_message = msg.split("+new ",1)[1]
    update_encouragements(encouraging_message)
    await message.channel.send("New encouraging message added :)")

# 修复+del逻辑缩进和参数判断
if msg.startswith("+del"):
    encouragements = []
    if "encouragements" in db.keys():
        # 先判断split后是否有合法参数
        del_parts = msg.split("+del",1)
        if len(del_parts) < 2 or not del_parts[1].strip().isdigit():
            await message.channel.send("请输入合法的删除序号,示例:+del 1")
        else:
            index = int(del_parts[1].strip())
            delete_encouragement(index)
            encouragements = db["encouragements"]
            await message.channel.send(encouragements)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 20:15:00