首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么"foreach“在交互之间造成discord.js延迟

为什么"foreach“在交互之间造成discord.js延迟
EN

Stack Overflow用户
提问于 2020-10-08 16:56:03
回答 1查看 574关注 0票数 1

我对javascript编程很陌生。我有一个不和谐的机器人,它的一个命令是在呼叫中让每个人安静下来,但是当命令被调用时,它会使五个用户沉默,创建一个延迟,然后立即使其他用户沉默

这是命令的代码

代码语言:javascript
复制
const Discord = require('discord.js');

module.exports.run = async (client, message, args) => {
 if (!message.member.hasPermission('MANAGE_MESSAGES'))
  return message.channel.send("You don't have this permission!");

 let muteRole = message.guild.roles.cache.find(
  (role) => role.name === ' Sshhhhhhh'
 );

 let channel = message.member.voice.channel;

 let user = message.author;

 if (args[0] === 'all') {
  channel.members.forEach(function(guildMember, guildMemberId) {
   guildMember.roles.add(muteRole.id);
  });
  message.delete().catch((O_o) => {});
  message.channel.send(`${user.username} silenced everyone.`);
  return;
 } else if (args[0] == null) {
  message.delete().catch((O_o) => {});
  message.channel.send(`${user.username} is silent.`);
  message.member.roles.add(muteRole.id);
  return;
 }

 let person = message.guild.member(
  message.mentions.users.first() || message.guild.members.get(args[1])
 );

 if (!person) return message.channel.send("Couldn't find that member");
 else {
  message.delete().catch((O_o) => {});
  message.channel.send(`${user.username} silenced ${person}.`);
  person.roles.add(muteRole.id);
 }
};

使每个人沉默的命令在第14行和第15行

代码语言:javascript
复制
channel.members.forEach(function(guildMember, guildMemberId) {
 guildMember.roles.add(muteRole.id);
});
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-10-08 17:08:02

这是由于对不和谐的API请求的速率限制造成的(如这里所示)。foreach循环本身并不是延迟的原因,而是discord.js本身有意每5次请求一次,这就是为什么您的静音角色被添加为5的原因。

您不能真正绕过这个限制,因为它内置于不和谐的API本身,并且延迟也内置于discord.js。绕过这一限制将被视为滥用。但是,您可以使用setTimeout在每个请求之间设置一个小延迟,这样每5个请求之间的延迟就不那么明显了。

下面是一个相关答案,它的速率限制与消息编辑差不多,而不是添加角色。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64267248

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档