我希望我的机器人创建五个角色,并在一个特定的位置以特定的方式对它们进行排序。
因此,我正在循环查看名称列表,并相应地创建角色。(这不是我的实际代码,但背后的想法是一样的。)
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())时,我看到了以下情况:
在创建每个角色之前,都可以看到这种行为。最后一个角色停留在它所属的位置(因为没有其他角色切换它的位置)。
我的代码中是否存在逻辑问题,我的方法是错误的解决方案,还是仅仅是一个不和谐的问题?我怎么才能改变这种行为?
如果您怀疑这是在我的代码中根深蒂固,请告诉我,因为我可以向您提供更多的细节。
发布于 2020-05-30 16:42:23
ModifyRolePosition使用角色的缓存版本。
每次只更改一个位置会导致每次修改相同的缓存版本,从而导致更改不会继续进行。
这就是为什么可以对一个调用进行多个操作,只需将多个.selectPosition(initialPosition).moveTo(newPosition)排队并在结束时调用.queue()一次来提交它们。
https://stackoverflow.com/questions/62104472
复制相似问题