discord.js v12指令获取服务器邀请返回[object Promise]报错
问题原因
createInvite()是异步API,调用后默认返回Promise对象,你没有等异步操作执行完成拿到实际的邀请数据,直接把Promise对象拼接成字符串发送,就会显示[object Promise]。另外你直接输出invite对象本身也拿不到链接,需要取对象的url属性才是可用的邀请地址。
修复方案
- 给message事件的回调函数加
async关键字,支持使用await等待异步结果 - 在
createInvite()调用前加await,等邀请创建完成后再执行后续逻辑 - 补充基础的边界判断和错误捕获,避免因为频道不存在、权限不足导致机器人崩溃
修复后完整代码
client.on('message', async message => { if (message.content === prefix + 'invite'){ try { const targetGuild = client.guilds.cache.get('981948182844039198'); if (!targetGuild) return message.channel.send('目标服务器不存在'); // 筛选出机器人有权限创建邀请的文字频道,避免取到无权限频道/语音频道 const validChannel = targetGuild.channels.cache .filter(ch => ch.type === 'text' && ch.permissionsFor(targetGuild.me).has(['CREATE_INSTANT_INVITE', 'VIEW_CHANNEL'])) .first(); if (!validChannel) return message.channel.send('没有可用于创建邀请的频道'); const invite = await validChannel.createInvite({ maxAge: 0, maxUses: 0 }) message.channel.send(`服务器邀请链接:${invite.url}`) } catch (error) { console.error('创建邀请失败:', error); message.channel.send('邀请链接创建失败,请确认机器人拥有创建邀请的权限'); } } })
如果不需要做容错处理,最简修改只需要给回调加async、createInvite前加await,发送时取invite.url即可。
内容的提问来源于stack exchange,提问作者giggleshotter
相关产品推荐
相关产品推荐

