csd游戏信息

时间:2018-03-03 14:23:54

标签: javascript discord.js

我正在尝试在user.setGame中创建一个倒计时,有人可以帮我创建倒计时代码吗?

const bot = new Discord.Client();


bot.on('ready', () => {
  console.log('I am ready!');
  user.setGame(countdown)
});

谢谢!

2 个答案:

答案 0 :(得分:1)

假设“倒计时”是指游戏设置前的特定时间,您可以轻松使用setTimeout之类的内容。以下是使用代码的示例:

const Discord = require('discord.js');
const bot = new Discord.Client();


bot.on('ready', () => {
  console.log('I am ready!');
  setTimeout(() => {
    bot.user.setGame('Online and ready to roll!');
  }, 60000); // Time in Milliseconds (60000 = 60 seconds = 1 minute)
});
编辑:通过新评论,我现在明白了你的目标。使用上面的一些方法和一个名为setInterval的小东西,这对你应该没问题。我们还将使用名为pretty-ms的令人敬畏的模块,这将使我们的时间保持可读性。我将提供两个示例,一个使用漂亮的ms,另一个不使用。

const Discord = require('discord.js');
const pms = require('pretty-ms');
const bot = new Discord.Client();

const endTime = new Date("May 20 2018 2:00 PM");

bot.on('ready', () => {
  console.log('I am ready!');
  const countdownGame = setInterval(() => {
    if (endTime.getTime() - Date.now() < 0) {
      clearInterval(countdownGame);
      bot.user.setGame('Time\'s Up!');
    }
    // Get the endDate minus the current date, and then make the milliseconds pretty
    // Remove { compact: true } for a full value. You can see all the options
    // available on the module's page.
    bot.user.setGame(pms(endTime.getTime() - Date.now(), { compact: true }));
  }, 60000); // Time in Milliseconds before rerun (60000 = 60 seconds = 1 minute)
  // Due to Discord ratelimiting, you may need to change this value to only update every 
  // 2 minutes or more.
});

应该注意的是,在执行new Date("May 20 2018 2:00 PM");时,这只是您可以将日期设置为未来的众多方法之一。你也可以像AndréPaulo在他的例子中所说的那样使用.setHours。查看MDN上的Date文档,了解设置更多日期的方法!

如果由于某种原因,你不想使用漂亮的ms(它是一个漂亮有用的模块,我很抱歉),这里有一个setGame行的例子没有使用pms。

// Hours
bot.user.setGame((endTime.getTime() - Date.now())/1000/60/60);
// Minutes
bot.user.setGame((endTime.getTime() - Date.now())/1000/60);
// Seconds
bot.user.setGame((endTime.getTime() - Date.now())/1000);

请记住,没有使用模块,当时间结束或低于你的设置时,它将包括小数。我建议使用Number#toFixed

编辑2:另外,AndréPaulo的正确性是ClientUser#setGame被折旧。从1.11.3开始,它现在是ClientUser#setPresence

快乐的编码!

答案 1 :(得分:1)

user.setGame()已被弃用 您可能需要查看user.setPresence()

bot.user.setPresence({ game: { name: 'with discord.js' })
  .then(console.log)
  .catch(console.error);

所以这样的事情会起作用:

bot.on('ready', () => {
    console.log('I am ready!');
    var hours = 12;

    let now = new Date();
    var later = new Date();
    later.setHours(now.getHours()+hours);

    bot.user.setPresence({game: {name: hours+':00'});
    var interval = setInterval(() => {
        let left = new Date(later - new Date());
        if(left >= 0){
            bot.user.setPresence({game: {name: left.getHours() + ":" + left.getMinutes()});
        } else {
            // time is up
        }
    }, 60000);
});

(未测试的)