@outplayedrq

Как можно отслеживать уже написанное сообщение в Discord JS?

Как отслеживать реакции на уже добавленном сообщение?

let guild = bot.guilds.cache.get('747786905399197757')
addRole.addRole(bot, guild)

Я это уже делал, но при отправке определённого сообщения, помещал туда messageData = message.id
И так далее, но сейчас выдаёт постоянно ошибку:

TypeError: Cannot read property 'cache' of undefined
    at Client.<anonymous> (C:\Users\liter\Desktop\botdiscord\functions\addRole.js:17:48)
    at processTicksAndRejections (internal/process/task_queues.js:93:5)

И вот функция на которой он застревает:

bot.on('raw', async (event) => {
        try {
            if (!events.hasOwnProperty(event.t)) return
            const {d: data} = event
            const user = bot.users.cache.get(data.user_id)
            const channel = bot.channels.cache.get(data.channel_id) || (await user.createDM())
            if (channel.messages.cache.has(data.message_id)) return
            const message = await channel.fetch(data.message_id)
            const emojiKey = data.emoji.id ? `${data.emoji.name}:${data.emoji.id}` : data.emoji.name
            const reaction = message.reactions.cache.get(emojiKey)
            bot.emit(events[event.t], reaction, user)
        } catch (err) {
            console.error(err)
        }
    })

Не понимаю в чём проблема, ведь при таком формате всё работает корректно:

let guild = bot.guilds.cache.get('747786905399197757')
let channel = guild.channels.cache.find(c => c.id === '761102042491781130')

    channel.send(new Discord.MessageEmbed().setColor('#c998e6').setDescription(`Zxc`))
        .then((message) => {
            message.react(message.client.emojis.cache.get('751472529033658509'))
            message.react(message.client.emojis.cache.get('751472529205493791'))

            addRole.addRole(bot, guild)
        })
  • Вопрос задан
  • 5221 просмотр
Решения вопроса 1
Alexandre888
@Alexandre888 Куратор тега discord.js
Javascript-разработчик
для облегчения работы с библиотекой, умные люди разработали коллекторы сообщений: для сбора реакций на сообщении/для сбора сообщений в канале.
ознакомьтесь с моим подробным ответом, касаемо коллекторов.

если же вы хотите найти сообщение по его ID - это уже совсем другая история, которая реализуется при помощи метода fetch:
message.channel.messages.fetch("ID_сообщения").then(message => {
  . . .
})
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы