想要一个检测自定义状态并赋予此人不和谐角色的代码

Posted

技术标签:

【中文标题】想要一个检测自定义状态并赋予此人不和谐角色的代码【英文标题】:Want a code that detects custom status and gives the person a role on discord 【发布时间】:2021-09-29 21:16:44 【问题描述】:

我正在尝试编写一个代码来搜索短语“.gg/RoundTable”的自定义状态,然后将赋予此人在我的服务器中具有的特定角色。 这是我到目前为止的代码,代码运行没有错误,但不会分配角色。

    const Discord = require("discord.js")
    const client = new Discord.Client()
    
    const mySecret = process.env['TOKEN']
    
    client.login(mySecret)
    
    const roleID = 865801753462702090
    
    client.on('presenceUpdate', async (oldPresence, newPresence) => 
      const role = newPresence.guild.roles.cache.find(role => role.name === 'Pic Perms (.gg/RoundTable)');
      const status = ".gg/RoundTable"
      const member = newPresence.member
    
       console.log(member.user.presence.activities[0].state)
      if(member.presence.activities[0].state.includes(status))
        return newPresence.member.roles.add(roleID)
       else 
        if(member.roles.cache.has(roleID)) 
          newPresence.member.roles.remove(roleID)
        
      
    )

【问题讨论】:

考虑在 roleID 周围加上引号 "。这是为了帮助防止 JS 中的整数溢出。 【参考方案1】:

试试这个:

const Discord = require("discord.js");
const client = new Discord.Client();

const roleID = "851563088314105867";

client.on("presenceUpdate", async (_, newPresence) => 
  const role = newPresence.guild.roles.cache.get(roleID);
  const status = ".gg/RoundTable";
  const member = newPresence.member;

  if (member.presence.activities[0].state?.includes(status)) 
    return newPresence.member.roles.add(role);
   else 
    if (member.roles.cache.has(role)) 
      newPresence.member.roles.remove(role);
    
  
);
    
client.login("your-token");

我建议您使用get()RoleManager.cache 中找到您的role,因为您已经拥有roleID,然后实际分配该角色而不是roleID。注意我添加了一个optional chaining operator,因为如果用户没有自定义状态,.state 将是null

【讨论】:

以上是关于想要一个检测自定义状态并赋予此人不和谐角色的代码的主要内容,如果未能解决你的问题,请参考以下文章

无法添加角色,Discord.js

对反应角色不和谐机器人有问题

SAP自定义权限对象

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

为啥不和谐机器人适用于默认表情符号,而当我放置自定义表情符号时不起作用?

如何将自定义表情符号上传到我的不和谐机器人