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

Discord.js单指令添加多个身份组时首个角色被自动移除问题求助

问题原因

  • 你调用的GuildMemberRoleManager.add()是异步方法,返回Promise对象,现有代码没有加await等待第一个添加操作完成,两次添加操作并发执行,后触发的请求会覆盖前一个请求的角色变更,因此只会保留最后一个添加的角色。
  • 现有写法的try/catch无法捕获异步操作抛出的错误,报错不会进入你预设的错误处理逻辑。
  • 代码中为空的.then()没有任何实际作用,无法解决异步时序问题。

修复方案

有两种可行修复方式,优先选择第一种:

方式1:单次调用传入角色数组(推荐)

add方法原生支持传入角色ID/角色对象的数组,一次请求即可完成多个角色的添加,从根本上避免并发冲突:

// 注意:需要给当前消息处理的外层函数添加async关键字,才能使用await语法
if(msg.content === "Yes" ){
    const arr = ['878722965972348938', '878722966660214844', '878722965070544926']
    if(message.member.roles.cache.some(r => arr.includes(r.id))) return message.channel.send('⚠️You already have it assigned')
    try{
        // 单次传入两个角色的数组即可同时添加
        await message.member.roles.add([Blue, Verified])
        message.channel.send(`${msg.content} Assigned✅`);
        message.channel.send(`Go to <#879068760374378566> to complete verification!`);
    } catch(error) {
        message.channel.send("⚠️Error has occurred, please contact server adminstrator.");
        console.log(error)
    } 
}

方式2:顺序等待异步操作完成

如果你确实需要分开执行两次添加操作,要在每个异步操作前加await保证前一个操作完成后再执行下一个:

// 注意:需要给当前消息处理的外层函数添加async关键字,才能使用await语法
if(msg.content === "Yes" ){
    const arr = ['878722965972348938', '878722966660214844', '878722965070544926']
    if(message.member.roles.cache.some(r => arr.includes(r.id))) return message.channel.send('⚠️You already have it assigned')
    try{
        // 等待Blue角色添加完成
        await message.member.roles.add(Blue)
        // 再执行Verified角色添加
        await message.member.roles.add(Verified)
        message.channel.send(`${msg.content} Assigned✅`);
        message.channel.send(`Go to <#879068760374378566> to complete verification!`);
    } catch(error) {
        message.channel.send("⚠️Error has occurred, please contact server adminstrator.");
        console.log(error)
    } 
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 20:45:04