discord.js async函数timeoutUser报错:guildMember.timeout不是函数
解决discord.js中
guildMember.timeout is not a function错误 问题重现
编写了如下依赖discord.js的异步函数:
async function timeoutUser(guildMember, exp, reason) { try { const now = Math.floor(Date.now() / 1000); const timeoutDuration = (exp - now) * 1000; console.log(`Timing out ${guildMember} in ${timeoutDuration} milliseconds for reason: ${reason}`); await guildMember.timeout({timeoutDuration, reason}); console.log(`Successfully timed out ${guildMember} for ${timeoutDuration / 1000} seconds. Reason: ${reason}`); } catch (error) { console.error(`Failed to timeout user with Discord ID ${guildMember}: ${error}`); } }
调用时出现错误:
Error: Failed to remove timeout for user with Discord ID 785346463915311176: TypeError: guildMember.timeout is not a function
解决方法
1. 检查discord.js版本
GuildMember.timeout()方法是discord.js v14及以上版本新增的API,若项目使用v13或更低版本,该方法不存在。
- 查看当前版本:执行
npm list discord.js - 升级到v14+:执行
npm install discord.js@latest - 注意:v14需要启用
GuildMembers和Guilds意图,否则无法正确获取GuildMember实例。
2. 低版本兼容方案(v13及以下)
若无法升级版本,改用对应版本的禁用通讯方法disableCommunicationUntil():
async function timeoutUser(guildMember, exp, reason) { try { const timeoutTimestamp = exp * 1000; // 将秒级时间戳转为毫秒 console.log(`Timing out ${guildMember} until ${new Date(timeoutTimestamp)} for reason: ${reason}`); await guildMember.disableCommunicationUntil(timeoutTimestamp, reason); console.log(`Successfully timed out ${guildMember} until ${new Date(timeoutTimestamp)}. Reason: ${reason}`); } catch (error) { console.error(`Failed to timeout user with Discord ID ${guildMember.id}: ${error}`); } }
3. 验证传入的guildMember类型
确保调用函数时传入的第一个参数是真实的GuildMember实例,而非用户ID字符串或User对象。正确获取示例:
// 通过服务器ID和用户ID获取GuildMember const guild = client.guilds.cache.get('你的服务器ID'); const targetMember = await guild.members.fetch('目标用户ID'); // 调用函数 timeoutUser(targetMember, Math.floor(Date.now()/1000) + 3600, '违规超时');
内容的提问来源于stack exchange,提问作者Ian McClellan
相关产品推荐
相关产品推荐

