Discord 移动角色可以切换它们

Discord 移动角色可以切换它们,discord,discord-jda,Discord,Discord Jda,我希望我的机器人创建五个角色,并在特定的位置以特定的方式对它们进行排序 因此,我将循环浏览一个名称列表,并相应地创建角色。(这不是我的实际代码,但背后的想法是一样的。) 为了澄清问题,我尝试移动角色,方法是选择其初始位置role.getPosition(),然后将其移动到特定位置role.getGuild().getRoles().size()-8 由于列表中最高角色的位置等于角色的数量,因此创建的每个角色都应移动到完全相同的位置,从而将其下方的每个角色移动到较低的位置 但事实并非如此 当执行这

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

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

为了澄清问题,我尝试移动角色,方法是选择其初始位置
role.getPosition()
,然后将其移动到特定位置
role.getGuild().getRoles().size()-8

由于列表中最高角色的位置等于角色的数量,因此创建的每个角色都应移动到完全相同的位置,从而将其下方的每个角色移动到较低的位置

但事实并非如此

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

  • 第一个角色在底部创建。一切都很好
  • 第一个角色被移动到预定位置。工作
  • 第二个角色像往常一样在底部创建
  • 当第二个角色向上移动到该位置时,它会将第一个角色向下移动到创建它的位置(在底部)
  • 在创建每个角色之前都可以看到此行为。 最后一个角色停留在它所属的位置(因为没有其他角色切换它的位置)

    我的代码中是否存在逻辑问题,我这样做的方式是错误的解决方案,还是这只是一个不一致的问题?我怎样才能避免这种行为


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

    ModifyRolePosition使用缓存版本的角色

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


    这就是为什么一次调用可以进行多个操作的原因,只需将多个
    .selectPosition(initialPosition).moveTo(newPosition)
    一起排队,并在最后调用
    .queue()
    一次即可。ModifyRolePosition使用缓存版本的角色

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

    这就是为什么一次调用可以进行多个操作的原因,只需将多个
    .selectPosition(initialPosition).moveTo(newPosition)
    一起排队,并在最后调用
    .queue()
    一次即可

    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()});
    }