DiscordAPIError: Неизвестный канал при попытке отправить приглашение при создании гильдии - PullRequest
2 голосов
/ 04 августа 2020

Я использую v12. Я пытаюсь заставить своего бота отправить мне приглашение после того, как он создаст гильдию с таким кодом:

client.on('message', message => {  
    if(message.content.startsWith('!guild')) {  
    client.guilds.create('Bot Server', 'london')  
    .then(guild => {guild.channels.cache.first().createInvite()  
    .then(invite => client.users.cache.get('<myID>').send(invite.url))  
    .catch(error => console.log(error))  
    })  
    }})

Он успешно создает сервер, но не может отправить мне приглашение:

DiscordAPIError: Unknown Channel
at RequestHandler.execute (c:\Users\User\Desktop\Bot Server\node_modules\discord.js\src\rest\RequestHandler.js:170:25)
    at processTicksAndRejections (internal/process/task_queues.js:97:5) {name: 'DiscordAPIError',
message: 'Unknown Channel', method: 'post', path: '/channels/740129814459187242/invites', code: 10003}

Я просто хочу увидеть, что бот может владеть сервером в разногласиях, но не может получить сообщение приглашения от бота. На данный момент я в тупике. Было показано, что это возможно в документации от discord. js и discord.com . Как мне go отправить приглашение самому себе или отправить приглашение на канал, в котором я использовал команду для создания гильдии?

1 Ответ

2 голосов
/ 04 августа 2020

Когда создается Guild, независимо от того, был он создан ботом или нет, он будет иметь 2 категории: «Текстовые каналы» и «Голосовые каналы», одна из которых содержит TextChannel, а другая - * 1003. *.

Категории считаются как каналы. Guild.channels.cache.first() всегда будет Category, и вы не можете создавать приглашения по категориям.

Чтобы решить эту проблему, вам нужно отфильтровать все каналы в Guild и выбрать первый Channel в Collection.

client.guilds.create("MyGuild").then(guild => {
    // Filtering all the channels.
    const channels = guild.channels.cache.filter(channel => channel.type == "text");
    // --> channels is a collection.

    channels.first().createInvite().then(invite => {
        message.channel.send(`Here is your invite: ${invite.url}`);
    })
})
...