#javascript #discord #bots #offline #status
#язык JavaScript #Discord #боты #Не в сети #Статус
Вопрос:
Я создал команду userinfo, которая отображает информацию о пользователе, такую как пользовательский статус, действия,…
У меня проблема, когда я набираю свою команду для любого автономного пользователя, консоль возвращает это сообщение :
TypeError: Cannot read properties of null (reading 'status') at UserInfoCommand.exec (D:DeveloppementFuzeBotsrccommandsmiscuserinfo.js:26:46) at CommandHandler.runCommand (D:DeveloppementFuzeBotnode_modulesdiscord-akairosrcstructcommandsCommandHandler.js:1173:29) at CommandHandler.handleDirectCommand (D:DeveloppementFuzeBotnode_modulesdiscord-akairosrcstructcommandsCommandHandler.js:739:15) at processTicksAndRejections (node:internal/process/task_queues:96:5) at async CommandHandler.handle (D:DeveloppementFuzeBotnode_modulesdiscord-akairosrcstructcommandsCommandHandler.js:541:11)
Я использую фреймворк акайро и discord.js.
Вот userinfo.js :
const { Command } = require('discord-akairo'); const { MessageEmbed } = require('discord.js'); class UserInfoCommand extends Command { constructor() { super('userinfo', { aliases: ['userinfo', 'info'], description: 'Affiche les informations de l'utilisateur', userPermissions: 'ADMINISTRATOR', clientPermissions: 'ADMINISTRATOR', channel: 'guild', args: [ {id: 'member', type: 'member', default: message =gt; message.member }, ] }); } exec(message, args) { const getStatus = args.member.presence.status; const activities= []; for (const activity of args.member.presence.activities.values()) { console.log(activity); switch (activity.type) { case 'PLAYING': activities.push(`Joue à **${activity.name}**`); break; case 'LISTENING': if (args.bot) activities.push(`Écoute **${activity.name}**`); else activities.push(`Écoute **${activity.details}** de **${activity.state}**`); break; case 'WATCHING': activities.push(`Regarde **${activity.name}**`); break; case 'STREAMING': activities.push(`Stream **${activity.name}**`); break; case 'CUSTOM': var customStatus = activity.state; console.log(`------ ${customStatus} -------`); if(customStatus === ''){ var customStatus = '*Aucun statut pour le moment*'; } break; } } switch (getStatus){ case 'online': var status = "lt;:online:917793203523027024gt;"; break; case 'idle': var status = "lt;:idle:917793108354297886gt;"; break; case 'offline': var status = "lt;:offline:917793167691100242gt;"; break; case 'dnd': var status = "lt;:dnd:917793482620420106gt;"; break; } console.log(`------ ${activities.length} -------`); const embed = new MessageEmbed() .setColor("#FFD700") .setTitle(`lt;:user:916747116259463228gt; **Informations sur l'utilisateur**`) .setThumbnail(args.member.user.displayAvatarURL({ dynamic: true })) .setDescription(`lt;@${args.member.id}gt; **(${args.member.user.tag})**`); console.log(status); if(status !== 'offline'){ if(activities.length gt; 0){ embed.addField('lt;:videogame:917781052003598366gt; Activité :', `${activities}`, true) }else{ embed.addField('lt;:videogame:917781052003598366gt; Activité :', `*Aucune activité en cours*`, true) } if(!customStatus){ embed.addField(` ${status} Statut :`, `*Aucun statut*`, true) }else{ embed.addField(`${status} Statut :`, `${customStatus}`, true) } } return message.channel.send({embeds: }); }}module.exports = UserInfoCommand;
Я не знаю, как это решить. Кстати, извините за мой плохой английский. Это происходит только тогда, когда пользователь находится в автономном режиме…
Комментарии:
1. Было бы лучше объявить
status
вне оператора switch и зарегистрировать его позже, чтобы посмотреть, что вы придумаете.2. Я считаю, что проблема в строке
const getStatus = args.member.presence.status;
, но я не могу быть уверен, просто взглянув на приведенный выше код. Если вы уверены, что это происходит, когда пользователь находится в автономном режиме, изменение строки наconst getStatus = args.member.presence.status || 'offline';
, вероятно, заставит ее работать, но это всего лишь обходной путь, и вам следует лучше выяснить, почему статус не передается функции exec3. Спасибо за ваш ответ, но он все еще не работает.. Я пытался, но у меня та же ошибка. Похоже, что когда пользователь находится в автономном режиме, данные не отправляются …
Ответ №1:
const getStatus = args.member?.presence?.status;
это устранит ошибку, вызванную единственным экземпляром обращения к свойству «статус», когда оно не задано. Но тогда возникает вопрос, почему он не установлен?
Возможно, вам придется:
const getStatus = args.member?.presence?.status ?? 'offline';
но это предполагает, что у вас не будет доступа к одному и тому же объекту в другом месте графика, когда они находятся в автономном режиме. Итак, я бы добавил a console.log(args)
в ваш случай с автономным переключателем, чтобы в этом случае вы могли искать альтернативное местоположение
Комментарии:
1. Спасибо за ваш ответ. К сожалению, это все еще не работает, кроме того, я не могу ничего регистрировать в консоли, потому что мой бот просто останавливается и показывает только ошибку ..
2. должен быть способ отладки ботов в вашей среде. 🙂 Я бы счел исследование этого более важным, чем что-либо другое. если вы получаете ту же ошибку , значит, вам не удалось обновить свой код или он не исходит из предоставленного вами кода. пожалуйста, убедитесь, что он выполняет ваш измененный код, и если да, то определите другой код, содержащий «x.y.статус».