首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >移动角色切换它们

移动角色切换它们
EN

Stack Overflow用户
提问于 2020-05-30 15:15:03
回答 1查看 363关注 0票数 1

我希望我的机器人创建五个角色,并在一个特定的位置以特定的方式对它们进行排序。

因此,我正在循环查看名称列表,并相应地创建角色。(这不是我的实际代码,但背后的想法是一样的。)

代码语言:javascript
复制
for (String name : roleNames) {
    event.getGuild().createRole().setColor(color).setName(name).queue(role -> {
    role.getGuild().modifyRolePositions().selectPosition(role.getPosition()).moveTo(role.getGuild().getRoles().size()-8).queue()});
}

为了澄清问题,我尝试通过选择初始位置role.getPosition()并将其移动到特定位置role.getGuild().getRoles().size()-8来移动角色。

由于列表中最高的角色的位置等于角色的数量,所以创建的每个角色都应该移动到完全相同的位置,从而将下面的每个角色移动到更低的位置。

但事实并非如此。

在执行这些代码行并减慢进程(通过使用Thread.sleep和/或.queueAfter())时,我看到了以下情况:

  1. 第一个角色在底部创建。一切都很好。
  2. 第一个角色被移到指定的位置。
  3. 第二个角色像往常一样在底部创建。当第二个角色上升到位置时,它将第一个角色向下移动到它创建的位置(在底部)。

在创建每个角色之前,都可以看到这种行为。最后一个角色停留在它所属的位置(因为没有其他角色切换它的位置)。

我的代码中是否存在逻辑问题,我的方法是错误的解决方案,还是仅仅是一个不和谐的问题?我怎么才能改变这种行为?

如果您怀疑这是在我的代码中根深蒂固,请告诉我,因为我可以向您提供更多的细节。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-30 16:42:23

ModifyRolePosition使用角色的缓存版本。

每次只更改一个位置会导致每次修改相同的缓存版本,从而导致更改不会继续进行。

这就是为什么可以对一个调用进行多个操作,只需将多个.selectPosition(initialPosition).moveTo(newPosition)排队并在结束时调用.queue()一次来提交它们。

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

https://stackoverflow.com/questions/62104472

复制
相关文章

相似问题

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