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 INTENTSERVER MEMBERS INTENT

PRESENCE INTENT:如果您的机器人跟踪在线状态数据,您可能需要在线状态意图来接收在线状态事件数据。

SERVER MEMBERS INTENT:如果您的机器人跟踪服务器成员或下载整个成员列表,您可能需要服务器成员意图来接收成员事件和成员列表。

可以在 discord.com/developers/applications/ -> Settings/Bot 上启用特权网关意图。

在您的情况下,您将需要提供对 guildDeleteguildCreate 的访问权限的意图 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' 没有检测到网络中断

markdown doh-client on mac #dns #doh

Configure Several VNC Client on redhat 5.5