Discord机器人受邀入服后私信服主触发TypeError报错如何解决
报错原因
guildCreate事件回调返回的Guild(服务器)对象不存在author属性,访问不存在的属性会得到undefined,对undefined调用send()方法就会触发你看到的类型错误。
Discord服务器结构里没有所谓的author字段,服务器的创建者/所有者需要通过专属属性和方法获取。
正确实现代码
client.on('guildCreate', async guild => { try { // 异步拉取当前服务器的所有者用户对象 const guildOwner = await guild.fetchOwner() // 向所有者发送私信 await guildOwner.send('Hello') } catch (error) { // 捕获异常避免机器人崩溃:常见原因是用户关闭了陌生人私信权限、所有者账号不存在等 console.error(`向服务器[${guild.name}]所有者发信失败:`, error.message) } })
关键说明
- 不要直接使用
guild.owner获取所有者:这个字段仅读取本地缓存,存在缓存缺失返回null的风险,必须调用fetchOwner()方法从Discord接口拉取准确的所有者信息。 - 发私信逻辑必须加
try/catch异常捕获:大量Discord用户默认关闭非好友的私信权限,不做错误处理的话遇到这类场景机器人依然会崩溃。 - 该逻辑不需要额外申请特殊机器人权限,只要机器人成功加入服务器,默认带有的查看成员权限就足够支撑拉取所有者、发私信的操作。
内容的提问来源于stack exchange,提问作者patelheet30
相关产品推荐
相关产品推荐

