#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