master
commit
d43e96b3e0
43 changed files with 1103 additions and 0 deletions
@ -0,0 +1,3 @@ |
||||
# Default ignored files |
||||
/shelf/ |
||||
/workspace.xml |
||||
@ -0,0 +1,24 @@ |
||||
<component name="ArtifactManager"> |
||||
<artifact type="jar" build-on-make="true" name="DiscordAuthorizator:jar"> |
||||
<output-path>$USER_HOME$/mineconomia/dev-server/plugins</output-path> |
||||
<root id="archive" name="DiscordAuthorizator.jar"> |
||||
<element id="module-output" name="DiscordAuthorizator" /> |
||||
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlin-stdlib-jdk8/1.8.21/kotlin-stdlib-jdk8-1.8.21.jar" path-in-jar="/" /> |
||||
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/net/sf/trove4j/core/3.1.0/core-3.1.0.jar" path-in-jar="/" /> |
||||
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlin-stdlib/1.8.21/kotlin-stdlib-1.8.21.jar" path-in-jar="/" /> |
||||
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/net/dv8tion/JDA/5.0.0-beta.23/JDA-5.0.0-beta.23.jar" path-in-jar="/" /> |
||||
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/jetbrains/annotations/13.0/annotations-13.0.jar" path-in-jar="/" /> |
||||
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlin-stdlib-jdk7/1.8.21/kotlin-stdlib-jdk7-1.8.21.jar" path-in-jar="/" /> |
||||
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" path-in-jar="/" /> |
||||
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/com/neovisionaries/nv-websocket-client/2.14/nv-websocket-client-2.14.jar" path-in-jar="/" /> |
||||
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/com/squareup/okio/okio-jvm/3.6.0/okio-jvm-3.6.0.jar" path-in-jar="/" /> |
||||
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/com/fasterxml/jackson/core/jackson-databind/2.16.0/jackson-databind-2.16.0.jar" path-in-jar="/" /> |
||||
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/com/fasterxml/jackson/core/jackson-annotations/2.16.0/jackson-annotations-2.16.0.jar" path-in-jar="/" /> |
||||
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/com/squareup/okio/okio/3.6.0/okio-3.6.0.jar" path-in-jar="/" /> |
||||
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/apache/commons/commons-collections4/4.4/commons-collections4-4.4.jar" path-in-jar="/" /> |
||||
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/com/fasterxml/jackson/core/jackson-core/2.16.0/jackson-core-2.16.0.jar" path-in-jar="/" /> |
||||
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlin-stdlib-common/1.9.10/kotlin-stdlib-common-1.9.10.jar" path-in-jar="/" /> |
||||
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/com/squareup/okhttp3/okhttp/4.12.0/okhttp-4.12.0.jar" path-in-jar="/" /> |
||||
</root> |
||||
</artifact> |
||||
</component> |
||||
@ -0,0 +1,14 @@ |
||||
<?xml version="1.0" encoding="UTF-8"?> |
||||
<project version="4"> |
||||
<component name="CompilerConfiguration"> |
||||
<annotationProcessing> |
||||
<profile name="Maven default annotation processors profile" enabled="true"> |
||||
<sourceOutputDir name="target/generated-sources/annotations" /> |
||||
<sourceTestOutputDir name="target/generated-test-sources/test-annotations" /> |
||||
<outputRelativeToContentRoot value="true" /> |
||||
<module name="DiscordAuthorizator" /> |
||||
</profile> |
||||
</annotationProcessing> |
||||
<bytecodeTargetLevel target="17" /> |
||||
</component> |
||||
</project> |
||||
@ -0,0 +1,7 @@ |
||||
<?xml version="1.0" encoding="UTF-8"?> |
||||
<project version="4"> |
||||
<component name="DiscordProjectSettings"> |
||||
<option name="show" value="PROJECT_FILES" /> |
||||
<option name="description" value="" /> |
||||
</component> |
||||
</project> |
||||
@ -0,0 +1,7 @@ |
||||
<?xml version="1.0" encoding="UTF-8"?> |
||||
<project version="4"> |
||||
<component name="Encoding"> |
||||
<file url="file://$PROJECT_DIR$/src/main/java" charset="UTF-8" /> |
||||
<file url="file://$PROJECT_DIR$/src/main/resources" charset="UTF-8" /> |
||||
</component> |
||||
</project> |
||||
@ -0,0 +1,7 @@ |
||||
<component name="InspectionProjectProfileManager"> |
||||
<profile version="1.0"> |
||||
<option name="myName" value="Project Default" /> |
||||
<inspection_tool class="StringTemplateMigration" enabled="false" level="WARNING" enabled_by_default="false" /> |
||||
<inspection_tool class="UNCHECKED_WARNING" enabled="false" level="WARNING" enabled_by_default="false" /> |
||||
</profile> |
||||
</component> |
||||
@ -0,0 +1,30 @@ |
||||
<?xml version="1.0" encoding="UTF-8"?> |
||||
<project version="4"> |
||||
<component name="RemoteRepositoriesConfiguration"> |
||||
<remote-repository> |
||||
<option name="id" value="central" /> |
||||
<option name="name" value="Central Repository" /> |
||||
<option name="url" value="https://repo.maven.apache.org/maven2" /> |
||||
</remote-repository> |
||||
<remote-repository> |
||||
<option name="id" value="sonatype" /> |
||||
<option name="name" value="sonatype" /> |
||||
<option name="url" value="https://oss.sonatype.org/content/groups/public/" /> |
||||
</remote-repository> |
||||
<remote-repository> |
||||
<option name="id" value="spigotmc-repo" /> |
||||
<option name="name" value="spigotmc-repo" /> |
||||
<option name="url" value="https://hub.spigotmc.org/nexus/content/repositories/snapshots/" /> |
||||
</remote-repository> |
||||
<remote-repository> |
||||
<option name="id" value="central" /> |
||||
<option name="name" value="Maven Central repository" /> |
||||
<option name="url" value="https://repo1.maven.org/maven2" /> |
||||
</remote-repository> |
||||
<remote-repository> |
||||
<option name="id" value="jboss.community" /> |
||||
<option name="name" value="JBoss Community repository" /> |
||||
<option name="url" value="https://repository.jboss.org/nexus/content/repositories/public/" /> |
||||
</remote-repository> |
||||
</component> |
||||
</project> |
||||
@ -0,0 +1,14 @@ |
||||
<?xml version="1.0" encoding="UTF-8"?> |
||||
<project version="4"> |
||||
<component name="ExternalStorageConfigurationManager" enabled="true" /> |
||||
<component name="MavenProjectsManager"> |
||||
<option name="originalFiles"> |
||||
<list> |
||||
<option value="$PROJECT_DIR$/pom.xml" /> |
||||
</list> |
||||
</option> |
||||
</component> |
||||
<component name="ProjectRootManager" version="2" languageLevel="JDK_17" project-jdk-name="17" project-jdk-type="JavaSDK"> |
||||
<output url="file://$PROJECT_DIR$/out" /> |
||||
</component> |
||||
</project> |
||||
@ -0,0 +1,8 @@ |
||||
<?xml version="1.0" encoding="UTF-8"?> |
||||
<project version="4"> |
||||
<component name="ProjectModuleManager"> |
||||
<modules> |
||||
<module fileurl="file://$PROJECT_DIR$/DiscordAuthorizator.iml" filepath="$PROJECT_DIR$/DiscordAuthorizator.iml" /> |
||||
</modules> |
||||
</component> |
||||
</project> |
||||
@ -0,0 +1,124 @@ |
||||
<?xml version="1.0" encoding="UTF-8"?> |
||||
<project version="4"> |
||||
<component name="Palette2"> |
||||
<group name="Swing"> |
||||
<item class="com.intellij.uiDesigner.HSpacer" tooltip-text="Horizontal Spacer" icon="/com/intellij/uiDesigner/icons/hspacer.svg" removable="false" auto-create-binding="false" can-attach-label="false"> |
||||
<default-constraints vsize-policy="1" hsize-policy="6" anchor="0" fill="1" /> |
||||
</item> |
||||
<item class="com.intellij.uiDesigner.VSpacer" tooltip-text="Vertical Spacer" icon="/com/intellij/uiDesigner/icons/vspacer.svg" removable="false" auto-create-binding="false" can-attach-label="false"> |
||||
<default-constraints vsize-policy="6" hsize-policy="1" anchor="0" fill="2" /> |
||||
</item> |
||||
<item class="javax.swing.JPanel" icon="/com/intellij/uiDesigner/icons/panel.svg" removable="false" auto-create-binding="false" can-attach-label="false"> |
||||
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3" /> |
||||
</item> |
||||
<item class="javax.swing.JScrollPane" icon="/com/intellij/uiDesigner/icons/scrollPane.svg" removable="false" auto-create-binding="false" can-attach-label="true"> |
||||
<default-constraints vsize-policy="7" hsize-policy="7" anchor="0" fill="3" /> |
||||
</item> |
||||
<item class="javax.swing.JButton" icon="/com/intellij/uiDesigner/icons/button.svg" removable="false" auto-create-binding="true" can-attach-label="false"> |
||||
<default-constraints vsize-policy="0" hsize-policy="3" anchor="0" fill="1" /> |
||||
<initial-values> |
||||
<property name="text" value="Button" /> |
||||
</initial-values> |
||||
</item> |
||||
<item class="javax.swing.JRadioButton" icon="/com/intellij/uiDesigner/icons/radioButton.svg" removable="false" auto-create-binding="true" can-attach-label="false"> |
||||
<default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" /> |
||||
<initial-values> |
||||
<property name="text" value="RadioButton" /> |
||||
</initial-values> |
||||
</item> |
||||
<item class="javax.swing.JCheckBox" icon="/com/intellij/uiDesigner/icons/checkBox.svg" removable="false" auto-create-binding="true" can-attach-label="false"> |
||||
<default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" /> |
||||
<initial-values> |
||||
<property name="text" value="CheckBox" /> |
||||
</initial-values> |
||||
</item> |
||||
<item class="javax.swing.JLabel" icon="/com/intellij/uiDesigner/icons/label.svg" removable="false" auto-create-binding="false" can-attach-label="false"> |
||||
<default-constraints vsize-policy="0" hsize-policy="0" anchor="8" fill="0" /> |
||||
<initial-values> |
||||
<property name="text" value="Label" /> |
||||
</initial-values> |
||||
</item> |
||||
<item class="javax.swing.JTextField" icon="/com/intellij/uiDesigner/icons/textField.svg" removable="false" auto-create-binding="true" can-attach-label="true"> |
||||
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1"> |
||||
<preferred-size width="150" height="-1" /> |
||||
</default-constraints> |
||||
</item> |
||||
<item class="javax.swing.JPasswordField" icon="/com/intellij/uiDesigner/icons/passwordField.svg" removable="false" auto-create-binding="true" can-attach-label="true"> |
||||
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1"> |
||||
<preferred-size width="150" height="-1" /> |
||||
</default-constraints> |
||||
</item> |
||||
<item class="javax.swing.JFormattedTextField" icon="/com/intellij/uiDesigner/icons/formattedTextField.svg" removable="false" auto-create-binding="true" can-attach-label="true"> |
||||
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1"> |
||||
<preferred-size width="150" height="-1" /> |
||||
</default-constraints> |
||||
</item> |
||||
<item class="javax.swing.JTextArea" icon="/com/intellij/uiDesigner/icons/textArea.svg" removable="false" auto-create-binding="true" can-attach-label="true"> |
||||
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3"> |
||||
<preferred-size width="150" height="50" /> |
||||
</default-constraints> |
||||
</item> |
||||
<item class="javax.swing.JTextPane" icon="/com/intellij/uiDesigner/icons/textPane.svg" removable="false" auto-create-binding="true" can-attach-label="true"> |
||||
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3"> |
||||
<preferred-size width="150" height="50" /> |
||||
</default-constraints> |
||||
</item> |
||||
<item class="javax.swing.JEditorPane" icon="/com/intellij/uiDesigner/icons/editorPane.svg" removable="false" auto-create-binding="true" can-attach-label="true"> |
||||
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3"> |
||||
<preferred-size width="150" height="50" /> |
||||
</default-constraints> |
||||
</item> |
||||
<item class="javax.swing.JComboBox" icon="/com/intellij/uiDesigner/icons/comboBox.svg" removable="false" auto-create-binding="true" can-attach-label="true"> |
||||
<default-constraints vsize-policy="0" hsize-policy="2" anchor="8" fill="1" /> |
||||
</item> |
||||
<item class="javax.swing.JTable" icon="/com/intellij/uiDesigner/icons/table.svg" removable="false" auto-create-binding="true" can-attach-label="false"> |
||||
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3"> |
||||
<preferred-size width="150" height="50" /> |
||||
</default-constraints> |
||||
</item> |
||||
<item class="javax.swing.JList" icon="/com/intellij/uiDesigner/icons/list.svg" removable="false" auto-create-binding="true" can-attach-label="false"> |
||||
<default-constraints vsize-policy="6" hsize-policy="2" anchor="0" fill="3"> |
||||
<preferred-size width="150" height="50" /> |
||||
</default-constraints> |
||||
</item> |
||||
<item class="javax.swing.JTree" icon="/com/intellij/uiDesigner/icons/tree.svg" removable="false" auto-create-binding="true" can-attach-label="false"> |
||||
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3"> |
||||
<preferred-size width="150" height="50" /> |
||||
</default-constraints> |
||||
</item> |
||||
<item class="javax.swing.JTabbedPane" icon="/com/intellij/uiDesigner/icons/tabbedPane.svg" removable="false" auto-create-binding="true" can-attach-label="false"> |
||||
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3"> |
||||
<preferred-size width="200" height="200" /> |
||||
</default-constraints> |
||||
</item> |
||||
<item class="javax.swing.JSplitPane" icon="/com/intellij/uiDesigner/icons/splitPane.svg" removable="false" auto-create-binding="false" can-attach-label="false"> |
||||
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3"> |
||||
<preferred-size width="200" height="200" /> |
||||
</default-constraints> |
||||
</item> |
||||
<item class="javax.swing.JSpinner" icon="/com/intellij/uiDesigner/icons/spinner.svg" removable="false" auto-create-binding="true" can-attach-label="true"> |
||||
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" /> |
||||
</item> |
||||
<item class="javax.swing.JSlider" icon="/com/intellij/uiDesigner/icons/slider.svg" removable="false" auto-create-binding="true" can-attach-label="false"> |
||||
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" /> |
||||
</item> |
||||
<item class="javax.swing.JSeparator" icon="/com/intellij/uiDesigner/icons/separator.svg" removable="false" auto-create-binding="false" can-attach-label="false"> |
||||
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3" /> |
||||
</item> |
||||
<item class="javax.swing.JProgressBar" icon="/com/intellij/uiDesigner/icons/progressbar.svg" removable="false" auto-create-binding="true" can-attach-label="false"> |
||||
<default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1" /> |
||||
</item> |
||||
<item class="javax.swing.JToolBar" icon="/com/intellij/uiDesigner/icons/toolbar.svg" removable="false" auto-create-binding="false" can-attach-label="false"> |
||||
<default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1"> |
||||
<preferred-size width="-1" height="20" /> |
||||
</default-constraints> |
||||
</item> |
||||
<item class="javax.swing.JToolBar$Separator" icon="/com/intellij/uiDesigner/icons/toolbarSeparator.svg" removable="false" auto-create-binding="false" can-attach-label="false"> |
||||
<default-constraints vsize-policy="0" hsize-policy="0" anchor="0" fill="1" /> |
||||
</item> |
||||
<item class="javax.swing.JScrollBar" icon="/com/intellij/uiDesigner/icons/scrollbar.svg" removable="false" auto-create-binding="true" can-attach-label="false"> |
||||
<default-constraints vsize-policy="6" hsize-policy="0" anchor="0" fill="2" /> |
||||
</item> |
||||
</group> |
||||
</component> |
||||
</project> |
||||
@ -0,0 +1,6 @@ |
||||
<?xml version="1.0" encoding="UTF-8"?> |
||||
<project version="4"> |
||||
<component name="VcsDirectoryMappings"> |
||||
<mapping directory="$PROJECT_DIR$" vcs="Git" /> |
||||
</component> |
||||
</project> |
||||
@ -0,0 +1,13 @@ |
||||
<?xml version="1.0" encoding="UTF-8"?> |
||||
<module version="4"> |
||||
<component name="FacetManager"> |
||||
<facet type="minecraft" name="Minecraft"> |
||||
<configuration> |
||||
<autoDetectTypes> |
||||
<platformType>SPIGOT</platformType> |
||||
</autoDetectTypes> |
||||
<projectReimportVersion>1</projectReimportVersion> |
||||
</configuration> |
||||
</facet> |
||||
</component> |
||||
</module> |
||||
@ -0,0 +1,83 @@ |
||||
<?xml version="1.0" encoding="UTF-8"?> |
||||
<project xmlns="http://maven.apache.org/POM/4.0.0" |
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" |
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> |
||||
<modelVersion>4.0.0</modelVersion> |
||||
|
||||
<groupId>xyz.soukup</groupId> |
||||
<artifactId>DiscordAuthorizator</artifactId> |
||||
<version>1.0-SNAPSHOT</version> |
||||
<packaging>jar</packaging> |
||||
|
||||
<name>DiscordAuthorizator</name> |
||||
|
||||
<properties> |
||||
<java.version>1.8</java.version> |
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> |
||||
</properties> |
||||
|
||||
<build> |
||||
<plugins> |
||||
<plugin> |
||||
<groupId>org.apache.maven.plugins</groupId> |
||||
<artifactId>maven-compiler-plugin</artifactId> |
||||
<version>3.8.1</version> |
||||
<configuration> |
||||
<source>17</source> |
||||
<target>17</target> |
||||
<compilerArgs>--enable-preview</compilerArgs> |
||||
</configuration> |
||||
</plugin> |
||||
<plugin> |
||||
<groupId>org.apache.maven.plugins</groupId> |
||||
<artifactId>maven-shade-plugin</artifactId> |
||||
<version>3.2.4</version> |
||||
<executions> |
||||
<execution> |
||||
<phase>package</phase> |
||||
<goals> |
||||
<goal>shade</goal> |
||||
</goals> |
||||
</execution> |
||||
</executions> |
||||
</plugin> |
||||
</plugins> |
||||
<resources> |
||||
<resource> |
||||
<directory>src/main/resources</directory> |
||||
<filtering>true</filtering> |
||||
</resource> |
||||
</resources> |
||||
</build> |
||||
|
||||
<repositories> |
||||
<repository> |
||||
<id>spigotmc-repo</id> |
||||
<url>https://hub.spigotmc.org/nexus/content/repositories/snapshots/</url> |
||||
</repository> |
||||
<repository> |
||||
<id>sonatype</id> |
||||
<url>https://oss.sonatype.org/content/groups/public/</url> |
||||
</repository> |
||||
</repositories> |
||||
|
||||
<dependencies> |
||||
<dependency> |
||||
<groupId>org.spigotmc</groupId> |
||||
<artifactId>spigot-api</artifactId> |
||||
<version>1.18.2-R0.1-SNAPSHOT</version> |
||||
<scope>provided</scope> |
||||
</dependency> |
||||
<dependency> |
||||
<groupId>net.dv8tion</groupId> |
||||
<artifactId>JDA</artifactId> |
||||
<version>5.0.0-beta.23</version> |
||||
<exclusions> |
||||
<exclusion> |
||||
<groupId>club.minnced</groupId> |
||||
<artifactId>opus-java</artifactId> |
||||
</exclusion> |
||||
</exclusions> |
||||
</dependency> |
||||
</dependencies> |
||||
</project> |
||||
@ -0,0 +1,126 @@ |
||||
package xyz.soukup.discordauthorizator; |
||||
|
||||
import net.dv8tion.jda.api.EmbedBuilder; |
||||
import net.dv8tion.jda.api.JDA; |
||||
import net.dv8tion.jda.api.JDABuilder; |
||||
import net.dv8tion.jda.api.Permission; |
||||
import net.dv8tion.jda.api.entities.Activity; |
||||
import net.dv8tion.jda.api.entities.Message; |
||||
import net.dv8tion.jda.api.entities.Role; |
||||
import net.dv8tion.jda.api.entities.User; |
||||
import net.dv8tion.jda.api.interactions.commands.DefaultMemberPermissions; |
||||
import net.dv8tion.jda.api.interactions.commands.OptionType; |
||||
import net.dv8tion.jda.api.interactions.commands.build.Commands; |
||||
import net.dv8tion.jda.api.requests.GatewayIntent; |
||||
import net.md_5.bungee.api.ChatColor; |
||||
import org.bukkit.Bukkit; |
||||
import org.bukkit.configuration.file.FileConfiguration; |
||||
import org.bukkit.entity.Player; |
||||
import org.bukkit.plugin.java.JavaPlugin; |
||||
import xyz.soukup.discordauthorizator.commands.*; |
||||
import xyz.soukup.discordauthorizator.events.*; |
||||
|
||||
import java.awt.*; |
||||
import java.util.Collection; |
||||
import java.util.HashMap; |
||||
import java.util.Map; |
||||
import java.util.Objects; |
||||
import java.util.logging.Logger; |
||||
public final class DiscordAuthorizator extends JavaPlugin { |
||||
public static HashMap<String, ChatColor> playerColor = new HashMap<>(); |
||||
public static HashMap<String, Role> playerRole = new HashMap<>(); |
||||
|
||||
private static JDA jda; |
||||
|
||||
@Override |
||||
public void onEnable() { |
||||
saveDefaultConfig(); |
||||
DiscordAuthorizator plugin = this; |
||||
FileConfiguration config = plugin.getConfig(); |
||||
Logger logger = Bukkit.getLogger(); |
||||
logger.info("Plugin DiscordAuthorizator starting..."); |
||||
|
||||
jda = JDABuilder.createDefault(config.getString("token")) |
||||
.addEventListeners(new link()) |
||||
.addEventListeners(new authorize()) |
||||
.addEventListeners(new DiscordSendMessage()) |
||||
.addEventListeners(new voting()) |
||||
.enableIntents(GatewayIntent.GUILD_MEMBERS) |
||||
.enableIntents(GatewayIntent.GUILD_MESSAGES) |
||||
.enableIntents(GatewayIntent.MESSAGE_CONTENT) |
||||
.build(); |
||||
jda.updateCommands().addCommands( |
||||
Commands.slash("authorize", "autorizuje novou ip"), |
||||
Commands.slash("link", "propojí discord s minecraftem"), |
||||
Commands.slash("add-votes", "prida hlas ") |
||||
.setDefaultPermissions(DefaultMemberPermissions.enabledFor(Permission.ALL_PERMISSIONS)) |
||||
.addOption(OptionType.USER, "hrac", "hrac", true) |
||||
.addOption(OptionType.INTEGER, "votes", "bb", true), |
||||
Commands.slash("hlasy", "zobrazí počet hlasy") |
||||
.addOption(OptionType.USER, "hrac", "hrac", false), |
||||
Commands.slash("hlasovat", "spustí hlasování") |
||||
.addOption(OptionType.STRING, "popis", "o čem se bude hlasovat", true) |
||||
|
||||
).queue(); |
||||
jda.getPresence().setActivity(Activity.customStatus("Nikdo na serveru")); |
||||
Bukkit.getPluginManager().registerEvents(new playerLogin(),this ); |
||||
Bukkit.getPluginManager().registerEvents(new playerLeave(),this ); |
||||
Bukkit.getPluginManager().registerEvents(new playerDie(),this ); |
||||
|
||||
Bukkit.getPluginManager().registerEvents(new ChatEvent(), this); |
||||
Objects.requireNonNull(this.getCommand("msg")).setExecutor(new msg()); |
||||
Objects.requireNonNull(this.getCommand("msg")).setTabCompleter(new msg()); |
||||
Objects.requireNonNull(this.getCommand("r")).setExecutor(new r()); |
||||
Objects.requireNonNull(this.getCommand("r")).setTabCompleter(new r()); |
||||
|
||||
} |
||||
|
||||
@Override |
||||
public void onDisable() { |
||||
saveConfig(); |
||||
|
||||
|
||||
for(Map.Entry<Message, HashMap<String, Object>> entry : voting.activeVotings.entrySet()) { |
||||
HashMap<String, Object> voteData = entry.getValue(); |
||||
Message message = entry.getKey(); |
||||
User user = (User) voteData.get("author"); |
||||
int yes = (int) voteData.get("yes"); |
||||
int no = (int) voteData.get("no"); |
||||
String description = (String) voteData.get("description"); |
||||
EmbedBuilder eb = new EmbedBuilder(); |
||||
eb.setAuthor("Hlasování hráče " + user.getName() , null, user.getAvatarUrl()); |
||||
eb.setTitle("Hlasování předčasně skončilo kvůli restartu"); |
||||
eb.setColor(Color.MAGENTA); |
||||
eb.setDescription(description + "\n\n```Pro: "+ yes +"\nProti: "+ no +"```"); |
||||
message.editMessageComponents().queue(); |
||||
message.editMessageEmbeds(eb.build()).queue(); |
||||
} |
||||
jda.shutdown(); |
||||
} |
||||
public static JDA getJDA() { |
||||
return jda; |
||||
} |
||||
public static ChatColor convertToChatColor(Color color) { |
||||
// Extract RGB components
|
||||
int red = color.getRed(); |
||||
int green = color.getGreen(); |
||||
int blue = color.getBlue(); |
||||
|
||||
// Convert RGB to hexadecimal string
|
||||
String hex = String.format("#%02x%02x%02x", red, green, blue); |
||||
|
||||
// Return ChatColor from hex string
|
||||
return ChatColor.of(hex); |
||||
} |
||||
public static void updateStatus(){ |
||||
Collection<? extends Player> players =Bukkit.getOnlinePlayers(); |
||||
String status = switch (players.size()) { |
||||
case 0 -> "nikdo na serveru"; |
||||
case 1 -> "1 hráč na serveru"; |
||||
case 2, 3, 4 -> players.size() + " hráči na serveru"; |
||||
default -> players.size() + " hráčů na serveru"; |
||||
}; |
||||
jda.getPresence().setActivity(Activity.customStatus(status)); |
||||
} |
||||
|
||||
} |
||||
@ -0,0 +1,29 @@ |
||||
package xyz.soukup.discordauthorizator.commands; |
||||
|
||||
import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent; |
||||
import net.dv8tion.jda.api.hooks.ListenerAdapter; |
||||
import org.bukkit.configuration.file.FileConfiguration; |
||||
import xyz.soukup.discordauthorizator.DiscordAuthorizator; |
||||
import xyz.soukup.discordauthorizator.events.playerLogin; |
||||
|
||||
import java.util.List; |
||||
|
||||
public class authorize extends ListenerAdapter { |
||||
public void onSlashCommandInteraction(SlashCommandInteractionEvent event) { |
||||
if (event.getName().equals("authorize")) { |
||||
if (playerLogin.ipToAdd.containsKey(event.getUser().getId())){ |
||||
List<String> pp = playerLogin.ipToAdd.get(event.getUser().getId()); |
||||
FileConfiguration config = DiscordAuthorizator.getPlugin(DiscordAuthorizator.class).getConfig(); |
||||
List<String> ipList = config.getStringList("players." + pp.get(0) + ".authorized-ips"); |
||||
ipList.add(pp.get(1)); |
||||
|
||||
config.set("players." + pp.get(0) + ".authorized-ips", ipList); |
||||
DiscordAuthorizator.getPlugin(DiscordAuthorizator.class).saveConfig(); |
||||
event.reply("IP přidána").setEphemeral(true).queue(); |
||||
}else{ |
||||
event.reply("Nemáš žádné IP adresy k přidání").setEphemeral(true).queue(); |
||||
} |
||||
|
||||
} |
||||
} |
||||
} |
||||
@ -0,0 +1,75 @@ |
||||
package xyz.soukup.discordauthorizator.commands; |
||||
|
||||
import net.dv8tion.jda.api.EmbedBuilder; |
||||
import net.dv8tion.jda.api.entities.MessageEmbed; |
||||
import net.dv8tion.jda.api.events.interaction.ModalInteractionEvent; |
||||
import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent; |
||||
import net.dv8tion.jda.api.hooks.ListenerAdapter; |
||||
import net.dv8tion.jda.api.interactions.components.ActionRow; |
||||
import net.dv8tion.jda.api.interactions.components.text.TextInput; |
||||
import net.dv8tion.jda.api.interactions.components.text.TextInputStyle; |
||||
import net.dv8tion.jda.api.interactions.modals.Modal; |
||||
import net.dv8tion.jda.api.interactions.modals.ModalMapping; |
||||
import org.bukkit.configuration.file.FileConfiguration; |
||||
import xyz.soukup.discordauthorizator.DiscordAuthorizator; |
||||
import xyz.soukup.discordauthorizator.events.playerLogin; |
||||
|
||||
import java.awt.*; |
||||
import java.util.List; |
||||
import java.util.Objects; |
||||
|
||||
public class link extends ListenerAdapter { |
||||
public void onSlashCommandInteraction(SlashCommandInteractionEvent event) { |
||||
if (event.getName().equals("link")) { |
||||
TextInput subject = TextInput.create("username", "Tvůj minecraft nicK:", TextInputStyle.SHORT) |
||||
.setPlaceholder("PVPMaster666") |
||||
.setMaxLength(16) // or setRequiredRange(10, 100)
|
||||
.build(); |
||||
|
||||
TextInput body = TextInput.create("code", "Verifikační kód", TextInputStyle.PARAGRAPH) |
||||
.setPlaceholder("1234") |
||||
.setMaxLength(4) |
||||
.setMinLength(4) |
||||
.build(); |
||||
|
||||
Modal modal = Modal.create("linkdialog", "Propojení minecraft účtu") |
||||
.addComponents(ActionRow.of(subject), ActionRow.of(body)) |
||||
.build(); |
||||
|
||||
event.replyModal(modal).queue(); |
||||
} |
||||
} |
||||
public void onModalInteraction(ModalInteractionEvent event) { |
||||
if (event.getModalId().equals("linkdialog")) { |
||||
List<ModalMapping> answers = event.getValues(); |
||||
if (playerLogin.playersToVerify.containsKey(answers.get(0).getAsString())){ |
||||
if (Objects.equals(playerLogin.playersToVerify.get(answers.get(0).getAsString()).get(1), answers.get(1).getAsString())){ |
||||
FileConfiguration config = DiscordAuthorizator.getPlugin(DiscordAuthorizator.class).getConfig(); |
||||
config.set("players." + answers.get(0).getAsString() + ".authorized-ips", List.of(playerLogin.playersToVerify.get(answers.get(0).getAsString()).get(0))); |
||||
config.set("players." +answers.get(0).getAsString() + ".discord", event.getUser().getId()); |
||||
Objects.requireNonNull(event.getGuild()).addRoleToMember(Objects.requireNonNull(event.getMember()), Objects.requireNonNull(event.getGuild().getRoleById("1236632859200983141"))).queue(); |
||||
playerLogin.playersToVerify.remove(answers.get(0).getAsString()); |
||||
MessageEmbed embed = new EmbedBuilder() |
||||
.setTitle("Propojeno.") |
||||
.setDescription("Přejeme příjemné hraní") |
||||
.setColor(Color.GREEN) |
||||
.build(); |
||||
DiscordAuthorizator.getPlugin(DiscordAuthorizator.class).saveConfig(); |
||||
event.replyEmbeds(embed).setEphemeral(true).queue(); |
||||
}else { |
||||
MessageEmbed embed = new EmbedBuilder() |
||||
.setTitle("Špatný kód.") |
||||
.setColor(Color.RED) |
||||
.build(); |
||||
event.replyEmbeds(embed).setEphemeral(true).queue(); |
||||
} |
||||
}else{ |
||||
MessageEmbed embed = new EmbedBuilder() |
||||
.setTitle("Daný nick není ve verifikačním procesu.") |
||||
.setColor(Color.RED) |
||||
.build(); |
||||
event.replyEmbeds(embed).setEphemeral(true).queue(); |
||||
} |
||||
} |
||||
} |
||||
} |
||||
@ -0,0 +1,51 @@ |
||||
package xyz.soukup.discordauthorizator.commands; |
||||
|
||||
import org.bukkit.Bukkit; |
||||
import org.bukkit.ChatColor; |
||||
import org.bukkit.command.Command; |
||||
import org.bukkit.command.CommandSender; |
||||
import org.bukkit.command.TabExecutor; |
||||
import org.bukkit.entity.Player; |
||||
|
||||
import java.util.ArrayList; |
||||
import java.util.List; |
||||
import java.util.Objects; |
||||
|
||||
public class msg implements TabExecutor { |
||||
@Override |
||||
public boolean onCommand(CommandSender commandSender, Command command, String s, String[] strings) { |
||||
if (strings.length < 1){ |
||||
commandSender.sendMessage(ChatColor.RED + "nedostatek argumentů"); |
||||
return false; |
||||
} |
||||
if (Bukkit.getPlayer(strings[0]) != null) { |
||||
StringBuilder message = new StringBuilder(); |
||||
for(int i = 0; i < strings.length; i++) { |
||||
if (i !=0){ |
||||
message.append(" ").append(strings[i]); |
||||
} |
||||
} |
||||
|
||||
|
||||
commandSender.sendMessage(ChatColor.translateAlternateColorCodes('&', "&4&l<<&f"+ strings[0] + "&4&l<<&f" + message)); |
||||
Objects.requireNonNull(Bukkit.getPlayer(strings[0])).sendMessage(ChatColor.translateAlternateColorCodes('&', "&2&l>>&f"+ ((Player) commandSender).getDisplayName() + "&2&l>>&f" + message)); |
||||
r.lastMessaged.put((Player) commandSender, Objects.requireNonNull(Bukkit.getPlayer(strings[0]))); |
||||
}else { |
||||
commandSender.sendMessage(ChatColor.RED + "Hráč není na serveru"); |
||||
} |
||||
return true; |
||||
} |
||||
|
||||
@Override |
||||
public List<String> onTabComplete(CommandSender commandSender, Command command, String s, String[] strings) { |
||||
List<String> suggestions = new ArrayList<>(); |
||||
if (strings.length == 0){ |
||||
for (Player p: Bukkit.getOnlinePlayers()){ |
||||
suggestions.add(p.getDisplayName()); |
||||
} |
||||
}else{ |
||||
suggestions.add("<zpráva>"); |
||||
} |
||||
return null; |
||||
} |
||||
} |
||||
@ -0,0 +1,44 @@ |
||||
package xyz.soukup.discordauthorizator.commands; |
||||
|
||||
import org.bukkit.ChatColor; |
||||
import org.bukkit.command.Command; |
||||
import org.bukkit.command.CommandSender; |
||||
import org.bukkit.command.TabExecutor; |
||||
import org.bukkit.entity.Player; |
||||
import xyz.soukup.discordauthorizator.DiscordAuthorizator; |
||||
|
||||
import java.util.ArrayList; |
||||
import java.util.HashMap; |
||||
import java.util.List; |
||||
|
||||
public class r implements TabExecutor { |
||||
public static HashMap<Player, Player> lastMessaged = new HashMap<>(); |
||||
@Override |
||||
public boolean onCommand(CommandSender commandSender, Command command, String s, String[] strings) { |
||||
Player player = (Player) commandSender; |
||||
if (!lastMessaged.containsKey(player)){ |
||||
player.sendMessage(ChatColor.RED + "Nemáš komu rychle odpovědět"); |
||||
return false; |
||||
} |
||||
if (!lastMessaged.get(player).isOnline()){ |
||||
player.sendMessage(ChatColor.RED + "Hráč se kterým sis psal již není online"); |
||||
return false; |
||||
} |
||||
StringBuilder message = new StringBuilder(); |
||||
for (String string : strings) { |
||||
message.append(" ").append(string); |
||||
} |
||||
Player playerTo = lastMessaged.get(player); |
||||
player.sendMessage(ChatColor.translateAlternateColorCodes('&', "&4&l<<&f"+ playerTo.getDisplayName() + "&4&l<<&f" + message)); |
||||
playerTo.sendMessage(ChatColor.translateAlternateColorCodes('&', "&2&l>>&f"+ player.getDisplayName() + "&2&l>>&f" + message)); |
||||
|
||||
return true; |
||||
} |
||||
|
||||
@Override |
||||
public List<String> onTabComplete(CommandSender commandSender, Command command, String s, String[] strings) { |
||||
List<String> l = new ArrayList<>(); |
||||
l.add("<zpráva>"); |
||||
return l; |
||||
} |
||||
} |
||||
@ -0,0 +1,140 @@ |
||||
package xyz.soukup.discordauthorizator.commands; |
||||
|
||||
import net.dv8tion.jda.api.EmbedBuilder; |
||||
import net.dv8tion.jda.api.entities.Message; |
||||
import net.dv8tion.jda.api.entities.User; |
||||
import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent; |
||||
import net.dv8tion.jda.api.events.interaction.component.ButtonInteractionEvent; |
||||
import net.dv8tion.jda.api.hooks.ListenerAdapter; |
||||
import net.dv8tion.jda.api.interactions.components.ActionRow; |
||||
import net.dv8tion.jda.api.interactions.components.buttons.Button; |
||||
import net.dv8tion.jda.api.interactions.components.text.TextInput; |
||||
import net.dv8tion.jda.api.interactions.components.text.TextInputStyle; |
||||
import net.dv8tion.jda.api.interactions.modals.Modal; |
||||
import org.bukkit.Bukkit; |
||||
import org.bukkit.configuration.file.FileConfiguration; |
||||
import org.bukkit.scheduler.BukkitScheduler; |
||||
import xyz.soukup.discordauthorizator.DiscordAuthorizator; |
||||
|
||||
import java.awt.*; |
||||
import java.io.IOException; |
||||
import java.time.Instant; |
||||
import java.time.temporal.ChronoUnit; |
||||
import java.util.ArrayList; |
||||
import java.util.HashMap; |
||||
import java.util.List; |
||||
import java.util.Objects; |
||||
import java.util.function.Consumer; |
||||
|
||||
public class voting extends ListenerAdapter { |
||||
public static HashMap<Message, HashMap<String, Object>> activeVotings = new HashMap<>(); |
||||
DiscordAuthorizator plugin = DiscordAuthorizator.getPlugin(DiscordAuthorizator.class); |
||||
FileConfiguration config = plugin.getConfig(); |
||||
|
||||
@Override |
||||
public void onSlashCommandInteraction(SlashCommandInteractionEvent event) { |
||||
|
||||
User user = event.getUser(); |
||||
if (event.getOption("hrac") != null){ |
||||
user = Objects.requireNonNull(event.getOption("hrac")).getAsUser(); |
||||
|
||||
} |
||||
String id = user.getId(); |
||||
int currentVotes = config.getInt("votes." + id); |
||||
if (event.getName().equals("add-votes")) { |
||||
int votesToAdd = Objects.requireNonNull(event.getOption("votes")).getAsInt(); |
||||
config.set("votes." + id, currentVotes + votesToAdd); |
||||
event.reply("připsáno. Hráč " + user.getName() + " má nyní " + config.getInt("votes." + id)) |
||||
.setEphemeral(true) |
||||
.queue(); |
||||
} |
||||
if (event.getName().equals("hlasy")){ |
||||
event.reply("Uživatel " + user.getAsMention() + " má nyní váhu hlasu " + currentVotes).setEphemeral(true).queue(); |
||||
} |
||||
if (event.getName().equals("hlasovat")){ |
||||
HashMap<String, Object> votingParameters = new HashMap<>(); |
||||
votingParameters.put("author", user); |
||||
String description = Objects.requireNonNull(event.getOption("popis")).getAsString(); |
||||
votingParameters.put("description", description); |
||||
votingParameters.put("yes", 0); |
||||
votingParameters.put("no", 0); |
||||
List<User> voters = new ArrayList<>(); |
||||
votingParameters.put("voters", voters); |
||||
EmbedBuilder eb = new EmbedBuilder(); |
||||
eb.setAuthor("Hlasování hráče " + user.getName() , null, user.getAvatarUrl()); |
||||
Instant now = Instant.now(); |
||||
Instant oneDayLater = now.plus(5, ChronoUnit.HOURS); |
||||
long unixTimestamp = oneDayLater.getEpochSecond(); |
||||
String formattedTimestamp = "<t:" + unixTimestamp + ":R>"; |
||||
votingParameters.put("formattedTimestamp", formattedTimestamp); |
||||
eb.setDescription(description + "\n\n```Pro: 0\nProti: 0```\n\nHlasování končí " + formattedTimestamp); |
||||
eb.setColor(Color.ORANGE); |
||||
event.reply("Hlasování vytvořeno").setEphemeral(true).queue(); |
||||
event.getChannel().sendMessageEmbeds(eb.build()) |
||||
.addActionRow( |
||||
Button.success("yes", "Souhlasím"), |
||||
Button.danger("no", "Nesouhlasím") |
||||
).queue(msg -> { |
||||
activeVotings.put(msg, votingParameters); |
||||
BukkitScheduler scheduler = Bukkit.getScheduler(); |
||||
msg.createThreadChannel("Diskuze k hlasování").queue(); |
||||
scheduler.runTaskLater(plugin, () -> { |
||||
HashMap<String, Object> voteData = activeVotings.get(msg); |
||||
msg.editMessageComponents().queue(); |
||||
int yes = (int) voteData.get("yes"); |
||||
int no = (int) voteData.get("no"); |
||||
eb.setColor(Color.RED); |
||||
if (yes > no){ |
||||
eb.setColor(Color.GREEN); |
||||
} |
||||
eb.setTitle("Hlasování skončilo"); |
||||
eb.setDescription(description + "\n\n```Pro: "+ yes +"\nProti: "+ no +"```"); |
||||
msg.editMessageEmbeds(eb.build()).queue(); |
||||
activeVotings.remove(msg); |
||||
|
||||
}, 20L * 3600L*5L /*<-- the delay */); |
||||
}); |
||||
} |
||||
} |
||||
@Override |
||||
public void onButtonInteraction(ButtonInteractionEvent event) { |
||||
if (!(event.getComponentId().equals("yes") || event.getComponentId().equals("no"))){ |
||||
return; |
||||
} |
||||
Message message = event.getMessage(); |
||||
plugin.getLogger().info(message.getId()); |
||||
HashMap<String, Object> voteData = activeVotings.get(message); |
||||
User user = event.getUser(); |
||||
User author = (User) voteData.get("author"); |
||||
String id = user.getId(); |
||||
int currentVotes = config.getInt("votes." + id); |
||||
int yes = (int) voteData.get("yes"); |
||||
int no = (int) voteData.get("no"); |
||||
List<User> voters = (List<User>) voteData.get("voters"); |
||||
if (voters.contains(user)){ |
||||
event.reply("již jsi hlasoval.").setEphemeral(true).queue(); |
||||
return; |
||||
} |
||||
voters.add(user); |
||||
voteData.put("voters", voters); |
||||
if (event.getComponentId().equals("yes")){ |
||||
event.reply("Hlasoval jsi pro s váhou " + currentVotes).setEphemeral(true).queue(); |
||||
voteData.put("yes", yes+currentVotes); |
||||
yes = yes+currentVotes; |
||||
} |
||||
if (event.getComponentId().equals("no")){ |
||||
event.reply("Hlasoval jsi proti s váhou " + currentVotes).setEphemeral(true).queue(); |
||||
voteData.put("no", no+currentVotes); |
||||
no = no+currentVotes; |
||||
} |
||||
activeVotings.put(message, voteData); |
||||
String formattedTimestamp = (String) voteData.get("formattedTimestamp"); |
||||
String description = (String) voteData.get("description"); |
||||
EmbedBuilder eb = new EmbedBuilder(); |
||||
eb.setAuthor("Hlasování hráče " + author.getName() , null, author.getAvatarUrl()); |
||||
eb.setDescription(description + "\n\n```Pro: "+ yes +"\nProti: "+ no +"```\n\nHlasování končí " + formattedTimestamp); |
||||
eb.setColor(Color.ORANGE); |
||||
message.editMessageEmbeds(eb.build()).queue(); |
||||
|
||||
} |
||||
} |
||||
@ -0,0 +1,55 @@ |
||||
package xyz.soukup.discordauthorizator.events; |
||||
|
||||
import net.dv8tion.jda.api.JDA; |
||||
import net.dv8tion.jda.api.entities.Role; |
||||
import net.md_5.bungee.api.chat.*; |
||||
import net.md_5.bungee.api.chat.TextComponent; |
||||
import org.bukkit.Bukkit; |
||||
import org.bukkit.ChatColor; |
||||
import org.bukkit.configuration.file.FileConfiguration; |
||||
import org.bukkit.entity.Player; |
||||
import org.bukkit.event.EventHandler; |
||||
import org.bukkit.event.Listener; |
||||
import org.bukkit.event.player.AsyncPlayerChatEvent; |
||||
import xyz.soukup.discordauthorizator.DiscordAuthorizator; |
||||
|
||||
import java.awt.*; |
||||
import java.util.Objects; |
||||
|
||||
public class ChatEvent implements Listener { |
||||
|
||||
|
||||
@EventHandler |
||||
public void playerChatEvent(AsyncPlayerChatEvent event){ |
||||
String playerName = event.getPlayer().getDisplayName(); |
||||
TextComponent messageComponent = new TextComponent(); |
||||
TextComponent nameComponent = new TextComponent(playerName + ": "); |
||||
if (DiscordAuthorizator.playerColor.containsKey(playerName)){ |
||||
nameComponent.setColor(DiscordAuthorizator.playerColor.get(playerName)); |
||||
} |
||||
BaseComponent[] hoverText = new ComponentBuilder(ChatColor.GREEN + "[Klikni pro napsání zprávy hráči]").create(); |
||||
if(DiscordAuthorizator.playerRole.containsKey(playerName)){ |
||||
Role role = DiscordAuthorizator.playerRole.get(playerName); |
||||
net.md_5.bungee.api.ChatColor color = DiscordAuthorizator.playerColor.get(playerName); |
||||
hoverText = new ComponentBuilder( |
||||
ChatColor.YELLOW + "" + ChatColor.BOLD + playerName + |
||||
"\n" + color + role.getName() + "\n\n" |
||||
+ ChatColor.GREEN + "[Klikni pro napsání zprávy]" |
||||
|
||||
).create(); |
||||
|
||||
} |
||||
nameComponent.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, hoverText)); |
||||
nameComponent.setClickEvent(new ClickEvent(ClickEvent.Action.SUGGEST_COMMAND, "/msg " + playerName + " ")); |
||||
messageComponent.addExtra(nameComponent); |
||||
messageComponent.addExtra(ChatColor.WHITE + event.getMessage()); |
||||
event.setCancelled(true); |
||||
JDA jda = DiscordAuthorizator.getJDA(); |
||||
FileConfiguration config = DiscordAuthorizator.getPlugin(DiscordAuthorizator.class).getConfig(); |
||||
Objects.requireNonNull(jda.getTextChannelById(Objects.requireNonNull(config.getString("chat-channel")))).sendMessage("**" + playerName +"**: " + event.getMessage()).queue(); |
||||
DiscordAuthorizator.getPlugin(DiscordAuthorizator.class).getLogger().info(event.getPlayer().getDisplayName() + ": " + event.getMessage()); |
||||
for (Player p: Bukkit.getOnlinePlayers()){ |
||||
p.spigot().sendMessage(messageComponent); |
||||
} |
||||
} |
||||
} |
||||
@ -0,0 +1,34 @@ |
||||
package xyz.soukup.discordauthorizator.events; |
||||
|
||||
import net.dv8tion.jda.api.events.message.MessageReceivedEvent; |
||||
import net.dv8tion.jda.api.hooks.ListenerAdapter; |
||||
import net.md_5.bungee.api.chat.ComponentBuilder; |
||||
import net.md_5.bungee.api.chat.HoverEvent; |
||||
import net.md_5.bungee.api.chat.TextComponent; |
||||
import org.bukkit.Bukkit; |
||||
import org.bukkit.ChatColor; |
||||
import org.bukkit.configuration.file.FileConfiguration; |
||||
import org.bukkit.entity.Player; |
||||
import xyz.soukup.discordauthorizator.DiscordAuthorizator; |
||||
|
||||
import java.util.Objects; |
||||
|
||||
public class DiscordSendMessage extends ListenerAdapter { |
||||
public void onMessageReceived(MessageReceivedEvent event){ |
||||
FileConfiguration config = DiscordAuthorizator.getPlugin(DiscordAuthorizator.class).getConfig(); |
||||
if (event.getChannel().getId().equals(config.getString("chat-channel")) && !event.getAuthor().isBot()){ |
||||
TextComponent content = new TextComponent(event.getMessage().getContentStripped()); |
||||
TextComponent sentFromDiscord = new TextComponent(net.md_5.bungee.api.ChatColor.DARK_PURPLE + "[D] "); |
||||
sentFromDiscord.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder(ChatColor.LIGHT_PURPLE + "Odesláno z discordu").create())); |
||||
TextComponent name = new TextComponent(event.getAuthor().getName() + ": "); |
||||
name.setColor(DiscordAuthorizator.convertToChatColor(Objects.requireNonNull(Objects.requireNonNull(event.getMember()).getColor()))); |
||||
TextComponent message = new TextComponent(); |
||||
message.addExtra(sentFromDiscord); |
||||
message.addExtra(name); |
||||
message.addExtra(content); |
||||
for (Player p: Bukkit.getOnlinePlayers()){ |
||||
p.spigot().sendMessage(message); |
||||
} |
||||
} |
||||
} |
||||
} |
||||
@ -0,0 +1,25 @@ |
||||
package xyz.soukup.discordauthorizator.events; |
||||
|
||||
import net.dv8tion.jda.api.EmbedBuilder; |
||||
import net.dv8tion.jda.api.JDA; |
||||
import org.bukkit.configuration.file.FileConfiguration; |
||||
import org.bukkit.event.EventHandler; |
||||
import org.bukkit.event.Listener; |
||||
import org.bukkit.event.entity.PlayerDeathEvent; |
||||
import xyz.soukup.discordauthorizator.DiscordAuthorizator; |
||||
|
||||
import java.awt.*; |
||||
import java.util.Objects; |
||||
|
||||
public class playerDie implements Listener { |
||||
@EventHandler |
||||
public void playerDied(PlayerDeathEvent event){ |
||||
JDA jda = DiscordAuthorizator.getJDA(); |
||||
EmbedBuilder eb = new EmbedBuilder(); |
||||
eb.setColor(Color.DARK_GRAY); |
||||
eb.setAuthor(event.getDeathMessage(), null, "https://mc-heads.net/avatar/" + event.getEntity().getDisplayName()); |
||||
FileConfiguration config = DiscordAuthorizator.getPlugin(DiscordAuthorizator.class).getConfig(); |
||||
Objects.requireNonNull(jda.getTextChannelById(Objects.requireNonNull(config.getString("chat-channel")))).sendMessageEmbeds(eb.build()).queue(); |
||||
|
||||
} |
||||
} |
||||
@ -0,0 +1,19 @@ |
||||
package xyz.soukup.discordauthorizator.events; |
||||
|
||||
import org.bukkit.Bukkit; |
||||
import org.bukkit.event.EventHandler; |
||||
import org.bukkit.event.Listener; |
||||
import org.bukkit.event.player.PlayerJoinEvent; |
||||
import xyz.soukup.discordauthorizator.DiscordAuthorizator; |
||||
|
||||
public class playerJoin implements Listener { |
||||
@EventHandler |
||||
public void playerQuit(PlayerJoinEvent event){ |
||||
Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(DiscordAuthorizator.getPlugin(DiscordAuthorizator.class), new Runnable(){ |
||||
@Override |
||||
public void run(){ |
||||
DiscordAuthorizator.updateStatus(); |
||||
} |
||||
}, 30L); |
||||
} |
||||
} |
||||
@ -0,0 +1,35 @@ |
||||
package xyz.soukup.discordauthorizator.events; |
||||
|
||||
import net.dv8tion.jda.api.EmbedBuilder; |
||||
import net.dv8tion.jda.api.JDA; |
||||
import org.bukkit.Bukkit; |
||||
import org.bukkit.configuration.file.FileConfiguration; |
||||
import org.bukkit.entity.Player; |
||||
import org.bukkit.event.EventHandler; |
||||
import org.bukkit.event.Listener; |
||||
import org.bukkit.event.player.PlayerQuitEvent; |
||||
import xyz.soukup.discordauthorizator.DiscordAuthorizator; |
||||
|
||||
import javax.security.auth.kerberos.KerberosTicket; |
||||
import java.awt.*; |
||||
import java.util.Objects; |
||||
|
||||
public class playerLeave implements Listener { |
||||
@EventHandler |
||||
public void playerQuit(PlayerQuitEvent event){ |
||||
JDA jda = DiscordAuthorizator.getJDA(); |
||||
EmbedBuilder eb = new EmbedBuilder(); |
||||
eb.setColor(Color.RED); |
||||
eb.setAuthor("Hráč " + event.getPlayer().getDisplayName() + " se odpojil", null, "https://mc-heads.net/avatar/" + event.getPlayer().getDisplayName()); |
||||
FileConfiguration config = DiscordAuthorizator.getPlugin(DiscordAuthorizator.class).getConfig(); |
||||
Objects.requireNonNull(jda.getTextChannelById(Objects.requireNonNull(config.getString("chat-channel")))).sendMessageEmbeds(eb.build()).queue(); |
||||
|
||||
Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(DiscordAuthorizator.getPlugin(DiscordAuthorizator.class), new Runnable(){ |
||||
@Override |
||||
public void run(){ |
||||
DiscordAuthorizator.updateStatus(); |
||||
} |
||||
}, 30L); |
||||
} |
||||
} |
||||
|
||||
@ -0,0 +1,102 @@ |
||||
package xyz.soukup.discordauthorizator.events; |
||||
|
||||
import net.dv8tion.jda.api.EmbedBuilder; |
||||
import net.dv8tion.jda.api.JDA; |
||||
import net.dv8tion.jda.api.entities.Guild; |
||||
import org.bukkit.ChatColor; |
||||
import org.bukkit.Color; |
||||
import org.bukkit.configuration.file.FileConfiguration; |
||||
import org.bukkit.event.EventHandler; |
||||
import org.bukkit.event.Listener; |
||||
import org.bukkit.event.player.AsyncPlayerPreLoginEvent; |
||||
|
||||
import xyz.soukup.discordauthorizator.DiscordAuthorizator; |
||||
|
||||
import java.util.*; |
||||
|
||||
public class playerLogin implements Listener { |
||||
public static HashMap<String, List<String>> playersToVerify = new HashMap<>(); |
||||
public static HashMap<String, List<String>> ipToAdd = new HashMap<>(); |
||||
@EventHandler |
||||
public static void playerJoinEvent(AsyncPlayerPreLoginEvent event){ |
||||
FileConfiguration config = DiscordAuthorizator.getPlugin(DiscordAuthorizator.class).getConfig(); |
||||
List<String> ipsAuthorized = config.getStringList("players." + event.getName() + ".authorized-ips"); |
||||
DiscordAuthorizator.getPlugin(DiscordAuthorizator.class).getLogger().info("Nové připojení z ip " + event.getAddress()); |
||||
if (!ipsAuthorized.isEmpty()){ |
||||
if (!ipsAuthorized.contains(Objects.requireNonNull(event.getAddress()).toString())){ |
||||
String kickMessage = "&6&lK&f&lN&6&lK&f&lS" |
||||
+ "\n\n&6&lPřihlašuješ se z nové IP" |
||||
+ "\n\n&fPoslali jsme ti na tvůj discord účet zprávu" |
||||
+ "\n&fKlikni na &3přidat ip &f a připoj se znovu" |
||||
+ "\n\n&6&lZpráva nepřišla?" |
||||
+ "\n&fMůžeš použít příkaz &3/authorize &f na našem discordu" |
||||
+ "\n\n\n&7Tvá IP bude uložena, aby jsi se mohl přihlásit" |
||||
+ "\n&7bez nutnosti zadávání hesla.";; |
||||
|
||||
ipToAdd.put(config.getString("players."+ event.getName() + ".discord"), List.of(event.getName(), event.getAddress().toString())); |
||||
event.disallow(AsyncPlayerPreLoginEvent.Result.KICK_OTHER, ChatColor.translateAlternateColorCodes('&', kickMessage)); |
||||
return; |
||||
} |
||||
JDA jda = DiscordAuthorizator.getJDA(); |
||||
Guild guild = jda.getGuildById(Objects.requireNonNull(config.getString("guild"))); |
||||
assert guild != null; |
||||
String id = config.getString("players." + event.getName() + ".discord"); |
||||
assert id != null; |
||||
Color color; |
||||
guild.retrieveMemberById(id).queue( |
||||
member -> { |
||||
net.md_5.bungee.api.ChatColor memberColor = DiscordAuthorizator.convertToChatColor(Objects.requireNonNull(member.getColor())); |
||||
DiscordAuthorizator.playerColor.put(event.getName(), memberColor); |
||||
DiscordAuthorizator.playerRole.put(event.getName(), member.getRoles().get(0)); |
||||
DiscordAuthorizator.updateStatus(); |
||||
EmbedBuilder eb = new EmbedBuilder(); |
||||
eb.setColor(java.awt.Color.GREEN); |
||||
eb.setAuthor("Hráč " + event.getName() + " se připojil", null, "https://mc-heads.net/avatar/" + event.getName()); |
||||
Objects.requireNonNull(jda.getTextChannelById(Objects.requireNonNull(config.getString("chat-channel")))).sendMessageEmbeds(eb.build()).queue(); |
||||
|
||||
}, |
||||
throwable -> { |
||||
// Error: Member was not found or an error occurred
|
||||
String kickMessage = "&6&lK&f&lN&6&lK&f&lS" |
||||
+ "\n\n&c&lNejsi na našem discordu" |
||||
+ "\n\n&fPro hraní na našem server se musíš připojit na discord:" |
||||
+ "&bdiscord.gg/EK2n7TEQ4H"; |
||||
event.disallow(AsyncPlayerPreLoginEvent.Result.KICK_OTHER, ChatColor.translateAlternateColorCodes('&', kickMessage)); |
||||
|
||||
} |
||||
); |
||||
|
||||
}else { |
||||
String code = generateCode(); |
||||
playersToVerify.put(event.getName(), List.of(event.getAddress().toString(), code)); |
||||
String kickMessage = "&6&lK&f&lN&6&lK&f&lS" |
||||
+ "\n\n&cNejsi na whitelistu, &fale můžeš být ;)" |
||||
+ "\n\n" |
||||
+ "\n&f1) Zapamatuj si tento kód: &b" + code |
||||
+ "\n&f2) Připoj se na náš discord: &bdiscord.gg/EK2n7TEQ4H" |
||||
+ "\n&f3) Našemu discord botovi napiš příkaz &b/link" |
||||
+ "\n&f4) Zadej svůj nick a kód" |
||||
+ "\n&f5) znovu se připoj!" |
||||
+ "\n\n\n&7Tvá IP bude uložena, aby jsi se mohl přihlásit" |
||||
+ "\n&7bez nutnosti zadávání hesla."; |
||||
event.disallow(AsyncPlayerPreLoginEvent.Result.KICK_WHITELIST, ChatColor.translateAlternateColorCodes('&', kickMessage)); |
||||
} |
||||
} |
||||
|
||||
public static String generateCode(){ |
||||
|
||||
int leftLimit = 48; // numeral '0'
|
||||
int rightLimit = 122; // letter 'z'
|
||||
int targetStringLength = 4; |
||||
Random random = new Random(); |
||||
|
||||
String generatedString = random.ints(leftLimit, rightLimit + 1) |
||||
.filter(i -> (i <= 57 || i >= 65) && (i <= 90 || i >= 97)) |
||||
.limit(targetStringLength) |
||||
.collect(StringBuilder::new, StringBuilder::appendCodePoint, StringBuilder::append) |
||||
.toString(); |
||||
|
||||
return generatedString.toUpperCase(); |
||||
|
||||
} |
||||
} |
||||
@ -0,0 +1,5 @@ |
||||
token: MTI1MTg1MjY2NDI2Mjg4NTQzNw.GB6jIc.QRulRHK5J-I88jvzCUkoKcx8r4vW2DrBOxHlR4 |
||||
authorized-role: 1236261645723111465 |
||||
guild: 1161967821815808030 |
||||
chat-channel: 1247447721175027744 |
||||
|
||||
@ -0,0 +1,9 @@ |
||||
name: DiscordAuthorizator |
||||
version: '${project.version}' |
||||
main: xyz.soukup.discordauthorizator.DiscordAuthorizator |
||||
api-version: '1.18' |
||||
commands: |
||||
msg: |
||||
description: makes you send message to player |
||||
r: |
||||
description: quick response |
||||
@ -0,0 +1,5 @@ |
||||
token: MTI1MTg1MjY2NDI2Mjg4NTQzNw.GB6jIc.QRulRHK5J-I88jvzCUkoKcx8r4vW2DrBOxHlR4 |
||||
authorized-role: 1236261645723111465 |
||||
guild: 1161967821815808030 |
||||
chat-channel: 1247447721175027744 |
||||
|
||||
@ -0,0 +1,9 @@ |
||||
name: DiscordAuthorizator |
||||
version: '1.0-SNAPSHOT' |
||||
main: xyz.soukup.discordauthorizator.DiscordAuthorizator |
||||
api-version: '1.18' |
||||
commands: |
||||
msg: |
||||
description: makes you send message to player |
||||
r: |
||||
description: quick response |
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Loading…
Reference in new issue