Discord.js V13转发DM消息时发送贴纸报Cannot use this sticker错误问询
问题解决方法
报错根因
你遇到的DiscordAPIError: Cannot use this sticker错误由两个Discord API的规则限制导致:
- 单条携带贴纸的消息,不允许同时包含Embed、附件资源,仅可搭配普通文本内容
- 私信通道对贴纸可用性校验更严格,直接传递完整Sticker对象容易因为属性缺失触发校验失败
修正方案
- 拆分消息发送逻辑:贴纸和Embed内容分两条消息发送,不要放在同一个消息payload中
- 传递贴纸时仅传入贴纸的Snowflake ID,不需要传递完整Sticker对象
- 贴纸数组严格只保留1个元素,Discord目前仅支持单条消息携带最多1个贴纸
参考代码
let userMessage = new discord.MessageEmbed().setDescription(message.content || "") let messageAttachment = message.attachments.size > 0 ? message.attachments.first().url : null userMessage.setImage(messageAttachment) client.users.fetch(config.ids.me, false).then(async (user) => { // 先发送带Embed的用户消息 await user.send({ content: `User <@${message.author.id}> said:`, embeds: [userMessage] }) // 存在贴纸则单独发送 if (message.stickers?.size > 0) { await user.send({ stickers: [message.stickers.first().id] }) } })
补充说明
- 你已经开启的
GUILD_EMOJIS_AND_STICKERS权限配置正确,不需要额外调整 - 如果需要转发自定义服务器贴纸,需要保证机器人已经加入该贴纸所属的服务器,否则依旧会触发权限类报错
内容的提问来源于stack exchange,提问作者Christoph Blüm
相关产品推荐
相关产品推荐

