Редактирование одного и того же сообщения каждые несколько минут

#javascript

#javascript

Вопрос:

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

Это должно редактироваться с помощью моего сервера FiveM, но я хочу сначала выполнить часть редактирования

Я пытался использовать setTimeout() в своем сообщении, но оно редактирует сообщение только один раз.

 const config = require("./config.js");
const request = require('request');

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

var ip = "Private"
var port = "30120"
var timeoutvar = "60000"

const players = request(`http://${ip}:${port}/players.json`, function (players, error, response, body) {
  console.log('body:', body);
});

client.on('ready', () => {
  console.log(`Logged in as ${client.user.tag}!`);
});

// Set the bot's presence (activity and status)
client.on("ready", () => {
  client.user.setPresence({
      game: { 
          name: 'MODPS',
          type: 'WATCHING'
      },
      status: 'dnd'
  })
})

client.on('message', msg => {
  client.channels.get("channelid").send(`${players}`)
  .then((msg) => {
    setTimeout(function() {
      msg.edit(`${players}`)
    }, 2000)}
  )}
)

client.login(token);
  

Ожидаемый результат: сообщение должно редактироваться по крайней мере каждую минуту или около того.

Фактический результат: одно и то же сообщение редактируется только один раз.

Комментарии:

1. Попробуйте использовать setInterval() метод.

2. как бы я хотел настроить его так, чтобы он не отвечал на одно и то же сообщение и не редактировал его снова?

Ответ №1:

Вы можете сделать это с помощью setInterval() метода.

setInterval() Метод многократно вызывает функцию или выполняет фрагмент кода с фиксированной временной задержкой между каждым вызовом.

 client.on('message', msg => {
    client.channels.get("channelid").send(`${players}`)
    .then((msg) => {
        setInterval(function() {
            msg.edit(`${players}`)
        }, 1000)} /* 1000 ms = 1 second */
    )}
)
  

Вот основной пример setInterval() метода:

 setInterval(function(){
  console.log('Hello World');
}, 2000);  

Ответ №2:

60 000 миллисекунд = 60 секунд. setInterval выполняет данную функцию каждые x миллисекунды:

 client.on('message', msg => {
  client.channels.get("channelid").send(`${players}`)
  .then((msg) => {
    setInterval(function() {
    msg.edit(`${players}`)
  }, 60000)}
  )}
)
  

Комментарии:

1. это работает 🙂 только когда я отправляю сообщение, поэтому я отредактировал его, вместо сообщения я поместил ready

2. @Rhys19: Когда вам нужно его отредактировать? Это работает при отправке сообщения, потому что код зарегистрирован в client.on('message'... событии.

Ответ №3:

это сработало:

 client.on('ready', msg => {
  client.channels.get("555945877483814915").send(`${players}`)
  .then((msg) => {
    setInterval(function() {
    msg.edit(`${players}`)
  }, 60000)}
  )}
)
  

Комментарии:

1. это показывает, что сообщение было отредактировано, но в нем не отображаются новые данные, которые я пытаюсь использовать request.get для обновления списка игроков с моего сервера FiveM есть какие-нибудь подсказки, почему не обновляется ping игрока? даже если я создам message.createdAt, это не сработает. код: pastebin.com/6avxSMhr