【问题标题】:Moving roles switches them移动角色切换它们
【发布时间】:2020-09-18 02:46:55
【问题描述】:

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

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

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. 像往常一样在底部创建第二个角色。
  4. 当第二个角色上移到该位置时,它会将第一个角色下移到创建它的位置(底部)。

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

我的代码中是否存在逻辑问题,我这样做的方式是错误的解决方案还是这只是一个不和谐的问题?我该如何解决这种行为?

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

【问题讨论】:

    标签: discord discord-jda


    【解决方案1】:

    ModifyRolePosition 使用角色的缓存版本。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-24
      • 2021-10-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-03
      • 2013-11-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多