Команда отказаться от приветствий от Раздора.JS-бот, использующий прослушиватель presenceUpdate

#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
        };
    }
});