Мне нужно получить идентификатор созданного канала, но я не знаю, как это сделать? (discord.js)

#javascript #discord.js

Вопрос:

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

 client.on('message', message  =>{
    if(message.content === (prefix   'report')) {
            message.guild.channels.create (`Репорт (${message.author.tag})`, {
                type: 'voice',
                permissionOverwrites: [
                {
                    id: '861645891848110100',
                    deny: 'VIEW_CHANNEL',
                },
                {
                    id: message.author.id,
                    allow: ['VIEW_CHANNEL', 'STREAM', 'SPEAK', 'CONNECT','USE_VAD'],
                    deny: ['PRIORITY_SPEAKER', 'MUTE_MEMBERS', 'DEAFEN_MEMBERS', 'MOVE_MEMBERS', 'CREATE_INSTANT_INVITE', 'MANAGE_ROLES', 'MANAGE_CHANNELS'],
                },
                {
                    id: moderRole,
                    allow: ['VIEW_CHANNEL', 'STREAM', 'SPEAK', 'CONNECT', 'USE_VAD', 'PRIORITY_SPEAKER', 'MUTE_MEMBERS', 'DEAFEN_MEMBERS', 'MOVE_MEMBERS', 'MANAGE_ROLES', 'CREATE_INSTANT_INVITE'],
                    deny: ['MANAGE_CHANNELS'],
                },
            ],
                reason: `${message.author.tag} sended report`,
        })

        const msg1 = new Discord.MessageEmbed()
        .setTitle(`Обращение успешно отправленно!`)
        .setDescription(`<@${message.author.id}>, просим вас зайти в канал <#

gt; и ждать пока вас переместят для разбирательств.`)

message.reply(msg1)
message.delete()
}
})

Новые изменения

Ладно, я немного изменил свой код, теперь он выглядит так:

 client.on('message', async message => {
    if(message.content === (prefix   'report')) {
            const channel = await message.guild.channels.create(
            message.guild.channels.create (`Репорт (${message.author.tag})`, {
                type: 'voice',
                permissionOverwrites: [
                {
                    id: '861645891848110100',
                    deny: 'VIEW_CHANNEL',
                },
                {
                    id: message.author.id,
                    allow: ['VIEW_CHANNEL', 'STREAM', 'SPEAK', 'CONNECT','USE_VAD'],
                    deny: ['PRIORITY_SPEAKER', 'MUTE_MEMBERS', 'DEAFEN_MEMBERS', 'MOVE_MEMBERS', 'CREATE_INSTANT_INVITE', 'MANAGE_ROLES', 'MANAGE_CHANNELS'],
                },
                {
                    id: moderRole,
                    allow: ['VIEW_CHANNEL', 'STREAM', 'SPEAK', 'CONNECT', 'USE_VAD', 'PRIORITY_SPEAKER', 'MUTE_MEMBERS', 'DEAFEN_MEMBERS', 'MOVE_MEMBERS', 'MANAGE_ROLES', 'CREATE_INSTANT_INVITE'],
                    deny: ['MANAGE_CHANNELS'],
                },
            ],
                reason: `${message.author.tag} sended report`,
        }))
        const msg1 = new Discord.MessageEmbed()
        .setTitle(`Обращение успешно отправленно!`)
        .setDescription(`<@${message.author.id}>, просим вас зайти в канал <#${channel.id}> и ждать пока вас переместят для разбирательств.`)

        message.reply(msg1)
        message.delete()
    }
})
 

Но после тестирования я получаю следующую ошибку:

 (node:1344) UnhandledPromiseRejectionWarning: DiscordAPIError: Invalid Form Body
name: Could not interpret "{}" as string.
    at RequestHandler.execute (a:Wiki Cheatsdiscord botnode_modulesdiscord.jssrcrestRequestHandler.js:154:13)
    at processTicksAndRejections (internal/process/task_queues.js:93:5)
    at async RequestHandler.push (a:Wiki Cheatsdiscord botnode_modulesdiscord.jssrcrestRequestHandler.js:39:14)
    at async GuildChannelManager.create (a:Wiki Cheatsdiscord botnode_modulesdiscord.jssrcmanagersGuildChannelManager.js:112:18)
    at async Client.<anonymous> (a:Wiki Cheatsdiscord botindex.js:35:29)
(Use `node --trace-warnings ...` to show where the warning was created)
(node:1344) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag `--unhandled-rejections=strict` (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 1)
(node:1344) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
 

Ответ №1:

Вы захотите сохранить вновь созданный канал в качестве переменной, на которую вы сможете ссылаться позже.

 const channel = await message.guild.channels.create(...)
 

Затем вы можете использовать channel.id в своем внедрении или другом сообщении.

P.S. вам нужно изменить client.on('message', message => {...}) client.on('message', async message => {...}) , чтобы использовать await , в противном случае вам придется использовать .then() вложенные обратные вызовы.