diff --git a/bridge/config.example.yml b/bridge/config.example.yml index 3b8de2c..ebb3ed4 100644 --- a/bridge/config.example.yml +++ b/bridge/config.example.yml @@ -50,3 +50,12 @@ rooms: - key: crosstalk-2 name: Crosstalk 2 discordToken: "" + - key: crosstalk-3 + name: Crosstalk 3 + discordToken: "" + - key: crosstalk-4 + name: Crosstalk 4 + discordToken: "" + - key: crosstalk-5 + name: Crosstalk 5 + discordToken: "" diff --git a/bridge/src/main/java/eu/mhsl/voicebridge/bridge/discord/DiscordRoomBot.java b/bridge/src/main/java/eu/mhsl/voicebridge/bridge/discord/DiscordRoomBot.java index a1ba5d1..625e31d 100644 --- a/bridge/src/main/java/eu/mhsl/voicebridge/bridge/discord/DiscordRoomBot.java +++ b/bridge/src/main/java/eu/mhsl/voicebridge/bridge/discord/DiscordRoomBot.java @@ -16,6 +16,8 @@ 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.events.guild.GuildJoinEvent; +import net.dv8tion.jda.api.hooks.ListenerAdapter; import net.dv8tion.jda.api.managers.AudioManager; import net.dv8tion.jda.api.requests.GatewayIntent; import net.dv8tion.jda.api.utils.MemberCachePolicy; @@ -66,26 +68,38 @@ public final class DiscordRoomBot implements AudioSendHandler, AudioReceiveHandl .enableCache(CacheFlag.VOICE_STATE) .setMemberCachePolicy(MemberCachePolicy.VOICE) .setAudioModuleConfig(new AudioModuleConfig().withDaveSessionFactory(new JDaveSessionFactory())) + .addEventListeners(new ListenerAdapter() { + @Override + public void onGuildJoin(@NotNull GuildJoinEvent event) { + if (event.getGuild().getId().equals(config.guild())) executor.execute(DiscordRoomBot.this::setupGuild); + } + }) .build() .awaitReady(); } catch (InterruptedException e) { Thread.currentThread().interrupt(); return; } + setupGuild(); + } - guild = jda.getGuildById(config.guild()); - if (guild == null) { - LOG.error("{}: Bot {} ist nicht auf dem Discord-Server {}", room.name(), jda.getSelfUser().getName(), config.guild()); + /** Channel suchen oder anlegen. Läuft beim Start und erneut, sobald der Bot auf den Server eingeladen wird. */ + private void setupGuild() { + Guild found = jda.getGuildById(config.guild()); + if (found == null) { + LOG.warn("{}: Bot {} ist noch nicht auf dem Discord-Server {}, warte auf Einladung", + room.name(), jda.getSelfUser().getName(), config.guild()); return; } - VoiceChannel channel = resolveChannel(guild); + VoiceChannel channel = resolveChannel(found); channelId = channel.getIdLong(); + guild = found; LOG.info("{}: Discord-Bot {} bereit, Channel #{}", room.name(), jda.getSelfUser().getName(), channel.getName()); String nickname = config.nickname().replace("%room%", room.name()); if (nickname.length() > 32) nickname = nickname.substring(0, 32); - if (!nickname.equals(guild.getSelfMember().getNickname())) { - guild.getSelfMember().modifyNickname(nickname).queue(null, + if (!nickname.equals(found.getSelfMember().getNickname())) { + found.getSelfMember().modifyNickname(nickname).queue(null, e -> LOG.debug("{}: Nickname nicht gesetzt: {}", room.name(), e.getMessage())); } }