#discord.js
Вопрос:
У меня есть Discord.js бот, который запрограммирован на отправку приветствия всякий раз, когда статус пользователя становится онлайн. Некоторым пользователям не нравится эта функция, и вместо того, чтобы удалять ее, я даю команду отказаться от нее.
client.on('presenceUpdate', (oldPresence, newPresence) => {
let member = newPresence.member;
Object.assign(member, {"ignoreStatuses": false})
console.log(member)
let guild = newPresence.guild;
const newGame = newPresence.member.presence.activities.find(activity => activity.type)
console.log(newGame)
let channelId = "884295684814151680"
let greetChannel = client.channels.cache.get(channelId)
});
client.on('message', async message => {
if (message.content.startsWith(`!greetings`)) {
var args = message.content.split(' ').slice(1).join(' ');
if (args === "on") {
member.ignoreStatuses = false
};
if (args === "off") {
member.ignoreStatuses = true
};
}
});
Проблема в том, что всякий раз, когда пользователь включает/выключает приветствие!, программа выдает сообщение об ошибке « member
не определено». Однако элемент определен в прослушивателе presenceUpdate. Я уверен, что проблема в том, что они два разных слушателя, и объект не совсем переносится между ними. Кто-нибудь знает какие-нибудь умные решения для этого?
Ответ №1:
Ага! Ваше понимание вашей проблемы абсолютно правильно, элемент переменной недоступен, так как он является параметром вашего presenceUpdate
прослушивателя, пока вы пытаетесь использовать его в своем message
прослушивателе событий, вы можете просто преодолеть это, определив его вне любого из них и переназначая его значение каждый раз, когда вы используете его таким образом:
let member;
client.on('presenceUpdate', (oldPresence, newPresence) => {
member = newPresence.member;
if(member.ignoreStatuses) {
let guild = newPresence.guild;
const newGame = newPresence.member.presence.activities.find(activity => activity.type)
console.log(newGame)
let channelId = "884295684814151680"
let greetChannel = client.channels.cache.get(channelId)
}
});
client.on('message', async message => {
if (message.content.startsWith(`!greetings`)) {
var args = message.content.split(' ').slice(1).join(' ');
if (args === "on") {
member.ignoreStatuses = false
};
if (args === "off") {
member.ignoreStatuses = true
};
}
});