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

discord.js v12:优化dump命令支持按角色名/提及查询成员

修改后的Dump命令(支持角色名/提及/ID)

当然可以!我们可以扩展你的命令,让它能识别命令参数里的角色——不管是直接@提及角色、输入角色名称,甚至角色ID都能正常工作。下面是修改后的完整代码:

client.on("message", message => {
  // 检查命令前缀是否为+dump,并且有后续参数
  if (message.content.startsWith("+dump")) {
    // 提取命令后的参数部分(去掉"+dump "前缀)
    const roleQuery = message.content.slice(6).trim();
    
    // 如果没有输入角色参数,提示用户
    if (!roleQuery) {
      return message.reply("请指定要查询的角色,比如:`+dump Admin` 或者 `+dump @Co-Owner`");
    }

    // 尝试获取目标角色:优先匹配提及的角色,再匹配名称/ID
    let targetRole;
    // 检查是否有提及角色
    if (message.mentions.roles.size > 0) {
      targetRole = message.mentions.roles.first();
    } else {
      // 尝试通过名称(不区分大小写)或ID查找角色
      targetRole = message.guild.roles.cache.find(role => 
        role.name.toLowerCase() === roleQuery.toLowerCase() || role.id === roleQuery
      );
    }

    // 如果找不到角色,提示用户
    if (!targetRole) {
      return message.reply(`找不到名为/ID为 \`${roleQuery}\` 的角色!`);
    }

    // 获取角色成员列表,处理无成员的情况
    const memberTags = targetRole.members.map(m => m.user.tag);
    const description = memberTags.length > 0 
      ? memberTags.join('\n') 
      : "该角色目前没有成员";

    // 创建并发送嵌入消息
    const ListEmbed = new MessageEmbed()
      .setTitle(`Users with the ${targetRole.name} role:`)
      .setDescription(description);
    
    message.channel.send(ListEmbed);
  }
});

关键改进点说明:

  • 参数解析:用startsWith替代精确匹配,这样能灵活提取命令后的角色参数
  • 多方式匹配角色:
    • 优先识别用户@提及的角色(message.mentions.roles.first())
    • 若没有提及,则尝试通过不区分大小写的角色名称或角色ID查找,避免大小写输入错误导致的问题
  • 友好错误提示:当用户没输入参数、或者找不到对应角色时,给出明确的引导信息
  • 空成员处理:如果角色没有成员,会显示“该角色目前没有成员”而不是空内容,体验更流畅

这样修改后,用户就可以用+dump Owner、+dump @Co-Owner甚至+dump 741231292544188439(角色ID)来查询任意角色的成员列表了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 12:02:31