!7 //set flag DifferentJDA. //lib 1400185 // discord with opus/JNA (hopefully not a problem) import net.dv8tion.jda.core.managers.AudioManager; // Note: moved from core to api in JDA 4.0 import net.dv8tion.jda.core.audio.*; import java.nio.ByteBuffer; import com.sedmelluq.discord.lavaplayer.player.*; import com.sedmelluq.discord.lavaplayer.demo.jda.TrackScheduler; import com.sedmelluq.discord.lavaplayer.track.playback.*; import com.sedmelluq.discord.lavaplayer.source.*; //lib 1400286 // lavaplayer 1.3.22 lib 1400288 // lavaplayer fat lib 1400289 // httpclient lib 1400290 // httpcore lib 1400291 // commons-io static AudioPlayerManager playerManager; svoid cleanMeUp { dispose playerManager; } cmodule DiscordAudioSpike > DynTalkBot2 { S myName = "Discord Audio Spike"; start { makeByServer = () -> new ByServer; useAGIBlueForDropPunctuation = false; preprocessAtSelfToMyName = false; if (playerManager == null) { playerManager = new DefaultAudioPlayerManager; AudioSourceManagers.registerLocalSource(playerManager); } } class ByServer extends DynTalkBot2.ByServer { synchronized S processSimplifiedLine(S s, O... _) { try answer super.processSimplifiedLine(s, _); // adding authorized users etc. new Matches m; if null (s = dropMyPrefixOrNull(s)) null; optPar Message msg; Guild guild = msg == null ? null : msg.getGuild(); if "voice channels" ret str(guild.getVoiceChannels()); if "join voice channel" ret joinVoiceChannel(first(guild.getVoiceChannels()); if (eqic(s, "help")) ret ltrim([[ I'm a Discord Audio Test [Bot made by https://BotCompany.de] ]]).replace("@me", atSelf()); null; } S joinVoiceChannel(VoiceChannel vc) { if (vc == null) ret "No channel"; Guild guild = vc.getGuild(); AudioManager am = guild.getAudioManager(); AudioPlayer player = playerManager.createPlayer(); TrackScheduler trackScheduler = new(player); player.addListener(trackScheduler); am.setSendingHandler(new AudioPlayerSendHandler(player)); am.openAudioConnection(vc); playerManager.loadItem(f2s(loadLibrary(#1400292)), new AudioLoadResultHandler { public void trackLoaded(AudioTrack track) { trackScheduler.queue(track); } public void playlistLoaded(AudioPlaylist playlist) { for (AudioTrack track : playlist.getTracks()) { trackScheduler.queue(track); } } public void noMatches() { print("noMatches"); } public void loadFailed(FriendlyException throwable) { print("loadFailed"); } ); ret "Audio connection to " + vc.getName() + " opened"; } } } sclass AudioPlayerSendHandler implements AudioSendHandler { AudioPlayer audioPlayer; AudioFrame lastFrame; *(AudioPlayer *audioPlayer) {} public bool canProvide() { ret (lastFrame = audioPlayer.provide()) != null; } public byte[] provide20MsAudio() { return lastFrame.getData(); } public bool isOpus() { true; } }