Бот Discord не может получить канал по имени

Я делал диск-бот и хотел, чтобы он отправлял сообщение на определенный канал "Добро пожаловать". К сожалению, я не смог этого сделать. Я попробовал это.

const welcomeChannel = bot.channels.get("name", "welcome")
welcomeChannel.sendMessage("Welcome\n"+member.user.username);

Однако в этом "welcomeChannel не определено".

Редактировать:

Я пытался с помощью

const welcomeChannel = bot.channels.get("id", "18NUMBERIDHERE")
welcomeChannel.sendMessage("Welcome\n"+member.user.username);

но это все еще не определено, как ни странно

2 ответа

Решение

Вы должны использовать идентификатор канала вместо его имени.

Как получить идентификатор канала канала:

  1. Откройте настройки Discord

  2. Идти к Appearance

  3. Поставить галочку Developer Mode (И закройте настройки Discord)

  4. Щелкните правой кнопкой мыши на желаемом канале

  5. Теперь есть вариант Copy ID скопировать идентификатор канала

Также ознакомьтесь с документацией на https://discord.js.org/ для коллекций (каналов)


Кроме того, ваш подход не будет работать, потому что .get хочет идентификатор канала (см. связанную документацию выше). Если вы ДЕЙСТВИТЕЛЬНО хотите получить канал по его имени, используйте .find вместо этого для этого.
Это, однако, очень плохая идея, если ваш бот работает на нескольких серверах, поскольку имена каналов теперь могут встречаться несколько раз.

Вы также можете использовать

bot.channels.find("name","welcome").send("Welcome!")

Я много пробовал с одной и той же ошибкой, и вот как я ее исправил. Я использовал client в качестве клиента ().

client.channels.cache.get("18NUMBERIDHERE").send("Welcome!");

Ваша ошибка может возникнуть из-за того, что вы используете bot.channels.get(), что не лучшая идея, потому что discord.js не очень дружелюбен, когда дело доходит до использования .send() по нескольким позициям.

Вместо этого попробуйте использовать member.guild.channels.find("name", "channel").send();, если возможно. Если это вclient.on("message"), затем просто используйте message.member.channels.find("name", "channel").send();

Примечание: моя память перепуталась, поэтому, если это не сработает, попробуйте .get() вместо того find.

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

const test = bot.channels.cache.get("738498321907318804");

bot.on('message', function(message) {

  if(message.send.test.content === "test"){
  message.react('')

}});
Другие вопросы по тегам