#node.js #variables #discord #discord.js
Вопрос:
Хорошо, это может показаться действительно простым вопросом, но приведенный ниже код продолжает выдавать мне ошибку на консоли. После некоторых исследований кажется, что я, возможно, перепутал настройку переменных, но я не уверен, как это исправить. Для контекста этот модуль предназначен для обновления каналов с помощью статистики сервера. Код:
function updateStats(client) {
const Discord = require('discord.js');
const config = require("../settings/configuration");
const settings = require("../settings/configuration");
const guild = client.guilds.cache.get(settings.BOT_SETTINGS.Guild_ID);
const totalUsers = client.channels.fetch('883654989271154728');
const onlineUsers = client.channels.fetch('883655041813200926');
setInterval(function() {
const interval = (async function() {
for await (const startTime of setInterval(interval, Date.now())) {
const now = Date.now();
console.log(now);
if ((now - startTime) > 1000)function updateStats(client) {
const Discord = require('discord.js');
const config = require("../settings/configuration");
const settings = require("../settings/configuration");
const guild = client.guilds.cache.get(settings.BOT_SETTINGS.Guild_ID);
const totalUsers = client.channels.fetch('883654989271154728');
const onlineUsers = client.channels.fetch('883655041813200926');
setInterval(function() {
const interval = (async function() {
for await (const startTime of setInterval(interval, Date.now())) {
const now = Date.now();
console.log(now);
if ((now - startTime) > 1000)
break;
}
console.log(Date.now());
})();
console.log('Getting stats update..')
var userCount = guild.memberCount;
var onlineCount = guild.members.filter(m => m.presence.status === 'online').size
$console.log("Total Users: " userCount);
$console.log("Online Users: " onlineCount);
totalUsers.setName("Total Users: " userCount)
.then(newChannel => console.log(`Stat channel renamed to: ${newChannel.name}`))
.catch(console.error);
onlineUsers.setName("Online Users: " onlineCount)
.then(newChannel => console.log(`Stat channel renamed to: ${newChannel.name}`))
.catch(console.error);
}, 30000)
}
module.exports = {
updateStats
}
break;
}
console.log(Date.now());
})();
console.log('Getting stats update..')
var userCount = guild.memberCount;
var onlineCount = guild.members.filter(m => m.presence.status === 'online').size
console.log("Total Users: " userCount);
console.log("Online Users: " onlineCount);
totalUsers.setName("Total Users: " userCount)
.then(newChannel => console.log(`Stat channel renamed to: ${newChannel.name}`))
.catch(console.error);
onlineUsers.setName("Online Users: " onlineCount)
.then(newChannel => console.log(`Stat channel renamed to: ${newChannel.name}`))
.catch(console.error);
}, 30000)
}
module.exports = {
updateStats
}
Ошибка на консоли:
[Error] An error happened in process:
ReferenceError: Cannot access 'interval' before initialization
at /home/container/events/Stats.js:10:51
at Timeout._onTimeout (/home/container/events/Stats.js:49:9)
at listOnTimeout (node:internal/timers:557:17)
at processTimers (node:internal/timers:500:7)
Комментарии:
1. Довольно простое сообщение об ошибке. Вы используете это слово
interval
при определенииinterval
2. Довольно трудно прочитать код в вашем вопросе без надлежащего отступа. Многие просто пропустят подобные вопросы. Пожалуйста, облегчите чтение вашего кода.
3. Я не думаю, что ты понимаешь
setInterval
Ответ №1:
Просто измените const interval = (async function() {
на let interval = (async function() {
, а затем просто используйте interval = (async function() {
вот так:
let interval = (async function() {
for await (const startTime of setInterval(interval, Date.now())) {
const now = Date.now();
console.log(now);
if ((now - startTime) > 1000)function updateStats(client) {
const Discord = require('discord.js');
const config = require("../settings/configuration");
const settings = require("../settings/configuration");
const guild = client.guilds.cache.get(settings.BOT_SETTINGS.Guild_ID);
const totalUsers = client.channels.fetch('883654989271154728');
const onlineUsers = client.channels.fetch('883655041813200926');
setInterval(function() {
interval = (async function() {