目前有没有一种方法可以创建一个不和频道,然后在以后选择它



目前,我一直在为一台Discord服务器开发Discord.js机器人。我想制作一个命令,这样用户就可以使用!oticket打开一个票证,它将创建一个新的通道,他们到机器人的所有dms都将通过该通道。我有创建频道的工作代码,但当我试图添加一个if语句来创建它时,如果有人已经打开了一张票,他们就无法打开另一张票了,我找不到按名称选择频道的工作方法。

这是我当前的代码:

var test = msg.guild.channels.find(channel => channel.name === msg.author.username); //Outputs null even if a channel with their username already exists
console.log(test);
if (!msg.guild.channels.find(channel => channel.name === msg.author.username)) { // Passes even if a channel with their username already exists

var server = msg.guild; //Works fine
var name = msg.author.username; //Works fine
server.createChannel(name, { //Works fine
type: "text",
parent: client.channels.get("834963781342724096"),

}); //Works fine

} else {
msg.reply("You already have an open ticket!")
}

我知道按频道名称查找频道是不切实际的,但这个机器人只会在我的服务器上。

您可以使用一个映射,当用户创建了一个票证时,您可以在其中设置一个值,如下所示:

const ticketmap = new Map();

if(ticketmap.get(msg.author.id)) return message.reply(`You already have an open ticket!`);

var server = msg.guild; //Works fine
var name = msg.author.username; //Works fine
server.createChannel(name, { //Works fine
type: "text",
parent: client.channels.get("834963781342724096"),

}).then(ch => {
ticketmap.set(msg.author.id, ch.id);
});

数组#find((用于返回与给定函数匹配的第一个结果,如果未找到任何结果,则返回未定义的。您要查找的是一个布尔值,在本例中使用Array#some((

您还忘记访问msg.guild.channelscache属性

const channelExists = msg.guild.channels.cache.some(c => c.name === msg.author.username);
if (!channelExists)) {
var server = msg.guild;
var name = msg.author.username;
server.createChannel(name, {
type: "text",
parent: client.channels.get("834963781342724096") 
}); 
} else {
msg.reply("You already have an open ticket!");
}

相关内容

最新更新