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

Discord.js warn命令无法向被警告用户发送私信 求解决方案或完整代码

问题解决方法

你的代码未实现向被警告用户发送私信的逻辑,同时需要额外处理私信发送异常避免程序崩溃。常见私信发送失败原因包括:用户关闭了当前服务器的私信权限、用户已拉黑机器人、用户账号设置拒绝陌生人私信。

注意事项

如果你使用Discord.js v13及以上版本,需要先在客户端初始化时开启私信相关权限,否则无法发送私信,初始化示例:

const client = new Discord.Client({
  intents: [
    Discord.Intents.FLAGS.GUILDS,
    Discord.Intents.FLAGS.GUILD_MESSAGES,
    Discord.Intents.FLAGS.DIRECT_MESSAGES
  ],
  partials: ['CHANNEL']
})

完整可用的warn命令代码

const Discord = require("discord.js");
const { MessageEmbed } = require("discord.js");
const { Color } = require("../../config.js");

module.exports = {
  name: "warn",
  aliases: [],
  description: "Warn A User!",
  usage: "Warn <Mention User> | <Reason>",
  run: async (client, message, args) => {
    //Start
    message.delete();

    let Member =
      message.mentions.members.first() ||
      message.guild.members.cache.get(args[0]);

    if (!Member) return message.channel.send(`Please Mention A User!`);

    let Reason = args.slice(1).join(" ");

    client.db.add(`Warnings_${message.guild.id}_${Member.user.id}`, 1);

    let Warnings = client.db.get(
      `Warnings_${message.guild.id}_${Member.user.id}`
    );

    // 发送私信给被警告用户
    try {
      const dmEmbed = new MessageEmbed()
        .setColor(Color)
        .setTitle(`你在 ${message.guild.name} 服务器收到了一条警告`)
        .addField(`警告原因`, `${Reason || "No Reason Provided!"}`)
        .addField(`当前警告次数`, Warnings)
        .addField(`执行管理员`, `${message.author.tag} (${message.author.id})`)
        .setTimestamp();
      await Member.send({ embeds: [dmEmbed] });
    } catch (err) {
      // 私信发送失败时提示,5秒后自动删除提示
      message.channel.send(`⚠️ 无法向 ${Member.user.tag} 发送私信,警告记录已正常保存。`)
        .then(msg => setTimeout(() => msg.delete(), 5000));
    }

    let embed = new MessageEmbed()
      .setColor(Color)
      .setTitle(`Member Warned!`)
      .addField(`Moderator`, `${message.author.tag} (${message.author.id})`)
      .addField(`Warned Member`, `${Member.user.tag} (${Member.user.id})`)
      .addField(`Now Member Warnings`, Warnings)
      .addField(`Reason`, `${Reason || "No Reason Provided!"}`)
      .setFooter(`Requested by ${message.author.username}`)
      .setTimestamp();

    message.channel.send(embed);

    //End
  }
};

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 18:36:04