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

discord.js v14中member.timeout()不是函数问题求助

排查member.timeout() is not a function错误及修复方案

错误原因

  • 你将messageDelete.author.id赋值给member变量,这个值是字符串类型的用户ID,而timeout()是Discord.js中GuildMember(服务器成员)对象的专属方法,字符串不存在该方法,因此触发报错。
  • 补充:messageDelete.author是User(全局用户)对象,同样没有timeout()方法,只有绑定到服务器的GuildMember实例才能调用禁言相关接口。

解决方法

  1. 获取正确的GuildMember实例:直接从消息对象的member属性获取,该属性就是当前消息发送者对应的服务器成员对象。
  2. 处理异步操作:timeout()是异步方法,建议用async/await或.then()处理,同时增加错误捕获逻辑。
  3. 增加边界判断:提前判断消息是否来自服务器(排除DM场景),并检查成员对象是否存在,避免空值报错。

修正后的代码

client.on("messageDelete", async (messageDelete) => {
  // 跳过DM消息,仅处理服务器内的消息删除
  if (!messageDelete.guild) return;

  try {
    // 获取日志频道并发送通知
    const logChannel = await client.channels.fetch('1178750152991838209');
    await logChannel.send(`The message : "${messageDelete.content}" by ${messageDelete.author} was deleted. Their ID is ${messageDelete.author.id}. And they are muted for 5 minutes if this is repeated 5 times more ban him!`);

    // 获取服务器成员对象
    const targetMember = messageDelete.member;
    if (!targetMember) {
      console.log("无法获取该用户的服务器成员信息");
      return;
    }

    // 执行5分钟禁言,可添加禁言原因参数
    await targetMember.timeout(60 * 5 * 1000, "删除不当言论触发自动禁言");
    console.log(`已成功禁言用户 ${targetMember.user.tag} 5分钟`);
  } catch (err) {
    console.error("自动禁言操作失败:", err);
  }
});

额外注意事项

  • 确保机器人在目标服务器拥有超时成员的权限(需在服务器角色设置中开启对应权限)。
  • 若你的Discord.js版本较低,timeout()方法可能不存在,建议升级到v14及以上版本(该方法在v14中正式引入)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 00:52:45