Browse Source

Follow Teil 1

pull/2/head
Yannic Link 4 years ago
parent
commit
ce52530481
6 changed files with 99 additions and 22 deletions
  1. +0
    -1
      app/src/main/java/de/yannicpunktdee/yoshibot/audio/AudioPlayerListener.java
  2. +4
    -1
      app/src/main/java/de/yannicpunktdee/yoshibot/command/YoshiCommandDistributor.java
  3. +30
    -0
      app/src/main/java/de/yannicpunktdee/yoshibot/command/commands/FollowCommand.java
  4. +2
    -0
      app/src/main/java/de/yannicpunktdee/yoshibot/command/commands/PlayCommand.java
  5. +26
    -20
      app/src/main/java/de/yannicpunktdee/yoshibot/listeners/DiscordEventListener.java
  6. +37
    -0
      app/src/main/java/de/yannicpunktdee/yoshibot/main/YoshiBot.java

+ 0
- 1
app/src/main/java/de/yannicpunktdee/yoshibot/audio/AudioPlayerListener.java View File

@ -18,7 +18,6 @@ public class AudioPlayerListener implements AudioEventListener {
public void onEvent(AudioEvent event) {
if(event.player.getPlayingTrack() == null) {
event.player.stopTrack();
audioManager.closeAudioConnection();
}
}


+ 4
- 1
app/src/main/java/de/yannicpunktdee/yoshibot/command/YoshiCommandDistributor.java View File

@ -62,6 +62,8 @@ public class YoshiCommandDistributor {
case BONK:
command = new BonkCommand(context);
break;
case FOLLOW:
command = new FollowCommand(context);
default:
context.getEvent().getTextChannel().sendMessage("Dieses Kommando existiert noch nicht.").queue();
break;
@ -108,7 +110,8 @@ public class YoshiCommandDistributor {
DELETE,
SAUCE,
PAT,
BONK
BONK,
FOLLOW
}


+ 30
- 0
app/src/main/java/de/yannicpunktdee/yoshibot/command/commands/FollowCommand.java View File

@ -0,0 +1,30 @@
package de.yannicpunktdee.yoshibot.command.commands;
import de.yannicpunktdee.yoshibot.command.YoshiCommand;
import de.yannicpunktdee.yoshibot.command.YoshiCommandContext;
import de.yannicpunktdee.yoshibot.main.YoshiBot;
public class FollowCommand extends YoshiCommand {
protected final String[] requiredArguments = {"enable"};
public FollowCommand(YoshiCommandContext context) {
super(context);
}
@Override
public boolean execute() {
if(!super.execute()) return false;
if(context.getArgument("enable").equalsIgnoreCase("true")){
YoshiBot.getInstance().setActive(true);
}else if(context.getArgument("enable").equalsIgnoreCase("false")){
YoshiBot.getInstance().setActive(false);
}else{
sendMessage("Der Wert des Parameters -enable muss true oder false sein.");
return false;
}
return true;
}
}

+ 2
- 0
app/src/main/java/de/yannicpunktdee/yoshibot/command/commands/PlayCommand.java View File

@ -25,6 +25,8 @@ public class PlayCommand extends YoshiCommand {
}
public static boolean play(String fileName, VoiceChannel vc) {
if(!YoshiBot.getInstance().isActive()) return true;
if (!new File(fileName).isFile()) return false;
YoshiBot yoshiBot = YoshiBot.getInstance();


+ 26
- 20
app/src/main/java/de/yannicpunktdee/yoshibot/listeners/DiscordEventListener.java View File

@ -48,33 +48,39 @@ public class DiscordEventListener extends ListenerAdapter {
@Override
public void onGuildVoiceJoin(@NotNull GuildVoiceJoinEvent event) {
super.onGuildVoiceJoin(event);
if (!Resources.isGreetings_and_byebyes_on()) return;
if (event.getMember().getUser().isBot()) return;
String nameToPlay = event.getMember().getNickname();
nameToPlay = nameToPlay == null ? event.getMember().getUser().getName() : nameToPlay;
PlayCommand.play(
SayCommand.buildTTSAudio(Resources.getRandomGreeting(nameToPlay)),
event.getMember().getVoiceState().getChannel());
if(YoshiBot.getInstance().isActive())
YoshiBot.getInstance().autoConnectToChannel();
if (Resources.isGreetings_and_byebyes_on()){
String nameToPlay = event.getMember().getNickname();
if(nameToPlay == null) nameToPlay = event.getMember().getUser().getName();
PlayCommand.play(
SayCommand.buildTTSAudio(Resources.getRandomGreeting(nameToPlay)),
event.getMember().getVoiceState().getChannel());
}
}
@Override
public void onGuildVoiceLeave(@NotNull GuildVoiceLeaveEvent event) {
super.onGuildVoiceLeave(event);
if (!Resources.isGreetings_and_byebyes_on()) return;
if (event.getMember().getUser().isBot()) return;
String nameToPlay = event.getMember().getNickname();
nameToPlay = nameToPlay == null ? event.getMember().getUser().getName() : nameToPlay;
PlayCommand.play(
SayCommand.buildTTSAudio(Resources.getRandomByebye(nameToPlay)),
event.getChannelLeft());
if(YoshiBot.getInstance().isActive())
YoshiBot.getInstance().autoConnectToChannel();
if (!Resources.isGreetings_and_byebyes_on()) {
String nameToPlay = event.getMember().getNickname();
nameToPlay = nameToPlay == null ? event.getMember().getUser().getName() : nameToPlay;
PlayCommand.play(
SayCommand.buildTTSAudio(Resources.getRandomByebye(nameToPlay)),
event.getChannelLeft());
}
}
}

+ 37
- 0
app/src/main/java/de/yannicpunktdee/yoshibot/main/YoshiBot.java View File

@ -21,6 +21,7 @@ import net.dv8tion.jda.api.JDABuilder;
import net.dv8tion.jda.api.OnlineStatus;
import net.dv8tion.jda.api.entities.Activity;
import net.dv8tion.jda.api.entities.Guild;
import net.dv8tion.jda.api.entities.VoiceChannel;
import javax.security.auth.login.LoginException;
import java.io.File;
@ -62,11 +63,15 @@ public final class YoshiBot {
@Getter
private final Random random = new Random();
@Getter
private boolean active;
/**
* Initialisiert alle dynamisch hinzugefügten und statischen Ressourcen. Startet aber nicht den Bot selbst.
*/
public boolean init(String configPath) {
active = false;
return Resources.init(configPath);
}
@ -113,6 +118,8 @@ public final class YoshiBot {
new SauceProvider(300);
Executors.newScheduledThreadPool(1).scheduleAtFixedRate(YoshiBot::setRandomActivity, 0, 10, TimeUnit.HOURS);
if(active) autoConnectToChannel();
}
public synchronized void stop() {
@ -148,5 +155,35 @@ public final class YoshiBot {
yoshiBot.jda.getPresence().setActivity(Activity.playing(activity));
Logger.logInfo("Setze Aktivität auf " + activity);
}
private void joinVoiceChannel(VoiceChannel vc){
if(vc.equals(guild.getAudioManager().getConnectedChannel())) return;
leaveAudioChannel();
guild.getAudioManager().openAudioConnection(vc);
}
private void leaveAudioChannel(){
if(guild.getAudioManager().getConnectedChannel() == null) return;
guild.getAudioManager().closeAudioConnection();
}
public void autoConnectToChannel(){
VoiceChannel maxMembersVoiceChannel = null;
int maxMembers = 0;
for(VoiceChannel vc : guild.getVoiceChannels()){
if(vc.getMembers().size() > maxMembers){
maxMembersVoiceChannel = vc;
maxMembers = vc.getMembers().size();
}
}
if(maxMembers == 0) leaveAudioChannel();
else joinVoiceChannel(maxMembersVoiceChannel);
}
public void setActive(boolean a){
active = a;
if(active) autoConnectToChannel();
else leaveAudioChannel();
}
}

Loading…
Cancel
Save