Почему этот обратный отсчет не работает в моем боте-диссонанте node.js? - PullRequest
0 голосов
/ 08 ноября 2019

Я пытаюсь реализовать код, который начнет обратный отсчет. В настоящее время он работает в консоли, но он не работает. Мне удалось заставить его работать в отдельном файле, и я скопировал все правильные биты, но это не сработает. Код находится в строке 59. Если вам это поможет, код будет здесь .

Я попытался выполнить поиск в Google и нашел тот же код, который использую (яя уверен)Поэтому я не уверен, почему это не работает.

Я делаю бота One Night Ultimate Werewolf. One Night Ultimate Werewolf - это скрытая ролевая игра, когда кто-то, если оборотень, должен избегать быть убитым. В конце у вас есть 2 с половиной минуты, чтобы рассказать игрокам о своей роли, и попытаться обмануть их, чтобы убить / не убить вас (в зависимости от вашей роли).

Я пытался сделать это 2и обратный отсчет за полминуты, поэтому я ожидал, что он запустит определенный код, подождет 3 секунды, а затем сделает другой код. Позже я изменил бы этот код на таймер 2:30, так что, если бы вы могли сказать мне, как это сделать, это было бы еще лучше. Но, по крайней мере, я хотел бы знать, почему приведенный ниже код не работает, и как это исправить.

Фрагмент кода:

      client.on('message', message => {
        if (message.author.bot) return;

        if (message.content === prefix + 'countdown') {
          console.log('Welcome to My Console,');
          setTimeout(function() {
            console.log('Blah blah blah blah extra-blah');
            }, 3000);
        }
        })

и полный файлis

//required libraries
const Discord = require('discord.js');
const client = new Discord.Client();

//What to do when the bot starts up.
client.on('ready', () => {
  console.log(`Logged in as ${client.user.tag}!`);
  client.user.setActivity("with my ding-a-ling")
});

//prefix
var prefix = ("~")

//Find the latancy and API latency.
client.on('message', message => {
  if (message.author.bot) return;

  if (message.content === prefix + 'ping') {
    message.channel.send(":ping_pong: Pinging...").then((ping) => { ping.edit(`:ping_pong: Pong!\nLatency is ${Math.floor(ping.createdAt - message.createdAt)}\nAPI latency is ${Math.round(client.ping)}ms`); });
  }
}
);


client.on('message', message => {
  if (message.author.bot) return;

  if (message.content === prefix + 'newgame') {
    if (message.member.roles.has("641725420957335562")) {
      client.channels.get('642070729805791232').send("Sending out message....").then((newgame) => { newgame.edit(`Hey, <@&641727807663374345>! A new game is starting. Do ~ready to apply`) })
    }

    client.on('message', message => {
      if (message.author.bot) return;

      if (message.content !== prefix + 'ready') {
        return;
      }

      if (message.content === prefix + 'ready') {
        message.channel.send(`<@${message.author.id}> is ready!`)
        var roles = Array("Doppelganger", "Werewolf", "Minion", "Mason", "Seer", "Robber", "Troublemaker", "Drunk", "Insomniac", "Villager", "Tanner", "Hunter")
        var role = roles[Math.floor(Math.random() * roles.length)];
      }
      message.author.send("Your role is..." + role + "!")


      client.on('message', message => {
        if (message.author.bot) return;

        if (message.content === prefix + 'accept') {
          if (message.channel.type === 'dm') {
            client.channels.get('642090245122293771').send(`<@${message.author.id}> has accepted their role!`)
          }
        }
      });

      client.on('message', message => {
        if (message.author.bot) return;

        if (message.content === prefix + 'countdown') {
          console.log('Welcome to My Console,');
          setTimeout(function() {
            console.log('Blah blah blah blah extra-blah');
            }, 3000);
        }
        })
      });
    }
  });


//logs messages into console
client.on("message", async message => {
  console.log(`${message.author.username} said: ${message.content}`);
});

//Test command if we need it
client.on('message', message => {
  if (message.author.bot) return;

  if (message.content === prefix + 'test') {
    message.channel.send("test reply")
  }
}
);
client.login(process.env.TOKEN);

Я не получил никакой ошибки, код просто не работал.

Любая помощь будет оценена. Спасибо.

1 Ответ

0 голосов
/ 09 ноября 2019

Прежде всего, ваш код неправильно вложен. Предполагается, что у вас есть только один client.on ('message'):

//required libraries
const Discord = require('discord.js');
const client = new Discord.Client();
var sleep = require('sleep');

//What to do when the bot starts up.
client.on('ready', () => {
  console.log(`Logged in as ${client.user.tag}!`);
  client.user.setActivity("with my ding-a-ling")
});

//prefix
var prefix = ("~")

//Find the latancy and API latency.
client.on('message', message => {
  if (message.author.bot) return;

  if (message.content === prefix + 'ping') {
    message.channel.send(":ping_pong: Pinging...").then((ping) => { ping.edit(`:ping_pong: Pong!\nLatency is ${Math.floor(ping.createdAt - message.createdAt)}\nAPI latency is ${Math.round(client.ping)}ms`); });
  }

  if (message.content === prefix + 'newgame') {
    if (message.member.roles.has("641725420957335562")) {
      client.channels.get('642070729805791232').send("Sending out message....").then((newgame) => { newgame.edit(`Hey, <@&641727807663374345>! A new game is starting. Do ~ready to apply`) })
    }

    if (message.content === prefix + 'ready') {
        message.channel.send(`<@${message.author.id}> is ready!`)
        var roles = Array("Doppelganger", "Werewolf", "Minion", "Mason", "Seer", "Robber", "Troublemaker", "Drunk", "Insomniac", "Villager", "Tanner", "Hunter")
        var role = roles[Math.floor(Math.random() * roles.length)];
        message.author.send("Your role is..." + role + "!");
    }

    if (message.content === prefix + 'accept') {
       if (message.channel.type === 'dm') {
         client.channels.get('642090245122293771').send(`<@${message.author.id}> has accepted their role!`)
       }
    }

    if (message.content === prefix + 'countdown') {
      console.log('Welcome to My Console,');
      setTimeout(function() {
        console.log('Blah blah blah blah extra-blah');
       }, 3000);
    }

    if (message.content === prefix + 'test') {
      message.channel.send("test reply")
    }

});


//logs messages into console
client.on("message", async message => {
  console.log(`${message.author.username} said: ${message.content}`);
});


client.login(process.env.TOKEN);

Это будет иметь такое же поведение, но вы будете иметь лучшую производительность и ваш код будет более читабельным.

Вот пример счетчика:

if (message.content === prefix + 'countdown') {
  console.log('Countdown started');
  let total = Date.now() + (60000*2+60000/2); // 2 minutes later
  let interval = setInterval(function() {
    console.log((total-Date.now()/1000)+' seconds remaining');
  }, 3000);
  setTimeout(function(){
    clearInterval(interval);
  }, (60000*2+60000/2));
  console.log("Timer ended");
}

Он будет отображать «оставшиеся х секунд» каждые 3 секунды до окончания таймера.

...