【问题标题】:**SOLVED** discord.js guildMemberAdd() not adding correct value to Object**已解决** discord.js guildMemberAdd() 未向对象添加正确的值
【发布时间】:2021-08-02 22:37:51
【问题描述】:

我被要求创建一个 Discord 机器人,显示公会成员用户名列表和他们最后一次在 Discord 中发布的日期,它还应该显示一个单独的成员列表,这些成员根本没有发布任何内容。为了实现这一点,从 Discord API 中提取信息并保存在 JSON 文件中。如果有新成员加入,则消息日期设置为 00/00/0000,因此我可以使用 if 语句将这些成员拉入单独的列表。

bot.on("ready", async () => {
    console.log(`${bot.user.username} is online!`);

    const guild = bot.guilds.cache.get('SERVER ID NUMBER');
        guild.members.fetch().then(member => {
            member.forEach(member => {
                let memberArray = JSON.parse(fs.readFileSync("./messages.json", "utf8"));
                    if(!member.user.bot) {
                        if(!memberArray[member.user.id]) {
                        memberArray[member.user.id] = {name: member.user.username, date: "00/00/0000"}
                        }
                    } 
                        
    fs.writeFileSync("./messages.json", JSON.stringify(memberArray), (err) => {
        if (err) console.log(err)
    })   
            })
        })
});

bot.on("guildMemberAdd", (member) => {

    let memberArray = JSON.parse(fs.readFileSync("./messages.json", "utf8"));

    if(!member.user.bot) {
        if(!memberArray[member.user.id]) {
            memberArray[member.user.id] = {name: member.user.username, date: "00/00/0000"}
            }
        }
                        
    fs.writeFileSync("./messages.json", JSON.stringify(memberArray), (err) => {
        if (err) console.log(err)
    })
});

bot.on("guildMemberRemove", (member) => {
    let memberArray = JSON.parse(fs.readFileSync("./messages.json", "utf8"));

    if(member.user.bot) {
        return;
    } else {
        delete memberArray[member.user.id]
    }
                        
    fs.writeFileSync("./messages.json", JSON.stringify(memberArray), (err) => {
        if (err) console.log(err)
    })
});

bot.on("message", async message => {
    if (message.author.bot) return; 

    const guild = bot.guilds.cache.get('SERVER ID NUMBER')

        guild.members.fetch().then(member => {

            let memberArray = JSON.parse(fs.readFileSync("./messages.json", "utf8"));

                member.forEach(member => {
                    if(member.user.bot) {
                        return;
                    }
                    
                var d = new Date(message.author.lastMessage.createdTimestamp);
                    day = d.getDate();
                    month = d.getMonth() + 1;
                    date = ("0" + d.getDate()).slice(-2) + "/" 
                    + ("0" + (d.getMonth() + 1)).slice(-2) + "/" 
                    + d.getFullYear();
                    if (message.author.username == memberArray[member.user.id].name) {
            memberArray[member.user.id].date = date;
                    }
    })
    fs.writeFile("./messages.json", JSON.stringify(memberArray),(err) => {
    if (err) console.log(err)   
     })
})

    let prefix = botconfig.prefix;
    let messageArray = message.content.split(" ");
    let cmd = messageArray[0].toLowerCase();
    let args = messageArray.slice(1);

    let commandfile = bot.commands.get(cmd.slice(prefix.length));
    if (commandfile) commandfile.run(bot, message, args, tools);
});

bot.login(botconfig.token)

在我的测试服务器中一切正常,但是当我将机器人添加到实时服务器时,任何新成员的日期都设置为他们加入的日期,而不是 00/00/0000。

我已经运行了各种测试,将相同的机器人添加到我的测试服务器中,以防它们引起某种问题,我无法弄清楚为什么它在一台服务器上运行而在另一台服务器上运行。

如果有人对它可能是什么或我可以尝试的任何其他测试有任何想法,我将非常感激。

【问题讨论】:

  • 这段代码运行良好。然而,由于我们没有剩下的代码,我们不能排除另一个函数的间接影响。您是否尝试一一隔离函数以检查是否没有其他任何东西影响您的文件或变量?您是否在每个步骤中检查了文件的内容以查看日期是否更改以及何时更改?
  • @JackRed 经过更多测试后,我意识到如果我使用我的测试服务器 ID 号,它可以正常工作,但是,一旦我将其更改为其他服务器 ID 号,它就会开始添加错误的日期跨度>
  • ` const guild = bot.guilds.cache.get('SERVER ID NUMBER');`

标签: node.js discord discord.js


【解决方案1】:

当有人加入服务器时,会弹出一条系统消息(如果启用):

问题是,在discord.js方面,系统消息的作者是加入的用户。 因此,当用户加入服务器并且您将时间分配给“00/00/0000”时,它会立即被系统消息的日期覆盖。

您实际上可以通过检查消息的类型来忽略这些系统消息。您在这里有不同类型的列表:discord.js.org。普通消息的类型等于DEFAULT,而用户加入时的系统消息类型为GUILD_MEMBER_JOIN


小改进备注:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-02
    • 1970-01-01
    • 2021-10-02
    • 2020-12-24
    • 2019-09-19
    • 2021-01-21
    • 2018-06-28
    • 1970-01-01
    相关资源
    最近更新 更多