首页 > 解决方案 > TextChannel 创建后返回 null

问题描述

当我创建一个文本通道并添加一个 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);

感谢任何帮助谢谢

标签: javadiscorddiscord-jda

解决方案


您正在使用queue,因此操作异步发生,但您试图TextChannel立即获得它,所以基本上,您试图在创建它之前获得它。

要解决这个问题,您可以执行以下两个示例中的任何一个:

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

在此示例中,我使用RestAction#queue(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


推荐阅读