textchannel在创建后返回null

vq8itlhq  于 2021-07-06  发布在  Java
关注(0)|答案(1)|浏览(334)

当我创建一个文本频道并添加一个memberpermissionoverride,然后在它创建频道之后尝试获取它时,它返回null。
有人能给我指出正确的方向吗?
不管怎样,这是密码。

shinto.createTextChannel(p.getName() + "-verify").addMemberPermissionOverride(trueDiscordMember.getIdLong(), ticketPermissionsAllow, ticketPermissionsDeny).addMemberPermissionOverride(bot.getJDA().getSelfUser().getIdLong(), botAllow, Collections.emptyList()).queue();

                        TextChannel channel = bot.getJDA().getTextChannelsByName(p.getName() + "-verify", true).get(0);

谢谢你的帮助

wnrlj8wa

wnrlj8wa1#

你用的是 queue 所以这个动作是异步发生的,但是你试图得到 TextChannel 很快,基本上,你要在它被创建之前得到它。
要解决这个问题,您可以执行以下两个示例之一:

guild.createTextChannel("stuff" + "-verify").queue(textChannel -> {
    //DO STUFF
});

在这个例子中,我使用 RestAction#queue(Consumer) 这意味着它将执行consumer(consumer参数将是 TextChannel 一旦操作完成,它将异步运行。在本例中,避免阻塞线程。

TextChannel channel = guild.createTextChannel("stuff" + "-verify").complete();

在这个例子中,我使用 RestAction#complete() 这意味着它将返回通道并阻塞线程,直到操作完成。
在此处阅读有关restaction的更多信息:https://ci.dv8tion.net/job/jda/javadoc/net/dv8tion/jda/api/requests/restaction.html

相关问题