Как мне заставить мой Discord Bot игнорировать ошибку TypeError и возобновить выполнение моей функции? - PullRequest
0 голосов
/ 16 июня 2020

Как указано в вопросе, у меня есть бот, который я использую для сообщения определенного канала c во всех гильдиях, в которые он приглашен. Сначала эта функция работала в моем контролируемом эксперименте с 3 серверами, которые я провел с требуемым каналом боту нужно было ретранслировать все мои сообщения. Затем, когда мой бот опубликовал c, у некоторых участников не было этого канала на своем сервере, что привело к тому, что мой бот отображал TypeError при выполнении моей функции тестирования / ретрансляции.

TypeError: Cannot read property 'send' of undefined

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

Вот мой код функции команды. Я попытался использовать блок try and catch, но он, похоже, тоже не работает.

Подробности:

Ассоциации = требуемый канал для получения сообщений от меня.

test = я сделал команду для ретрансляции сообщений.

if (command === "test") {
  const Detail = args.join(" ");
  try {

    bot.guilds.cache.forEach(guild => {
      guild.channels.cache.find(t => t.name == 'associations').send(Detail)
    });

  }
  catch (err) {
    console.log(err)
  }
}

1 Ответ

0 голосов
/ 16 июня 2020

Как сказал Syntle, вы должны сделать имя канала более инклюзивным, но чтобы ответить на свой вопрос, вы должны просто использовать && или оператор if

if (command === "test") {
    const Detail = args.join(" ");
    bot.guilds.cache.forEach(guild => {
        const channel = guild.channels.cache.find(t => t.name.toLowerCase().startsWith('associations'));
        if (channel) { channel.send(Detail); }
    });
}

Нет необходимости в дорогостоящем блоке try при ошибке обработка так же проста, как оператор if. Также это сработало, причина, по которой он регистрируется, заключается в том, что вы указали его для входа с помощью console.log(err)

...