#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()
вложенные обратные вызовы.