如何在discord.js v14中获取创建的工单频道ID
解决Discord.js v14创建工单频道后无法获取ID并发送消息的问题
问题根源是interaction.guild.channels.create是异步操作,你没有用await等待它执行完成,导致ticketchannel只是一个Promise对象,而非实际的频道实例,因此无法获取ID和发送消息。
修改后的完整代码如下:
const { EmbedBuilder, PermissionsBitField } = require("discord.js") module.exports = { data: { name: 'panelbutton' }, async execute(interaction, client) { client.config = require('../../config'); // 关键:给create方法添加await,等待频道创建完成 const ticketchannel = await interaction.guild.channels.create({ name: `${interaction.user.username}`, permissionOverwrites: [ { id: interaction.guild.id, deny: [PermissionsBitField.Flags.ViewChannel] }, { id: interaction.user.id, allow: [PermissionsBitField.Flags.ViewChannel, PermissionsBitField.Flags.SendMessages], deny: [PermissionsBitField.Flags.UseApplicationCommands] } ] }); // 现在可以正常获取频道ID并发送消息 await ticketchannel.send({ content: `${interaction.user},您的工单频道已创建,请在这里描述您的问题。` }); const wait = new EmbedBuilder() .setTitle('Created! :white_check_mark:') .setDescription(`您的频道已创建:<#${ticketchannel.id}>`) .setTimestamp(Date.now()) .setFooter({ text: client.config.bot.footer }); await interaction.reply({ embeds: [wait], ephemeral: true }); } }
核心修改说明:
- 给
channels.create添加await关键字,确保频道完全创建后再执行后续逻辑 - 新增向新频道发送初始化消息的代码,同时在回复Embed中通过
<#${ticketchannel.id}>实现频道提及,方便用户快速跳转
内容的提问来源于stack exchange,提问作者nuckelan
相关产品推荐
相关产品推荐

