gpt4 book ai didi

javascript - Discordjs - 无法向该用户发送消息

转载 作者:行者123 更新时间:2023-11-28 14:31:22 25 4
gpt4 key购买 nike

我正在为我所在的服务器创建一个 discord.js 机器人,但在尝试向用户(刚刚被踢出,通知他们)发送 DM 之后,该机器人根本不会发送它,它会吐出一个错误,

"UnhandledPromiseRejectionWarning: DiscordAPIError: Cannot send messages to this user"

它现在失控了,因为它会起作用,我会添加一个小东西,它会停止工作(或多或少是预期的),然后当我恢复该添加时,它会再次吐出错误。

这是我的踢命令代码

const Discord = require("discord.js");
const Client = new Discord.Client
const prefix = "m!"

module.exports.run = async(bot, message, args) => {
params = message.content.slice(prefix.length).trim().split(/ +/g);

command = args.shift().toLowerCase();

let memberKick = message.mentions.members.first();

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

if(message.member.roles.find("name", "MedaFrost Controller")) {
var userReslv = message.guild.members.find("id", memberKick.id);
let usericon = memberKick.displayAvatarURL;
let botembed = new Discord.RichEmbed
botembed.setDescription("❌ You Were Kicked From Roscord!");
botembed.setColor("FF0000");
botembed.setThumbnail(usericon);
botembed.addField("Reason:", `${reasonKick}`);
userReslv.send(botembed);
memberKick.kick(reasonKick);
message.channel.send("✅ " + `${memberKick}` + " was kicked! ✅")
} else {
const userId = message.member.id
message.channel.send("Sorry, " + `<@${userId}>` + ", but you do not have sufficient permissions!")
}
}

module.exports.help = {
name: "kickplayer",
description: "Kicks mentioned user."
}

(证明表情符号不是问题) Link to image :

最佳答案

您不应该使用延迟或计时器来解决此问题。 Discord.js 中的异步调用返回 Promise,您应该使用这些 Promise。

Promise 基本上可以将异步工作流程转为同步:当发生某些事情时 -> 执行此操作。

这是工作流程:

  1. 向公会成员发送消息
  2. 消息正确发送后踢

别担心,他们没有时间对消息使用react,因为借助 Promise,这些操作很可能会立即发生。没有额外的延迟。

所以基本上:

GuildMember
.createDM()
.then((DMChannel) => {
// We have now a channel ready.
// Send the message.
DMChannel
.send(reason)
.then(() => {
// Message sent, time to kick.
GuildMember.kick(reason);
});
});

Here's the referenced GuildMember

你也可以捕获,而且你应该捕获。当 Promise 无法执行分配给它的任务时,就会发生捕获。

GuildMember
.createDM()
.then((DMChannel) => {
// We have now a channel ready.
// Send the message.
DMChannel
.send(reason)
.then(() => {
// Message sent, time to kick.
GuildMember
.kick(reason)
.catch((e) => {
console.log('Failed to kick!', e);
// Do something else instead...
});
});
});

(您也可以捕获消息发送,或创建 channel 。)

在这里您可以了解有关 Promise 的更多信息,它是 JavaScript 的重要组成部分:https://javascript.info/promise-basics

关于javascript - Discordjs - 无法向该用户发送消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51407473/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com