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

如何在Discord JS中通过ID查找并打开已关闭的线程?

问题分析与解决

核心原因

Discord 的 client.channels.cache 仅存储当前活跃的频道/线程:

  • 若为临时线程:手动关闭后会进入归档状态,一段时间后会被 Discord 自动删除,此时无法再通过 ID 获取
  • 若为永久线程:手动关闭后会进入归档状态但不会被删除,但默认不会保留在本地缓存中,因此 cache.get 会返回 undefined

解决方法

不要依赖本地缓存获取线程,改用 client.channels.fetch() 方法主动从 Discord API 拉取数据——该方法可以获取到归档状态的永久线程(前提是机器人有权限访问线程所属的父频道)。

修改后的代码示例:

try {
  const channel = await client.channels.fetch(channelID);
  if (channel) {    
    const membersList = await channel.members.fetch()
    if (!membersList.has(newMember.id)) {
      // 线程处于归档状态时,需先重新开启才能发送消息
      if (channel.archived) {
        await channel.setArchived(false);
      }
      channel.send(`${newMember.user} adding you here :3`);
    } else {
      console.log('User already in the threadList!')
    }             
  }
} catch (error) {
  console.error('无法获取线程:', error);
  // 可在此处理线程不存在、无权限访问等异常情况
}

额外说明

  • 临时线程归档后会被自动删除,无法找回,若需长期保留线程建议创建永久线程
  • 调用 channel.setArchived(false) 需要机器人拥有「管理线程」的权限
  • fetch 是异步操作,必须用 await 包裹,且需放在 async 函数中执行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 10:32:13