#javascript #node.js #discord #discord.js
#javascript #node.js #Discord #discord.js
Вопрос:
Я создаю discord-бота, который выполняет заявки, которые используются в качестве приложений, и я сделал большую часть этого, за исключением того, что я хочу, чтобы бот, когда -close
команда используется для регистрации заявки, которая была закрыта.
Я пробовал несколько вещей, таких как вызов a .затем, чтобы отправить сообщение на канал протоколирования конкретного канала, который удаляется, затем вызывается другой.затем, когда он был удален, за исключением того, что он все равно отправил сообщение с сообщением #deleted-channel
. Я пробовал это несколькими способами, но не смог понять.
Другим решением, которое я попробовал, было создание переменной в -apply
команде, которая регистрировала бы имя человека, создавшего сообщение, но я понял, что после того, как многие люди использовали команду apply, если я попытаюсь закрыть ее, в журнал войдет имя самого последнего заявителя, а не приложение, которое я закрывал
-применить команду
const reason = message.content.split(" ").slice(1).join(" ");
var tAuthor = message.author.tag
if (!message.guild.roles.exists("name", "[»] Helpers")) return message.channel.send(`Server does not have role set correctly., This error has been logged. nPlease contact bot developer <@251557870603075586>`);
if (message.guild.channels.exists("name", "t-staff-" message.author.tag)) return message.reply(`You already have an application open.`);
message.guild.createChannel(`t-staff-${message.author.tag}`, "text").then(c => {
let role = message.guild.roles.find("name", `${config.role}`);
let role2 = message.guild.roles.find("name", "@everyone");
c.overwritePermissions(role, {
SEND_MESSAGES: true,
READ_MESSAGES: true
});
c.overwritePermissions(role2, {
SEND_MESSAGES: false,
READ_MESSAGES: false
});
c.overwritePermissions(message.author, {
SEND_MESSAGES: true,
READ_MESSAGES: true
});
c.setParent(message.guild.category.exists("name", "t-staff-"))
message.reply(`:white_check_mark: Your application has been created, #${c.name}.`);
const embed = new Discord.RichEmbed()
.setColor(0xCF40FA)
.setTitle(`Staff Application`)
.setDescription(`<@${message.author.id}>`)
.addField(`Requirements`, `You must meet all the requirements:nn1. Professional attitude and grammarn2. Working Microphonen3. No severe punishments on the server. (Racial Slurs, DDos Threats, etc..)n4. You must be over the age of 14`)
.addBlankField()
.addField(`Note:`, `Please check in announcements for open staff positions`)
.addField(`Note:`, `Please paste the format with your answers`)
.addField(`Note:`, `If your previous application was denied you must wait one week to sumbit a new one`)
.addBlankField()
.addField('Format', `nWhat position are you applying for: nnMinecraft username: nnPrevious Minecraft usernames: nnWhat is your age: nnTimezone: nnAbility to record Minecraft video: nnHow much time do you have to contribute a week? nnWhat do you consider to be your biggest weaknesses?nnWhat's your dream job? nnHow do you deal with pressure or stressful situations? nnAny previous staff skills or experience? nnHave you ever been banned or punished for your actions on this server? If so, please include details. nnTell us about a time you made a mistake within the last year? How did you deal with it? What did you learn? nnAre you currently staff on any other servers? nnWhere did you hear about nodepvp? nnHave you made any previous applications, if so how many and what is the date of your last one? nnWhat would be your daily tasks for the rank you are applying for nnAnything else we should know? `)
.addBlankField()
.setTimestamp();
c.send({ embed: embed });
client.channels.get(`568210811009499136`).send(`:white_check_mark: !!!Ticket Created ${message.author} at **${current_date}**`);
-закрыть команду
if (!message.channel.name.startsWith(`ticket-`)) return message.channel.send(`You can't use the close command outside of a ticket channel.`);
if(!message.member.hasPermission("MANAGE_MESSAGES")) return message.channel.send(`${message.author} Do not have permission to close this application`);
// Confirm delete - with timeout (Not command)
message.channel.send(`Are you sure? Once confirmed, you cannot reverse this action!nTo confirm, type `/confirm`. This will time out in 10 seconds and be cancelled.`)
.then((m) => {
message.channel.awaitMessages(response => response.content === '/confirm', {
max: 1,
time: 10000,
errors: ['time'],
})
.then((collected) => {
message.channel.delete();
})
.catch(() => {
m.edit('Ticket close timed out, the ticket was not closed.').then(m2 => {
m2.delete();
}, 3000);
});
});
Когда я попытался зарегистрировать это с помощью .then
функции в команде close прямо перед
.then((collected) => {
message.channel.delete();
Он по-прежнему отправляет сообщение на канал, в котором говорится #deleted-channel
, даже если я отправляю команду до того, как канал будет удален.
Комментарии:
1. Возможно, это просто я, но мне немного сложно понять вашу проблему. Итак, что происходит, кто-то использует
-apply
команду, которая создает новый канал запроса. Затем, когда пользователь использует-close
команду в канале запроса, вы хотите, чтобы этот канал и сообщение с соответствующей-apply
командой были удалены? Или вы хотите, чтобы исходное-apply
сообщение сохраняло имя канала даже после его удаления?
Ответ №1:
Если вы отправите сообщение с упоминанием канала, например #test
, оно останется в виде интерактивной ссылки на test
канал, пока этот канал существует. Если вы удалите этот канал, все ссылки будут заблокированы и станут скучными #deleted-channel
.
Одним из решений было бы войти Closed ${channel.name}
в систему, а затем удалить канал. Вы не можете сделать так, чтобы оно сохраняло связанное сообщение (если только вы не сделаете так, чтобы никто не мог видеть удаленный канал, запретив доступ на чтение к закрытым билетам для всех, кроме персонала, для целей ведения журнала).