Discord. js Не могу проверить 'lastMessage.content' - PullRequest
2 голосов
/ 09 июля 2020
function broadcast() {
  client.guilds.cache.forEach(g => {
    g.channels.cache.find(c => c.name === 'chat' && c.lastMessage.content !== 'test').send('test')
    })
};

setInterval(broadcast, 3000);

Этот код не работает. Если вы не понимаете, я пытаюсь получить все каналы с именем «чат», и, кстати, последнее сообщение не является широковещательным, а затем отправляю сообщение на канал.

2020-07-09T13:33:43.715482+00:00 app[worker.1]:  
    c.lastMessage.content !== 'test'
2020-07-09T13:33:43.715483+00:00 app[worker.1]:                           ^
2020-07-09T13:33:43.715483+00:00 app[worker.1]: 
2020-07-09T13:33:43.715484+00:00 app[worker.1]: TypeError: Cannot read property 'content' of undefined
2020-07-09T13:33:43.715484+00:00 app[worker.1]:     at /app/events/ready.js:22:27
2020-07-09T13:33:43.715485+00:00 app[worker.1]:     at Map.find (/app/node_modules/@discordjs/collection/dist/index.js:160:17)
2020-07-09T13:33:43.715486+00:00 app[worker.1]:     at /app/events/ready.js:20:28
2020-07-09T13:33:43.715486+00:00 app[worker.1]:     at Map.forEach (<anonymous>)
2020-07-09T13:33:43.715486+00:00 app[worker.1]:     at Timeout.broadcast [as _onTimeout] (/app/events/ready.js:19:29)
2020-07-09T13:33:43.715487+00:00 app[worker.1]:     at listOnTimeout (internal/timers.js:549:17)
2020-07-09T13:33:43.715487+00:00 app[worker.1]:     at processTimers (internal/timers.js:492:7)

Это это ошибка, которую я получаю.

Ответы [ 2 ]

0 голосов
/ 09 июля 2020

Может случиться так, что в канале нет последнего сообщения, в результате чего c.lastMessage будет undefined и ваш процесс будет закрыт при попытке достичь несуществующего ключа content. Чтобы предотвратить это, вы можете вместо этого проверить это:

g.channels.cache.find(c => c.name === 'chat' && (c.lastMessage && c.lastMessage.content !== 'test'))
```
0 голосов
/ 09 июля 2020

Это должно работать:

function broadcast() {
  client.guilds.cache.forEach(g => {
    const channel = g.channels.cache.find(c => c.name === 'chat')
    if (channel.lastMessage.content !== 'test') channel.send('test')
  })
};

setInterval(broadcast, 3000);
...