Discord-Bots warten auf ihre Einladung, Vorlage mit fünf Räumen

This commit is contained in:
MineTec committed 2026-10-18 15:12:15 +02:00
1 parent 52b5dd2788
commit 0574fd7f6d
2 files changed
+29 -6

No files matched your search

+9
View File
@@ -50,3 +50,12 @@ rooms:
- key: crosstalk-2 - key: crosstalk-2
name: Crosstalk 2 name: Crosstalk 2
discordToken: "" discordToken: ""
- key: crosstalk-3
name: Crosstalk 3
discordToken: ""
- key: crosstalk-4
name: Crosstalk 4
discordToken: ""
- key: crosstalk-5
name: Crosstalk 5
discordToken: ""
@@ -16,6 +16,8 @@ import net.dv8tion.jda.api.entities.Guild;
import net.dv8tion.jda.api.entities.Member; import net.dv8tion.jda.api.entities.Member;
import net.dv8tion.jda.api.entities.channel.concrete.Category; 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.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.managers.AudioManager;
import net.dv8tion.jda.api.requests.GatewayIntent; import net.dv8tion.jda.api.requests.GatewayIntent;
import net.dv8tion.jda.api.utils.MemberCachePolicy; import net.dv8tion.jda.api.utils.MemberCachePolicy;
@@ -66,26 +68,38 @@ public final class DiscordRoomBot implements AudioSendHandler, AudioReceiveHandl
.enableCache(CacheFlag.VOICE_STATE) .enableCache(CacheFlag.VOICE_STATE)
.setMemberCachePolicy(MemberCachePolicy.VOICE) .setMemberCachePolicy(MemberCachePolicy.VOICE)
.setAudioModuleConfig(new AudioModuleConfig().withDaveSessionFactory(new JDaveSessionFactory())) .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() .build()
.awaitReady(); .awaitReady();
} catch (InterruptedException e) { } catch (InterruptedException e) {
Thread.currentThread().interrupt(); Thread.currentThread().interrupt();
return; return;
} }
setupGuild();
}
guild = jda.getGuildById(config.guild()); /** Channel suchen oder anlegen. Läuft beim Start und erneut, sobald der Bot auf den Server eingeladen wird. */
if (guild == null) { private void setupGuild() {
LOG.error("{}: Bot {} ist nicht auf dem Discord-Server {}", room.name(), jda.getSelfUser().getName(), config.guild()); 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; return;
} }
VoiceChannel channel = resolveChannel(guild); VoiceChannel channel = resolveChannel(found);
channelId = channel.getIdLong(); channelId = channel.getIdLong();
guild = found;
LOG.info("{}: Discord-Bot {} bereit, Channel #{}", room.name(), jda.getSelfUser().getName(), channel.getName()); LOG.info("{}: Discord-Bot {} bereit, Channel #{}", room.name(), jda.getSelfUser().getName(), channel.getName());
String nickname = config.nickname().replace("%room%", room.name()); String nickname = config.nickname().replace("%room%", room.name());
if (nickname.length() > 32) nickname = nickname.substring(0, 32); if (nickname.length() > 32) nickname = nickname.substring(0, 32);
if (!nickname.equals(guild.getSelfMember().getNickname())) { if (!nickname.equals(found.getSelfMember().getNickname())) {
guild.getSelfMember().modifyNickname(nickname).queue(null, found.getSelfMember().modifyNickname(nickname).queue(null,
e -> LOG.debug("{}: Nickname nicht gesetzt: {}", room.name(), e.getMessage())); e -> LOG.debug("{}: Nickname nicht gesetzt: {}", room.name(), e.getMessage()));
} }
} }