我正在尝试让不和谐的机器人根据某人加入服务器后的时间赋予角色

Posted

技术标签:

【中文标题】我正在尝试让不和谐的机器人根据某人加入服务器后的时间赋予角色【英文标题】: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);
    
);

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

【问题讨论】:

【参考方案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 并返回了所需的值我现在可以完成任务了

以上是关于我正在尝试让不和谐的机器人根据某人加入服务器后的时间赋予角色的主要内容,如果未能解决你的问题,请参考以下文章

如何让不和谐的机器人踢出 Java 中的成员?

如何让不和谐的机器人获取昵称而不是用户名?

让不和谐机器人每 10 秒改变一次播放状态

如何让不和谐机器人在命令上创建频道

让不和谐机器人说出服务器和频道名称的命令

一种让不和谐机器人在设定的时间发送私人消息的方法?