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
相关产品推荐
相关产品推荐

