You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Discord.js编写抽奖功能触发DiscordAPIError: Invalid Form Body错误如何修复

核心问题说明

  • 你触发标题超长的根本原因是代码写错了:message.guild.members.cache.random是方法,必须加()才会返回随机用户实例,不加括号直接拼接会把函数本身的源码转成字符串,长度远超256字符,直接触发Discord接口限制
  • 所有discord.js的消息发送、编辑操作都是异步返回Promise的,你没有加错误捕获逻辑,一旦调用失败就会抛出未处理的Promise拒绝警告
  • Discord官方明确限制Embed的title字段最大长度为256字符,即使修了random调用问题,也需要对标题内容做截断避免极端情况触发限制

具体修复操作

  1. 修正随机用户调用逻辑,只取用户名字段拼接,避免不必要的长内容
  2. 对所有Embed的title、description字段做长度截断,超出限制的部分用...省略
  3. 给所有异步操作加catch捕获异常,兜底处理报错
  4. 补充参数校验逻辑,避免用户不传奖品、时间参数的情况

修复后完整代码

client.on('message', message => {
  if (message.content.startsWith('!giveaway')) {
    const { MessageEmbed } = require('discord.js')
    const args = message.content.split(' ').slice(1)
    // 补充参数校验
    if (args.length < 2) return message.channel.send('指令格式错误,请输入:!giveaway 抽奖时长(秒) 奖品名称').catch(e => console.log(e))
    let time = args[0]
    if (isNaN(time)) return message.channel.send('抽奖时长必须是数字').catch(e => console.log(e))
    let prize = args.slice(1).join(" ")
    // 对奖品做截断,description最大4096字符
    if (prize.length > 4000) prize = prize.slice(0, 4000) + '...'

    const embed1 = new MessageEmbed()
      .setTitle('Giveaway started!')
      .setDescription(prize)
      .setFooter(`Giveaway will end in ${time} seconds.`)

    // 取随机用户的用户名,拼接后截断保证title不超256
    const winner = message.guild.members.cache.random().user.username
    let endTitle = `Giveaway ended, winner: ${winner}`
    if (endTitle.length > 250) endTitle = endTitle.slice(0, 250) + '...'
    const embed2 = new MessageEmbed()
      .setTitle(endTitle)
      .setDescription(prize)
      .setFooter('Congrats!')

    // 加catch捕获异常
    message.channel.send({ embeds: [embed1] }).then(msg => {
      setTimeout(() => {
        msg.edit({ embeds: [embed2] }).catch(e => console.log('编辑抽奖消息失败:', e))
      }, time * 1000)
    }).catch(e => console.log('发送抽奖消息失败:', e))
  }
})

注:如果你使用的是discord.js v13及以上版本,发送Embed必须用{embeds: [embed实例]}的格式传参,不能直接传embed对象

内容的提问来源于stack exchange,提问作者itsmeares

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 02:45:01