如何在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
相关产品推荐
相关产品推荐

