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

在discord.js中如何向非公会内用户发送公会邀请

问题核心原因
  • 现有代码未正确获取目标用户的User实例:你定义的invited仅存储了用户输入的字符串,message.invited也不是Discord.js的原生属性,根本无法调用发送消息的方法
  • Discord平台有原生反垃圾限制:机器人无法向未和它处于任何共同服务器、或是开启了陌生人私信屏蔽的用户直接发送私信,该限制无绕过方案,需要做容错处理
修正实现方案

你需要先解析获取到目标用户的实例,再尝试发送私信,发送失败时返回邀请链接给命令触发者手动转发即可,修正后的参考代码如下(适配discord.js v14版本):

if (!args[0]) return message.reply("请输入要邀请的用户,示例:funny#6942");

// 生成单用途服务器邀请
message.channel.createInvite({
  unique: true,
  maxUses: 1,
  maxAge: 8 * 60 * 60 * 1000 // 有效期8小时,原代码计算错误仅为8分钟,已修正
})
.then(async invite => {
  try {
    // 拉取目标用户实例,支持用户ID或者完整用户名#标签格式
    const targetUser = await message.client.users.fetch(args[0], { force: true });
    // 尝试发送私信
    await targetUser.send(`你被邀请加入 ${message.guild.name},邀请链接:https://discord.gg/${invite.code}`);
    message.reply(`已成功向 ${targetUser.tag} 发送邀请`);
  } catch (err) {
    // 发送失败时返回邀请链接给触发者手动转发
    message.reply(`无法向目标用户发送私信,你可以手动将以下单用途邀请链接转发给对方:https://discord.gg/${invite.code}`);
  }
});
额外注意事项
  • 你需要在Discord开发者后台给机器人开启GUILD_MEMBERS、MESSAGE_CONTENT两个权限意图,否则无法正常拉取用户信息和读取命令参数
  • 如果目标用户确实和机器人没有共同服务器,手动转发邀请是目前唯一可行的实现方案

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 12:42:02