client.on("guildCreate") 在 504 网关超时上运行
Posted
技术标签:
【中文标题】client.on("guildCreate") 在 504 网关超时上运行【英文标题】:client.on("guildCreate") running on 504 Gateway Time-out 【发布时间】:2021-05-23 22:23:01 【问题描述】:我在 Heroku 上运行了一个 discord.js 机器人,当它从公会中添加或删除时,它会向我服务器中的特定频道发送一条消息。这在一周前运行良好,现在当我更新它(通过 GitHub 将更新推送到 Heroku)时,它会发送消息说它已从公会中删除。有一个错误:
UnhandledPromiseRejectionWarning: Error: 504 Gateway Time-out
这是代码:
client.on('guildCreate', guild =>
try
//Check for system channel
if(!guild.systemChannel) return false;
//Sends message to system channel
guild.systemChannel.send('Thank you for adding me to your server. Run ``-setup`` to begin setup.')
//My server and channel
const server = client.guilds.cache.get('guildID')
const channel = server.channels.cache.get('channelID')
//The embed which sends to channel
const joinEmbed = new Discord.MessageEmbed()
.setTitle("Joined")
.setDescription("Optic was added to a server")
.addFields(
name: 'Name', value: guild.name, inline: false ,
name: 'GuildId', value: guild.id,inline: false ,
name: 'Guild OwnerId', value: guild.ownerID, inline: false ,
name: 'Member Count', value: guild.memberCount, inline: false ,
name: 'Total Guilds', value: client.guilds.cache.size, inline: true ,
)
channel.send(joinEmbed)
catch(error)
console.log("There was an error sending join embed to channel")
);
client.on('guildDelete', guild =>
try
//My server and channel:
const server = client.guilds.cache.get('guildID')
const channel = server.channels.cache.get('channelID')
//The embed which sends to channel
const leaveEmbed = new Discord.MessageEmbed()
.setTitle("Removed")
.setDescription("Optic was removed from a server")
.addFields(
name: 'Name', value: guild.name, inline: false ,
name: 'GuildId', value: guild.id,inline: false ,
name: 'Guild OwnerId', value: guild.ownerID, inline: false ,
name: 'Member Count', value: guild.memberCount, inline: false ,
name: 'Total Guilds', value: client.guilds.cache.size, inline: true ,
)
channel.send(leaveEmbed)
catch(error)
console.log("There was an error sending leave embed to channel.")
);
当它更新时,正如我之前所说,它会发送带有以下显示为未定义的休假嵌入:
姓名 公会所有者 ID 会员数对于正在发生的事情,我们将不胜感激。谢谢:)
更新 (22/02/21): 这个问题仍然存在,如果它自己关闭并打开几秒钟,它仍然会发送嵌入。 另一个更新(23/02/21): 出现了错误,就是这样:
UnhandledPromiseRejectionWarning: Error: 504 Gateway Time-out
如果您需要整个错误,请发表评论,因为我不确定其余部分是否有帮助
赏金原因: 吸引注意 这个问题没有得到足够的重视。
我声明客户端的代码:
const Discord = require('discord.js');
const client = new Discord.Client();
【问题讨论】:
你能显示完整的错误吗? 我不知道为什么,但它有时只会出现这个错误。但是,离开嵌入仍然会自行发送。 你能用你声明客户端的代码更新你的问题吗 【参考方案1】:guildDelete
不保证有完整的数据,只有缓存了才能拿到,有时数据被缓存了执行0错误,有的时候缓存不全,所以你得到那个错误。
【讨论】:
那么我应该忽略它,还是有办法完全防止这种情况发生? 这如何回答关于UnhandledPromiseRejectionWarning: Error: 504 Gateway Time-out
的问题?【参考方案2】:
您需要启用意图,您可以阅读更多相关信息here,以及意图列表here,并且有两个特权网关意图PRESENCE INTENT
和SERVER MEMBERS INTENT
PRESENCE INTENT
:如果您的机器人跟踪在线状态数据,您可能需要在线状态意图来接收在线状态事件数据。
SERVER MEMBERS INTENT
:如果您的机器人跟踪服务器成员或下载整个成员列表,您可能需要服务器成员意图来接收成员事件和成员列表。
可以在 discord.com/developers/applications/ -> Settings/Bot 上启用特权网关意图。
在您的情况下,您将需要提供对 guildDelete
和 guildCreate
的访问权限的意图 GUILDS:
const Client = require('discord.js');
const client = new Client( ws: intents: ['GUILDS'] );
【讨论】:
我已经编辑了我如何声明客户的问题。我还尝试了您所说的方式并使用了确切的代码。没有任何改变,我现在也在开发者门户中启用了两个网关意图。当我更新它时,它仍然发送休假嵌入,尝试了两次并做了同样的事情。 添加意图后,您仍然无法定义诸如:公会名称、成员数量等值 是的,它发送的内容与以前相同(已编辑到问题中) pastebin.com/a5pTAXqe api 密钥和频道 ID 之类的所有内容都已替换为“已删除” 编辑:const client = new Discord.Client( ws: intents: new Discord.Intents(Discord.Intents.ALL) );
尝试使用所有意图以上是关于client.on("guildCreate") 在 504 网关超时上运行的主要内容,如果未能解决你的问题,请参考以下文章
(节点:44564)UnhandledPromiseRejectionWarning:TypeError:client.on 不是函数
启动服务器时如何在 discord.js 中调用 client.on(..) 函数
Discord.JS V13 client.on messagecreate 未触发
pg client.on('error' 没有检测到网络中断