Discord.js执行ban命令报INVALID_TYPE错误:传入参数不是对象
问题原因
你使用的discord.js v13及更高版本中,GuildMember.ban()方法的入参规范发生了变更,不再支持直接传入字符串类型的封禁原因,要求传入配置对象,这就是报错TypeError [INVALID_TYPE]: Supplied options is not an object的根源。
kick方法仍然兼容直接传原因字符串的写法,所以相同逻辑下kick命令可以正常运行。
修复方案
将你代码中调用ban方法的行:
target.ban(reason);
修改为符合v13+规范的对象入参写法:
// 基础写法,仅传入封禁原因 target.ban({ reason: reason || 'Unspecified' })
如果需要额外配置封禁时删除该用户的历史消息,可以添加对应参数:
// 示例:封禁同时删除该用户最近24小时内发送的消息 target.ban({ reason: reason || 'Unspecified', deleteMessageSeconds: 86400 // 单位为秒,最大支持604800即7天 })
额外优化建议
ban()是异步方法,建议添加await关键字等待封禁操作执行完成后再发送成功通知,避免出现通知已发但封禁操作还在执行/执行失败的逻辑异常:
- 先将当前命令的执行函数声明为
async - 修改ban调用为:
await target.ban({ reason: reason || 'Unspecified' })
内容的提问来源于stack exchange,提问作者FinallyComplete
相关产品推荐
相关产品推荐

