我正在为我的机器人编写“加入创建”功能。此代码创建新的 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 上的另一种方法。
您应该在创建之前设置名称:
channel.createCopy().setName("my new name").queue();
您遇到了 discord bug,其中更新被紧随其后发生的不同更新覆盖。
此外,您应该使用回调通道对象:
channel.createCopy().setName("my new name").queue((newChannel) -> {
guild.moveVoiceMember(member, newChannel).queue();
});