0

Added basic bot functionality

This commit is contained in:
David Panić
2019-07-17 00:34:21 +02:00
parent 73e632044a
commit 2bd7a69e7e
15 changed files with 866 additions and 40 deletions

4
.gitignore vendored
View File

@@ -8,4 +8,6 @@ gradle-app.setting
!gradle-wrapper.jar
# Cache of project
.gradletasknamecache
.gradletasknamecache
start.sh

124
.idea/uiDesigner.xml generated Normal file
View File

@@ -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.png" 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.png" 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.png" 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.png" 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.png" 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.png" 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.png" 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.png" 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.png" 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.png" 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.png" 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.png" 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.png" 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.png" 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.png" 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.png" 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.png" 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.png" 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.png" 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.png" 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.png" 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.png" 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.png" 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.png" 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.png" 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.png" 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.png" 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>

6
.idea/vcs.xml generated Normal file
View File

@@ -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>

351
.idea/workspace.xml generated
View File

@@ -1,7 +1,23 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ChangeListManager">
<list default="true" id="a0677039-1784-42cf-9be3-936ffafcdb69" name="Default Changelist" comment="" />
<list default="true" id="a0677039-1784-42cf-9be3-936ffafcdb69" name="Default Changelist" comment="">
<change afterPath="$PROJECT_DIR$/.idea/uiDesigner.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/vcs.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/java/com/redstoner/redstonerBot/Env.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/java/com/redstoner/redstonerBot/Manager.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/java/com/redstoner/redstonerBot/commands/Command.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/java/com/redstoner/redstonerBot/commands/InfoCommand.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/java/com/redstoner/redstonerBot/commands/StopCommand.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/java/com/redstoner/redstonerBot/listeners/MessageReceived.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/java/com/redstoner/redstonerBot/managers/CommandManager.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/java/com/redstoner/redstonerBot/managers/DataManager.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/java/com/redstoner/redstonerBot/managers/DiscordManager.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/.gitignore" beforeDir="false" afterPath="$PROJECT_DIR$/.gitignore" afterDir="false" />
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/build.gradle" beforeDir="false" afterPath="$PROJECT_DIR$/build.gradle" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/main/java/com/redstoner/redstonerBot/Main.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/com/redstoner/redstonerBot/Main.java" afterDir="false" />
</list>
<ignored path="$PROJECT_DIR$/out/" />
<ignored path="$PROJECT_DIR$/.gradle/" />
<ignored path="$PROJECT_DIR$/build/" />
@@ -22,25 +38,85 @@
</projectState>
</component>
<component name="FileEditorManager">
<leaf>
<leaf SIDE_TABS_SIZE_LIMIT_KEY="300">
<file pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/build.gradle">
<entry file="file://$PROJECT_DIR$/src/main/java/com/redstoner/redstonerBot/Main.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="345">
<caret line="23" column="65" selection-start-line="23" selection-start-column="65" selection-end-line="23" selection-end-column="65" />
<state relative-caret-position="76">
<caret line="16" column="24" selection-start-line="16" selection-start-column="24" selection-end-line="16" selection-end-column="24" />
<folding>
<element signature="imports" expanded="true" />
</folding>
</state>
</provider>
</entry>
</file>
<file pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/src/main/java/com/redstoner/redstonerBot/managers/CommandManager.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="346">
<caret line="37" column="44" selection-start-line="37" selection-start-column="44" selection-end-line="37" selection-end-column="44" />
<folding>
<element signature="imports" expanded="true" />
</folding>
</state>
</provider>
</entry>
</file>
<file pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/src/main/java/com/redstoner/redstonerBot/commands/InfoCommand.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="285">
<caret line="19" column="8" selection-start-line="19" selection-start-column="8" selection-end-line="19" selection-end-column="93" />
<folding>
<element signature="imports" expanded="true" />
</folding>
</state>
</provider>
</entry>
</file>
<file pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/src/main/java/com/redstoner/redstonerBot/commands/StopCommand.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="330">
<caret line="22" column="20" lean-forward="true" selection-start-line="22" selection-start-column="20" selection-end-line="22" selection-end-column="20" />
<folding>
<element signature="imports" expanded="true" />
</folding>
</state>
</provider>
</entry>
</file>
<file pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/src/main/java/com/redstoner/redstonerBot/commands/Command.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="75">
<caret line="5" column="128" selection-start-line="5" selection-start-column="128" selection-end-line="5" selection-end-column="128" />
</state>
</provider>
</entry>
</file>
<file pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/src/main/java/com/redstoner/redstonerBot/listeners/MessageReceived.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="135">
<caret line="19" column="39" selection-start-line="19" selection-start-column="39" selection-end-line="19" selection-end-column="39" />
<folding>
<element signature="imports" expanded="true" />
</folding>
</state>
</provider>
</entry>
</file>
<file pinned="false" current-in-tab="true">
<entry file="file://$PROJECT_DIR$/src/main/java/com/redstoner/redstonerBot/Main.java">
<entry file="file://$PROJECT_DIR$/src/main/java/com/redstoner/redstonerBot/managers/DiscordManager.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="135">
<caret line="9" column="48" selection-start-line="9" selection-start-column="48" selection-end-line="9" selection-end-column="48" />
<state relative-caret-position="525">
<caret line="53" column="20" selection-start-line="53" selection-start-column="20" selection-end-line="53" selection-end-column="20" />
<folding>
<element signature="imports" expanded="true" />
<element signature="e#237#238#0" expanded="true" />
<element signature="e#283#284#0" expanded="true" />
<element signature="e#1948#1949#0" expanded="true" />
<element signature="e#2038#2039#0" expanded="true" />
</folding>
</state>
</provider>
@@ -51,16 +127,34 @@
<component name="FileTemplateManagerImpl">
<option name="RECENT_TEMPLATES">
<list>
<option value="Interface" />
<option value="Class" />
</list>
</option>
</component>
<component name="Git.Settings">
<option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
</component>
<component name="IdeDocumentHistory">
<option name="CHANGED_PATHS">
<list>
<option value="$PROJECT_DIR$/.gitignore" />
<option value="$PROJECT_DIR$/build.gradle" />
<option value="$PROJECT_DIR$/src/main/java/com/redstoner/redstonerBot/Env.java" />
<option value="$PROJECT_DIR$/src/main/java/com/redstoner/redstonerBot/DataManager.java" />
<option value="$PROJECT_DIR$/src/main/java/com/redstoner/redstonerBot/managers/Manager.java" />
<option value="$PROJECT_DIR$/src/main/java/com/redstoner/redstonerBot/Manager.java" />
<option value="$PROJECT_DIR$/src/main/java/com/redstoner/redstonerBot/command/Executor.java" />
<option value="$PROJECT_DIR$/src/main/java/com/redstoner/redstonerBot/commands/Executor.java" />
<option value="$PROJECT_DIR$/src/main/java/com/redstoner/redstonerBot/commands/InfoCommandExecutor.java" />
<option value="$PROJECT_DIR$/src/main/java/com/redstoner/redstonerBot/commands/Command.java" />
<option value="$PROJECT_DIR$/src/main/java/com/redstoner/redstonerBot/listeners/MessageReceived.java" />
<option value="$PROJECT_DIR$/.gitignore" />
<option value="$PROJECT_DIR$/src/main/java/com/redstoner/redstonerBot/managers/CommandManager.java" />
<option value="$PROJECT_DIR$/src/main/java/com/redstoner/redstonerBot/commands/InfoCommand.java" />
<option value="$PROJECT_DIR$/src/main/java/com/redstoner/redstonerBot/commands/StopCommand.java" />
<option value="$PROJECT_DIR$/src/main/java/com/redstoner/redstonerBot/managers/DataManager.java" />
<option value="$PROJECT_DIR$/src/main/java/com/redstoner/redstonerBot/Main.java" />
<option value="$PROJECT_DIR$/src/main/java/com/redstoner/redstonerBot/managers/DiscordManager.java" />
</list>
</option>
</component>
@@ -69,13 +163,14 @@
<option name="width" value="1260" />
<option name="height" value="787" />
</component>
<component name="ProjectLevelVcsManager" settingsEditedManually="true">
<ConfirmationsSetting value="1" id="Add" />
</component>
<component name="ProjectView">
<navigator proportions="" version="1">
<foldersAlwaysOnTop value="true" />
</navigator>
<panes>
<pane id="PackagesPane" />
<pane id="Scope" />
<pane id="ProjectPane">
<subPane>
<expand>
@@ -109,13 +204,43 @@
<item name="java" type="462c0819:PsiDirectoryNode" />
<item name="redstonerBot" type="462c0819:PsiDirectoryNode" />
</path>
<path>
<item name="redstonerBot" type="b2602c69:ProjectViewProjectNode" />
<item name="redstonerBot" type="8a07ba80:GradleTreeStructureProvider$GradleModuleDirectoryNode" />
<item name="src" type="462c0819:PsiDirectoryNode" />
<item name="main" type="8a07ba80:GradleTreeStructureProvider$GradleModuleDirectoryNode" />
<item name="java" type="462c0819:PsiDirectoryNode" />
<item name="redstonerBot" type="462c0819:PsiDirectoryNode" />
<item name="commands" type="462c0819:PsiDirectoryNode" />
</path>
<path>
<item name="redstonerBot" type="b2602c69:ProjectViewProjectNode" />
<item name="redstonerBot" type="8a07ba80:GradleTreeStructureProvider$GradleModuleDirectoryNode" />
<item name="src" type="462c0819:PsiDirectoryNode" />
<item name="main" type="8a07ba80:GradleTreeStructureProvider$GradleModuleDirectoryNode" />
<item name="java" type="462c0819:PsiDirectoryNode" />
<item name="redstonerBot" type="462c0819:PsiDirectoryNode" />
<item name="listeners" type="462c0819:PsiDirectoryNode" />
</path>
<path>
<item name="redstonerBot" type="b2602c69:ProjectViewProjectNode" />
<item name="redstonerBot" type="8a07ba80:GradleTreeStructureProvider$GradleModuleDirectoryNode" />
<item name="src" type="462c0819:PsiDirectoryNode" />
<item name="main" type="8a07ba80:GradleTreeStructureProvider$GradleModuleDirectoryNode" />
<item name="java" type="462c0819:PsiDirectoryNode" />
<item name="redstonerBot" type="462c0819:PsiDirectoryNode" />
<item name="managers" type="462c0819:PsiDirectoryNode" />
</path>
</expand>
<select />
</subPane>
</pane>
<pane id="PackagesPane" />
<pane id="Scope" />
</panes>
</component>
<component name="PropertiesComponent">
<property name="SHARE_PROJECT_CONFIGURATION_FILES" value="true" />
<property name="last_opened_file_path" value="$USER_HOME$/spam" />
<property name="settings.editor.selected.configurable" value="copyright.profiles" />
</component>
@@ -148,17 +273,13 @@
<frame x="1280" y="27" width="1920" height="1053" extended-state="6" />
<editor active="true" />
<layout>
<window_info id="Image Layers" />
<window_info id="Designer" />
<window_info id="UI Designer" />
<window_info id="Capture Tool" />
<window_info id="Favorites" side_tool="true" />
<window_info content_ui="combo" id="Project" order="0" visible="true" weight="0.24973261" />
<window_info content_ui="combo" id="Project" order="0" visible="true" weight="0.2529412" />
<window_info id="Structure" order="1" side_tool="true" weight="0.25" />
<window_info anchor="bottom" id="Version Control" />
<window_info active="true" anchor="bottom" id="Terminal" visible="true" weight="0.19146608" />
<window_info anchor="bottom" id="Event Log" side_tool="true" />
<window_info anchor="bottom" id="Build" weight="0.32932165" />
<window_info id="Image Layers" order="2" />
<window_info id="Designer" order="3" />
<window_info id="Capture Tool" order="4" />
<window_info id="UI Designer" order="5" />
<window_info id="Favorites" order="6" side_tool="true" />
<window_info anchor="bottom" id="Message" order="0" />
<window_info anchor="bottom" id="Find" order="1" />
<window_info anchor="bottom" id="Run" order="2" />
@@ -166,43 +287,197 @@
<window_info anchor="bottom" id="Cvs" order="4" weight="0.25" />
<window_info anchor="bottom" id="Inspection" order="5" weight="0.4" />
<window_info anchor="bottom" id="TODO" order="6" />
<window_info anchor="right" id="Palette" />
<window_info anchor="right" id="Gradle" />
<window_info anchor="right" id="Theme Preview" />
<window_info anchor="right" id="Maven" />
<window_info anchor="right" id="Capture Analysis" />
<window_info anchor="right" id="Palette&#9;" />
<window_info active="true" anchor="bottom" id="Terminal" order="7" visible="true" weight="0.19251925" />
<window_info anchor="bottom" id="Event Log" order="8" side_tool="true" />
<window_info anchor="bottom" id="Version Control" order="9" />
<window_info anchor="bottom" id="Build" order="10" weight="0.32893288" />
<window_info anchor="right" id="Commander" internal_type="SLIDING" order="0" type="SLIDING" weight="0.4" />
<window_info anchor="right" id="Ant Build" order="1" weight="0.25" />
<window_info anchor="right" content_ui="combo" id="Hierarchy" order="2" weight="0.25" />
<window_info anchor="right" id="Palette" order="3" />
<window_info anchor="right" id="Maven" order="4" />
<window_info anchor="right" id="Gradle" order="5" />
<window_info anchor="right" id="Theme Preview" order="6" />
<window_info anchor="right" id="Capture Analysis" order="7" />
<window_info anchor="right" id="Palette&#9;" order="8" />
</layout>
</component>
<component name="editorHistoryManager">
<entry file="file://$PROJECT_DIR$/settings.gradle">
<provider selected="true" editor-type-id="text-editor" />
</entry>
<entry file="file://$PROJECT_DIR$/.gitignore">
<entry file="file://$PROJECT_DIR$/src/main/java/com/redstoner/redstonerBot/Manager.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="150">
<caret line="10" column="20" lean-forward="true" selection-start-line="10" selection-start-column="20" selection-end-line="10" selection-end-column="20" />
<state relative-caret-position="60">
<caret line="4" column="11" selection-start-line="4" selection-start-column="11" selection-end-line="4" selection-end-column="11" />
</state>
</provider>
</entry>
<entry file="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/net.dv8tion/JDA/3.8.3_464/176505182d1f7f57084a44e75c12caa08a19eaec/JDA-3.8.3_464-sources.jar!/net/dv8tion/jda/core/JDA.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="234">
<caret line="1100" column="9" selection-start-line="1100" selection-start-column="9" selection-end-line="1100" selection-end-column="9" />
</state>
</provider>
</entry>
<entry file="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/net.dv8tion/JDA/3.8.3_464/176505182d1f7f57084a44e75c12caa08a19eaec/JDA-3.8.3_464-sources.jar!/net/dv8tion/jda/core/entities/Message.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="324">
<caret line="345" column="11" selection-start-line="345" selection-start-column="11" selection-end-line="345" selection-end-column="11" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/main/java/com/redstoner/redstonerBot/managers/ConfigManager.java" />
<entry file="jar:///usr/lib/jvm/java-8-openjdk/src.zip!/java/sql/Connection.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="504">
<caret line="137" column="22" selection-start-line="137" selection-start-column="22" selection-end-line="137" selection-end-column="22" />
</state>
</provider>
</entry>
<entry file="jar:///usr/lib/jvm/java-8-openjdk/src.zip!/java/sql/PreparedStatement.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="234">
<caret line="235" column="9" selection-start-line="235" selection-start-column="9" selection-end-line="235" selection-end-column="9" />
</state>
</provider>
</entry>
<entry file="jar:///usr/lib/jvm/java-8-openjdk/src.zip!/java/util/Map.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="279">
<caret line="211" column="6" selection-start-line="211" selection-start-column="6" selection-end-line="211" selection-end-column="6" />
</state>
</provider>
</entry>
<entry file="jar:///usr/lib/jvm/java-8-openjdk/src.zip!/java/lang/String.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="324">
<caret line="1924" column="18" selection-start-line="1924" selection-start-column="18" selection-end-line="1924" selection-end-column="18" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/.gitignore">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="180">
<caret line="12" column="8" selection-start-line="12" selection-start-column="8" selection-end-line="12" selection-end-column="8" />
</state>
</provider>
</entry>
<entry file="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/net.dv8tion/JDA/3.8.3_464/176505182d1f7f57084a44e75c12caa08a19eaec/JDA-3.8.3_464-sources.jar!/net/dv8tion/jda/core/EmbedBuilder.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="234">
<caret line="239" column="35" lean-forward="true" selection-start-line="239" selection-start-column="35" selection-end-line="239" selection-end-column="35" />
<folding>
<element signature="e#8331#8332#0" expanded="true" />
<element signature="e#8375#8376#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/start.sh">
<provider selected="true" editor-type-id="text-editor" />
</entry>
<entry file="file://$PROJECT_DIR$/build.gradle">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="345">
<caret line="23" column="65" selection-start-line="23" selection-start-column="65" selection-end-line="23" selection-end-column="65" />
<state relative-caret-position="315">
<caret line="21" column="74" selection-start-line="21" selection-start-column="74" selection-end-line="21" selection-end-column="74" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/main/java/com/redstoner/redstonerBot/commands/Command.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="75">
<caret line="5" column="128" selection-start-line="5" selection-start-column="128" selection-end-line="5" selection-end-column="128" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/main/java/com/redstoner/redstonerBot/listeners/MessageReceived.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="135">
<caret line="19" column="39" selection-start-line="19" selection-start-column="39" selection-end-line="19" selection-end-column="39" />
<folding>
<element signature="imports" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/main/java/com/redstoner/redstonerBot/Env.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="75">
<caret line="5" column="69" selection-start-line="5" selection-start-column="59" selection-end-line="5" selection-end-column="69" />
</state>
</provider>
</entry>
<entry file="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/net.dv8tion/JDA/3.8.3_464/176505182d1f7f57084a44e75c12caa08a19eaec/JDA-3.8.3_464-sources.jar!/net/dv8tion/jda/core/requests/RestAction.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="144">
<caret line="299" column="16" selection-start-line="299" selection-start-column="16" selection-end-line="299" selection-end-column="16" />
<folding>
<element signature="e#13310#13311#0" expanded="true" />
<element signature="e#13343#13344#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/main/java/com/redstoner/redstonerBot/managers/CommandManager.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="346">
<caret line="37" column="44" selection-start-line="37" selection-start-column="44" selection-end-line="37" selection-end-column="44" />
<folding>
<element signature="imports" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/main/java/com/redstoner/redstonerBot/commands/InfoCommand.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="285">
<caret line="19" column="8" selection-start-line="19" selection-start-column="8" selection-end-line="19" selection-end-column="93" />
<folding>
<element signature="imports" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/main/java/com/redstoner/redstonerBot/commands/StopCommand.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="330">
<caret line="22" column="20" lean-forward="true" selection-start-line="22" selection-start-column="20" selection-end-line="22" selection-end-column="20" />
<folding>
<element signature="imports" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/main/java/com/redstoner/redstonerBot/managers/DataManager.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="315">
<caret line="21" column="64" selection-start-line="21" selection-start-column="64" selection-end-line="21" selection-end-column="64" />
<folding>
<element signature="imports" expanded="true" />
<element signature="e#2361#2362#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/main/java/com/redstoner/redstonerBot/Main.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="135">
<caret line="9" column="48" selection-start-line="9" selection-start-column="48" selection-end-line="9" selection-end-column="48" />
<state relative-caret-position="76">
<caret line="16" column="24" selection-start-line="16" selection-start-column="24" selection-end-line="16" selection-end-column="24" />
<folding>
<element signature="imports" expanded="true" />
<element signature="e#237#238#0" expanded="true" />
<element signature="e#283#284#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/main/java/com/redstoner/redstonerBot/managers/DiscordManager.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="525">
<caret line="53" column="20" selection-start-line="53" selection-start-column="20" selection-end-line="53" selection-end-column="20" />
<folding>
<element signature="imports" expanded="true" />
<element signature="e#1948#1949#0" expanded="true" />
<element signature="e#2038#2039#0" expanded="true" />
</folding>
</state>
</provider>

View File

@@ -16,7 +16,10 @@ repositories {
dependencies {
compile 'net.dv8tion:JDA:3.8.3_464'
compile 'com.sedmelluq:lavaplayer:1.3.17'
compile group: 'org.slf4j', name: 'slf4j-simple', version: '1.7.26'
compile group: 'mysql', name: 'mysql-connector-java', version: '8.0.16'
}
jar {

View File

@@ -0,0 +1,13 @@
package com.redstoner.redstonerBot;
public class Env {
public static final String TOKEN = System.getenv("TOKEN");
public static final String MYSQL_HOST = System.getenv("MYSQL_HOST");
public static final String MYSQL_PORT = System.getenv("MYSQL_PORT");
public static final String MYSQL_USER = System.getenv("MYSQL_USER");
public static final String MYSQL_PASS = System.getenv("MYSQL_PASS");
public static final String MYSQL_DB = System.getenv("MYSQL_DB");
}

View File

@@ -1,12 +1,62 @@
package com.redstoner.redstonerBot;
import com.redstoner.redstonerBot.managers.CommandManager;
import com.redstoner.redstonerBot.managers.DataManager;
import com.redstoner.redstonerBot.managers.DiscordManager;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class Main {
public static final Logger logger = LoggerFactory.getLogger(Main.class);
private static final Logger logger = LoggerFactory.getLogger(Main.class);
private static final List<Manager> managers = new ArrayList<>();
private static final List<Manager> loadedManagers = new ArrayList<>();
static {
managers.add(new DataManager());
managers.add(new DiscordManager());
managers.add(new CommandManager());
}
public static void main(final String... args) {
logger.info("Starting RedstonerBot...");
if (!start()) {
stop();
System.exit(1);
}
}
private static boolean start() {
loadedManagers.clear();
for (Manager m : managers) {
if (m.start()) {
loadedManagers.add(m);
} else {
return false;
}
}
return true;
}
public static boolean stop() {
for (Manager m : getReversedManagers()) {
if (!m.stop()) return false;
}
return true;
}
private static List<Manager> getReversedManagers() {
List<Manager> reversedManagers = new ArrayList<>(loadedManagers);
Collections.reverse(reversedManagers);
return reversedManagers;
}
}

View File

@@ -0,0 +1,6 @@
package com.redstoner.redstonerBot;
public interface Manager {
boolean start();
boolean stop();
}

View File

@@ -0,0 +1,7 @@
package com.redstoner.redstonerBot.commands;
import net.dv8tion.jda.core.entities.*;
public interface Command {
boolean execute(Guild guild, TextChannel channel, Message message, User author, Member self, String command, String[] params);
}

View File

@@ -0,0 +1,24 @@
package com.redstoner.redstonerBot.commands;
import com.redstoner.redstonerBot.managers.DiscordManager;
import net.dv8tion.jda.core.EmbedBuilder;
import net.dv8tion.jda.core.entities.*;
import java.awt.*;
public class InfoCommand implements Command {
@Override
public boolean execute(Guild guild, TextChannel channel, Message message, User author, Member self, String command, String[] params) {
EmbedBuilder embed = new EmbedBuilder();
embed.setTitle("Information");
embed.setDescription("This is a Discord bot built by psrcek for the Redstoner Guild.");
embed.setColor(Color.ORANGE);
embed.setFooter("Redstoner bot", "https://cdn.discordapp.com/avatars/576432236702859284/b08d4dc368b2e041ebb3fc208a2e8230.png");
message.getChannel().sendMessage(embed.build()).queue(DiscordManager::expireMessage);
return true;
}
}

View File

@@ -0,0 +1,25 @@
package com.redstoner.redstonerBot.commands;
import com.redstoner.redstonerBot.Main;
import com.redstoner.redstonerBot.managers.DiscordManager;
import net.dv8tion.jda.core.entities.*;
public class StopCommand implements Command {
@Override
public boolean execute(Guild guild, TextChannel channel, Message message, User author, Member self, String command, String[] params) {
if (!guild.getOwnerId().equals(author.getId())) return false;
message.getChannel().sendMessage("This bot will stop in 5 seconds, as requested by " + author.getAsTag()).queue(DiscordManager::expireMessage);
new Thread(() -> {
try {
Thread.sleep(6000);
} catch (InterruptedException ignored) {
}
Main.stop();
}).start();
return true;
}
}

View File

@@ -0,0 +1,43 @@
package com.redstoner.redstonerBot.listeners;
import com.redstoner.redstonerBot.managers.CommandManager;
import com.redstoner.redstonerBot.managers.DataManager;
import net.dv8tion.jda.core.Permission;
import net.dv8tion.jda.core.entities.*;
import net.dv8tion.jda.core.events.message.guild.GuildMessageReceivedEvent;
import net.dv8tion.jda.core.hooks.ListenerAdapter;
import net.dv8tion.jda.core.utils.Checks;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.Objects;
public class MessageReceived extends ListenerAdapter {
private static final Logger logger = LoggerFactory.getLogger(MessageReceived.class);
@Override
public final void onGuildMessageReceived(GuildMessageReceivedEvent event) {
Checks.notNull(event, "Event");
final Guild guild = event.getGuild();
final TextChannel channel = event.getChannel();
final Message message = event.getMessage();
final User author = event.getAuthor();
final Member self = guild.getSelfMember();
if (!Objects.equals(guild.getId(), DataManager.getConfigValue("guild_id"))) return;
if (author.isBot()) return;
if (message.isTTS()) return;
if (!self.hasPermission(channel, Permission.MESSAGE_WRITE)) return;
if (!self.hasPermission(channel, Permission.MESSAGE_EMBED_LINKS)) return;
String rawMessage = message.getContentRaw();
logger.info(author.getAsTag() + " -> " + rawMessage);
if (rawMessage.startsWith(DataManager.getConfigValue("prefix_char"))) {
CommandManager.execute(guild, channel, message, author, self);
}
}
}

View File

@@ -0,0 +1,61 @@
package com.redstoner.redstonerBot.managers;
import com.redstoner.redstonerBot.Manager;
import com.redstoner.redstonerBot.commands.Command;
import com.redstoner.redstonerBot.commands.InfoCommand;
import com.redstoner.redstonerBot.commands.StopCommand;
import net.dv8tion.jda.core.entities.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
public class CommandManager implements Manager {
private static final Logger logger = LoggerFactory.getLogger(CommandManager.class);
private static Map<String, Command> commands = new HashMap<>();
@Override
public boolean start() {
logger.info("Command Manager starting...");
commands.put("info", new InfoCommand());
commands.put("stop", new StopCommand());
logger.info("Command Manager started!");
return true;
}
@Override
public boolean stop() {
logger.info("Command Manager stopping...");
commands.clear();
logger.info("Command Manager stopped!");
return true;
}
public static void execute(Guild guild, TextChannel channel, Message message, User author, Member self) {
String rawMsg = message.getContentRaw();
String[] rawCmd = rawMsg.split(" ");
String cmd = rawCmd[0].substring(1);
String[] params = Arrays.copyOfRange(rawCmd, 1, rawCmd.length);
Command command = commands.get(cmd);
if (command == null) return;
logger.info("[" + message.getId() + "] User '" + author.getAsTag() + "' executed command " + cmd + " with parameters " + Arrays.toString(params));
if (command.execute(guild, channel, message, author, self, cmd, params)) {
logger.info("[" + message.getId() + "] Command executed successfully!");
} else {
logger.error("[" + message.getId() + "] Error while executing command!");
}
message.delete().reason("Redstoner Bot command execution").queue();
}
}

View File

@@ -0,0 +1,118 @@
package com.redstoner.redstonerBot.managers;
import com.redstoner.redstonerBot.Env;
import com.redstoner.redstonerBot.Manager;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class DataManager implements Manager {
private static final Logger logger = LoggerFactory.getLogger(DataManager.class);
private static final String[] requiredTables = { "config", "opt_in", "rules", "rule_agree_reactions" };
private static Map<String, String> config = new HashMap<>();
public boolean start() {
logger.info("Data Manager starting...");
if (checkConnection()) {
logger.info("Loading config...");
if (!loadConfig()) {
logger.error("Data Manager failed to load config!");
return false;
}
logger.info("Data Manager started!");
return true;
} else {
logger.error("Data Manager failed to start!");
return false;
}
}
public boolean stop() {
logger.info("Data Manager stopping...");
config.clear();
logger.info("Data Manager stopped!");
return true;
}
private static String getConnectionString() {
return "jdbc:mysql://"
+ Env.MYSQL_HOST + ":" + Env.MYSQL_PORT
+ "/" + Env.MYSQL_DB
+ "?useUnicode=true&characterEncoding=UTF-8"
+ "&user=" + Env.MYSQL_USER
+ "&password=" + Env.MYSQL_PASS;
}
private static Connection getConnection() throws SQLException {
return DriverManager.getConnection(getConnectionString());
}
private boolean checkConnection() {
try {
Class.forName("com.mysql.cj.jdbc.Driver");
Connection conn = getConnection();
ResultSet rs = conn.prepareStatement("show tables").executeQuery();
List<String> tables = new ArrayList<>();
while (rs.next()) {
tables.add(rs.getString(1));
}
conn.close();
for (String rt : requiredTables) {
if (!tables.contains(rt)) {
logger.error("The " + rt + " table is missing from the database!");
return false;
}
}
return true;
} catch (ClassNotFoundException | SQLException e) {
logger.error("SQL error:", e);
return false;
}
}
public static String getConfigValue(String name) {
return config.get(name);
}
public boolean loadConfig() {
config.clear();
try {
Connection conn = getConnection();
ResultSet rs = conn.prepareStatement("SELECT * FROM config").executeQuery();
while (rs.next()) {
String name = rs.getString(2);
String value = rs.getString(3);
config.put(name, value);
}
return true;
} catch (SQLException e) {
logger.error("SQL error:", e);
return false;
}
}
}

View File

@@ -0,0 +1,69 @@
package com.redstoner.redstonerBot.managers;
import com.redstoner.redstonerBot.Env;
import com.redstoner.redstonerBot.Manager;
import com.redstoner.redstonerBot.listeners.MessageReceived;
import net.dv8tion.jda.core.AccountType;
import net.dv8tion.jda.core.JDA;
import net.dv8tion.jda.core.JDABuilder;
import net.dv8tion.jda.core.entities.Guild;
import net.dv8tion.jda.core.entities.Message;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.security.auth.login.LoginException;
import java.util.concurrent.TimeUnit;
public class DiscordManager implements Manager {
private static final Logger logger = LoggerFactory.getLogger(DiscordManager.class);
private JDA jda;
public boolean start() {
logger.info("Discord Manager starting...");
try {
final JDABuilder builder = new JDABuilder(AccountType.BOT);
builder.setAutoReconnect(true);
builder.setAudioEnabled(true);
builder.setToken(Env.TOKEN);
builder.addEventListener(new MessageReceived());
jda = builder.build().awaitReady();
} catch (LoginException e) {
logger.error("The discord token is invalid!");
return false;
} catch (Throwable t) {
logger.error("JDA setup error:", t);
return false;
}
Guild guild = jda.getGuildById(DataManager.getConfigValue("guild_id"));
String guildName = guild.getName();
String infoChannelName = guild.getTextChannelById(DataManager.getConfigValue("info_channel_id")).getName();
logger.info("Discord Manager started and logged in as '" + jda.getSelfUser().getName() + "'");
logger.info("Listening to guild '" + guildName + "'");
logger.info("Using channel '" + infoChannelName + "' as the info channel");
logger.info("Discord Manager started!");
return true;
}
public boolean stop() {
logger.info("Discord Manager stopping...");
jda.shutdown();
logger.info("Discord Manager stopped!");
return true;
}
public static void expireMessage(Message message) {
message.delete().reason("Redstoner Bot message expiry").queueAfter(5, TimeUnit.SECONDS);
}
}