Как запустить код с await в фильтре / собирать код - PullRequest
0 голосов
/ 02 мая 2019

Я пытаюсь сделать часть подтверждения моей команды, где, если вы активируете команду, вам нужно сказать «да», прежде чем активировать код.Повторяющаяся проблема состоит в том, что код сразу после сообщения, которое говорит

Подтверждено ... Пожалуйста, подождите.

После этого он полностью пропускает код и ничего не делает,Когда я писал код в VSC, часть кода async была выделена не желтым цветом, а более темным желтым.

Я пытался удалить эту часть кода const async = async () => {Но код с await не может работать, если он не подключен к асинхронному.Я попытался изменить способ запуска асинхронного.async () => { Все тот же результат.Удаление начального асинхронного кода также приведет к разрыву команды.Я поместил большой кусок кода вне кода then(collected, но после нескольких секунд ожидания, когда команда активируется, она немедленно запускается, а затем выдает ошибку значения.Но я хочу, чтобы код активировался, когда автор говорит «Да»

async run(message, args){

if (message.channel instanceof Discord.DMChannel) return message.channel.send('This command cannot be executed here.')

let replyMessage = message.reply('Please make sure that my integration role "Synthibutworse" is above the default role used for this server. Is this correct? [Reply with "YES"] if so. Will expire in 20 seconds...');

let filter = msg => msg.author.id == message.author.id && msg.content.toLowerCase() == 'yes';
message.channel.awaitMessages(filter, {max: 1, time: 20000}).then(collected => {

  message.reply('Confirmed... Please wait.');

  const async = async () => {

  if(!message.member.guild.me.hasPermission(['MANAGE_WEBHOOKS'])) return message.channel.send('I don\'t have the permissions to make webhooks, please contact an admin or change my permissions!')
  if(!message.member.guild.me.hasPermission(['MANAGE_ROLES'])) return message.channel.send('I don\'t have the permissions to make roles, please contact an admin or change my permissions!')
  if (!message.member.hasPermission(['MANAGE_WEBHOOKS'])) return message.channel.send('You need to be an admin or webhook manager to use this command.')
  if (!message.member.hasPermission(['MANAGE_ROLES'])) return message.channel.send('You need to be an admin or role manager to use this command.')

  const avatar = `https://cdn.discordapp.com/attachments/515307677656678420/557050444954992673/Generic5.png`;
  const name2 = "SYNTHIBUTWORSE-1.0WOCMD";

  let woaID = message.mentions.channels.first(); 
  if(!woaID) return message.channel.send("Channel is nonexistant or command was not formatted properly. Please do s!woa #(channelname)"); 
  let specifiedchannel = message.guild.channels.find(t => t.id == woaID.id);; 

  const hook = await woaID.createWebhook(name2, avatar).catch(error => console.log(error))
  await hook.edit(name2, avatar).catch(error => console.log(error))
  message.channel.send("Please do not tamper with the webhook or else the command implied before will no longer function with this channel.")

  var role = message.guild.createRole({
      name: `Synthibutworse marker v1.0`,
      color: 0xcc3b3b,}).catch(console.error);

  specifiedchannel.send("Created role...");

  if(message.guild.roles.name == "Synthibutworse marker v1.0") {
    role.setMentionable(false, 'SBW Ping Set.')
    role.setPosition(1)
    role.setPermissions(['CREATE_INSTANT_INVITE', 'SEND_MESSAGES'])
      .then(role => console.log(`Edited role`))
      .catch(console.error)};

  message.channel.send("Role set up...");

  const sbwrID = message.guild.roles.find(`Synthibutworse marker v1.0`);
  let specifiedrole = message.guild.roles.find(r => r.id == sbwrID.id)

  message.channel.send('Created Role... Please wait.');

  message.guild.specifiedchannel.replacePermissionOverwrites({
    overwrites: [
      {
         id: specifiedrole,
         denied: ['SEND_MESSAGES'],
         allowed: ['VIEW_CHANNEL'],
      },
    ],
      reason: 'Needed to change permissions'
    });

  var bot = message.client
  bot.on('message', function(message) { {
      if(webhook.name == `Synthibutworse marker`) return
      if(message.channel.id == webhook.channelID) return 
  {let bannedRole = message.guild.roles.find(role => role.id === specifiedrole);
  message.member.addRole(bannedRole)};
  }});

}});

}};
module.exports = woa;

Я ожидаю, что команда будет выполняться с асинхронным выполнением и продолжит работу с кодом, когда автор сообщения скажет «да» и неОстановитесь на сообщении Please wait..

На самом деле происходит то, что код не запускается сразу после сообщения Please wait.

1 Ответ

0 голосов
/ 04 мая 2019

В своем текущем коде вы объявляете асинхронную функцию, но никогда не вызываете ее.Вот почему код никогда не запускается, и поэтому VSC затемняет его имя.

Решение:
Определите свой .then() обратный вызов awaitMessages(...) как async:

.then(async collected => {
  // do async stuff
});

Для дальнейшего использования, если вам нужно использовать асинхронный код где-то, что вы не можете определить функцию как асинхронную, используйте следующую настройку:

(async function() {
  // do async stuff
})();
...