@VELAND
Discord.js bot developer

По какой причине возникает Undefined при обращении к JSON файлу?

Возникает ошибка
C:\Users\V3land\Desktop\999\index.js:42
      "name": `[UNMUTE] ${member.user.tag}`,
                                 ^

TypeError: Cannot read property 'user' of undefined
    at Timeout._onTimeout (C:\Users\V3land\Desktop\999\index.js:42:34)
    at listOnTimeout (internal/timers.js:549:17)
    at processTimers (internal/timers.js:492:7)

Ошибка возникает при инициализации функции через Interval в файле index, который в свою очередь состоит из следующего кода:
const fs = require('fs');

const Discord = require('discord.js');
const bot = new Discord.Client({ disableEveryone: true });

const credentials = require("./credentials");
const prefix = credentials.prefix;

bot.commands = new Discord.Collection();

bot.muted = require('./muted.json');
try{
fs.readdir('./cmds/', (err, files) => {
    if (err) console.error(err);
    const jsFiles = files.filter(f => f.split('.').pop() === 'js');
    if (jsFiles.length <= 0) return console.log('No command files found!');
    jsFiles.forEach((f, i) => {
        const props = require(`./cmds/${f}`);
        console.log(`${i + 1}: ${f} loaded!`);
        bot.commands.set(props.help.name, props);
    });
})

bot.on('ready', async () => {
    console.log(`${bot.user.username} is ready!`);

    // Проверка истечения срока мутов каждые 60 секунд
    bot.setInterval(() => {
        for (const i in bot.muted) {
            const time = bot.muted[i].time;
            const guildId = bot.muted[i].guild;
            const guild = bot.guilds.get(guildId);
            const member = guild.members.get(i);
            const mutedRole = guild.roles.find(mR => mR.name === 'Muted');
            if (!mutedRole) continue;

            if (Date.now() > time) {
                 // Логирование  
 const embed = {
    "color": 13450239,
    "author": {
      "name": `[UNMUTE] ${member.user.tag}`,
      "icon_url": `${member.user.displayAvatarURL}`
    },
    "fields": [
      {
        "name": "Пользователь",
        "value": `${member.user}`,
        "inline": true
      },
      {
        "name": "Модератор",
        "value": `${bot.user}`,
        "inline": true
      },
      {
        "name": "Причина",
        "value": `Окончание срока мута`
      }
    ]
  }
  bot.channels.get('656496416847560724').send({embed});
                member.removeRole(mutedRole);
                delete bot.muted[i];
                fs.writeFile('./muted.json', JSON.stringify(bot.muted), err => {
                    if(err) throw err;
                });
            }
        }
    }, 60000);
});

bot.on('message', async message => {
   
    if (message.author.bot) return;
    if (message.channel.type === 'dm') return;

    const messageArray = message.content.split(' ');
    const command = messageArray[0];
    const args = messageArray.slice(1);

    if (!command.startsWith(prefix)) return;

    const cmd = bot.commands.get(command.slice(prefix.length));
    if (cmd){
    message.delete();
    cmd.run(bot, message, args); }
});
} catch(err){
  console.log(err);
}
// Проверка заполнености токена в Credentials
if(credentials.token === '') return console.log('Token is empty!');
bot.login(credentials.token);


JSON Файл имеет следующую структуру:
{

    "501044794920009728": {
        "guild": "608610149569134619",
        "time": 1591920815930
    },
    "678601812831371285": {
        "guild": "608610149569134619",
        "time": 1591920881556
    },
    "259415136584859649": {
        "guild": "608610149569134619",
        "time": 1591971348807
    },
    "474096751335178240": {
        "guild": "608610149569134619",
        "time": 1591942561971
    },
    "428579239051264012": {
        "guild": "608610149569134619",
        "time": 1591942616913
    },
    "307486316931579905": {
        "guild": "608610149569134619",
        "time": 1591942640520
    },
    "437315666182275074": {
        "guild": "608610149569134619",
        "time": 1591921107918
    },
    "310775392640434176": {
        "guild": "608610149569134619",
        "time": 1591921114628
    },
    "644491828569178124": {
        "guild": "608610149569134619",
        "time": 1591921132484
    },
    "278054122299719680": {
        "guild": "608610149569134619",
        "time": 1591921158443
    },
    "284522016780845056": {
        "guild": "608610149569134619",
        "time": 1591921178490
    },
    "338391991870029826": {
        "guild": "608610149569134619",
        "time": 1591931994238
    },
    "278935951823339521": {
        "guild": "608610149569134619",
        "time": 1591921214019
    },
    "697349792468303892": {
        "guild": "608610149569134619",
        "time": 1591921218703
    },
    "289058087942488064": {
        "guild": "608610149569134619",
        "time": 1591924844518
    },
    "417718243046981660": {
        "guild": "608610149569134619",
        "time": 1591921309845
    },
    "564199174946553886": {
        "guild": "608610149569134619",
        "time": 1591921327227
    },
    "369516454610993152": {
        "guild": "608610149569134619",
        "time": 1591942967350
    },
    "268097873885790208": {
        "guild": "608610149569134619",
        "time": 1591921379255
    },
    "242405386479468544": {
        "guild": "608610149569134619",
        "time": 1591921385532
    },
    "644841947726348301": {
        "guild": "608610149569134619",
        "time": 1591921510593
    },
    "541119064290885632": {
        "guild": "608610149569134619",
        "time": 1591921528960
    },
    "314067762408456202": {
        "guild": "608610149569134619",
        "time": 1591928768192
    },
    "556468808978530306": {
        "guild": "608610149569134619",
        "time": 1591921569402
    }
}

При этом всем, ошибка возникает не сразу, а после того как кол-во строк в JSON файле начинает превышать ~1.000 строк, до этого все работает более чем нормально.
После очистки всех элементов Muted.json работа вновь нормализуется.
  • Вопрос задан
  • 313 просмотров
Решения вопроса 1
@dimoff66
Кратко о себе: Я есть
Очевидно, что для какого-то элемента строчка
const member = guild.members.get(i);

возвращает undefined

Поставьте брейкпойнт с условием в этом месте и посмотрите на каком элементе. Очевидно что где-то у guild.members элементов меньше чем в массиве bot.muted
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы