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

Discord机器人执行!del命令报IndexError,求解决方案及脚本存放疑问

Discord机器人!del命令错误修复及脚本结构问题解答

错误原因

触发IndexError: list index out of range是因为当用户仅输入!del(未跟数字参数)时,message.content.split()返回的列表只有["!del"]一个元素,代码强行访问索引1就会越界。

修复后的代码

添加参数校验逻辑,处理无参数、非数字参数、权限不足等情况:

import discord

@bot.event
async def on_message(message):
    # 若同时使用@bot.command()装饰器,需添加该行确保命令正常触发
    await bot.process_commands(message)
    
    if message.content.startswith("!del"):
        command_parts = message.content.split()
        
        # 检查是否提供了数量参数
        if len(command_parts) < 2:
            await message.channel.send("请指定要删除的消息数量,格式:`!del 数字`")
            return
        
        # 校验参数是否为有效整数
        try:
            delete_count = int(command_parts[1])
        except ValueError:
            await message.channel.send("请输入有效的数字!")
            return
        
        # 限制删除范围,避免误操作
        if delete_count <= 0 or delete_count > 100:
            await message.channel.send("请输入1-100之间的数字!")
            return
        
        # 执行删除操作并处理异常
        try:
            # 获取要删除的消息(包含!del命令本身)
            target_messages = await message.channel.history(limit=delete_count + 1).flatten()
            # 逐个删除,也可使用bulk_delete(仅支持14天内的消息,效率更高)
            # await message.channel.bulk_delete(target_messages)
            for msg in target_messages:
                await msg.delete()
        except discord.Forbidden:
            await message.channel.send("我没有删除消息的权限,请检查我的权限设置!")
        except Exception as e:
            await message.channel.send(f"删除消息失败:{str(e)}")

bot.run('你的机器人TOKEN')

关于脚本结构的疑问

完全可以将整个机器人脚本放在单个.py文件中。对于功能简单的小型机器人,单文件结构足够清晰且运行正常;如果后续功能变得复杂,再考虑拆分成多个模块(如命令模块、事件模块)即可。

内容的提问来源于stack exchange,提问作者Mathi'S

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 02:35:19