JDA AudioChannel getManager 并不总是重命名创建的语音通道

问题描述 投票:0回答:1

我正在为我的机器人编写“加入创建”功能。此代码创建新的 VC,并在成员加入特定频道时将成员移动到那里。该代码可以工作,但有时它不会重命名新创建的 VC。

import net.dv8tion.jda.api.entities.Guild;
import net.dv8tion.jda.api.entities.Member;
import net.dv8tion.jda.api.entities.channel.concrete.Category;
import net.dv8tion.jda.api.entities.channel.concrete.VoiceChannel;
import net.dv8tion.jda.api.entities.channel.middleman.AudioChannel;
import net.dv8tion.jda.api.events.guild.voice.GuildVoiceUpdateEvent;
import net.dv8tion.jda.api.hooks.ListenerAdapter;

import java.util.List;

public class JoinToCreate extends ListenerAdapter {

    @Override
    public void onGuildVoiceUpdate(GuildVoiceUpdateEvent event) {
        AudioChannel audioChannel = event.getChannelJoined();
        Guild guild = event.getGuild();
        Member member = event.getMember();

        if (audioChannel != null) {
            long channelID = audioChannel.getIdLong();
            if (channelID == BotConfiguration.voiceChannelID) {
                long voiceChannelID = audioChannel.createCopy().complete().getIdLong();
                AudioChannel userVoice = guild.getVoiceChannelById(voiceChannelID);

                userVoice.getManager()
                    .setName("[\uD83E\uDD1D]" + member.getEffectiveName() + "'s Voice").complete();

                guild.moveVoiceMember(member, userVoice).queue();
            }
        } else {
            // REMOVE EMPTY VC
            Category category = event.getGuild().getCategoryById(BotConfiguration.customVCCategory);
            List<VoiceChannel> vcList = category.getVoiceChannels();
            for (int i = 1; i < vcList.size(); i++) {
                if (vcList.get(i).getMembers().size() == 0) {
                    long tempID = vcList.get(i).getIdLong();
                    guild.getVoiceChannelById(tempID).delete().queue();
                }
            }
        }
    }
}

我尝试过使用不同的类,例如 VoiceChannel/AudioChannel,并且我尝试过使用 GenericGuildVoice 上的另一种方法。

java frameworks bots discord-jda
1个回答
0
投票

您应该在创建之前设置名称:

channel.createCopy().setName("my new name").queue();

您遇到了 discord bug,其中更新被紧随其后发生的不同更新覆盖。

此外,您应该使用回调通道对象:

channel.createCopy().setName("my new name").queue((newChannel) -> {
  guild.moveVoiceMember(member, newChannel).queue();
});
© www.soinside.com 2019 - 2024. All rights reserved.