From 0f29a5d757e85f4f0b0a9f0d729abc7c4574fc9a Mon Sep 17 00:00:00 2001 From: romangraef Date: Thu, 8 Feb 2018 20:18:50 +0100 Subject: Initial commit --- .../java/de/romjaki/privateroombot/Config.java | 22 ++++++++ src/main/java/de/romjaki/privateroombot/Main.java | 25 ++++++++++ .../privateroombot/VoiceChannelJoinListener.java | 58 ++++++++++++++++++++++ 3 files changed, 105 insertions(+) create mode 100644 src/main/java/de/romjaki/privateroombot/Config.java create mode 100644 src/main/java/de/romjaki/privateroombot/Main.java create mode 100644 src/main/java/de/romjaki/privateroombot/VoiceChannelJoinListener.java (limited to 'src/main/java/de') diff --git a/src/main/java/de/romjaki/privateroombot/Config.java b/src/main/java/de/romjaki/privateroombot/Config.java new file mode 100644 index 0000000..738070b --- /dev/null +++ b/src/main/java/de/romjaki/privateroombot/Config.java @@ -0,0 +1,22 @@ +package de.romjaki.privateroombot; + +import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileReader; + +public class Config { + + public static Config CONFIG; + + static { + try { + CONFIG = Main.gson.fromJson(new FileReader(new File("config.json")), Config.class); + } catch (FileNotFoundException e) { + e.printStackTrace(); + } + } + + String token; + String from_channel_id; + String category_id; +} diff --git a/src/main/java/de/romjaki/privateroombot/Main.java b/src/main/java/de/romjaki/privateroombot/Main.java new file mode 100644 index 0000000..353fae3 --- /dev/null +++ b/src/main/java/de/romjaki/privateroombot/Main.java @@ -0,0 +1,25 @@ +package de.romjaki.privateroombot; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import net.dv8tion.jda.core.AccountType; +import net.dv8tion.jda.core.JDA; +import net.dv8tion.jda.core.JDABuilder; + +import javax.security.auth.login.LoginException; + +import static de.romjaki.privateroombot.Config.CONFIG; + +public class Main { + + public static Gson gson = new GsonBuilder() + .create(); + + public static JDA jda; + public static void main(String[] args) throws LoginException { + jda = new JDABuilder(AccountType.BOT) + .setToken(CONFIG.token) + .addEventListener(new VoiceChannelJoinListener()) + .buildAsync(); + } +} diff --git a/src/main/java/de/romjaki/privateroombot/VoiceChannelJoinListener.java b/src/main/java/de/romjaki/privateroombot/VoiceChannelJoinListener.java new file mode 100644 index 0000000..5f55beb --- /dev/null +++ b/src/main/java/de/romjaki/privateroombot/VoiceChannelJoinListener.java @@ -0,0 +1,58 @@ +package de.romjaki.privateroombot; + +import net.dv8tion.jda.core.Permission; +import net.dv8tion.jda.core.entities.Category; +import net.dv8tion.jda.core.entities.Guild; +import net.dv8tion.jda.core.entities.Member; +import net.dv8tion.jda.core.entities.VoiceChannel; +import net.dv8tion.jda.core.events.guild.voice.GuildVoiceJoinEvent; +import net.dv8tion.jda.core.events.guild.voice.GuildVoiceLeaveEvent; +import net.dv8tion.jda.core.events.guild.voice.GuildVoiceMoveEvent; +import net.dv8tion.jda.core.hooks.ListenerAdapter; + +import static de.romjaki.privateroombot.Config.CONFIG; + +public class VoiceChannelJoinListener extends ListenerAdapter { + @Override + public void onGuildVoiceJoin(GuildVoiceJoinEvent event) { + super.onGuildVoiceJoin(event); + if (!event.getChannelJoined().getId().equals(CONFIG.from_channel_id)) { + return; + } + Guild guild = event.getGuild(); + Member member = event.getMember(); + Category category = guild.getCategoryById(CONFIG.category_id); + VoiceChannel newChannel = (VoiceChannel) category.createVoiceChannel(member.getEffectiveName() + " - privat").complete(); + newChannel.createPermissionOverride(member).setAllow(Permission.VOICE_MOVE_OTHERS).queue(); + guild.getController().moveVoiceMember(member, newChannel).queue(); + } + + @Override + public void onGuildVoiceMove(GuildVoiceMoveEvent event) { + super.onGuildVoiceMove(event); + VoiceChannelJoinListener.this.onGuildVoiceLeave( + new GuildVoiceLeaveEvent( + event.getJDA(), + event.getResponseNumber(), + event.getMember(), + event.getChannelLeft() + ) + ); + } + + @Override + public void onGuildVoiceLeave(GuildVoiceLeaveEvent event) { + super.onGuildVoiceLeave(event); + if (!event.getChannelLeft().getParent().getId().equals(CONFIG.category_id)) { + return; + } + VoiceChannel channel = event.getChannelLeft(); + if (!channel.getMembers().isEmpty()) { + return; + } + if (channel.getId().equals(CONFIG.from_channel_id)) { + return; + } + channel.delete().queue(); + } +} -- cgit