在disocrd服务器上使用dm命令时出现Discord.js管理问题



我为我的私人discord服务器制作了一个大规模的dm bot,我一直在使用它并提供赠品。因此,我编程了一个机器人程序,它会对每个人进行dm,例如:如果赠品出现或游戏锦标赛等。每次我运行命令+damall时,一切都开始变得很好,但当一个没有我好友的用户从机器人程序中获得dm时,它会完全停止,我会出错。

现在的代码是:

const { Command } = require('discord-akairo');
const { resolve } = require('path');
const delay = (msec) => new Promise((resolve) => setTimeout(resolve, msec));
class RecentCommand extends Command {
constructor() {
super('massdm',{
aliases: ['dmall'],
args: [
{
id: 'ID'
}
],
channel: 'guild'
});
}
async exec(message, client) {
let Owner = message.author;
if(Owner.id !== "727447049892659200") return message.reply("Only the bot owner can use this command!")
let text = message.content.slice('+dmall'.length); // cuts off the /private part
setTimeout(function(){
try {
message.guild.members.cache.forEach(member => {
delay(100);
member.send(text)
})
}catch(e) {

}
}, 1);
return message.channel.send(`dming ${message.guild.members.cache.size} members`)
}
}
module.exports = RecentCommand;

这是我在机器人dms一个未好友时遇到的错误:

机器人的调试错误

有些用户关闭了服务器dms,因此无法对其进行dm。然而,您可以捕捉并忽略这些错误,以防止您的进程崩溃:

const { Command } = require('discord-akairo');
const { resolve } = require('path');
const delay = (msec) => new Promise((resolve) => setTimeout(resolve, msec));
class RecentCommand extends Command {
constructor() {
super('massdm',{
aliases: ['dmall'],
args: [
{
id: 'ID'
}
],
channel: 'guild'
});
}
async exec(message, client) {
let Owner = message.author;
if(Owner.id !== "727447049892659200") return message.reply("Only the bot owner can use this command!")
let text = message.content.slice('+dmall'.length).split(/ +/); // cuts off the /private part
setTimeout(async function(){
try {
message.guild.members.cache.forEach(member => {
await delay(1_000);
member.send(text.join(" ")).catch(x => { console.log("Couldn't DM " + member.user.tag) })//catch the error and do NOTHING with it.
})
}catch(e) {

}
}, 1);
return message.channel.send(`dming ${message.guild.members.cache.size} members`)
}
}
module.exports = RecentCommand;

最新更新