【问题标题】:I'm trying to make a discord bot give roles base on the time since somebody has joined the server我正在尝试让不和谐的机器人根据某人加入服务器后的时间赋予角色
【发布时间】:2021-04-28 07:54:00
【问题描述】:

我对 discord.js 还很陌生,但我正在尝试让机器人根据用户加入后经过的时间赋予角色(机器人的角色高于所需的角色,并且机器人本身具有管理员权限)

client.on("guildMemberAdd", (member) => {
    member.roles.add(801917861110874122);
});

client.on("message", (message) => {
    if(Date.now() - message.member.joinedAt < 1000*60*60*24*1) {
        message.member.roles.add(801917434558808074);
    }
});

基本上,无论是在用户加入时还是在所需时间过去时,机器人都不会给出角色。

【问题讨论】:

    标签: javascript node.js discord.js


    【解决方案1】:

    您需要将角色传递给.add(),这可以通过从缓存中查找ID来完成。

    这是一个例子:

    let role = message.guild.roles.cache.get("801917861110874122");
    member.roles.add(role);
    

    您还可以使用名称而不是 ID 来搜索角色,如下所示:

    let role = message.guild.roles.cache.find(r => r.name == "Role name");
    member.roles.add(role);
    

    编辑:

    要使您的时间功能正常工作,您需要使用message.member.joinedTimestamp 而不是message.member.joinedAt,如下所示:

    client.on("message", (message) => {
        if(Date.now() - message.member.joinedTimestamp < 1000*60*60*24*1) {
            message.member.roles.add(801917434558808074);
        }
    });
    

    【讨论】:

    • 感谢您提供的角色现在有效,但我仍然对if(Date.now() - message.member.joinedAt &lt; 1000*60*60*24*1) 仍然没有触发的时间部分有疑问。另外,有没有办法概括角色缓存? (喜欢将角色作为通用变量,以便我可以轻松地再次使用它们?)
    • 我真的不知道为什么时间不工作,你可以为我记录Date.now()message.member.joinedAt 吗?您可以概括角色缓存,但老实说,每次使用message.guild.roles.cache 可能会更好,因为这样它总是“最新的” - 但如果您真的想要,您可以将let roles = message.guild.roles.cache 放在顶部你的message 听众,但请记住,如果机器人收到 DM,guild 将不会出现
    • 好的,所以基本上你的回答让我找到了解决方案,因为由于某种原因 message.member.joinedAt 没有返回数值所以我尝试了 message.member.joinedTimestamp 并返回了所需的值我现在可以完成任务了
    猜你喜欢
    • 2018-10-11
    • 2020-11-18
    • 2021-04-12
    • 2020-12-30
    • 2021-08-13
    • 1970-01-01
    • 2021-01-19
    • 2021-10-30
    • 2020-04-19
    相关资源
    最近更新 更多