我希望我的机器人创建五个角色,并在特定位置以特定方式对它们进行排序。
因此,我要遍历名称列表并相应地创建角色。 (这不是我的实际代码,但是背后的想法是相同的。)
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()
)时,我看到了以下内容:
在创建每个角色之前都可以看到此行为。 最后一个角色停留在它所属的位置(因为没有其他角色切换其位置)。
我的代码中是否存在逻辑上的问题,我的处理方式是否错误,还是仅仅是不和谐的问题?我怎么可能解决此问题?
如果您怀疑这已深入我的代码中,请告诉我,因为我可以为您提供更多详细信息。
答案 0 :(得分:0)
ModifyRolePosition使用角色的缓存版本。
一次仅更改一个位置会导致每次都修改相同的缓存版本,从而导致所做的更改不会被保留。
这就是为什么可以通过简单地将多个.selectPosition(initialPosition).moveTo(newPosition)
一起排队并在最后一次调用.queue()
来提交它们的情况下,对一个呼叫进行多种操作的原因。