Как сделать встраивание сообщения для редактирования позже - PullRequest
0 голосов
/ 30 мая 2019

Я пытаюсь разработать некоторый код, который показывает боту, когда он подключается к сети, и позволяет цвету сообщения вставки меняться на что-то другое каждые 2 секунды. (2000 мс) Но я не знаю как, я получаю сообщение об ошибке channel.send.edit is not a function или что-то в этом роде.

То, что я сделал, было ... Создайте тайм-аут. Отредактируйте сообщение, но оно покажет другое сообщение / вывод для секции uptime. Удалить и отправить сообщение.

var myInfo = new discord.RichEmbed()
.setAuthor(`${bot.user.username} is now ONLINE`,`${bot.user.avatarURL}`)
.setDescription(`The bot is now up, please check the following below to see when the bot was online.`)
.addField(`Ready At`,`${bot.readyAt}`,true)
.addField(`Timestamp`,`${bot.readyTimestamp}`,true)
.addField(`Uptime`,`${bot.uptime}`,true)
.setColor(0x008704)
.setFooter('Bot is now online.')
.setThumbnail(`${bot.user.avatarURL}`)

var myInfo2 = new discord.RichEmbed()
.setAuthor(`${bot.user.username} is now ONLINE`,`${bot.user.avatarURL}`)
.setDescription(`The bot is now up, please check the following below to see when the bot was online.`)
.addField(`Ready At`,`${bot.readyAt}`,true)
.addField(`Timestamp`,`${bot.readyTimestamp}`,true)
.addField(`Uptime`,`${bot.uptime}`,true)
.setColor(0x00c13a)
.setFooter('Bot is now online.')
.setThumbnail(`${bot.user.avatarURL}`)

bot.channels.get("523649838693482507").send(myInfo).edit(myInfo2);

Я ожидаю, что бот, когда он выйдет в сеть, отправит сообщение для встраивания, затем через 2 секунды бот отредактирует цвет и так далее.

Вывод - бот, выдающий ошибку или просто не работающий вообще.

1 Ответ

0 голосов
/ 31 мая 2019

Вы можете использовать результат message.channel.send(...), прикрепив метод then() к возвращенному обещанию, например так ...

message.channel.send(myInfo)
  .then(m => m.edit(myInfo2)) // Note that this will edit the message immediately.
  .catch(console.error);

Вы заметите, что я добавилcatch() метод для обнаружения отклоненных обещаний в случае, когда возвращается ошибка.

В качестве альтернативы, вы можете объявить переменную как выполненное обещание.Однако ключевое слово await может быть только в асинхронных функциях.Вот пример ...

client.on('message', async message => {
  try {
    const m = await message.channel.send('Hello.');
    await m.edit('Hi again.');
  } catch(err) {
    console.error(err);
  }
});

В этом случае мы можем использовать оператор try...catch вместо отдельных catch() методов.

Подробнее об обещаниях см. в этой документации MDN .
Подробнее о методе TextChannel.send() см. в документации Discord.js .

...