From 0574fd7f6d25bf5906db01a8540e4cc2b0db6629 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Elias=20M=C3=BCller?= Date: Sun, 18 Oct 2026 15:12:15 +0200 Subject: [PATCH] =?UTF-8?q?Discord-Bots=20warten=20auf=20ihre=20Einladung,?= =?UTF-8?q?=20Vorlage=20mit=20f=C3=BCnf=20R=C3=A4umen?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bridge/config.example.yml | 9 +++++++ .../bridge/discord/DiscordRoomBot.java | 26 ++++++++++++++----- 2 files changed, 29 insertions(+), 6 deletions(-) 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())); } }