自动更新嵌入(discord.js)

自动更新嵌入(discord.js),discord.js,Discord.js,我正在发出一个discord bot命令,作为一种排队系统 发布公告 公告中有一个字段,用于获取执行命令并赋予其角色的人员列表 该角色允许他们访问语音频道和文本频道,但如果他们在特定时间(准确地说是5分钟)后离开语音频道,则该角色将被剥夺 我只是想知道这些是否可行: 我让机器人发送一条嵌入消息,该消息包含一个字段。在该字段中,我可以让机器人自动使用具有特定角色的人员的用户名更新该字段吗 该角色将被赋予一个任何用户都可以执行的命令,并且该命令只能在发出嵌入时使用 我只希望在特定频道中更新最新的嵌入

我正在发出一个discord bot命令,作为一种排队系统

  • 发布公告
  • 公告中有一个字段,用于获取执行命令并赋予其角色的人员列表
  • 该角色允许他们访问语音频道和文本频道,但如果他们在特定时间(准确地说是5分钟)后离开语音频道,则该角色将被剥夺
  • 我只是想知道这些是否可行:

    我让机器人发送一条嵌入消息,该消息包含一个字段。在该字段中,我可以让机器人自动使用具有特定角色的人员的用户名更新该字段吗

    该角色将被赋予一个任何用户都可以执行的命令,并且该命令只能在发出嵌入时使用

    我只希望在特定频道中更新最新的嵌入

    什么可以做,什么不能做。
    Discord.js版本12

    我相信我已经做到了。我会给你密码,然后告诉你所有东西在哪里

    require('dotenv').config();
    
    const Discord = require('discord.js');
    const client = new Discord.Client();
    
    const fs = require("fs");
    client.saves = require("./minutesLogs.json");
    
    var embed;
    var role;
    var member;
    var myMessage;
    var canBecomeHejjo = false;
    
    function updateEmbed() {
        var channel = client.guilds.cache.get("753227876207165570").channels.cache.get("753227876207165573");
        var withRole = channel.guild.roles.cache.get("753237265454465154").members.map(m => m.user.tag);
        if (withRole[0] !== undefined) {
            embed = new Discord.MessageEmbed()
                .setColor('#8547cc')
                .setTitle("People who have role")
                .setAuthor("A bot")
                .addField('List', withRole, true)
                .setTimestamp()
                .setFooter("The members with this role");
        } else {
            embed = new Discord.MessageEmbed()
                .setColor('#8547cc')
                .setTitle("People who have role")
                .setAuthor("A bot")
                .addField('List', 'No one with role', true)
                .setTimestamp()
                .setFooter("The members with this role");
        }
    
        myMessage.edit(embed);
    }
    
    setInterval(updateEmbed, 4000);
    
    client.on('ready', () => {
        console.log(`Logged in as ${client.user.tag}!`);
    
        var channel = client.guilds.cache.get("753227876207165570").channels.cache.get("753227876207165573");
    
        var withRole = channel.guild.roles.cache.get("753237265454465154").members.map(m => m.user.tag);
    
        console.log(withRole);
    
        if (withRole[0] !== undefined) {
            embed = new Discord.MessageEmbed()
                .setColor('#8547cc')
                .setTitle("People who have role")
                .setAuthor("A bot")
                .addField('List', withRole, true)
                .setTimestamp()
                .setFooter("The members with this role");
        } else {
            embed = new Discord.MessageEmbed()
                .setColor('#8547cc')
                .setTitle("People who have role")
                .setAuthor("A bot")
                .addField('List', 'No one with role', true)
                .setTimestamp()
                .setFooter("The members with this role");
        }
    
    
        channel.send(embed).then(message => {
            myMessage = message;
        });
        console.log(myMessage);
        canBecomeHejjo = true;
    
        setTimeout(() => {
            canBecomeHejjo = false;
        }, 10000);
    });
    
    
    client.on('voiceStateUpdate', (oldMember, newMember) => {
        console.log(oldMember.channelID);
        if (oldMember.channelID === undefined) {
            console.log("undefined");
            return;
        }
        const oldUserChannel = oldMember.channelID;
        var memberToChange = client.guilds.cache.get("753227876207165570").members.cache.get(oldMember.id);
    
        if (oldUserChannel === '760146985147433040') {
            var fiveMinutesHappened = client.saves[oldMember.id].fiveminutesPassed;
            if (fiveMinutesHappened) {
                memberToChange.roles.remove(role);
            }
        }
    });
    
    client.on('message', msg => {
        console.log(canBecomeHejjo);
        if (msg.content === '!become role' && canBecomeHejjo === true) {
            console.log("in");
            member = msg.guild.members.cache.get(msg.member.id);
            client.saves[member.id] = {
                fiveminutesPassed: false
            }
    
            fs.writeFile("./minutesLogs.json", JSON.stringify(client.saves, null, 4), err => {
                if (err) throw err;
            });
    
            channel = msg.channel;
            channel.send("ok");
            role = msg.guild.roles.cache.get("753237265454465154");
            msg.member.roles.add(role);
            setTimeout(() => {
                client.saves[member.id] = {
                    fiveminutesPassed: true
                }
    
                fs.writeFile("./minutesLogs.json", JSON.stringify(client.saves, null, 4), err => {
                    if (err) throw err;
                });
    
                console.log("time passed");
            }, 1000 * 10);
            channel.send("done");
        }
    });
    
    client.login(process.env.DISCORD_TOKEN);
    
    下面是正在发生的事情:

    首先,我们定义一个函数,它定义了一个通道和一个角色的人员列表。 然后,我们根据稍后定义的消息编辑嵌入。 我们还声明将每隔4秒重复一次
    updateEmbed

    部分与
    updateEmbed
    函数相同,末尾有一些额外的位。 这些额外的位做:1。允许人们成为HeJjo和2。将其设置为10秒后,人们不能再改变他们的角色。(注:这里的代码是命令中允许人们更改角色的代码)

    下一部分在有人进入或离开语音频道时触发。 它检查是否有人离开,如果没有,则返回。如果是,那么我们检查它是否是我们角色的成员限制的语音通道。如果是这样,我们确定五分钟是否已经过去。如果有,我们将删除HeJjo角色

    下一段代码是当有人发送消息时。如果消息是
    ,它只运行内部代码!成为角色“
    ,使用此命令为时不晚。内部代码的作用是:

    它在Json中写入五分钟还没有过去,并保存它。然后,它给该成员角色,然后等待五分钟,然后再写入五分钟过去的文件


    希望这有帮助 我相信我已经做到了。我会给你密码,然后告诉你所有东西在哪里

    require('dotenv').config();
    
    const Discord = require('discord.js');
    const client = new Discord.Client();
    
    const fs = require("fs");
    client.saves = require("./minutesLogs.json");
    
    var embed;
    var role;
    var member;
    var myMessage;
    var canBecomeHejjo = false;
    
    function updateEmbed() {
        var channel = client.guilds.cache.get("753227876207165570").channels.cache.get("753227876207165573");
        var withRole = channel.guild.roles.cache.get("753237265454465154").members.map(m => m.user.tag);
        if (withRole[0] !== undefined) {
            embed = new Discord.MessageEmbed()
                .setColor('#8547cc')
                .setTitle("People who have role")
                .setAuthor("A bot")
                .addField('List', withRole, true)
                .setTimestamp()
                .setFooter("The members with this role");
        } else {
            embed = new Discord.MessageEmbed()
                .setColor('#8547cc')
                .setTitle("People who have role")
                .setAuthor("A bot")
                .addField('List', 'No one with role', true)
                .setTimestamp()
                .setFooter("The members with this role");
        }
    
        myMessage.edit(embed);
    }
    
    setInterval(updateEmbed, 4000);
    
    client.on('ready', () => {
        console.log(`Logged in as ${client.user.tag}!`);
    
        var channel = client.guilds.cache.get("753227876207165570").channels.cache.get("753227876207165573");
    
        var withRole = channel.guild.roles.cache.get("753237265454465154").members.map(m => m.user.tag);
    
        console.log(withRole);
    
        if (withRole[0] !== undefined) {
            embed = new Discord.MessageEmbed()
                .setColor('#8547cc')
                .setTitle("People who have role")
                .setAuthor("A bot")
                .addField('List', withRole, true)
                .setTimestamp()
                .setFooter("The members with this role");
        } else {
            embed = new Discord.MessageEmbed()
                .setColor('#8547cc')
                .setTitle("People who have role")
                .setAuthor("A bot")
                .addField('List', 'No one with role', true)
                .setTimestamp()
                .setFooter("The members with this role");
        }
    
    
        channel.send(embed).then(message => {
            myMessage = message;
        });
        console.log(myMessage);
        canBecomeHejjo = true;
    
        setTimeout(() => {
            canBecomeHejjo = false;
        }, 10000);
    });
    
    
    client.on('voiceStateUpdate', (oldMember, newMember) => {
        console.log(oldMember.channelID);
        if (oldMember.channelID === undefined) {
            console.log("undefined");
            return;
        }
        const oldUserChannel = oldMember.channelID;
        var memberToChange = client.guilds.cache.get("753227876207165570").members.cache.get(oldMember.id);
    
        if (oldUserChannel === '760146985147433040') {
            var fiveMinutesHappened = client.saves[oldMember.id].fiveminutesPassed;
            if (fiveMinutesHappened) {
                memberToChange.roles.remove(role);
            }
        }
    });
    
    client.on('message', msg => {
        console.log(canBecomeHejjo);
        if (msg.content === '!become role' && canBecomeHejjo === true) {
            console.log("in");
            member = msg.guild.members.cache.get(msg.member.id);
            client.saves[member.id] = {
                fiveminutesPassed: false
            }
    
            fs.writeFile("./minutesLogs.json", JSON.stringify(client.saves, null, 4), err => {
                if (err) throw err;
            });
    
            channel = msg.channel;
            channel.send("ok");
            role = msg.guild.roles.cache.get("753237265454465154");
            msg.member.roles.add(role);
            setTimeout(() => {
                client.saves[member.id] = {
                    fiveminutesPassed: true
                }
    
                fs.writeFile("./minutesLogs.json", JSON.stringify(client.saves, null, 4), err => {
                    if (err) throw err;
                });
    
                console.log("time passed");
            }, 1000 * 10);
            channel.send("done");
        }
    });
    
    client.login(process.env.DISCORD_TOKEN);
    
    下面是正在发生的事情:

    首先,我们定义一个函数,它定义了一个通道和一个角色的人员列表。 然后,我们根据稍后定义的消息编辑嵌入。 我们还声明将每隔4秒重复一次
    updateEmbed

    部分与
    updateEmbed
    函数相同,末尾有一些额外的位。 这些额外的位做:1。允许人们成为HeJjo和2。将其设置为10秒后,人们不能再改变他们的角色。(注:这里的代码是命令中允许人们更改角色的代码)

    下一部分在有人进入或离开语音频道时触发。 它检查是否有人离开,如果没有,则返回。如果是,那么我们检查它是否是我们角色的成员限制的语音通道。如果是这样,我们确定五分钟是否已经过去。如果有,我们将删除HeJjo角色

    下一段代码是当有人发送消息时。如果消息是
    ,它只运行内部代码!成为角色“
    ,使用此命令为时不晚。内部代码的作用是:

    它在Json中写入五分钟还没有过去,并保存它。然后,它给该成员角色,然后等待五分钟,然后再写入五分钟过去的文件


    希望这有帮助!!如果可能的话,请你给我一个如何完成的快速总结。你的问题需要更加集中。我现在更新了它,我想不出其他方式来解释我想要什么。如果可能的话,请你给我一个如何完成的快速总结。你的问题需要更加集中。我现在更新了它,我想不出别的办法来解释我想要什么。