Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使角色删除命令不受速率限制?_Javascript_Node.js_Discord.js - Fatal编程技术网

Javascript 如何使角色删除命令不受速率限制?

Javascript 如何使角色删除命令不受速率限制?,javascript,node.js,discord.js,Javascript,Node.js,Discord.js,这是一个用于从所有服务器成员中删除角色的命令。如何使其不达到利率限制? 以下是我尝试过的一些解决方案,但没有奏效 if (!message.member.hasPermission("MANAGE_ROLES")) return message.channel.send("Nice try, but you can't") if (!message.guild.me.hasPermission("MANAGE_ROLES"

这是一个用于从所有服务器成员中删除角色的命令。如何使其不达到利率限制? 以下是我尝试过的一些解决方案,但没有奏效

if (!message.member.hasPermission("MANAGE_ROLES")) return message.channel.send("Nice try, but you can't")
        if (!message.guild.me.hasPermission("MANAGE_ROLES")) return message.channel.send('I don\'t have permissions.')
  const role = message.mentions.roles.first() 
    if (!role)  {
 return message.channel.send("Please mention a role");
    }else {
   await message.guild.members.fetch()
  const targets = message.guild.members.cache.filter(m => !m.roles.cache.has(role))


   await targets.forEach(member => member.roles.remove(role))
message.channel.send(`Done`)
}}};
var指数=0;
var myInterval=setInterval(函数(){
如果(索引

p•S当我在有80名成员的小型测试服务器上运行它时,它可以正常工作。但在更大的服务器上,情况并非如此。那是因为利率限制(我想)。我怎么能不达到速率限制并完成它呢?

您只需启动多个异步调用,如果它们遇到错误,就会返回一个错误

尝试改用地图,您可以等待承诺带来的一系列承诺。所有:

var index = 0;
var myInterval = setInterval(function() {
   if (index < targets.length - 1)
      targets[index].roles.remove(role);
   else
     clearInterval(myInterval);

   index++;
}, 1000);

答案2

这个函数允许我们执行任何API请求,如果它受到速率限制,它将在请求返回的时间内创建一个超时

  await Promise.all(targets.map(async (member) => {
   await member.roles.remove(role)
  }));
如何使用它?在下面的示例中,我将使用删除请求


这不是有速率限制吗?我记得可能没有,但它会通知我,我将通过api直接用另一种方法更新我的答案。我尝试过,目标是所有服务器成员。它得到了速率限制。其他方法?希望这有帮助。
授权:`${client.user?.bot?.bot?“:“}${client.token}`
意外令牌。”
  await Promise.all(targets.map(async (member) => {
   await member.roles.remove(role)
  }));
const fetch = require("node-fetch")
function discordRetryHandler(input, init) {
    return new Promise((resolve, reject) => {
        fetch(input, init)
            .then(res => {
            if (res.headers.get('content-type') === 'application/json') {
                return res.json();
            }
            else {
                return { retry_after: undefined };
            }
        })
            .then(res => {
            if (typeof res.retry_after === 'number') {
                setTimeout(() => resolve(discordRetryHandler(input, init)), res.retry_after);
            }
            else {
                resolve(res);
            }
        })
            .catch(reject);
    });
}
    const requestOptions = {
        method: 'DELETE',
        headers: {
            Authorization: `${client.user.bot ? "Bot " : ""}${client.token}`
        }
    };
   await discordRetryHandler(`https://discord.com/api/v7/guilds/${guild?.id}/members/${member?.id}/roles/${role.id}`, requestOptions);