Compare commits
13 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| b5cc8d2bc1 | |||
| 9dcd1e16b0 | |||
| 28b45da382 | |||
| b20872222a | |||
|
|
c08496e819 | ||
|
|
0f4a82171c | ||
|
|
cbad45605c | ||
| 208d7638c9 | |||
| 26a74a9269 | |||
| ffa6692e07 | |||
| 44690f8e9d | |||
| 9aa9d5ab03 | |||
|
|
88ff621f22 |
6
.gitignore
vendored
6
.gitignore
vendored
@@ -364,9 +364,3 @@ MigrationBackup/
|
|||||||
FodyWeavers.xsd
|
FodyWeavers.xsd
|
||||||
|
|
||||||
*.txt
|
*.txt
|
||||||
|
|
||||||
#folders
|
|
||||||
/Plugins/
|
|
||||||
/DiscordBot.rar
|
|
||||||
/DiscordBot/Data/
|
|
||||||
/DiscordBot/Updater/
|
|
||||||
6
.idea/.idea.SethDiscordBot/.idea/projectSettingsUpdater.xml
generated
Normal file
6
.idea/.idea.SethDiscordBot/.idea/projectSettingsUpdater.xml
generated
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="RiderProjectSettingsUpdater">
|
||||||
|
<option name="vcsConfiguration" value="2" />
|
||||||
|
</component>
|
||||||
|
</project>
|
||||||
107
.idea/.idea.SethDiscordBot/.idea/workspace.xml
generated
Normal file
107
.idea/.idea.SethDiscordBot/.idea/workspace.xml
generated
Normal file
@@ -0,0 +1,107 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="AutoGeneratedRunConfigurationManager">
|
||||||
|
<projectFile>DiscordBot/DiscordBot.csproj</projectFile>
|
||||||
|
<projectFile pubXmlPath="DiscordBot/Properties/PublishProfiles/WindowsBuild.pubxml">DiscordBot/DiscordBot.csproj</projectFile>
|
||||||
|
</component>
|
||||||
|
<component name="AutoImportSettings">
|
||||||
|
<option name="autoReloadType" value="SELECTIVE" />
|
||||||
|
</component>
|
||||||
|
<component name="ChangeListManager">
|
||||||
|
<list default="true" id="ab173b07-aba1-4bb8-94c1-ae9846bbdb0a" name="Changes" comment="">
|
||||||
|
<change afterPath="$PROJECT_DIR$/Roles/AddRole.cs" afterDir="false" />
|
||||||
|
<change afterPath="$PROJECT_DIR$/Roles/Internals/RoleManagement.cs" afterDir="false" />
|
||||||
|
<change afterPath="$PROJECT_DIR$/Roles/Roles.csproj" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/BUILDS/net6.0/CMD_Utils.dll" beforeDir="false" afterPath="$PROJECT_DIR$/BUILDS/net6.0/CMD_Utils.dll" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/BUILDS/net6.0/Music Commands.dll" beforeDir="false" afterPath="$PROJECT_DIR$/BUILDS/net6.0/Music Commands.dll" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/BUILDS/net6.0/PluginManager.dll" beforeDir="false" afterPath="$PROJECT_DIR$/BUILDS/net6.0/PluginManager.dll" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/CMD_LevelingSystem/Level.cs" beforeDir="false" afterPath="$PROJECT_DIR$/CMD_LevelingSystem/Level.cs" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/CMD_Utils/Echo.cs" beforeDir="false" afterPath="$PROJECT_DIR$/CMD_Utils/Echo.cs" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/CMD_Utils/FlipCoin.cs" beforeDir="false" afterPath="$PROJECT_DIR$/CMD_Utils/FlipCoin.cs" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/CMD_Utils/Poll.cs" beforeDir="false" afterPath="$PROJECT_DIR$/CMD_Utils/Poll.cs" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/CMD_Utils/Random.cs" beforeDir="false" afterPath="$PROJECT_DIR$/CMD_Utils/Random.cs" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/DiscordBot/Discord/Commands/Help.cs" beforeDir="false" afterPath="$PROJECT_DIR$/DiscordBot/Discord/Commands/Help.cs" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/DiscordBot/Discord/Commands/Restart.cs" beforeDir="false" afterPath="$PROJECT_DIR$/DiscordBot/Discord/Commands/Restart.cs" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/DiscordBot/Discord/Commands/Settings.cs" beforeDir="false" afterPath="$PROJECT_DIR$/DiscordBot/Discord/Commands/Settings.cs" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/DiscordBot/Discord/Core/Boot.cs" beforeDir="false" afterPath="$PROJECT_DIR$/DiscordBot/Discord/Core/Boot.cs" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/DiscordBot/Discord/Core/CommandHandler.cs" beforeDir="false" afterPath="$PROJECT_DIR$/DiscordBot/Discord/Core/CommandHandler.cs" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/DiscordBot/DiscordBot.csproj" beforeDir="false" afterPath="$PROJECT_DIR$/DiscordBot/DiscordBot.csproj" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/DiscordBot/Program.cs" beforeDir="false" afterPath="$PROJECT_DIR$/DiscordBot/Program.cs" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/MusicCommands/Leave.cs" beforeDir="false" afterPath="$PROJECT_DIR$/MusicCommands/Leave.cs" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/MusicCommands/MusicPlayer.cs" beforeDir="false" afterPath="$PROJECT_DIR$/MusicCommands/MusicPlayer.cs" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/MusicCommands/Pause.cs" beforeDir="false" afterPath="$PROJECT_DIR$/MusicCommands/Pause.cs" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/MusicCommands/Play.cs" beforeDir="false" afterPath="$PROJECT_DIR$/MusicCommands/Play.cs" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/MusicCommands/Skip.cs" beforeDir="false" afterPath="$PROJECT_DIR$/MusicCommands/Skip.cs" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/MusicCommands/queue.cs" beforeDir="false" afterPath="$PROJECT_DIR$/MusicCommands/queue.cs" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/PluginManager/Config.cs" beforeDir="false" afterPath="$PROJECT_DIR$/PluginManager/Config.cs" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/PluginManager/Interfaces/DBCommand.cs" beforeDir="false" afterPath="$PROJECT_DIR$/PluginManager/Interfaces/DBCommand.cs" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/PluginManager/Items/Command.cs" beforeDir="false" afterPath="$PROJECT_DIR$/PluginManager/Items/Command.cs" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/PluginManager/Items/ConsoleCommandsHandler.cs" beforeDir="false" afterPath="$PROJECT_DIR$/PluginManager/Items/ConsoleCommandsHandler.cs" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/SethDiscordBot.sln" beforeDir="false" afterPath="$PROJECT_DIR$/SethDiscordBot.sln" afterDir="false" />
|
||||||
|
</list>
|
||||||
|
<option name="SHOW_DIALOG" value="false" />
|
||||||
|
<option name="HIGHLIGHT_CONFLICTS" value="true" />
|
||||||
|
<option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
|
||||||
|
<option name="LAST_RESOLUTION" value="IGNORE" />
|
||||||
|
</component>
|
||||||
|
<component name="MarkdownSettingsMigration">
|
||||||
|
<option name="stateVersion" value="1" />
|
||||||
|
</component>
|
||||||
|
<component name="ProjectId" id="2CUQteUHoNWL2Ok4DVEh1GfFaXk" />
|
||||||
|
<component name="ProjectViewState">
|
||||||
|
<option name="hideEmptyMiddlePackages" value="true" />
|
||||||
|
<option name="showLibraryContents" value="true" />
|
||||||
|
</component>
|
||||||
|
<component name="PropertiesComponent"><![CDATA[{
|
||||||
|
"keyToString": {
|
||||||
|
"ASKED_SHARE_PROJECT_CONFIGURATION_FILES": "true",
|
||||||
|
"RunOnceActivity.OpenProjectViewOnStart": "true",
|
||||||
|
"RunOnceActivity.ShowReadmeOnStart": "true",
|
||||||
|
"WebServerToolWindowFactoryState": "false",
|
||||||
|
"node.js.detected.package.eslint": "true",
|
||||||
|
"node.js.detected.package.tslint": "true",
|
||||||
|
"node.js.selected.package.eslint": "(autodetect)",
|
||||||
|
"node.js.selected.package.tslint": "(autodetect)",
|
||||||
|
"nodejs_package_manager_path": "npm",
|
||||||
|
"settings.editor.selected.configurable": "preferences.pluginManager",
|
||||||
|
"vue.rearranger.settings.migration": "true"
|
||||||
|
}
|
||||||
|
}]]></component>
|
||||||
|
<component name="RunManager">
|
||||||
|
<configuration name="DiscordBot: WindowsBuild" type="DotNetMsBuildPublish" factoryName="Publish to IIS">
|
||||||
|
<riderPublish publish_profile="WindowsBuild.pubxml" pubxml_path="$PROJECT_DIR$/DiscordBot/Properties/PublishProfiles/WindowsBuild.pubxml" uuid_high="612037599008934041" uuid_low="-9069359786678974134" />
|
||||||
|
<method v="2" />
|
||||||
|
</configuration>
|
||||||
|
</component>
|
||||||
|
<component name="SpellCheckerSettings" RuntimeDictionaries="0" Folders="0" CustomDictionaries="0" DefaultDictionary="application-level" UseSingleDictionary="true" transferred="true" />
|
||||||
|
<component name="TaskManager">
|
||||||
|
<task active="true" id="Default" summary="Default task">
|
||||||
|
<changelist id="ab173b07-aba1-4bb8-94c1-ae9846bbdb0a" name="Changes" comment="" />
|
||||||
|
<created>1658854902538</created>
|
||||||
|
<option name="number" value="Default" />
|
||||||
|
<option name="presentableId" value="Default" />
|
||||||
|
<updated>1658854902538</updated>
|
||||||
|
<workItem from="1658854908500" duration="1731000" />
|
||||||
|
</task>
|
||||||
|
<servers />
|
||||||
|
</component>
|
||||||
|
<component name="TypeScriptGeneratedFilesManager">
|
||||||
|
<option name="version" value="3" />
|
||||||
|
</component>
|
||||||
|
<component name="UnityCheckinConfiguration" checkUnsavedScenes="true" />
|
||||||
|
<component name="UnityUnitTestConfiguration" currentTestLauncher="NUnit" />
|
||||||
|
<component name="Vcs.Log.Tabs.Properties">
|
||||||
|
<option name="TAB_STATES">
|
||||||
|
<map>
|
||||||
|
<entry key="MAIN">
|
||||||
|
<value>
|
||||||
|
<State />
|
||||||
|
</value>
|
||||||
|
</entry>
|
||||||
|
</map>
|
||||||
|
</option>
|
||||||
|
</component>
|
||||||
|
<component name="VcsManagerConfiguration">
|
||||||
|
<option name="CLEAR_INITIAL_COMMIT_MESSAGE" value="true" />
|
||||||
|
</component>
|
||||||
|
</project>
|
||||||
BIN
BUILDS/DLL/libopus.dll
Normal file
BIN
BUILDS/DLL/libopus.dll
Normal file
Binary file not shown.
BIN
BUILDS/DLL/libsodium.dll
Normal file
BIN
BUILDS/DLL/libsodium.dll
Normal file
Binary file not shown.
BIN
BUILDS/DLL/opus.dll
Normal file
BIN
BUILDS/DLL/opus.dll
Normal file
Binary file not shown.
268
BUILDS/net5.0/CMD_LevelingSystem.deps.json
Normal file
268
BUILDS/net5.0/CMD_LevelingSystem.deps.json
Normal file
@@ -0,0 +1,268 @@
|
|||||||
|
{
|
||||||
|
"runtimeTarget": {
|
||||||
|
"name": ".NETCoreApp,Version=v5.0",
|
||||||
|
"signature": ""
|
||||||
|
},
|
||||||
|
"compilationOptions": {},
|
||||||
|
"targets": {
|
||||||
|
".NETCoreApp,Version=v5.0": {
|
||||||
|
"CMD_LevelingSystem/1.0.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"PluginManager": "1.0.0"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"CMD_LevelingSystem.dll": {}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Discord.Net/3.5.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"Discord.Net.Commands": "3.5.0",
|
||||||
|
"Discord.Net.Core": "3.5.0",
|
||||||
|
"Discord.Net.Interactions": "3.5.0",
|
||||||
|
"Discord.Net.Rest": "3.5.0",
|
||||||
|
"Discord.Net.WebSocket": "3.5.0",
|
||||||
|
"Discord.Net.Webhook": "3.5.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Discord.Net.Commands/3.5.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"Discord.Net.Core": "3.5.0"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/net5.0/Discord.Net.Commands.dll": {
|
||||||
|
"assemblyVersion": "3.5.0.0",
|
||||||
|
"fileVersion": "3.5.0.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Discord.Net.Core/3.5.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"Newtonsoft.Json": "13.0.1",
|
||||||
|
"System.Collections.Immutable": "5.0.0",
|
||||||
|
"System.Interactive.Async": "5.0.0",
|
||||||
|
"System.ValueTuple": "4.5.0"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/net5.0/Discord.Net.Core.dll": {
|
||||||
|
"assemblyVersion": "3.5.0.0",
|
||||||
|
"fileVersion": "3.5.0.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Discord.Net.Interactions/3.5.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"Discord.Net.Core": "3.5.0",
|
||||||
|
"Discord.Net.Rest": "3.5.0",
|
||||||
|
"Discord.Net.WebSocket": "3.5.0",
|
||||||
|
"Microsoft.Extensions.DependencyInjection.Abstractions": "5.0.0",
|
||||||
|
"System.Collections.Immutable": "5.0.0",
|
||||||
|
"System.Reactive": "5.0.0"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/net5.0/Discord.Net.Interactions.dll": {
|
||||||
|
"assemblyVersion": "3.5.0.0",
|
||||||
|
"fileVersion": "3.5.0.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Discord.Net.Rest/3.5.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"Discord.Net.Core": "3.5.0"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/net5.0/Discord.Net.Rest.dll": {
|
||||||
|
"assemblyVersion": "3.5.0.0",
|
||||||
|
"fileVersion": "3.5.0.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Discord.Net.Webhook/3.5.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"Discord.Net.Core": "3.5.0",
|
||||||
|
"Discord.Net.Rest": "3.5.0"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/net5.0/Discord.Net.Webhook.dll": {
|
||||||
|
"assemblyVersion": "3.5.0.0",
|
||||||
|
"fileVersion": "3.5.0.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Discord.Net.WebSocket/3.5.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"Discord.Net.Core": "3.5.0",
|
||||||
|
"Discord.Net.Rest": "3.5.0"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/net5.0/Discord.Net.WebSocket.dll": {
|
||||||
|
"assemblyVersion": "3.5.0.0",
|
||||||
|
"fileVersion": "3.5.0.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Microsoft.Extensions.DependencyInjection.Abstractions/5.0.0": {
|
||||||
|
"runtime": {
|
||||||
|
"lib/netstandard2.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll": {
|
||||||
|
"assemblyVersion": "5.0.0.0",
|
||||||
|
"fileVersion": "5.0.20.51904"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Newtonsoft.Json/13.0.1": {
|
||||||
|
"runtime": {
|
||||||
|
"lib/netstandard2.0/Newtonsoft.Json.dll": {
|
||||||
|
"assemblyVersion": "13.0.0.0",
|
||||||
|
"fileVersion": "13.0.1.25517"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"System.Collections.Immutable/5.0.0": {},
|
||||||
|
"System.Interactive.Async/5.0.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"System.Linq.Async": "5.0.0"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/netcoreapp3.1/System.Interactive.Async.dll": {
|
||||||
|
"assemblyVersion": "5.0.0.0",
|
||||||
|
"fileVersion": "5.0.0.1"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"System.Linq.Async/5.0.0": {
|
||||||
|
"runtime": {
|
||||||
|
"lib/netcoreapp3.1/System.Linq.Async.dll": {
|
||||||
|
"assemblyVersion": "5.0.0.0",
|
||||||
|
"fileVersion": "5.0.0.1"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"System.Reactive/5.0.0": {
|
||||||
|
"runtime": {
|
||||||
|
"lib/net5.0/System.Reactive.dll": {
|
||||||
|
"assemblyVersion": "5.0.0.0",
|
||||||
|
"fileVersion": "5.0.0.1"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"System.ValueTuple/4.5.0": {},
|
||||||
|
"PluginManager/1.0.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"Discord.Net": "3.5.0"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"PluginManager.dll": {}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"libraries": {
|
||||||
|
"CMD_LevelingSystem/1.0.0": {
|
||||||
|
"type": "project",
|
||||||
|
"serviceable": false,
|
||||||
|
"sha512": ""
|
||||||
|
},
|
||||||
|
"Discord.Net/3.5.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-IUtexpvogudb1rllKBWkIEpBVQoToMjtVo81KPkt+gNMe7KtRDcZJgcn6+72viMtyw0e95OJPXFV5VEA/n2OQQ==",
|
||||||
|
"path": "discord.net/3.5.0",
|
||||||
|
"hashPath": "discord.net.3.5.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Discord.Net.Commands/3.5.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-ClTv8aiTlitvS48YatRiTLvgE2f2uKgmHNPVBIuvJBHZO2u4bZCzoN1fid+pZn2sbVOkt8uftlLGzz5DSZlFIA==",
|
||||||
|
"path": "discord.net.commands/3.5.0",
|
||||||
|
"hashPath": "discord.net.commands.3.5.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Discord.Net.Core/3.5.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-rCzzaznMVQ+bLMxOpYwTyqm9V22kMy6BxlQisSxemHZDe2Jedz3Clp/a0dToACLz+Dlp3u+jYUfCBnTz7L6f4g==",
|
||||||
|
"path": "discord.net.core/3.5.0",
|
||||||
|
"hashPath": "discord.net.core.3.5.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Discord.Net.Interactions/3.5.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-wE9+V9DJ7r+1s4euOi4sGPIAt4sD7r+Tk5s9mrlbLCHVQTK4KllAvcrL25bPFI38FuFceREEzFoRlTrekSyB2Q==",
|
||||||
|
"path": "discord.net.interactions/3.5.0",
|
||||||
|
"hashPath": "discord.net.interactions.3.5.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Discord.Net.Rest/3.5.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-BnTdLFuuQsKvCv08VQrD4X1Hw2Xp+MELIRQiDiKfG01IiQlRTN+1gc3LB1zXgn5xBvC0HXjHxwV22GrMD9uKHQ==",
|
||||||
|
"path": "discord.net.rest/3.5.0",
|
||||||
|
"hashPath": "discord.net.rest.3.5.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Discord.Net.Webhook/3.5.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-vCIGZS+m88sQDuFmdbUqg+2RIXS/NJWx8ei3MX+ZEYiAvOkDgQfkIlEnU1NKpds6ivTt5GFlv6UzcWubb5VJ1w==",
|
||||||
|
"path": "discord.net.webhook/3.5.0",
|
||||||
|
"hashPath": "discord.net.webhook.3.5.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Discord.Net.WebSocket/3.5.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-LjBOvcP40vJ+dhOtBDi8haEeblPAKpAIqR04NBzTM1/0RVavJZH89ovfSQIk42ygkiOaDV4E2x0Mmh6DRoIYcw==",
|
||||||
|
"path": "discord.net.websocket/3.5.0",
|
||||||
|
"hashPath": "discord.net.websocket.3.5.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Microsoft.Extensions.DependencyInjection.Abstractions/5.0.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-ORj7Zh81gC69TyvmcUm9tSzytcy8AVousi+IVRAI8nLieQjOFryRusSFh7+aLk16FN9pQNqJAiMd7BTKINK0kA==",
|
||||||
|
"path": "microsoft.extensions.dependencyinjection.abstractions/5.0.0",
|
||||||
|
"hashPath": "microsoft.extensions.dependencyinjection.abstractions.5.0.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Newtonsoft.Json/13.0.1": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-ppPFpBcvxdsfUonNcvITKqLl3bqxWbDCZIzDWHzjpdAHRFfZe0Dw9HmA0+za13IdyrgJwpkDTDA9fHaxOrt20A==",
|
||||||
|
"path": "newtonsoft.json/13.0.1",
|
||||||
|
"hashPath": "newtonsoft.json.13.0.1.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"System.Collections.Immutable/5.0.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-FXkLXiK0sVVewcso0imKQoOxjoPAj42R8HtjjbSjVPAzwDfzoyoznWxgA3c38LDbN9SJux1xXoXYAhz98j7r2g==",
|
||||||
|
"path": "system.collections.immutable/5.0.0",
|
||||||
|
"hashPath": "system.collections.immutable.5.0.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"System.Interactive.Async/5.0.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-QaqhQVDiULcu4vm6o89+iP329HcK44cETHOYgy/jfEjtzeFy0ZxmuM7nel9ocjnKxEM4yh1mli7hgh8Q9o+/Iw==",
|
||||||
|
"path": "system.interactive.async/5.0.0",
|
||||||
|
"hashPath": "system.interactive.async.5.0.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"System.Linq.Async/5.0.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-cPtIuuH8TIjVHSi2ewwReWGW1PfChPE0LxPIDlfwVcLuTM9GANFTXiMB7k3aC4sk3f0cQU25LNKzx+jZMxijqw==",
|
||||||
|
"path": "system.linq.async/5.0.0",
|
||||||
|
"hashPath": "system.linq.async.5.0.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"System.Reactive/5.0.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-erBZjkQHWL9jpasCE/0qKAryzVBJFxGHVBAvgRN1bzM0q2s1S4oYREEEL0Vb+1kA/6BKb5FjUZMp5VXmy+gzkQ==",
|
||||||
|
"path": "system.reactive/5.0.0",
|
||||||
|
"hashPath": "system.reactive.5.0.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"System.ValueTuple/4.5.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-okurQJO6NRE/apDIP23ajJ0hpiNmJ+f0BwOlB/cSqTLQlw5upkf+5+96+iG2Jw40G1fCVCyPz/FhIABUjMR+RQ==",
|
||||||
|
"path": "system.valuetuple/4.5.0",
|
||||||
|
"hashPath": "system.valuetuple.4.5.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"PluginManager/1.0.0": {
|
||||||
|
"type": "project",
|
||||||
|
"serviceable": false,
|
||||||
|
"sha512": ""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
BIN
BUILDS/net5.0/CMD_LevelingSystem.dll
Normal file
BIN
BUILDS/net5.0/CMD_LevelingSystem.dll
Normal file
Binary file not shown.
268
BUILDS/net5.0/CMD_Utils.deps.json
Normal file
268
BUILDS/net5.0/CMD_Utils.deps.json
Normal file
@@ -0,0 +1,268 @@
|
|||||||
|
{
|
||||||
|
"runtimeTarget": {
|
||||||
|
"name": ".NETCoreApp,Version=v5.0",
|
||||||
|
"signature": ""
|
||||||
|
},
|
||||||
|
"compilationOptions": {},
|
||||||
|
"targets": {
|
||||||
|
".NETCoreApp,Version=v5.0": {
|
||||||
|
"CMD_Utils/1.0.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"PluginManager": "1.0.0"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"CMD_Utils.dll": {}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Discord.Net/3.5.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"Discord.Net.Commands": "3.5.0",
|
||||||
|
"Discord.Net.Core": "3.5.0",
|
||||||
|
"Discord.Net.Interactions": "3.5.0",
|
||||||
|
"Discord.Net.Rest": "3.5.0",
|
||||||
|
"Discord.Net.WebSocket": "3.5.0",
|
||||||
|
"Discord.Net.Webhook": "3.5.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Discord.Net.Commands/3.5.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"Discord.Net.Core": "3.5.0"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/net5.0/Discord.Net.Commands.dll": {
|
||||||
|
"assemblyVersion": "3.5.0.0",
|
||||||
|
"fileVersion": "3.5.0.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Discord.Net.Core/3.5.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"Newtonsoft.Json": "13.0.1",
|
||||||
|
"System.Collections.Immutable": "5.0.0",
|
||||||
|
"System.Interactive.Async": "5.0.0",
|
||||||
|
"System.ValueTuple": "4.5.0"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/net5.0/Discord.Net.Core.dll": {
|
||||||
|
"assemblyVersion": "3.5.0.0",
|
||||||
|
"fileVersion": "3.5.0.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Discord.Net.Interactions/3.5.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"Discord.Net.Core": "3.5.0",
|
||||||
|
"Discord.Net.Rest": "3.5.0",
|
||||||
|
"Discord.Net.WebSocket": "3.5.0",
|
||||||
|
"Microsoft.Extensions.DependencyInjection.Abstractions": "5.0.0",
|
||||||
|
"System.Collections.Immutable": "5.0.0",
|
||||||
|
"System.Reactive": "5.0.0"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/net5.0/Discord.Net.Interactions.dll": {
|
||||||
|
"assemblyVersion": "3.5.0.0",
|
||||||
|
"fileVersion": "3.5.0.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Discord.Net.Rest/3.5.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"Discord.Net.Core": "3.5.0"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/net5.0/Discord.Net.Rest.dll": {
|
||||||
|
"assemblyVersion": "3.5.0.0",
|
||||||
|
"fileVersion": "3.5.0.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Discord.Net.Webhook/3.5.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"Discord.Net.Core": "3.5.0",
|
||||||
|
"Discord.Net.Rest": "3.5.0"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/net5.0/Discord.Net.Webhook.dll": {
|
||||||
|
"assemblyVersion": "3.5.0.0",
|
||||||
|
"fileVersion": "3.5.0.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Discord.Net.WebSocket/3.5.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"Discord.Net.Core": "3.5.0",
|
||||||
|
"Discord.Net.Rest": "3.5.0"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/net5.0/Discord.Net.WebSocket.dll": {
|
||||||
|
"assemblyVersion": "3.5.0.0",
|
||||||
|
"fileVersion": "3.5.0.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Microsoft.Extensions.DependencyInjection.Abstractions/5.0.0": {
|
||||||
|
"runtime": {
|
||||||
|
"lib/netstandard2.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll": {
|
||||||
|
"assemblyVersion": "5.0.0.0",
|
||||||
|
"fileVersion": "5.0.20.51904"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Newtonsoft.Json/13.0.1": {
|
||||||
|
"runtime": {
|
||||||
|
"lib/netstandard2.0/Newtonsoft.Json.dll": {
|
||||||
|
"assemblyVersion": "13.0.0.0",
|
||||||
|
"fileVersion": "13.0.1.25517"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"System.Collections.Immutable/5.0.0": {},
|
||||||
|
"System.Interactive.Async/5.0.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"System.Linq.Async": "5.0.0"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/netcoreapp3.1/System.Interactive.Async.dll": {
|
||||||
|
"assemblyVersion": "5.0.0.0",
|
||||||
|
"fileVersion": "5.0.0.1"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"System.Linq.Async/5.0.0": {
|
||||||
|
"runtime": {
|
||||||
|
"lib/netcoreapp3.1/System.Linq.Async.dll": {
|
||||||
|
"assemblyVersion": "5.0.0.0",
|
||||||
|
"fileVersion": "5.0.0.1"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"System.Reactive/5.0.0": {
|
||||||
|
"runtime": {
|
||||||
|
"lib/net5.0/System.Reactive.dll": {
|
||||||
|
"assemblyVersion": "5.0.0.0",
|
||||||
|
"fileVersion": "5.0.0.1"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"System.ValueTuple/4.5.0": {},
|
||||||
|
"PluginManager/1.0.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"Discord.Net": "3.5.0"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"PluginManager.dll": {}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"libraries": {
|
||||||
|
"CMD_Utils/1.0.0": {
|
||||||
|
"type": "project",
|
||||||
|
"serviceable": false,
|
||||||
|
"sha512": ""
|
||||||
|
},
|
||||||
|
"Discord.Net/3.5.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-IUtexpvogudb1rllKBWkIEpBVQoToMjtVo81KPkt+gNMe7KtRDcZJgcn6+72viMtyw0e95OJPXFV5VEA/n2OQQ==",
|
||||||
|
"path": "discord.net/3.5.0",
|
||||||
|
"hashPath": "discord.net.3.5.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Discord.Net.Commands/3.5.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-ClTv8aiTlitvS48YatRiTLvgE2f2uKgmHNPVBIuvJBHZO2u4bZCzoN1fid+pZn2sbVOkt8uftlLGzz5DSZlFIA==",
|
||||||
|
"path": "discord.net.commands/3.5.0",
|
||||||
|
"hashPath": "discord.net.commands.3.5.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Discord.Net.Core/3.5.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-rCzzaznMVQ+bLMxOpYwTyqm9V22kMy6BxlQisSxemHZDe2Jedz3Clp/a0dToACLz+Dlp3u+jYUfCBnTz7L6f4g==",
|
||||||
|
"path": "discord.net.core/3.5.0",
|
||||||
|
"hashPath": "discord.net.core.3.5.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Discord.Net.Interactions/3.5.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-wE9+V9DJ7r+1s4euOi4sGPIAt4sD7r+Tk5s9mrlbLCHVQTK4KllAvcrL25bPFI38FuFceREEzFoRlTrekSyB2Q==",
|
||||||
|
"path": "discord.net.interactions/3.5.0",
|
||||||
|
"hashPath": "discord.net.interactions.3.5.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Discord.Net.Rest/3.5.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-BnTdLFuuQsKvCv08VQrD4X1Hw2Xp+MELIRQiDiKfG01IiQlRTN+1gc3LB1zXgn5xBvC0HXjHxwV22GrMD9uKHQ==",
|
||||||
|
"path": "discord.net.rest/3.5.0",
|
||||||
|
"hashPath": "discord.net.rest.3.5.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Discord.Net.Webhook/3.5.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-vCIGZS+m88sQDuFmdbUqg+2RIXS/NJWx8ei3MX+ZEYiAvOkDgQfkIlEnU1NKpds6ivTt5GFlv6UzcWubb5VJ1w==",
|
||||||
|
"path": "discord.net.webhook/3.5.0",
|
||||||
|
"hashPath": "discord.net.webhook.3.5.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Discord.Net.WebSocket/3.5.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-LjBOvcP40vJ+dhOtBDi8haEeblPAKpAIqR04NBzTM1/0RVavJZH89ovfSQIk42ygkiOaDV4E2x0Mmh6DRoIYcw==",
|
||||||
|
"path": "discord.net.websocket/3.5.0",
|
||||||
|
"hashPath": "discord.net.websocket.3.5.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Microsoft.Extensions.DependencyInjection.Abstractions/5.0.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-ORj7Zh81gC69TyvmcUm9tSzytcy8AVousi+IVRAI8nLieQjOFryRusSFh7+aLk16FN9pQNqJAiMd7BTKINK0kA==",
|
||||||
|
"path": "microsoft.extensions.dependencyinjection.abstractions/5.0.0",
|
||||||
|
"hashPath": "microsoft.extensions.dependencyinjection.abstractions.5.0.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Newtonsoft.Json/13.0.1": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-ppPFpBcvxdsfUonNcvITKqLl3bqxWbDCZIzDWHzjpdAHRFfZe0Dw9HmA0+za13IdyrgJwpkDTDA9fHaxOrt20A==",
|
||||||
|
"path": "newtonsoft.json/13.0.1",
|
||||||
|
"hashPath": "newtonsoft.json.13.0.1.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"System.Collections.Immutable/5.0.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-FXkLXiK0sVVewcso0imKQoOxjoPAj42R8HtjjbSjVPAzwDfzoyoznWxgA3c38LDbN9SJux1xXoXYAhz98j7r2g==",
|
||||||
|
"path": "system.collections.immutable/5.0.0",
|
||||||
|
"hashPath": "system.collections.immutable.5.0.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"System.Interactive.Async/5.0.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-QaqhQVDiULcu4vm6o89+iP329HcK44cETHOYgy/jfEjtzeFy0ZxmuM7nel9ocjnKxEM4yh1mli7hgh8Q9o+/Iw==",
|
||||||
|
"path": "system.interactive.async/5.0.0",
|
||||||
|
"hashPath": "system.interactive.async.5.0.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"System.Linq.Async/5.0.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-cPtIuuH8TIjVHSi2ewwReWGW1PfChPE0LxPIDlfwVcLuTM9GANFTXiMB7k3aC4sk3f0cQU25LNKzx+jZMxijqw==",
|
||||||
|
"path": "system.linq.async/5.0.0",
|
||||||
|
"hashPath": "system.linq.async.5.0.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"System.Reactive/5.0.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-erBZjkQHWL9jpasCE/0qKAryzVBJFxGHVBAvgRN1bzM0q2s1S4oYREEEL0Vb+1kA/6BKb5FjUZMp5VXmy+gzkQ==",
|
||||||
|
"path": "system.reactive/5.0.0",
|
||||||
|
"hashPath": "system.reactive.5.0.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"System.ValueTuple/4.5.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-okurQJO6NRE/apDIP23ajJ0hpiNmJ+f0BwOlB/cSqTLQlw5upkf+5+96+iG2Jw40G1fCVCyPz/FhIABUjMR+RQ==",
|
||||||
|
"path": "system.valuetuple/4.5.0",
|
||||||
|
"hashPath": "system.valuetuple.4.5.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"PluginManager/1.0.0": {
|
||||||
|
"type": "project",
|
||||||
|
"serviceable": false,
|
||||||
|
"sha512": ""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
BIN
BUILDS/net5.0/CMD_Utils.dll
Normal file
BIN
BUILDS/net5.0/CMD_Utils.dll
Normal file
Binary file not shown.
268
BUILDS/net5.0/EVE_LevelingSystem.deps.json
Normal file
268
BUILDS/net5.0/EVE_LevelingSystem.deps.json
Normal file
@@ -0,0 +1,268 @@
|
|||||||
|
{
|
||||||
|
"runtimeTarget": {
|
||||||
|
"name": ".NETCoreApp,Version=v5.0",
|
||||||
|
"signature": ""
|
||||||
|
},
|
||||||
|
"compilationOptions": {},
|
||||||
|
"targets": {
|
||||||
|
".NETCoreApp,Version=v5.0": {
|
||||||
|
"EVE_LevelingSystem/1.0.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"PluginManager": "1.0.0"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"EVE_LevelingSystem.dll": {}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Discord.Net/3.5.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"Discord.Net.Commands": "3.5.0",
|
||||||
|
"Discord.Net.Core": "3.5.0",
|
||||||
|
"Discord.Net.Interactions": "3.5.0",
|
||||||
|
"Discord.Net.Rest": "3.5.0",
|
||||||
|
"Discord.Net.WebSocket": "3.5.0",
|
||||||
|
"Discord.Net.Webhook": "3.5.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Discord.Net.Commands/3.5.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"Discord.Net.Core": "3.5.0"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/net5.0/Discord.Net.Commands.dll": {
|
||||||
|
"assemblyVersion": "3.5.0.0",
|
||||||
|
"fileVersion": "3.5.0.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Discord.Net.Core/3.5.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"Newtonsoft.Json": "13.0.1",
|
||||||
|
"System.Collections.Immutable": "5.0.0",
|
||||||
|
"System.Interactive.Async": "5.0.0",
|
||||||
|
"System.ValueTuple": "4.5.0"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/net5.0/Discord.Net.Core.dll": {
|
||||||
|
"assemblyVersion": "3.5.0.0",
|
||||||
|
"fileVersion": "3.5.0.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Discord.Net.Interactions/3.5.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"Discord.Net.Core": "3.5.0",
|
||||||
|
"Discord.Net.Rest": "3.5.0",
|
||||||
|
"Discord.Net.WebSocket": "3.5.0",
|
||||||
|
"Microsoft.Extensions.DependencyInjection.Abstractions": "5.0.0",
|
||||||
|
"System.Collections.Immutable": "5.0.0",
|
||||||
|
"System.Reactive": "5.0.0"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/net5.0/Discord.Net.Interactions.dll": {
|
||||||
|
"assemblyVersion": "3.5.0.0",
|
||||||
|
"fileVersion": "3.5.0.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Discord.Net.Rest/3.5.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"Discord.Net.Core": "3.5.0"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/net5.0/Discord.Net.Rest.dll": {
|
||||||
|
"assemblyVersion": "3.5.0.0",
|
||||||
|
"fileVersion": "3.5.0.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Discord.Net.Webhook/3.5.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"Discord.Net.Core": "3.5.0",
|
||||||
|
"Discord.Net.Rest": "3.5.0"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/net5.0/Discord.Net.Webhook.dll": {
|
||||||
|
"assemblyVersion": "3.5.0.0",
|
||||||
|
"fileVersion": "3.5.0.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Discord.Net.WebSocket/3.5.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"Discord.Net.Core": "3.5.0",
|
||||||
|
"Discord.Net.Rest": "3.5.0"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/net5.0/Discord.Net.WebSocket.dll": {
|
||||||
|
"assemblyVersion": "3.5.0.0",
|
||||||
|
"fileVersion": "3.5.0.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Microsoft.Extensions.DependencyInjection.Abstractions/5.0.0": {
|
||||||
|
"runtime": {
|
||||||
|
"lib/netstandard2.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll": {
|
||||||
|
"assemblyVersion": "5.0.0.0",
|
||||||
|
"fileVersion": "5.0.20.51904"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Newtonsoft.Json/13.0.1": {
|
||||||
|
"runtime": {
|
||||||
|
"lib/netstandard2.0/Newtonsoft.Json.dll": {
|
||||||
|
"assemblyVersion": "13.0.0.0",
|
||||||
|
"fileVersion": "13.0.1.25517"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"System.Collections.Immutable/5.0.0": {},
|
||||||
|
"System.Interactive.Async/5.0.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"System.Linq.Async": "5.0.0"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/netcoreapp3.1/System.Interactive.Async.dll": {
|
||||||
|
"assemblyVersion": "5.0.0.0",
|
||||||
|
"fileVersion": "5.0.0.1"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"System.Linq.Async/5.0.0": {
|
||||||
|
"runtime": {
|
||||||
|
"lib/netcoreapp3.1/System.Linq.Async.dll": {
|
||||||
|
"assemblyVersion": "5.0.0.0",
|
||||||
|
"fileVersion": "5.0.0.1"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"System.Reactive/5.0.0": {
|
||||||
|
"runtime": {
|
||||||
|
"lib/net5.0/System.Reactive.dll": {
|
||||||
|
"assemblyVersion": "5.0.0.0",
|
||||||
|
"fileVersion": "5.0.0.1"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"System.ValueTuple/4.5.0": {},
|
||||||
|
"PluginManager/1.0.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"Discord.Net": "3.5.0"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"PluginManager.dll": {}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"libraries": {
|
||||||
|
"EVE_LevelingSystem/1.0.0": {
|
||||||
|
"type": "project",
|
||||||
|
"serviceable": false,
|
||||||
|
"sha512": ""
|
||||||
|
},
|
||||||
|
"Discord.Net/3.5.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-IUtexpvogudb1rllKBWkIEpBVQoToMjtVo81KPkt+gNMe7KtRDcZJgcn6+72viMtyw0e95OJPXFV5VEA/n2OQQ==",
|
||||||
|
"path": "discord.net/3.5.0",
|
||||||
|
"hashPath": "discord.net.3.5.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Discord.Net.Commands/3.5.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-ClTv8aiTlitvS48YatRiTLvgE2f2uKgmHNPVBIuvJBHZO2u4bZCzoN1fid+pZn2sbVOkt8uftlLGzz5DSZlFIA==",
|
||||||
|
"path": "discord.net.commands/3.5.0",
|
||||||
|
"hashPath": "discord.net.commands.3.5.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Discord.Net.Core/3.5.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-rCzzaznMVQ+bLMxOpYwTyqm9V22kMy6BxlQisSxemHZDe2Jedz3Clp/a0dToACLz+Dlp3u+jYUfCBnTz7L6f4g==",
|
||||||
|
"path": "discord.net.core/3.5.0",
|
||||||
|
"hashPath": "discord.net.core.3.5.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Discord.Net.Interactions/3.5.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-wE9+V9DJ7r+1s4euOi4sGPIAt4sD7r+Tk5s9mrlbLCHVQTK4KllAvcrL25bPFI38FuFceREEzFoRlTrekSyB2Q==",
|
||||||
|
"path": "discord.net.interactions/3.5.0",
|
||||||
|
"hashPath": "discord.net.interactions.3.5.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Discord.Net.Rest/3.5.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-BnTdLFuuQsKvCv08VQrD4X1Hw2Xp+MELIRQiDiKfG01IiQlRTN+1gc3LB1zXgn5xBvC0HXjHxwV22GrMD9uKHQ==",
|
||||||
|
"path": "discord.net.rest/3.5.0",
|
||||||
|
"hashPath": "discord.net.rest.3.5.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Discord.Net.Webhook/3.5.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-vCIGZS+m88sQDuFmdbUqg+2RIXS/NJWx8ei3MX+ZEYiAvOkDgQfkIlEnU1NKpds6ivTt5GFlv6UzcWubb5VJ1w==",
|
||||||
|
"path": "discord.net.webhook/3.5.0",
|
||||||
|
"hashPath": "discord.net.webhook.3.5.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Discord.Net.WebSocket/3.5.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-LjBOvcP40vJ+dhOtBDi8haEeblPAKpAIqR04NBzTM1/0RVavJZH89ovfSQIk42ygkiOaDV4E2x0Mmh6DRoIYcw==",
|
||||||
|
"path": "discord.net.websocket/3.5.0",
|
||||||
|
"hashPath": "discord.net.websocket.3.5.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Microsoft.Extensions.DependencyInjection.Abstractions/5.0.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-ORj7Zh81gC69TyvmcUm9tSzytcy8AVousi+IVRAI8nLieQjOFryRusSFh7+aLk16FN9pQNqJAiMd7BTKINK0kA==",
|
||||||
|
"path": "microsoft.extensions.dependencyinjection.abstractions/5.0.0",
|
||||||
|
"hashPath": "microsoft.extensions.dependencyinjection.abstractions.5.0.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Newtonsoft.Json/13.0.1": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-ppPFpBcvxdsfUonNcvITKqLl3bqxWbDCZIzDWHzjpdAHRFfZe0Dw9HmA0+za13IdyrgJwpkDTDA9fHaxOrt20A==",
|
||||||
|
"path": "newtonsoft.json/13.0.1",
|
||||||
|
"hashPath": "newtonsoft.json.13.0.1.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"System.Collections.Immutable/5.0.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-FXkLXiK0sVVewcso0imKQoOxjoPAj42R8HtjjbSjVPAzwDfzoyoznWxgA3c38LDbN9SJux1xXoXYAhz98j7r2g==",
|
||||||
|
"path": "system.collections.immutable/5.0.0",
|
||||||
|
"hashPath": "system.collections.immutable.5.0.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"System.Interactive.Async/5.0.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-QaqhQVDiULcu4vm6o89+iP329HcK44cETHOYgy/jfEjtzeFy0ZxmuM7nel9ocjnKxEM4yh1mli7hgh8Q9o+/Iw==",
|
||||||
|
"path": "system.interactive.async/5.0.0",
|
||||||
|
"hashPath": "system.interactive.async.5.0.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"System.Linq.Async/5.0.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-cPtIuuH8TIjVHSi2ewwReWGW1PfChPE0LxPIDlfwVcLuTM9GANFTXiMB7k3aC4sk3f0cQU25LNKzx+jZMxijqw==",
|
||||||
|
"path": "system.linq.async/5.0.0",
|
||||||
|
"hashPath": "system.linq.async.5.0.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"System.Reactive/5.0.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-erBZjkQHWL9jpasCE/0qKAryzVBJFxGHVBAvgRN1bzM0q2s1S4oYREEEL0Vb+1kA/6BKb5FjUZMp5VXmy+gzkQ==",
|
||||||
|
"path": "system.reactive/5.0.0",
|
||||||
|
"hashPath": "system.reactive.5.0.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"System.ValueTuple/4.5.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-okurQJO6NRE/apDIP23ajJ0hpiNmJ+f0BwOlB/cSqTLQlw5upkf+5+96+iG2Jw40G1fCVCyPz/FhIABUjMR+RQ==",
|
||||||
|
"path": "system.valuetuple/4.5.0",
|
||||||
|
"hashPath": "system.valuetuple.4.5.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"PluginManager/1.0.0": {
|
||||||
|
"type": "project",
|
||||||
|
"serviceable": false,
|
||||||
|
"sha512": ""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
BIN
BUILDS/net5.0/EVE_LevelingSystem.dll
Normal file
BIN
BUILDS/net5.0/EVE_LevelingSystem.dll
Normal file
Binary file not shown.
268
BUILDS/net5.0/MusicCommands.deps.json
Normal file
268
BUILDS/net5.0/MusicCommands.deps.json
Normal file
@@ -0,0 +1,268 @@
|
|||||||
|
{
|
||||||
|
"runtimeTarget": {
|
||||||
|
"name": ".NETCoreApp,Version=v5.0",
|
||||||
|
"signature": ""
|
||||||
|
},
|
||||||
|
"compilationOptions": {},
|
||||||
|
"targets": {
|
||||||
|
".NETCoreApp,Version=v5.0": {
|
||||||
|
"MusicCommands/1.0.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"PluginManager": "1.0.0"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"MusicCommands.dll": {}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Discord.Net/3.5.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"Discord.Net.Commands": "3.5.0",
|
||||||
|
"Discord.Net.Core": "3.5.0",
|
||||||
|
"Discord.Net.Interactions": "3.5.0",
|
||||||
|
"Discord.Net.Rest": "3.5.0",
|
||||||
|
"Discord.Net.WebSocket": "3.5.0",
|
||||||
|
"Discord.Net.Webhook": "3.5.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Discord.Net.Commands/3.5.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"Discord.Net.Core": "3.5.0"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/net5.0/Discord.Net.Commands.dll": {
|
||||||
|
"assemblyVersion": "3.5.0.0",
|
||||||
|
"fileVersion": "3.5.0.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Discord.Net.Core/3.5.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"Newtonsoft.Json": "13.0.1",
|
||||||
|
"System.Collections.Immutable": "5.0.0",
|
||||||
|
"System.Interactive.Async": "5.0.0",
|
||||||
|
"System.ValueTuple": "4.5.0"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/net5.0/Discord.Net.Core.dll": {
|
||||||
|
"assemblyVersion": "3.5.0.0",
|
||||||
|
"fileVersion": "3.5.0.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Discord.Net.Interactions/3.5.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"Discord.Net.Core": "3.5.0",
|
||||||
|
"Discord.Net.Rest": "3.5.0",
|
||||||
|
"Discord.Net.WebSocket": "3.5.0",
|
||||||
|
"Microsoft.Extensions.DependencyInjection.Abstractions": "5.0.0",
|
||||||
|
"System.Collections.Immutable": "5.0.0",
|
||||||
|
"System.Reactive": "5.0.0"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/net5.0/Discord.Net.Interactions.dll": {
|
||||||
|
"assemblyVersion": "3.5.0.0",
|
||||||
|
"fileVersion": "3.5.0.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Discord.Net.Rest/3.5.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"Discord.Net.Core": "3.5.0"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/net5.0/Discord.Net.Rest.dll": {
|
||||||
|
"assemblyVersion": "3.5.0.0",
|
||||||
|
"fileVersion": "3.5.0.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Discord.Net.Webhook/3.5.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"Discord.Net.Core": "3.5.0",
|
||||||
|
"Discord.Net.Rest": "3.5.0"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/net5.0/Discord.Net.Webhook.dll": {
|
||||||
|
"assemblyVersion": "3.5.0.0",
|
||||||
|
"fileVersion": "3.5.0.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Discord.Net.WebSocket/3.5.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"Discord.Net.Core": "3.5.0",
|
||||||
|
"Discord.Net.Rest": "3.5.0"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/net5.0/Discord.Net.WebSocket.dll": {
|
||||||
|
"assemblyVersion": "3.5.0.0",
|
||||||
|
"fileVersion": "3.5.0.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Microsoft.Extensions.DependencyInjection.Abstractions/5.0.0": {
|
||||||
|
"runtime": {
|
||||||
|
"lib/netstandard2.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll": {
|
||||||
|
"assemblyVersion": "5.0.0.0",
|
||||||
|
"fileVersion": "5.0.20.51904"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Newtonsoft.Json/13.0.1": {
|
||||||
|
"runtime": {
|
||||||
|
"lib/netstandard2.0/Newtonsoft.Json.dll": {
|
||||||
|
"assemblyVersion": "13.0.0.0",
|
||||||
|
"fileVersion": "13.0.1.25517"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"System.Collections.Immutable/5.0.0": {},
|
||||||
|
"System.Interactive.Async/5.0.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"System.Linq.Async": "5.0.0"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/netcoreapp3.1/System.Interactive.Async.dll": {
|
||||||
|
"assemblyVersion": "5.0.0.0",
|
||||||
|
"fileVersion": "5.0.0.1"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"System.Linq.Async/5.0.0": {
|
||||||
|
"runtime": {
|
||||||
|
"lib/netcoreapp3.1/System.Linq.Async.dll": {
|
||||||
|
"assemblyVersion": "5.0.0.0",
|
||||||
|
"fileVersion": "5.0.0.1"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"System.Reactive/5.0.0": {
|
||||||
|
"runtime": {
|
||||||
|
"lib/net5.0/System.Reactive.dll": {
|
||||||
|
"assemblyVersion": "5.0.0.0",
|
||||||
|
"fileVersion": "5.0.0.1"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"System.ValueTuple/4.5.0": {},
|
||||||
|
"PluginManager/1.0.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"Discord.Net": "3.5.0"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"PluginManager.dll": {}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"libraries": {
|
||||||
|
"MusicCommands/1.0.0": {
|
||||||
|
"type": "project",
|
||||||
|
"serviceable": false,
|
||||||
|
"sha512": ""
|
||||||
|
},
|
||||||
|
"Discord.Net/3.5.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-IUtexpvogudb1rllKBWkIEpBVQoToMjtVo81KPkt+gNMe7KtRDcZJgcn6+72viMtyw0e95OJPXFV5VEA/n2OQQ==",
|
||||||
|
"path": "discord.net/3.5.0",
|
||||||
|
"hashPath": "discord.net.3.5.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Discord.Net.Commands/3.5.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-ClTv8aiTlitvS48YatRiTLvgE2f2uKgmHNPVBIuvJBHZO2u4bZCzoN1fid+pZn2sbVOkt8uftlLGzz5DSZlFIA==",
|
||||||
|
"path": "discord.net.commands/3.5.0",
|
||||||
|
"hashPath": "discord.net.commands.3.5.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Discord.Net.Core/3.5.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-rCzzaznMVQ+bLMxOpYwTyqm9V22kMy6BxlQisSxemHZDe2Jedz3Clp/a0dToACLz+Dlp3u+jYUfCBnTz7L6f4g==",
|
||||||
|
"path": "discord.net.core/3.5.0",
|
||||||
|
"hashPath": "discord.net.core.3.5.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Discord.Net.Interactions/3.5.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-wE9+V9DJ7r+1s4euOi4sGPIAt4sD7r+Tk5s9mrlbLCHVQTK4KllAvcrL25bPFI38FuFceREEzFoRlTrekSyB2Q==",
|
||||||
|
"path": "discord.net.interactions/3.5.0",
|
||||||
|
"hashPath": "discord.net.interactions.3.5.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Discord.Net.Rest/3.5.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-BnTdLFuuQsKvCv08VQrD4X1Hw2Xp+MELIRQiDiKfG01IiQlRTN+1gc3LB1zXgn5xBvC0HXjHxwV22GrMD9uKHQ==",
|
||||||
|
"path": "discord.net.rest/3.5.0",
|
||||||
|
"hashPath": "discord.net.rest.3.5.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Discord.Net.Webhook/3.5.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-vCIGZS+m88sQDuFmdbUqg+2RIXS/NJWx8ei3MX+ZEYiAvOkDgQfkIlEnU1NKpds6ivTt5GFlv6UzcWubb5VJ1w==",
|
||||||
|
"path": "discord.net.webhook/3.5.0",
|
||||||
|
"hashPath": "discord.net.webhook.3.5.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Discord.Net.WebSocket/3.5.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-LjBOvcP40vJ+dhOtBDi8haEeblPAKpAIqR04NBzTM1/0RVavJZH89ovfSQIk42ygkiOaDV4E2x0Mmh6DRoIYcw==",
|
||||||
|
"path": "discord.net.websocket/3.5.0",
|
||||||
|
"hashPath": "discord.net.websocket.3.5.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Microsoft.Extensions.DependencyInjection.Abstractions/5.0.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-ORj7Zh81gC69TyvmcUm9tSzytcy8AVousi+IVRAI8nLieQjOFryRusSFh7+aLk16FN9pQNqJAiMd7BTKINK0kA==",
|
||||||
|
"path": "microsoft.extensions.dependencyinjection.abstractions/5.0.0",
|
||||||
|
"hashPath": "microsoft.extensions.dependencyinjection.abstractions.5.0.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Newtonsoft.Json/13.0.1": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-ppPFpBcvxdsfUonNcvITKqLl3bqxWbDCZIzDWHzjpdAHRFfZe0Dw9HmA0+za13IdyrgJwpkDTDA9fHaxOrt20A==",
|
||||||
|
"path": "newtonsoft.json/13.0.1",
|
||||||
|
"hashPath": "newtonsoft.json.13.0.1.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"System.Collections.Immutable/5.0.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-FXkLXiK0sVVewcso0imKQoOxjoPAj42R8HtjjbSjVPAzwDfzoyoznWxgA3c38LDbN9SJux1xXoXYAhz98j7r2g==",
|
||||||
|
"path": "system.collections.immutable/5.0.0",
|
||||||
|
"hashPath": "system.collections.immutable.5.0.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"System.Interactive.Async/5.0.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-QaqhQVDiULcu4vm6o89+iP329HcK44cETHOYgy/jfEjtzeFy0ZxmuM7nel9ocjnKxEM4yh1mli7hgh8Q9o+/Iw==",
|
||||||
|
"path": "system.interactive.async/5.0.0",
|
||||||
|
"hashPath": "system.interactive.async.5.0.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"System.Linq.Async/5.0.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-cPtIuuH8TIjVHSi2ewwReWGW1PfChPE0LxPIDlfwVcLuTM9GANFTXiMB7k3aC4sk3f0cQU25LNKzx+jZMxijqw==",
|
||||||
|
"path": "system.linq.async/5.0.0",
|
||||||
|
"hashPath": "system.linq.async.5.0.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"System.Reactive/5.0.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-erBZjkQHWL9jpasCE/0qKAryzVBJFxGHVBAvgRN1bzM0q2s1S4oYREEEL0Vb+1kA/6BKb5FjUZMp5VXmy+gzkQ==",
|
||||||
|
"path": "system.reactive/5.0.0",
|
||||||
|
"hashPath": "system.reactive.5.0.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"System.ValueTuple/4.5.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-okurQJO6NRE/apDIP23ajJ0hpiNmJ+f0BwOlB/cSqTLQlw5upkf+5+96+iG2Jw40G1fCVCyPz/FhIABUjMR+RQ==",
|
||||||
|
"path": "system.valuetuple/4.5.0",
|
||||||
|
"hashPath": "system.valuetuple.4.5.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"PluginManager/1.0.0": {
|
||||||
|
"type": "project",
|
||||||
|
"serviceable": false,
|
||||||
|
"sha512": ""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
BIN
BUILDS/net5.0/MusicCommands.dll
Normal file
BIN
BUILDS/net5.0/MusicCommands.dll
Normal file
Binary file not shown.
BIN
BUILDS/net5.0/PluginManager.dll
Normal file
BIN
BUILDS/net5.0/PluginManager.dll
Normal file
Binary file not shown.
268
BUILDS/net5.0/StartupEvents.deps.json
Normal file
268
BUILDS/net5.0/StartupEvents.deps.json
Normal file
@@ -0,0 +1,268 @@
|
|||||||
|
{
|
||||||
|
"runtimeTarget": {
|
||||||
|
"name": ".NETCoreApp,Version=v5.0",
|
||||||
|
"signature": ""
|
||||||
|
},
|
||||||
|
"compilationOptions": {},
|
||||||
|
"targets": {
|
||||||
|
".NETCoreApp,Version=v5.0": {
|
||||||
|
"StartupEvents/1.0.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"PluginManager": "1.0.0"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"StartupEvents.dll": {}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Discord.Net/3.5.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"Discord.Net.Commands": "3.5.0",
|
||||||
|
"Discord.Net.Core": "3.5.0",
|
||||||
|
"Discord.Net.Interactions": "3.5.0",
|
||||||
|
"Discord.Net.Rest": "3.5.0",
|
||||||
|
"Discord.Net.WebSocket": "3.5.0",
|
||||||
|
"Discord.Net.Webhook": "3.5.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Discord.Net.Commands/3.5.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"Discord.Net.Core": "3.5.0"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/net5.0/Discord.Net.Commands.dll": {
|
||||||
|
"assemblyVersion": "3.5.0.0",
|
||||||
|
"fileVersion": "3.5.0.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Discord.Net.Core/3.5.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"Newtonsoft.Json": "13.0.1",
|
||||||
|
"System.Collections.Immutable": "5.0.0",
|
||||||
|
"System.Interactive.Async": "5.0.0",
|
||||||
|
"System.ValueTuple": "4.5.0"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/net5.0/Discord.Net.Core.dll": {
|
||||||
|
"assemblyVersion": "3.5.0.0",
|
||||||
|
"fileVersion": "3.5.0.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Discord.Net.Interactions/3.5.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"Discord.Net.Core": "3.5.0",
|
||||||
|
"Discord.Net.Rest": "3.5.0",
|
||||||
|
"Discord.Net.WebSocket": "3.5.0",
|
||||||
|
"Microsoft.Extensions.DependencyInjection.Abstractions": "5.0.0",
|
||||||
|
"System.Collections.Immutable": "5.0.0",
|
||||||
|
"System.Reactive": "5.0.0"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/net5.0/Discord.Net.Interactions.dll": {
|
||||||
|
"assemblyVersion": "3.5.0.0",
|
||||||
|
"fileVersion": "3.5.0.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Discord.Net.Rest/3.5.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"Discord.Net.Core": "3.5.0"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/net5.0/Discord.Net.Rest.dll": {
|
||||||
|
"assemblyVersion": "3.5.0.0",
|
||||||
|
"fileVersion": "3.5.0.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Discord.Net.Webhook/3.5.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"Discord.Net.Core": "3.5.0",
|
||||||
|
"Discord.Net.Rest": "3.5.0"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/net5.0/Discord.Net.Webhook.dll": {
|
||||||
|
"assemblyVersion": "3.5.0.0",
|
||||||
|
"fileVersion": "3.5.0.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Discord.Net.WebSocket/3.5.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"Discord.Net.Core": "3.5.0",
|
||||||
|
"Discord.Net.Rest": "3.5.0"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/net5.0/Discord.Net.WebSocket.dll": {
|
||||||
|
"assemblyVersion": "3.5.0.0",
|
||||||
|
"fileVersion": "3.5.0.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Microsoft.Extensions.DependencyInjection.Abstractions/5.0.0": {
|
||||||
|
"runtime": {
|
||||||
|
"lib/netstandard2.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll": {
|
||||||
|
"assemblyVersion": "5.0.0.0",
|
||||||
|
"fileVersion": "5.0.20.51904"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Newtonsoft.Json/13.0.1": {
|
||||||
|
"runtime": {
|
||||||
|
"lib/netstandard2.0/Newtonsoft.Json.dll": {
|
||||||
|
"assemblyVersion": "13.0.0.0",
|
||||||
|
"fileVersion": "13.0.1.25517"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"System.Collections.Immutable/5.0.0": {},
|
||||||
|
"System.Interactive.Async/5.0.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"System.Linq.Async": "5.0.0"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/netcoreapp3.1/System.Interactive.Async.dll": {
|
||||||
|
"assemblyVersion": "5.0.0.0",
|
||||||
|
"fileVersion": "5.0.0.1"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"System.Linq.Async/5.0.0": {
|
||||||
|
"runtime": {
|
||||||
|
"lib/netcoreapp3.1/System.Linq.Async.dll": {
|
||||||
|
"assemblyVersion": "5.0.0.0",
|
||||||
|
"fileVersion": "5.0.0.1"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"System.Reactive/5.0.0": {
|
||||||
|
"runtime": {
|
||||||
|
"lib/net5.0/System.Reactive.dll": {
|
||||||
|
"assemblyVersion": "5.0.0.0",
|
||||||
|
"fileVersion": "5.0.0.1"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"System.ValueTuple/4.5.0": {},
|
||||||
|
"PluginManager/1.0.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"Discord.Net": "3.5.0"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"PluginManager.dll": {}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"libraries": {
|
||||||
|
"StartupEvents/1.0.0": {
|
||||||
|
"type": "project",
|
||||||
|
"serviceable": false,
|
||||||
|
"sha512": ""
|
||||||
|
},
|
||||||
|
"Discord.Net/3.5.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-IUtexpvogudb1rllKBWkIEpBVQoToMjtVo81KPkt+gNMe7KtRDcZJgcn6+72viMtyw0e95OJPXFV5VEA/n2OQQ==",
|
||||||
|
"path": "discord.net/3.5.0",
|
||||||
|
"hashPath": "discord.net.3.5.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Discord.Net.Commands/3.5.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-ClTv8aiTlitvS48YatRiTLvgE2f2uKgmHNPVBIuvJBHZO2u4bZCzoN1fid+pZn2sbVOkt8uftlLGzz5DSZlFIA==",
|
||||||
|
"path": "discord.net.commands/3.5.0",
|
||||||
|
"hashPath": "discord.net.commands.3.5.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Discord.Net.Core/3.5.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-rCzzaznMVQ+bLMxOpYwTyqm9V22kMy6BxlQisSxemHZDe2Jedz3Clp/a0dToACLz+Dlp3u+jYUfCBnTz7L6f4g==",
|
||||||
|
"path": "discord.net.core/3.5.0",
|
||||||
|
"hashPath": "discord.net.core.3.5.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Discord.Net.Interactions/3.5.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-wE9+V9DJ7r+1s4euOi4sGPIAt4sD7r+Tk5s9mrlbLCHVQTK4KllAvcrL25bPFI38FuFceREEzFoRlTrekSyB2Q==",
|
||||||
|
"path": "discord.net.interactions/3.5.0",
|
||||||
|
"hashPath": "discord.net.interactions.3.5.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Discord.Net.Rest/3.5.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-BnTdLFuuQsKvCv08VQrD4X1Hw2Xp+MELIRQiDiKfG01IiQlRTN+1gc3LB1zXgn5xBvC0HXjHxwV22GrMD9uKHQ==",
|
||||||
|
"path": "discord.net.rest/3.5.0",
|
||||||
|
"hashPath": "discord.net.rest.3.5.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Discord.Net.Webhook/3.5.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-vCIGZS+m88sQDuFmdbUqg+2RIXS/NJWx8ei3MX+ZEYiAvOkDgQfkIlEnU1NKpds6ivTt5GFlv6UzcWubb5VJ1w==",
|
||||||
|
"path": "discord.net.webhook/3.5.0",
|
||||||
|
"hashPath": "discord.net.webhook.3.5.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Discord.Net.WebSocket/3.5.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-LjBOvcP40vJ+dhOtBDi8haEeblPAKpAIqR04NBzTM1/0RVavJZH89ovfSQIk42ygkiOaDV4E2x0Mmh6DRoIYcw==",
|
||||||
|
"path": "discord.net.websocket/3.5.0",
|
||||||
|
"hashPath": "discord.net.websocket.3.5.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Microsoft.Extensions.DependencyInjection.Abstractions/5.0.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-ORj7Zh81gC69TyvmcUm9tSzytcy8AVousi+IVRAI8nLieQjOFryRusSFh7+aLk16FN9pQNqJAiMd7BTKINK0kA==",
|
||||||
|
"path": "microsoft.extensions.dependencyinjection.abstractions/5.0.0",
|
||||||
|
"hashPath": "microsoft.extensions.dependencyinjection.abstractions.5.0.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Newtonsoft.Json/13.0.1": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-ppPFpBcvxdsfUonNcvITKqLl3bqxWbDCZIzDWHzjpdAHRFfZe0Dw9HmA0+za13IdyrgJwpkDTDA9fHaxOrt20A==",
|
||||||
|
"path": "newtonsoft.json/13.0.1",
|
||||||
|
"hashPath": "newtonsoft.json.13.0.1.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"System.Collections.Immutable/5.0.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-FXkLXiK0sVVewcso0imKQoOxjoPAj42R8HtjjbSjVPAzwDfzoyoznWxgA3c38LDbN9SJux1xXoXYAhz98j7r2g==",
|
||||||
|
"path": "system.collections.immutable/5.0.0",
|
||||||
|
"hashPath": "system.collections.immutable.5.0.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"System.Interactive.Async/5.0.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-QaqhQVDiULcu4vm6o89+iP329HcK44cETHOYgy/jfEjtzeFy0ZxmuM7nel9ocjnKxEM4yh1mli7hgh8Q9o+/Iw==",
|
||||||
|
"path": "system.interactive.async/5.0.0",
|
||||||
|
"hashPath": "system.interactive.async.5.0.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"System.Linq.Async/5.0.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-cPtIuuH8TIjVHSi2ewwReWGW1PfChPE0LxPIDlfwVcLuTM9GANFTXiMB7k3aC4sk3f0cQU25LNKzx+jZMxijqw==",
|
||||||
|
"path": "system.linq.async/5.0.0",
|
||||||
|
"hashPath": "system.linq.async.5.0.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"System.Reactive/5.0.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-erBZjkQHWL9jpasCE/0qKAryzVBJFxGHVBAvgRN1bzM0q2s1S4oYREEEL0Vb+1kA/6BKb5FjUZMp5VXmy+gzkQ==",
|
||||||
|
"path": "system.reactive/5.0.0",
|
||||||
|
"hashPath": "system.reactive.5.0.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"System.ValueTuple/4.5.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-okurQJO6NRE/apDIP23ajJ0hpiNmJ+f0BwOlB/cSqTLQlw5upkf+5+96+iG2Jw40G1fCVCyPz/FhIABUjMR+RQ==",
|
||||||
|
"path": "system.valuetuple/4.5.0",
|
||||||
|
"hashPath": "system.valuetuple.4.5.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"PluginManager/1.0.0": {
|
||||||
|
"type": "project",
|
||||||
|
"serviceable": false,
|
||||||
|
"sha512": ""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
BIN
BUILDS/net5.0/StartupEvents.dll
Normal file
BIN
BUILDS/net5.0/StartupEvents.dll
Normal file
Binary file not shown.
BIN
BUILDS/net5.0/ref/CMD_LevelingSystem.dll
Normal file
BIN
BUILDS/net5.0/ref/CMD_LevelingSystem.dll
Normal file
Binary file not shown.
BIN
BUILDS/net5.0/ref/CMD_Utils.dll
Normal file
BIN
BUILDS/net5.0/ref/CMD_Utils.dll
Normal file
Binary file not shown.
BIN
BUILDS/net5.0/ref/EVE_LevelingSystem.dll
Normal file
BIN
BUILDS/net5.0/ref/EVE_LevelingSystem.dll
Normal file
Binary file not shown.
BIN
BUILDS/net5.0/ref/MusicCommands.dll
Normal file
BIN
BUILDS/net5.0/ref/MusicCommands.dll
Normal file
Binary file not shown.
BIN
BUILDS/net5.0/ref/StartupEvents.dll
Normal file
BIN
BUILDS/net5.0/ref/StartupEvents.dll
Normal file
Binary file not shown.
268
BUILDS/net6.0/CMD_Utils.deps.json
Normal file
268
BUILDS/net6.0/CMD_Utils.deps.json
Normal file
@@ -0,0 +1,268 @@
|
|||||||
|
{
|
||||||
|
"runtimeTarget": {
|
||||||
|
"name": ".NETCoreApp,Version=v6.0",
|
||||||
|
"signature": ""
|
||||||
|
},
|
||||||
|
"compilationOptions": {},
|
||||||
|
"targets": {
|
||||||
|
".NETCoreApp,Version=v6.0": {
|
||||||
|
"CMD_Utils/1.0.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"PluginManager": "1.0.0"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"CMD_Utils.dll": {}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Discord.Net/3.7.2": {
|
||||||
|
"dependencies": {
|
||||||
|
"Discord.Net.Commands": "3.7.2",
|
||||||
|
"Discord.Net.Core": "3.7.2",
|
||||||
|
"Discord.Net.Interactions": "3.7.2",
|
||||||
|
"Discord.Net.Rest": "3.7.2",
|
||||||
|
"Discord.Net.WebSocket": "3.7.2",
|
||||||
|
"Discord.Net.Webhook": "3.7.2"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Discord.Net.Commands/3.7.2": {
|
||||||
|
"dependencies": {
|
||||||
|
"Discord.Net.Core": "3.7.2"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/net6.0/Discord.Net.Commands.dll": {
|
||||||
|
"assemblyVersion": "3.7.2.0",
|
||||||
|
"fileVersion": "3.7.2.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Discord.Net.Core/3.7.2": {
|
||||||
|
"dependencies": {
|
||||||
|
"Newtonsoft.Json": "13.0.1",
|
||||||
|
"System.Collections.Immutable": "5.0.0",
|
||||||
|
"System.Interactive.Async": "5.0.0",
|
||||||
|
"System.ValueTuple": "4.5.0"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/net6.0/Discord.Net.Core.dll": {
|
||||||
|
"assemblyVersion": "3.7.2.0",
|
||||||
|
"fileVersion": "3.7.2.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Discord.Net.Interactions/3.7.2": {
|
||||||
|
"dependencies": {
|
||||||
|
"Discord.Net.Core": "3.7.2",
|
||||||
|
"Discord.Net.Rest": "3.7.2",
|
||||||
|
"Discord.Net.WebSocket": "3.7.2",
|
||||||
|
"Microsoft.Extensions.DependencyInjection.Abstractions": "5.0.0",
|
||||||
|
"System.Collections.Immutable": "5.0.0",
|
||||||
|
"System.Reactive": "5.0.0"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/net6.0/Discord.Net.Interactions.dll": {
|
||||||
|
"assemblyVersion": "3.7.2.0",
|
||||||
|
"fileVersion": "3.7.2.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Discord.Net.Rest/3.7.2": {
|
||||||
|
"dependencies": {
|
||||||
|
"Discord.Net.Core": "3.7.2"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/net6.0/Discord.Net.Rest.dll": {
|
||||||
|
"assemblyVersion": "3.7.2.0",
|
||||||
|
"fileVersion": "3.7.2.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Discord.Net.Webhook/3.7.2": {
|
||||||
|
"dependencies": {
|
||||||
|
"Discord.Net.Core": "3.7.2",
|
||||||
|
"Discord.Net.Rest": "3.7.2"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/net6.0/Discord.Net.Webhook.dll": {
|
||||||
|
"assemblyVersion": "3.7.2.0",
|
||||||
|
"fileVersion": "3.7.2.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Discord.Net.WebSocket/3.7.2": {
|
||||||
|
"dependencies": {
|
||||||
|
"Discord.Net.Core": "3.7.2",
|
||||||
|
"Discord.Net.Rest": "3.7.2"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/net6.0/Discord.Net.WebSocket.dll": {
|
||||||
|
"assemblyVersion": "3.7.2.0",
|
||||||
|
"fileVersion": "3.7.2.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Microsoft.Extensions.DependencyInjection.Abstractions/5.0.0": {
|
||||||
|
"runtime": {
|
||||||
|
"lib/netstandard2.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll": {
|
||||||
|
"assemblyVersion": "5.0.0.0",
|
||||||
|
"fileVersion": "5.0.20.51904"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Newtonsoft.Json/13.0.1": {
|
||||||
|
"runtime": {
|
||||||
|
"lib/netstandard2.0/Newtonsoft.Json.dll": {
|
||||||
|
"assemblyVersion": "13.0.0.0",
|
||||||
|
"fileVersion": "13.0.1.25517"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"System.Collections.Immutable/5.0.0": {},
|
||||||
|
"System.Interactive.Async/5.0.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"System.Linq.Async": "5.0.0"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/netcoreapp3.1/System.Interactive.Async.dll": {
|
||||||
|
"assemblyVersion": "5.0.0.0",
|
||||||
|
"fileVersion": "5.0.0.1"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"System.Linq.Async/5.0.0": {
|
||||||
|
"runtime": {
|
||||||
|
"lib/netcoreapp3.1/System.Linq.Async.dll": {
|
||||||
|
"assemblyVersion": "5.0.0.0",
|
||||||
|
"fileVersion": "5.0.0.1"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"System.Reactive/5.0.0": {
|
||||||
|
"runtime": {
|
||||||
|
"lib/net5.0/System.Reactive.dll": {
|
||||||
|
"assemblyVersion": "5.0.0.0",
|
||||||
|
"fileVersion": "5.0.0.1"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"System.ValueTuple/4.5.0": {},
|
||||||
|
"PluginManager/1.0.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"Discord.Net": "3.7.2"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"PluginManager.dll": {}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"libraries": {
|
||||||
|
"CMD_Utils/1.0.0": {
|
||||||
|
"type": "project",
|
||||||
|
"serviceable": false,
|
||||||
|
"sha512": ""
|
||||||
|
},
|
||||||
|
"Discord.Net/3.7.2": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-FAiCLGu5rp6+Z10FjKbbJ6LLpKjbMBGpozixkJlz5LZvuncPx8f4AWFAw7pBecKUuAh983qiZ8CZYZcNXsI4qg==",
|
||||||
|
"path": "discord.net/3.7.2",
|
||||||
|
"hashPath": "discord.net.3.7.2.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Discord.Net.Commands/3.7.2": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-aOEGP04X64htsTr7ozKj9qHpmvOfitSw5gfR8Tw9TX0+FdswD2LNL2KfOAIaxRKZmRTm34aXQEJrVq0K8AptmQ==",
|
||||||
|
"path": "discord.net.commands/3.7.2",
|
||||||
|
"hashPath": "discord.net.commands.3.7.2.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Discord.Net.Core/3.7.2": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-apwswc6LjN4dj3u27SO3Hr56Jzl91wzReahieoD7IQhV+BJQaRxhTRiEEWFTrBzHfeFHEOQ7r6vZnra3zeFhKA==",
|
||||||
|
"path": "discord.net.core/3.7.2",
|
||||||
|
"hashPath": "discord.net.core.3.7.2.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Discord.Net.Interactions/3.7.2": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-dwGhEdDB0yyo/lGtjwIDVZmsuD52di7lIZWu/sBtvvA05dMgYZq5S6ILdsBXjOyaHeXd+EV4YMlj2VS/rm619w==",
|
||||||
|
"path": "discord.net.interactions/3.7.2",
|
||||||
|
"hashPath": "discord.net.interactions.3.7.2.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Discord.Net.Rest/3.7.2": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-dyp8YaMBNJ837EH1KNz2PNGZqc2y71WFd1+pdldF+pLQJ3Gf/+V7685paAR7bQw7yFNyqEBR/QRBCNp+QIQ7Wg==",
|
||||||
|
"path": "discord.net.rest/3.7.2",
|
||||||
|
"hashPath": "discord.net.rest.3.7.2.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Discord.Net.Webhook/3.7.2": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-da3i/mTq2y7mfj3xlHH14S4PivHbflJCVr8OUikJtQrxBOxvPkqP7ZYk3Y9S28q0K8qik+TUjCcjL5gELKrh/A==",
|
||||||
|
"path": "discord.net.webhook/3.7.2",
|
||||||
|
"hashPath": "discord.net.webhook.3.7.2.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Discord.Net.WebSocket/3.7.2": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-pYCd6ET44ADaNiyEw82TaJnR7TKYHfrKCytWFWMPL5faJhoh260avZn3Hwunlf331lEQ0f4K1CujPkQbNuq7kQ==",
|
||||||
|
"path": "discord.net.websocket/3.7.2",
|
||||||
|
"hashPath": "discord.net.websocket.3.7.2.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Microsoft.Extensions.DependencyInjection.Abstractions/5.0.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-ORj7Zh81gC69TyvmcUm9tSzytcy8AVousi+IVRAI8nLieQjOFryRusSFh7+aLk16FN9pQNqJAiMd7BTKINK0kA==",
|
||||||
|
"path": "microsoft.extensions.dependencyinjection.abstractions/5.0.0",
|
||||||
|
"hashPath": "microsoft.extensions.dependencyinjection.abstractions.5.0.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Newtonsoft.Json/13.0.1": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-ppPFpBcvxdsfUonNcvITKqLl3bqxWbDCZIzDWHzjpdAHRFfZe0Dw9HmA0+za13IdyrgJwpkDTDA9fHaxOrt20A==",
|
||||||
|
"path": "newtonsoft.json/13.0.1",
|
||||||
|
"hashPath": "newtonsoft.json.13.0.1.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"System.Collections.Immutable/5.0.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-FXkLXiK0sVVewcso0imKQoOxjoPAj42R8HtjjbSjVPAzwDfzoyoznWxgA3c38LDbN9SJux1xXoXYAhz98j7r2g==",
|
||||||
|
"path": "system.collections.immutable/5.0.0",
|
||||||
|
"hashPath": "system.collections.immutable.5.0.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"System.Interactive.Async/5.0.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-QaqhQVDiULcu4vm6o89+iP329HcK44cETHOYgy/jfEjtzeFy0ZxmuM7nel9ocjnKxEM4yh1mli7hgh8Q9o+/Iw==",
|
||||||
|
"path": "system.interactive.async/5.0.0",
|
||||||
|
"hashPath": "system.interactive.async.5.0.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"System.Linq.Async/5.0.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-cPtIuuH8TIjVHSi2ewwReWGW1PfChPE0LxPIDlfwVcLuTM9GANFTXiMB7k3aC4sk3f0cQU25LNKzx+jZMxijqw==",
|
||||||
|
"path": "system.linq.async/5.0.0",
|
||||||
|
"hashPath": "system.linq.async.5.0.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"System.Reactive/5.0.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-erBZjkQHWL9jpasCE/0qKAryzVBJFxGHVBAvgRN1bzM0q2s1S4oYREEEL0Vb+1kA/6BKb5FjUZMp5VXmy+gzkQ==",
|
||||||
|
"path": "system.reactive/5.0.0",
|
||||||
|
"hashPath": "system.reactive.5.0.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"System.ValueTuple/4.5.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-okurQJO6NRE/apDIP23ajJ0hpiNmJ+f0BwOlB/cSqTLQlw5upkf+5+96+iG2Jw40G1fCVCyPz/FhIABUjMR+RQ==",
|
||||||
|
"path": "system.valuetuple/4.5.0",
|
||||||
|
"hashPath": "system.valuetuple.4.5.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"PluginManager/1.0.0": {
|
||||||
|
"type": "project",
|
||||||
|
"serviceable": false,
|
||||||
|
"sha512": ""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
BIN
BUILDS/net6.0/CMD_Utils.dll
Normal file
BIN
BUILDS/net6.0/CMD_Utils.dll
Normal file
Binary file not shown.
334
BUILDS/net6.0/Music Commands.deps.json
Normal file
334
BUILDS/net6.0/Music Commands.deps.json
Normal file
@@ -0,0 +1,334 @@
|
|||||||
|
{
|
||||||
|
"runtimeTarget": {
|
||||||
|
"name": ".NETCoreApp,Version=v6.0",
|
||||||
|
"signature": ""
|
||||||
|
},
|
||||||
|
"compilationOptions": {},
|
||||||
|
"targets": {
|
||||||
|
".NETCoreApp,Version=v6.0": {
|
||||||
|
"Music Commands/1.0.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"PluginManager": "1.0.0",
|
||||||
|
"YoutubeExplode": "6.2.0"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"Music Commands.dll": {}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"AngleSharp/0.17.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"System.Buffers": "4.5.1",
|
||||||
|
"System.Text.Encoding.CodePages": "5.0.0"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/netstandard2.0/AngleSharp.dll": {
|
||||||
|
"assemblyVersion": "0.17.0.0",
|
||||||
|
"fileVersion": "0.17.0.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Discord.Net/3.7.2": {
|
||||||
|
"dependencies": {
|
||||||
|
"Discord.Net.Commands": "3.7.2",
|
||||||
|
"Discord.Net.Core": "3.7.2",
|
||||||
|
"Discord.Net.Interactions": "3.7.2",
|
||||||
|
"Discord.Net.Rest": "3.7.2",
|
||||||
|
"Discord.Net.WebSocket": "3.7.2",
|
||||||
|
"Discord.Net.Webhook": "3.7.2"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Discord.Net.Commands/3.7.2": {
|
||||||
|
"dependencies": {
|
||||||
|
"Discord.Net.Core": "3.7.2"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/net6.0/Discord.Net.Commands.dll": {
|
||||||
|
"assemblyVersion": "3.7.2.0",
|
||||||
|
"fileVersion": "3.7.2.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Discord.Net.Core/3.7.2": {
|
||||||
|
"dependencies": {
|
||||||
|
"Newtonsoft.Json": "13.0.1",
|
||||||
|
"System.Collections.Immutable": "5.0.0",
|
||||||
|
"System.Interactive.Async": "5.0.0",
|
||||||
|
"System.ValueTuple": "4.5.0"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/net6.0/Discord.Net.Core.dll": {
|
||||||
|
"assemblyVersion": "3.7.2.0",
|
||||||
|
"fileVersion": "3.7.2.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Discord.Net.Interactions/3.7.2": {
|
||||||
|
"dependencies": {
|
||||||
|
"Discord.Net.Core": "3.7.2",
|
||||||
|
"Discord.Net.Rest": "3.7.2",
|
||||||
|
"Discord.Net.WebSocket": "3.7.2",
|
||||||
|
"Microsoft.Extensions.DependencyInjection.Abstractions": "5.0.0",
|
||||||
|
"System.Collections.Immutable": "5.0.0",
|
||||||
|
"System.Reactive": "5.0.0"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/net6.0/Discord.Net.Interactions.dll": {
|
||||||
|
"assemblyVersion": "3.7.2.0",
|
||||||
|
"fileVersion": "3.7.2.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Discord.Net.Rest/3.7.2": {
|
||||||
|
"dependencies": {
|
||||||
|
"Discord.Net.Core": "3.7.2"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/net6.0/Discord.Net.Rest.dll": {
|
||||||
|
"assemblyVersion": "3.7.2.0",
|
||||||
|
"fileVersion": "3.7.2.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Discord.Net.Webhook/3.7.2": {
|
||||||
|
"dependencies": {
|
||||||
|
"Discord.Net.Core": "3.7.2",
|
||||||
|
"Discord.Net.Rest": "3.7.2"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/net6.0/Discord.Net.Webhook.dll": {
|
||||||
|
"assemblyVersion": "3.7.2.0",
|
||||||
|
"fileVersion": "3.7.2.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Discord.Net.WebSocket/3.7.2": {
|
||||||
|
"dependencies": {
|
||||||
|
"Discord.Net.Core": "3.7.2",
|
||||||
|
"Discord.Net.Rest": "3.7.2"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/net6.0/Discord.Net.WebSocket.dll": {
|
||||||
|
"assemblyVersion": "3.7.2.0",
|
||||||
|
"fileVersion": "3.7.2.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Microsoft.Extensions.DependencyInjection.Abstractions/5.0.0": {
|
||||||
|
"runtime": {
|
||||||
|
"lib/netstandard2.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll": {
|
||||||
|
"assemblyVersion": "5.0.0.0",
|
||||||
|
"fileVersion": "5.0.20.51904"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Microsoft.NETCore.Platforms/5.0.0": {},
|
||||||
|
"Newtonsoft.Json/13.0.1": {
|
||||||
|
"runtime": {
|
||||||
|
"lib/netstandard2.0/Newtonsoft.Json.dll": {
|
||||||
|
"assemblyVersion": "13.0.0.0",
|
||||||
|
"fileVersion": "13.0.1.25517"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"System.Buffers/4.5.1": {},
|
||||||
|
"System.Collections.Immutable/5.0.0": {},
|
||||||
|
"System.Interactive.Async/5.0.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"System.Linq.Async": "5.0.0"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/netcoreapp3.1/System.Interactive.Async.dll": {
|
||||||
|
"assemblyVersion": "5.0.0.0",
|
||||||
|
"fileVersion": "5.0.0.1"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"System.Linq.Async/5.0.0": {
|
||||||
|
"runtime": {
|
||||||
|
"lib/netcoreapp3.1/System.Linq.Async.dll": {
|
||||||
|
"assemblyVersion": "5.0.0.0",
|
||||||
|
"fileVersion": "5.0.0.1"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"System.Reactive/5.0.0": {
|
||||||
|
"runtime": {
|
||||||
|
"lib/net5.0/System.Reactive.dll": {
|
||||||
|
"assemblyVersion": "5.0.0.0",
|
||||||
|
"fileVersion": "5.0.0.1"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"System.Text.Encoding.CodePages/5.0.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"Microsoft.NETCore.Platforms": "5.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"System.ValueTuple/4.5.0": {},
|
||||||
|
"YoutubeExplode/6.2.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"AngleSharp": "0.17.0"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/net5.0/YoutubeExplode.dll": {
|
||||||
|
"assemblyVersion": "6.2.0.0",
|
||||||
|
"fileVersion": "6.2.0.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"PluginManager/1.0.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"Discord.Net": "3.7.2"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"PluginManager.dll": {}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"libraries": {
|
||||||
|
"Music Commands/1.0.0": {
|
||||||
|
"type": "project",
|
||||||
|
"serviceable": false,
|
||||||
|
"sha512": ""
|
||||||
|
},
|
||||||
|
"AngleSharp/0.17.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-74haoXINcj4SdMsmiNzk+9VUwIX1U9P61O6AZd5Uao8SGNnJJB8Y/r8VJRc8orn4c7Vk/oURAKSNF9XcSDxbfA==",
|
||||||
|
"path": "anglesharp/0.17.0",
|
||||||
|
"hashPath": "anglesharp.0.17.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Discord.Net/3.7.2": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-FAiCLGu5rp6+Z10FjKbbJ6LLpKjbMBGpozixkJlz5LZvuncPx8f4AWFAw7pBecKUuAh983qiZ8CZYZcNXsI4qg==",
|
||||||
|
"path": "discord.net/3.7.2",
|
||||||
|
"hashPath": "discord.net.3.7.2.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Discord.Net.Commands/3.7.2": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-aOEGP04X64htsTr7ozKj9qHpmvOfitSw5gfR8Tw9TX0+FdswD2LNL2KfOAIaxRKZmRTm34aXQEJrVq0K8AptmQ==",
|
||||||
|
"path": "discord.net.commands/3.7.2",
|
||||||
|
"hashPath": "discord.net.commands.3.7.2.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Discord.Net.Core/3.7.2": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-apwswc6LjN4dj3u27SO3Hr56Jzl91wzReahieoD7IQhV+BJQaRxhTRiEEWFTrBzHfeFHEOQ7r6vZnra3zeFhKA==",
|
||||||
|
"path": "discord.net.core/3.7.2",
|
||||||
|
"hashPath": "discord.net.core.3.7.2.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Discord.Net.Interactions/3.7.2": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-dwGhEdDB0yyo/lGtjwIDVZmsuD52di7lIZWu/sBtvvA05dMgYZq5S6ILdsBXjOyaHeXd+EV4YMlj2VS/rm619w==",
|
||||||
|
"path": "discord.net.interactions/3.7.2",
|
||||||
|
"hashPath": "discord.net.interactions.3.7.2.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Discord.Net.Rest/3.7.2": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-dyp8YaMBNJ837EH1KNz2PNGZqc2y71WFd1+pdldF+pLQJ3Gf/+V7685paAR7bQw7yFNyqEBR/QRBCNp+QIQ7Wg==",
|
||||||
|
"path": "discord.net.rest/3.7.2",
|
||||||
|
"hashPath": "discord.net.rest.3.7.2.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Discord.Net.Webhook/3.7.2": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-da3i/mTq2y7mfj3xlHH14S4PivHbflJCVr8OUikJtQrxBOxvPkqP7ZYk3Y9S28q0K8qik+TUjCcjL5gELKrh/A==",
|
||||||
|
"path": "discord.net.webhook/3.7.2",
|
||||||
|
"hashPath": "discord.net.webhook.3.7.2.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Discord.Net.WebSocket/3.7.2": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-pYCd6ET44ADaNiyEw82TaJnR7TKYHfrKCytWFWMPL5faJhoh260avZn3Hwunlf331lEQ0f4K1CujPkQbNuq7kQ==",
|
||||||
|
"path": "discord.net.websocket/3.7.2",
|
||||||
|
"hashPath": "discord.net.websocket.3.7.2.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Microsoft.Extensions.DependencyInjection.Abstractions/5.0.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-ORj7Zh81gC69TyvmcUm9tSzytcy8AVousi+IVRAI8nLieQjOFryRusSFh7+aLk16FN9pQNqJAiMd7BTKINK0kA==",
|
||||||
|
"path": "microsoft.extensions.dependencyinjection.abstractions/5.0.0",
|
||||||
|
"hashPath": "microsoft.extensions.dependencyinjection.abstractions.5.0.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Microsoft.NETCore.Platforms/5.0.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-VyPlqzH2wavqquTcYpkIIAQ6WdenuKoFN0BdYBbCWsclXacSOHNQn66Gt4z5NBqEYW0FAPm5rlvki9ZiCij5xQ==",
|
||||||
|
"path": "microsoft.netcore.platforms/5.0.0",
|
||||||
|
"hashPath": "microsoft.netcore.platforms.5.0.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Newtonsoft.Json/13.0.1": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-ppPFpBcvxdsfUonNcvITKqLl3bqxWbDCZIzDWHzjpdAHRFfZe0Dw9HmA0+za13IdyrgJwpkDTDA9fHaxOrt20A==",
|
||||||
|
"path": "newtonsoft.json/13.0.1",
|
||||||
|
"hashPath": "newtonsoft.json.13.0.1.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"System.Buffers/4.5.1": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-Rw7ijyl1qqRS0YQD/WycNst8hUUMgrMH4FCn1nNm27M4VxchZ1js3fVjQaANHO5f3sN4isvP4a+Met9Y4YomAg==",
|
||||||
|
"path": "system.buffers/4.5.1",
|
||||||
|
"hashPath": "system.buffers.4.5.1.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"System.Collections.Immutable/5.0.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-FXkLXiK0sVVewcso0imKQoOxjoPAj42R8HtjjbSjVPAzwDfzoyoznWxgA3c38LDbN9SJux1xXoXYAhz98j7r2g==",
|
||||||
|
"path": "system.collections.immutable/5.0.0",
|
||||||
|
"hashPath": "system.collections.immutable.5.0.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"System.Interactive.Async/5.0.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-QaqhQVDiULcu4vm6o89+iP329HcK44cETHOYgy/jfEjtzeFy0ZxmuM7nel9ocjnKxEM4yh1mli7hgh8Q9o+/Iw==",
|
||||||
|
"path": "system.interactive.async/5.0.0",
|
||||||
|
"hashPath": "system.interactive.async.5.0.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"System.Linq.Async/5.0.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-cPtIuuH8TIjVHSi2ewwReWGW1PfChPE0LxPIDlfwVcLuTM9GANFTXiMB7k3aC4sk3f0cQU25LNKzx+jZMxijqw==",
|
||||||
|
"path": "system.linq.async/5.0.0",
|
||||||
|
"hashPath": "system.linq.async.5.0.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"System.Reactive/5.0.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-erBZjkQHWL9jpasCE/0qKAryzVBJFxGHVBAvgRN1bzM0q2s1S4oYREEEL0Vb+1kA/6BKb5FjUZMp5VXmy+gzkQ==",
|
||||||
|
"path": "system.reactive/5.0.0",
|
||||||
|
"hashPath": "system.reactive.5.0.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"System.Text.Encoding.CodePages/5.0.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-NyscU59xX6Uo91qvhOs2Ccho3AR2TnZPomo1Z0K6YpyztBPM/A5VbkzOO19sy3A3i1TtEnTxA7bCe3Us+r5MWg==",
|
||||||
|
"path": "system.text.encoding.codepages/5.0.0",
|
||||||
|
"hashPath": "system.text.encoding.codepages.5.0.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"System.ValueTuple/4.5.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-okurQJO6NRE/apDIP23ajJ0hpiNmJ+f0BwOlB/cSqTLQlw5upkf+5+96+iG2Jw40G1fCVCyPz/FhIABUjMR+RQ==",
|
||||||
|
"path": "system.valuetuple/4.5.0",
|
||||||
|
"hashPath": "system.valuetuple.4.5.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"YoutubeExplode/6.2.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-oH5kst4w1QkUwRjJco0alF57JOmFofSGlPkr4OniODB8R6MEyRWn1xFg3JS2wFYd6scZluoXRDhM3/uyUjO9/g==",
|
||||||
|
"path": "youtubeexplode/6.2.0",
|
||||||
|
"hashPath": "youtubeexplode.6.2.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"PluginManager/1.0.0": {
|
||||||
|
"type": "project",
|
||||||
|
"serviceable": false,
|
||||||
|
"sha512": ""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
BIN
BUILDS/net6.0/Music Commands.dll
Normal file
BIN
BUILDS/net6.0/Music Commands.dll
Normal file
Binary file not shown.
BIN
BUILDS/net6.0/PluginManager.dll
Normal file
BIN
BUILDS/net6.0/PluginManager.dll
Normal file
Binary file not shown.
BIN
BUILDS/net6.0/Plugins/Commands/CMD_LevelingSystem.dll
Normal file
BIN
BUILDS/net6.0/Plugins/Commands/CMD_LevelingSystem.dll
Normal file
Binary file not shown.
BIN
BUILDS/net6.0/Plugins/Commands/CMD_Utils.dll
Normal file
BIN
BUILDS/net6.0/Plugins/Commands/CMD_Utils.dll
Normal file
Binary file not shown.
BIN
BUILDS/net6.0/Plugins/Commands/Music Commands.dll
Normal file
BIN
BUILDS/net6.0/Plugins/Commands/Music Commands.dll
Normal file
Binary file not shown.
BIN
BUILDS/net6.0/Plugins/Commands/Roles.dll
Normal file
BIN
BUILDS/net6.0/Plugins/Commands/Roles.dll
Normal file
Binary file not shown.
BIN
BUILDS/net6.0/Plugins/Events/EVE_LevelingSystem.dll
Normal file
BIN
BUILDS/net6.0/Plugins/Events/EVE_LevelingSystem.dll
Normal file
Binary file not shown.
14
CMD_LevelingSystem/CMD_LevelingSystem.csproj
Normal file
14
CMD_LevelingSystem/CMD_LevelingSystem.csproj
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<TargetFramework>net6.0</TargetFramework>
|
||||||
|
<ImplicitUsings>enable</ImplicitUsings>
|
||||||
|
<Nullable>enable</Nullable>
|
||||||
|
<BaseOutputPath>bin\</BaseOutputPath>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="..\PluginManager\PluginManager.csproj" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
</Project>
|
||||||
50
CMD_LevelingSystem/Level.cs
Normal file
50
CMD_LevelingSystem/Level.cs
Normal file
@@ -0,0 +1,50 @@
|
|||||||
|
using Discord;
|
||||||
|
using Discord.Commands;
|
||||||
|
using Discord.WebSocket;
|
||||||
|
using PluginManager;
|
||||||
|
using PluginManager.Interfaces;
|
||||||
|
using PluginManager.Others;
|
||||||
|
|
||||||
|
namespace CMD_LevelingSystem;
|
||||||
|
|
||||||
|
internal class Level : DBCommand
|
||||||
|
{
|
||||||
|
public string Command => "level";
|
||||||
|
|
||||||
|
public List<string> Aliases => new() { "lvl" };
|
||||||
|
|
||||||
|
public string Description => "Display tour current level";
|
||||||
|
|
||||||
|
public string Usage => "level";
|
||||||
|
|
||||||
|
public bool canUseDM => false;
|
||||||
|
|
||||||
|
public bool canUseServer => true;
|
||||||
|
|
||||||
|
public bool requireAdmin => false;
|
||||||
|
|
||||||
|
public async void Execute(SocketCommandContext context, SocketMessage message, DiscordSocketClient client, bool isDM)
|
||||||
|
{
|
||||||
|
if (!File.Exists(Config.GetValue<string>("LevelingSystemPath") + $"/{message.Author.Id}.dat"))
|
||||||
|
{
|
||||||
|
await context.Channel.SendMessageAsync("You are now unranked !");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var user = await Functions.ConvertFromJson<User>(Config.GetValue<string>("LevelingSystemPath") + $"/{message.Author.Id}.dat");
|
||||||
|
if (user == null)
|
||||||
|
{
|
||||||
|
await context.Channel.SendMessageAsync("You are now unranked !");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var builder = new EmbedBuilder();
|
||||||
|
var r = new Random();
|
||||||
|
builder.WithColor(r.Next(256), r.Next(256), r.Next(256));
|
||||||
|
builder.AddField("Current Level", user.CurrentLevel, true)
|
||||||
|
.AddField("Current EXP", user.CurrentEXP, true)
|
||||||
|
.AddField("Required Exp", user.RequiredEXPToLevelUp, true);
|
||||||
|
builder.WithTimestamp(DateTimeOffset.Now);
|
||||||
|
await context.Channel.SendMessageAsync(embed: builder.Build());
|
||||||
|
}
|
||||||
|
}
|
||||||
18
CMD_LevelingSystem/User.cs
Normal file
18
CMD_LevelingSystem/User.cs
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
using Discord.WebSocket;
|
||||||
|
|
||||||
|
namespace CMD_LevelingSystem;
|
||||||
|
|
||||||
|
public class DiscordUser
|
||||||
|
{
|
||||||
|
public string Username { get; set; }
|
||||||
|
public ushort DiscordTag { get; set; }
|
||||||
|
public ulong userID { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public class User
|
||||||
|
{
|
||||||
|
public DiscordUser user { get; set; }
|
||||||
|
public int CurrentLevel { get; set; }
|
||||||
|
public long CurrentEXP { get; set; }
|
||||||
|
public long RequiredEXPToLevelUp { get; set; }
|
||||||
|
}
|
||||||
19
CMD_Utils/CMD_Utils.csproj
Normal file
19
CMD_Utils/CMD_Utils.csproj
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<TargetFramework>net6.0</TargetFramework>
|
||||||
|
<BaseOutputPath>bin\</BaseOutputPath>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
|
||||||
|
<OutputPath>..\BUILDS\</OutputPath>
|
||||||
|
<ErrorReport>prompt</ErrorReport>
|
||||||
|
<DebugType>none</DebugType>
|
||||||
|
<DebugSymbols>false</DebugSymbols>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="..\PluginManager\PluginManager.csproj" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
</Project>
|
||||||
26
CMD_Utils/Echo.cs
Normal file
26
CMD_Utils/Echo.cs
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
using Discord.Commands;
|
||||||
|
using Discord.WebSocket;
|
||||||
|
using PluginManager.Interfaces;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
|
||||||
|
internal class Echo : DBCommand
|
||||||
|
{
|
||||||
|
public string Command => "echo";
|
||||||
|
|
||||||
|
public List<string> Aliases => null;
|
||||||
|
|
||||||
|
public string Description => "Replay with the same message";
|
||||||
|
|
||||||
|
public string Usage => "echo [message]";
|
||||||
|
|
||||||
|
public bool canUseDM => true;
|
||||||
|
public bool canUseServer => true;
|
||||||
|
|
||||||
|
public bool requireAdmin => false;
|
||||||
|
|
||||||
|
public async void Execute(SocketCommandContext context, SocketMessage message, DiscordSocketClient client, bool isDM)
|
||||||
|
{
|
||||||
|
var m = message.Content.Substring(6);
|
||||||
|
await message.Channel.SendMessageAsync(m);
|
||||||
|
}
|
||||||
|
}
|
||||||
33
CMD_Utils/FlipCoin.cs
Normal file
33
CMD_Utils/FlipCoin.cs
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
using Discord.Commands;
|
||||||
|
using Discord.WebSocket;
|
||||||
|
using PluginManager.Interfaces;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
|
||||||
|
namespace CMD_Utils;
|
||||||
|
|
||||||
|
internal class FlipCoin : DBCommand
|
||||||
|
{
|
||||||
|
public string Command => "flip";
|
||||||
|
|
||||||
|
public List<string> Aliases => null;
|
||||||
|
|
||||||
|
public string Description => "Flip a coin";
|
||||||
|
|
||||||
|
public string Usage => "flip";
|
||||||
|
|
||||||
|
public bool canUseDM => true;
|
||||||
|
|
||||||
|
public bool canUseServer => true;
|
||||||
|
|
||||||
|
public bool requireAdmin => false;
|
||||||
|
|
||||||
|
public async void Execute(SocketCommandContext context, SocketMessage message, DiscordSocketClient client, bool isDM)
|
||||||
|
{
|
||||||
|
var random = new System.Random();
|
||||||
|
var r = random.Next(1, 3);
|
||||||
|
if (r == 1)
|
||||||
|
await message.Channel.SendMessageAsync("Heads");
|
||||||
|
else
|
||||||
|
await message.Channel.SendMessageAsync("Tails");
|
||||||
|
}
|
||||||
|
}
|
||||||
47
CMD_Utils/Poll.cs
Normal file
47
CMD_Utils/Poll.cs
Normal file
@@ -0,0 +1,47 @@
|
|||||||
|
using System.Collections.Generic;
|
||||||
|
using Discord;
|
||||||
|
using Discord.Commands;
|
||||||
|
using Discord.WebSocket;
|
||||||
|
using PluginManager.Interfaces;
|
||||||
|
using PluginManager.Others;
|
||||||
|
|
||||||
|
namespace CMD_Utils;
|
||||||
|
|
||||||
|
public class Poll : DBCommand
|
||||||
|
{
|
||||||
|
public string Command => "poll";
|
||||||
|
|
||||||
|
public List<string> Aliases => null;
|
||||||
|
|
||||||
|
public string Description => "Create a poll with options";
|
||||||
|
|
||||||
|
public string Usage => "poll [This-is-question] [This-is-answer-1] [This-is-answer-2] ... ";
|
||||||
|
|
||||||
|
public bool canUseDM => false;
|
||||||
|
|
||||||
|
public bool canUseServer => true;
|
||||||
|
|
||||||
|
public bool requireAdmin => true;
|
||||||
|
|
||||||
|
public async void Execute(SocketCommandContext context, SocketMessage message, DiscordSocketClient client, bool isDM)
|
||||||
|
{
|
||||||
|
if (isDM) return;
|
||||||
|
var question = message.Content.Split(' ')[1].Replace('-', ' ');
|
||||||
|
var answers = Functions.MergeStrings(message.Content.Split(' '), 2).Split(' ');
|
||||||
|
var embedBuilder = new EmbedBuilder();
|
||||||
|
embedBuilder.Title = question;
|
||||||
|
var len = answers.Length;
|
||||||
|
for (var i = 0; i < len; i++) embedBuilder.AddField($"Answer {i + 1}", answers[i].Replace('-', ' '), true);
|
||||||
|
var msg = await context.Channel.SendMessageAsync(embed: embedBuilder.Build());
|
||||||
|
|
||||||
|
var emotes = new List<IEmote>();
|
||||||
|
emotes.Add(Emoji.Parse(":one:"));
|
||||||
|
emotes.Add(Emoji.Parse(":two:"));
|
||||||
|
emotes.Add(Emoji.Parse(":three:"));
|
||||||
|
emotes.Add(Emoji.Parse(":four:"));
|
||||||
|
emotes.Add(Emoji.Parse(":five:"));
|
||||||
|
emotes.Add(Emoji.Parse(":six:"));
|
||||||
|
|
||||||
|
for (var i = 0; i < len; i++) await msg.AddReactionAsync(emotes[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
42
CMD_Utils/Random.cs
Normal file
42
CMD_Utils/Random.cs
Normal file
@@ -0,0 +1,42 @@
|
|||||||
|
using System.Collections.Generic;
|
||||||
|
using Discord.Commands;
|
||||||
|
using Discord.WebSocket;
|
||||||
|
using PluginManager.Interfaces;
|
||||||
|
|
||||||
|
public class Random : DBCommand
|
||||||
|
{
|
||||||
|
public string Command => "random";
|
||||||
|
|
||||||
|
public List<string> Aliases => new() { "rnd" };
|
||||||
|
|
||||||
|
public string Description => "random number between number1 and number2";
|
||||||
|
|
||||||
|
public string Usage => "random [number1] [number2]";
|
||||||
|
|
||||||
|
public bool canUseDM => true;
|
||||||
|
public bool canUseServer => true;
|
||||||
|
public bool requireAdmin => false;
|
||||||
|
|
||||||
|
public async void Execute(SocketCommandContext context, SocketMessage message, DiscordSocketClient client, bool isDM)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var msg = message.Content;
|
||||||
|
var a = int.Parse(msg.Split(' ')[1]);
|
||||||
|
var b = int.Parse(msg.Split(' ')[2]);
|
||||||
|
|
||||||
|
if (a > b)
|
||||||
|
{
|
||||||
|
var temp = a;
|
||||||
|
a = b;
|
||||||
|
b = temp;
|
||||||
|
}
|
||||||
|
|
||||||
|
await message.Channel.SendMessageAsync("Your random generated number is " + new System.Random().Next(a, b));
|
||||||
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
await message.Channel.SendMessageAsync("Invalid numbers or no numbers:\nUsage: " + Usage);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
4
DiscordBot/App.config
Normal file
4
DiscordBot/App.config
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
<dependentAssembly>
|
||||||
|
<assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
||||||
|
<bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="4.0.0.0" />
|
||||||
|
</dependentAssembly>
|
||||||
@@ -1,7 +1,9 @@
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
|
||||||
using Discord;
|
using Discord;
|
||||||
using Discord.Commands;
|
using Discord.Commands;
|
||||||
|
using Discord.WebSocket;
|
||||||
|
|
||||||
using PluginManager;
|
using PluginManager;
|
||||||
using PluginManager.Interfaces;
|
using PluginManager.Interfaces;
|
||||||
@@ -64,10 +66,12 @@ internal class Help : DBCommand
|
|||||||
var normalCommands = "";
|
var normalCommands = "";
|
||||||
|
|
||||||
foreach (var cmd in PluginLoader.Commands!)
|
foreach (var cmd in PluginLoader.Commands!)
|
||||||
|
{
|
||||||
if (cmd.requireAdmin)
|
if (cmd.requireAdmin)
|
||||||
adminCommands += cmd.Command + " ";
|
adminCommands += cmd.Command + " ";
|
||||||
else
|
else
|
||||||
normalCommands += cmd.Command + " ";
|
normalCommands += cmd.Command + " ";
|
||||||
|
}
|
||||||
|
|
||||||
embedBuilder.AddField("Admin Commands", adminCommands);
|
embedBuilder.AddField("Admin Commands", adminCommands);
|
||||||
embedBuilder.AddField("Normal Commands", normalCommands);
|
embedBuilder.AddField("Normal Commands", normalCommands);
|
||||||
@@ -77,11 +81,10 @@ internal class Help : DBCommand
|
|||||||
private EmbedBuilder GenerateHelpCommand(string command)
|
private EmbedBuilder GenerateHelpCommand(string command)
|
||||||
{
|
{
|
||||||
var embedBuilder = new EmbedBuilder();
|
var embedBuilder = new EmbedBuilder();
|
||||||
var cmd = PluginLoader.Commands!.Find(p => p.Command == command ||
|
var cmd = PluginLoader.Commands!.Find(p => p.Command == command || (p.Aliases is not null && p.Aliases.Contains(command)));
|
||||||
(p.Aliases is not null && p.Aliases.Contains(command)));
|
|
||||||
if (cmd == null) return null;
|
if (cmd == null) return null;
|
||||||
|
|
||||||
embedBuilder.AddField("Usage", Config.Variables.GetValue("prefix") + cmd.Usage);
|
embedBuilder.AddField("Usage", Config.GetValue<string>("prefix") + cmd.Usage);
|
||||||
embedBuilder.AddField("Description", cmd.Description);
|
embedBuilder.AddField("Description", cmd.Description);
|
||||||
if (cmd.Aliases is null)
|
if (cmd.Aliases is null)
|
||||||
return embedBuilder;
|
return embedBuilder;
|
||||||
|
|||||||
@@ -1,8 +1,10 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
|
using Discord.WebSocket;
|
||||||
using PluginManager.Interfaces;
|
using PluginManager.Interfaces;
|
||||||
using PluginManager.Others;
|
using PluginManager.Others;
|
||||||
|
using PluginManager.Others.Permissions;
|
||||||
using DiscordLibCommands = Discord.Commands;
|
using DiscordLibCommands = Discord.Commands;
|
||||||
using DiscordLib = Discord;
|
using DiscordLib = Discord;
|
||||||
using OperatingSystem = PluginManager.Others.OperatingSystem;
|
using OperatingSystem = PluginManager.Others.OperatingSystem;
|
||||||
|
|||||||
89
DiscordBot/Discord/Commands/Settings.cs
Normal file
89
DiscordBot/Discord/Commands/Settings.cs
Normal file
@@ -0,0 +1,89 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
|
||||||
|
using Discord;
|
||||||
|
using Discord.Commands;
|
||||||
|
using Discord.WebSocket;
|
||||||
|
|
||||||
|
using PluginManager;
|
||||||
|
using PluginManager.Interfaces;
|
||||||
|
|
||||||
|
namespace DiscordBot.Discord.Commands;
|
||||||
|
|
||||||
|
internal class Settings : DBCommand
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Command name
|
||||||
|
/// </summary>
|
||||||
|
public string Command => "set";
|
||||||
|
|
||||||
|
public List<string> Aliases => null;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Command Description
|
||||||
|
/// </summary>
|
||||||
|
public string Description => "This command allows you change all settings. Use \"set help\" to show details";
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Command usage
|
||||||
|
/// </summary>
|
||||||
|
public string Usage => "set [keyword] [new Value]";
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Check if the command require administrator to be executed
|
||||||
|
/// </summary>
|
||||||
|
public bool requireAdmin => true;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// The main body of the command
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="context">The command context</param>
|
||||||
|
public async void Execute(SocketCommandContext context)
|
||||||
|
{
|
||||||
|
var channel = context.Message.Channel;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var content = context.Message.Content;
|
||||||
|
var data = content.Split(' ');
|
||||||
|
var keyword = data[1];
|
||||||
|
if (keyword.ToLower() == "help")
|
||||||
|
{
|
||||||
|
await channel.SendMessageAsync("set token [new value] -- set the value of the new token (require restart)");
|
||||||
|
await channel.SendMessageAsync("set prefix [new value] -- set the value of the new preifx (require restart)");
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (keyword.ToLower())
|
||||||
|
{
|
||||||
|
case "token":
|
||||||
|
if (data.Length != 3)
|
||||||
|
{
|
||||||
|
await channel.SendMessageAsync("Invalid token !");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Config.SetValue("token", data[2]);
|
||||||
|
break;
|
||||||
|
case "prefix":
|
||||||
|
if (data.Length != 3)
|
||||||
|
{
|
||||||
|
await channel.SendMessageAsync("Invalid token !");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Config.SetValue("token", data[2]);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
await channel.SendMessageAsync("Restart required ...");
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Console.WriteLine(ex.Message);
|
||||||
|
await channel.SendMessageAsync("Unknown usage to this command !\nUsage: " + Usage);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,10 +1,13 @@
|
|||||||
using System;
|
using System;
|
||||||
|
using System.Threading;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
using Discord;
|
using Discord;
|
||||||
using Discord.Commands;
|
using Discord.Commands;
|
||||||
using Discord.WebSocket;
|
using Discord.WebSocket;
|
||||||
|
|
||||||
|
using PluginManager;
|
||||||
|
|
||||||
using static PluginManager.Others.Functions;
|
using static PluginManager.Others.Functions;
|
||||||
|
|
||||||
namespace DiscordBot.Discord.Core;
|
namespace DiscordBot.Discord.Core;
|
||||||
@@ -60,14 +63,7 @@ internal class Boot
|
|||||||
/// <returns>Task</returns>
|
/// <returns>Task</returns>
|
||||||
public async Task Awake()
|
public async Task Awake()
|
||||||
{
|
{
|
||||||
var config = new DiscordSocketConfig
|
DiscordSocketConfig config = new DiscordSocketConfig { AlwaysDownloadUsers = true };
|
||||||
{
|
|
||||||
|
|
||||||
AlwaysDownloadUsers = true,
|
|
||||||
|
|
||||||
//Disable system clock checkup (for responses at slash commands)
|
|
||||||
UseInteractionSnowflakeDate = false
|
|
||||||
};
|
|
||||||
|
|
||||||
client = new DiscordSocketClient(config);
|
client = new DiscordSocketClient(config);
|
||||||
service = new CommandService();
|
service = new CommandService();
|
||||||
@@ -75,14 +71,11 @@ internal class Boot
|
|||||||
CommonTasks();
|
CommonTasks();
|
||||||
|
|
||||||
await client.LoginAsync(TokenType.Bot, botToken);
|
await client.LoginAsync(TokenType.Bot, botToken);
|
||||||
|
|
||||||
await client.StartAsync();
|
await client.StartAsync();
|
||||||
|
|
||||||
commandServiceHandler = new CommandHandler(client, service, botPrefix);
|
commandServiceHandler = new CommandHandler(client, service, botPrefix);
|
||||||
await commandServiceHandler.InstallCommandsAsync();
|
await commandServiceHandler.InstallCommandsAsync();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
await Task.Delay(2000);
|
await Task.Delay(2000);
|
||||||
while (!isReady) ;
|
while (!isReady) ;
|
||||||
}
|
}
|
||||||
@@ -96,22 +89,19 @@ internal class Boot
|
|||||||
client.Ready += Ready;
|
client.Ready += Ready;
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task Client_LoggedOut()
|
private Task Client_LoggedOut()
|
||||||
{
|
{
|
||||||
WriteLogFile("Successfully Logged Out");
|
WriteLogFile("Successfully Logged Out");
|
||||||
await Log(new LogMessage(LogSeverity.Info, "Boot", "Successfully logged out from discord !"));
|
Log(new LogMessage(LogSeverity.Info, "Boot", "Successfully logged out from discord !"));
|
||||||
|
return Task.CompletedTask;
|
||||||
/* var cmds = await client.GetGlobalApplicationCommandsAsync();
|
|
||||||
foreach (var cmd in cmds)
|
|
||||||
await cmd.DeleteAsync();*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task Ready()
|
private Task Ready()
|
||||||
{
|
{
|
||||||
Console.Title = "ONLINE";
|
Console.Title = "ONLINE";
|
||||||
|
|
||||||
|
|
||||||
isReady = true;
|
isReady = true;
|
||||||
|
|
||||||
|
return Task.CompletedTask;
|
||||||
}
|
}
|
||||||
|
|
||||||
private Task LoggedIn()
|
private Task LoggedIn()
|
||||||
@@ -151,4 +141,5 @@ internal class Boot
|
|||||||
|
|
||||||
return Task.CompletedTask;
|
return Task.CompletedTask;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -1,5 +1,4 @@
|
|||||||
using System;
|
using System.Linq;
|
||||||
using System.Linq;
|
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
@@ -38,34 +37,9 @@ internal class CommandHandler
|
|||||||
public async Task InstallCommandsAsync()
|
public async Task InstallCommandsAsync()
|
||||||
{
|
{
|
||||||
client.MessageReceived += MessageHandler;
|
client.MessageReceived += MessageHandler;
|
||||||
client.SlashCommandExecuted += Client_SlashCommandExecuted;
|
|
||||||
await commandService.AddModulesAsync(Assembly.GetEntryAssembly(), null);
|
await commandService.AddModulesAsync(Assembly.GetEntryAssembly(), null);
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task Client_SlashCommandExecuted(SocketSlashCommand arg)
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
var plugin = PluginLoader.SlashCommands!
|
|
||||||
.Where(p => p.Name == arg.Data.Name)
|
|
||||||
.FirstOrDefault();
|
|
||||||
|
|
||||||
if (plugin is null) throw new Exception("Failed to run command. !");
|
|
||||||
|
|
||||||
|
|
||||||
if (arg.Channel is SocketDMChannel)
|
|
||||||
plugin.ExecuteDM(arg);
|
|
||||||
else plugin.ExecuteServer(arg);
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
|
|
||||||
Console.WriteLine(ex.ToString());
|
|
||||||
ex.WriteErrFile();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The message handler for the bot
|
/// The message handler for the bot
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -101,15 +75,9 @@ internal class CommandHandler
|
|||||||
|
|
||||||
await commandService.ExecuteAsync(context, argPos, null);
|
await commandService.ExecuteAsync(context, argPos, null);
|
||||||
|
|
||||||
var plugin = PluginLoader.Commands!
|
var plugin = PluginLoader.Commands!.Where(p => p.Command == message.Content.Split(' ')[0].Substring(botPrefix.Length) || (p.Aliases is not null && p.Aliases.Contains(message.Content.Split(' ')[0].Substring(botPrefix.Length)))).FirstOrDefault();
|
||||||
.Where(
|
|
||||||
p => p.Command == message.Content.Split(' ')[0].Substring(botPrefix.Length) ||
|
|
||||||
(p.Aliases is not null &&
|
|
||||||
p.Aliases.Contains(
|
|
||||||
message.Content.Split(' ')[0].Substring(botPrefix.Length))))
|
|
||||||
.FirstOrDefault();
|
|
||||||
|
|
||||||
if (plugin is null) throw new Exception("Failed to run command. !");
|
if (plugin is null) throw new System.Exception("Failed to run command. !");
|
||||||
|
|
||||||
if (plugin.requireAdmin && !context.Message.Author.isAdmin())
|
if (plugin.requireAdmin && !context.Message.Author.isAdmin())
|
||||||
return;
|
return;
|
||||||
@@ -117,8 +85,9 @@ internal class CommandHandler
|
|||||||
if (context.Channel is SocketDMChannel)
|
if (context.Channel is SocketDMChannel)
|
||||||
plugin.ExecuteDM(context);
|
plugin.ExecuteDM(context);
|
||||||
else plugin.ExecuteServer(context);
|
else plugin.ExecuteServer(context);
|
||||||
|
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (System.Exception ex)
|
||||||
{
|
{
|
||||||
ex.WriteErrFile();
|
ex.WriteErrFile();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,52 +0,0 @@
|
|||||||
<Project Sdk="Microsoft.NET.Sdk">
|
|
||||||
|
|
||||||
<PropertyGroup>
|
|
||||||
<OutputType>Exe</OutputType>
|
|
||||||
<TargetFramework>net6.0</TargetFramework>
|
|
||||||
<Nullable>disable</Nullable>
|
|
||||||
<ApplicationIcon />
|
|
||||||
<StartupObject />
|
|
||||||
<SignAssembly>False</SignAssembly>
|
|
||||||
<IsPublishable>True</IsPublishable>
|
|
||||||
<AssemblyVersion>1.0.1.0</AssemblyVersion>
|
|
||||||
</PropertyGroup>
|
|
||||||
|
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
|
|
||||||
<DebugType>none</DebugType>
|
|
||||||
</PropertyGroup>
|
|
||||||
|
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'">
|
|
||||||
<DebugType>none</DebugType>
|
|
||||||
</PropertyGroup>
|
|
||||||
|
|
||||||
<ItemGroup>
|
|
||||||
<Compile Remove="Data\**" />
|
|
||||||
<Compile Remove="obj\**" />
|
|
||||||
<Compile Remove="Output\**" />
|
|
||||||
</ItemGroup>
|
|
||||||
|
|
||||||
<ItemGroup>
|
|
||||||
<EmbeddedResource Remove="Data\**" />
|
|
||||||
<EmbeddedResource Remove="obj\**" />
|
|
||||||
<EmbeddedResource Remove="Output\**" />
|
|
||||||
</ItemGroup>
|
|
||||||
|
|
||||||
<ItemGroup>
|
|
||||||
<None Remove="Data\**" />
|
|
||||||
<None Remove="obj\**" />
|
|
||||||
<None Remove="Output\**" />
|
|
||||||
</ItemGroup>
|
|
||||||
|
|
||||||
<ItemGroup>
|
|
||||||
<PackageReference Include="Discord.Net" Version="3.7.2" />
|
|
||||||
</ItemGroup>
|
|
||||||
|
|
||||||
<ItemGroup>
|
|
||||||
<ProjectReference Include="..\PluginManager\PluginManager.csproj" />
|
|
||||||
</ItemGroup>
|
|
||||||
|
|
||||||
<Target Name="PostBuild" AfterTargets="PostBuildEvent">
|
|
||||||
<Exec Command="xcopy /B /Y "$(TargetDir)*.dll" "$(TargetDir)Libraries"" />
|
|
||||||
</Target>
|
|
||||||
|
|
||||||
</Project>
|
|
||||||
@@ -8,7 +8,7 @@
|
|||||||
<StartupObject />
|
<StartupObject />
|
||||||
<SignAssembly>False</SignAssembly>
|
<SignAssembly>False</SignAssembly>
|
||||||
<IsPublishable>True</IsPublishable>
|
<IsPublishable>True</IsPublishable>
|
||||||
<AssemblyVersion>1.0.1.0</AssemblyVersion>
|
<AssemblyVersion>1.0.0.13</AssemblyVersion>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
|
||||||
|
|||||||
@@ -1,29 +0,0 @@
|
|||||||
using System;
|
|
||||||
using System.IO;
|
|
||||||
using System.Reflection;
|
|
||||||
|
|
||||||
namespace DiscordBot
|
|
||||||
{
|
|
||||||
|
|
||||||
public class Entry
|
|
||||||
{
|
|
||||||
[STAThread]
|
|
||||||
public static void Main(string[] args)
|
|
||||||
{
|
|
||||||
AppDomain currentDomain = AppDomain.CurrentDomain;
|
|
||||||
currentDomain.AssemblyResolve += new ResolveEventHandler(LoadFromSameFolder);
|
|
||||||
|
|
||||||
static Assembly LoadFromSameFolder(object sender, ResolveEventArgs args)
|
|
||||||
{
|
|
||||||
string folderPath = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "./Libraries");
|
|
||||||
string assemblyPath = Path.Combine(folderPath, new AssemblyName(args.Name).Name + ".dll");
|
|
||||||
if (!File.Exists(assemblyPath)) return null;
|
|
||||||
Assembly assembly = Assembly.LoadFrom(assemblyPath);
|
|
||||||
return assembly;
|
|
||||||
}
|
|
||||||
|
|
||||||
Program.Startup(args);
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,23 +1,21 @@
|
|||||||
using System;
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
|
using System.Linq;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
using Discord;
|
||||||
|
|
||||||
using DiscordBot.Discord.Core;
|
using DiscordBot.Discord.Core;
|
||||||
|
|
||||||
using PluginManager;
|
using PluginManager;
|
||||||
using PluginManager.Database;
|
|
||||||
using PluginManager.Items;
|
using PluginManager.Items;
|
||||||
using PluginManager.Online;
|
using PluginManager.Online;
|
||||||
using PluginManager.Online.Helpers;
|
|
||||||
using PluginManager.Others;
|
using PluginManager.Others;
|
||||||
|
|
||||||
using Terminal.Gui;
|
|
||||||
|
|
||||||
using OperatingSystem = PluginManager.Others.OperatingSystem;
|
|
||||||
|
|
||||||
namespace DiscordBot;
|
namespace DiscordBot;
|
||||||
|
|
||||||
public class Program
|
public class Program
|
||||||
@@ -30,160 +28,73 @@ public class Program
|
|||||||
/// The main entry point for the application.
|
/// The main entry point for the application.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[STAThread]
|
[STAThread]
|
||||||
public static void Startup(string[] args)
|
[Obsolete]
|
||||||
|
public static void Main(string[] args)
|
||||||
{
|
{
|
||||||
|
Console.WriteLine("Loading resources ...");
|
||||||
PreLoadComponents().Wait();
|
PreLoadComponents().Wait();
|
||||||
|
do
|
||||||
if (!Config.Variables.Exists("ServerID") || !Config.Variables.Exists("token") ||
|
|
||||||
Config.Variables.GetValue("token") == null ||
|
|
||||||
(Config.Variables.GetValue("token")?.Length != 70 && Config.Variables.GetValue("token")?.Length != 59) ||
|
|
||||||
!Config.Variables.Exists("prefix") || Config.Variables.GetValue("prefix") == null ||
|
|
||||||
Config.Variables.GetValue("prefix")?.Length != 1 ||
|
|
||||||
(args.Length == 1 && args[0] == "/reset"))
|
|
||||||
{
|
{
|
||||||
Application.Init();
|
if (!Config.ContainsKey("ServerID"))
|
||||||
var top = Application.Top;
|
|
||||||
var win = new Window("Discord Bot Config - " + Assembly.GetExecutingAssembly().GetName().Version)
|
|
||||||
{
|
{
|
||||||
X = 0,
|
|
||||||
Y = 1,
|
|
||||||
Width = Dim.Fill(),
|
|
||||||
Height = Dim.Fill()
|
|
||||||
};
|
|
||||||
|
|
||||||
top.Add(win);
|
|
||||||
|
|
||||||
var labelInfo = new Label(
|
|
||||||
"Configuration file not found or invalid. " +
|
|
||||||
"Please fill the following fields to create a new configuration file."
|
|
||||||
)
|
|
||||||
{
|
|
||||||
X = Pos.Center(),
|
|
||||||
Y = 2
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
var labelToken = new Label("Please insert your token here: ")
|
Console.WriteLine("Please enter the server ID: ");
|
||||||
{
|
Console_Utilities.WriteColorText("You can find it in the Server Settings at &r\"Widget\"&c section");
|
||||||
X = 5,
|
Console.WriteLine("Example: 1234567890123456789");
|
||||||
Y = 5
|
|
||||||
};
|
|
||||||
|
|
||||||
var textFiledToken = new TextField("")
|
Console.WriteLine("This is not required, but is recommended. If you refuse to provide the ID, just press enter.\nThe server id is required to make easier for the bot to interact with the server.\nRemember: this bot is for one server ONLY.");
|
||||||
|
Console.Write("User Input > ");
|
||||||
|
ConsoleKeyInfo key = Console.ReadKey();
|
||||||
|
if (key.Key == ConsoleKey.Enter)
|
||||||
|
Config.AddValueToVariables("ServerID", "null", false);
|
||||||
|
else
|
||||||
{
|
{
|
||||||
X = Pos.Left(labelToken) + labelToken.Text.Length + 2,
|
string SID = key.KeyChar + Console.ReadLine();
|
||||||
Y = labelToken.Y,
|
if (SID.Length != 18)
|
||||||
Width = 70
|
{
|
||||||
};
|
Console.Clear();
|
||||||
|
Console_Utilities.WriteColorText("&rYour server ID is not 18 characters long. Please try again. \n");
|
||||||
|
|
||||||
var labelPrefix = new Label("Please insert your prefix here: ")
|
continue;
|
||||||
{
|
|
||||||
X = 5,
|
|
||||||
Y = 8
|
|
||||||
};
|
|
||||||
var textFiledPrefix = new TextField("")
|
|
||||||
{
|
|
||||||
X = Pos.Left(labelPrefix) + labelPrefix.Text.Length + 2,
|
|
||||||
Y = labelPrefix.Y,
|
|
||||||
Width = 1
|
|
||||||
};
|
|
||||||
|
|
||||||
var labelServerid = new Label("Please insert your server id here (optional): ")
|
|
||||||
{
|
|
||||||
X = 5,
|
|
||||||
Y = 11
|
|
||||||
};
|
|
||||||
var textFiledServerID = new TextField("")
|
|
||||||
{
|
|
||||||
X = Pos.Left(labelServerid) + labelServerid.Text.Length + 2,
|
|
||||||
Y = labelServerid.Y,
|
|
||||||
Width = 18
|
|
||||||
};
|
|
||||||
|
|
||||||
var button = new Button("Submit")
|
|
||||||
{
|
|
||||||
X = Pos.Center() - 10,
|
|
||||||
Y = 16
|
|
||||||
};
|
|
||||||
|
|
||||||
var button2 = new Button("License")
|
|
||||||
{
|
|
||||||
X = Pos.Center() + 10,
|
|
||||||
Y = 16
|
|
||||||
};
|
|
||||||
|
|
||||||
var button3 = new Button("ⓘ")
|
|
||||||
{
|
|
||||||
X = Pos.Left(textFiledServerID) + 20,
|
|
||||||
Y = textFiledServerID.Y
|
|
||||||
};
|
|
||||||
|
|
||||||
Console.CancelKeyPress += (sender, e) => { top.Running = false; };
|
|
||||||
|
|
||||||
button.Clicked += () =>
|
|
||||||
{
|
|
||||||
var passMessage = "";
|
|
||||||
if (textFiledToken.Text.Length != 70 && textFiledToken.Text.Length != 59)
|
|
||||||
passMessage += "Invalid token, ";
|
|
||||||
if (textFiledPrefix.Text.ContainsAny("0123456789/\\ ") || textFiledPrefix.Text.Length != 1)
|
|
||||||
passMessage += "Invalid prefix, ";
|
|
||||||
if (textFiledServerID.Text.Length != 18 && textFiledServerID.Text.Length > 0)
|
|
||||||
passMessage += "Invalid serverID";
|
|
||||||
|
|
||||||
if (passMessage != "")
|
|
||||||
{
|
|
||||||
MessageBox.ErrorQuery("Discord Bot Settings",
|
|
||||||
"Failed to pass check. Invalid information given:\n" + passMessage, "Retry");
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
Config.AddValueToVariables("ServerID", SID, false);
|
||||||
|
|
||||||
Config.Variables.Add("ServerID", (string)textFiledServerID.Text, true);
|
|
||||||
Config.Variables.Add("token", (string)textFiledToken.Text, true);
|
|
||||||
Config.Variables.Add("prefix", (string)textFiledPrefix.Text, true);
|
|
||||||
|
|
||||||
MessageBox.Query("Discord Bot Settings", "Successfully saved config !\nJust start the bot :D",
|
|
||||||
"Start :D");
|
|
||||||
top.Running = false;
|
|
||||||
};
|
|
||||||
|
|
||||||
button2.Clicked += async () =>
|
|
||||||
{
|
|
||||||
var license =
|
|
||||||
await ServerCom.ReadTextFromURL(
|
|
||||||
"https://raw.githubusercontent.com/Wizzy69/installer/discord-bot-files/LICENSE.txt");
|
|
||||||
var ProductLicense =
|
|
||||||
"Seth Discord Bot\n\nDeveloped by Wizzy#9181\nThis application can be used and modified by anyone. Plugin development for this application is also free and supported";
|
|
||||||
var r = MessageBox.Query("Discord Bot Settings", ProductLicense, "Close", "Read about libraries used");
|
|
||||||
if (r == 1)
|
|
||||||
{
|
|
||||||
var i = 0;
|
|
||||||
while (i < license.Count)
|
|
||||||
{
|
|
||||||
var print_message = license[i++] + "\n";
|
|
||||||
for (; i < license.Count && !license[i].StartsWith("-----------"); i++)
|
|
||||||
print_message += license[i] + "\n";
|
|
||||||
if (print_message.Contains("https://"))
|
|
||||||
print_message += "\n\nCTRL + Click on a link to open it";
|
|
||||||
if (MessageBox.Query("Licenses", print_message, "Next", "Quit") == 1) break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
|
||||||
|
|
||||||
button3.Clicked += () =>
|
if (!Config.ContainsKey("token") || Config.GetValue<string>("token") == null || (Config.GetValue<string>("token")?.Length != 70 && Config.GetValue<string>("token")?.Length != 59))
|
||||||
{
|
{
|
||||||
MessageBox.Query("Discord Bot Settings",
|
Console.WriteLine("Please insert your token");
|
||||||
"Server ID can be found in Server settings => Widget => Server ID",
|
Console.Write("Token = ");
|
||||||
"Close");
|
var token = Console.ReadLine();
|
||||||
};
|
if (token?.Length == 59 || token?.Length == 70)
|
||||||
|
Config.AddValueToVariables("token", token, true);
|
||||||
win.Add(labelInfo, labelPrefix, labelServerid, labelToken);
|
else
|
||||||
win.Add(textFiledToken, textFiledPrefix, textFiledServerID, button3);
|
{
|
||||||
win.Add(button, button2);
|
Console.Clear();
|
||||||
Application.Run();
|
Console_Utilities.WriteColorText("&rThe token length is invalid !");
|
||||||
Application.Shutdown();
|
continue;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!Config.ContainsKey("prefix") || Config.GetValue<string>("prefix") == null || Config.GetValue<string>("prefix")?.Length != 1)
|
||||||
|
{
|
||||||
|
Console.WriteLine("Please insert your prefix (max. 1 character long):");
|
||||||
|
Console.WriteLine("For a prefix longer then one character, the first character will be saved and the others will be ignored.\n No spaces, numbers, '/' or '\\' allowed");
|
||||||
|
Console.Write("Prefix = ");
|
||||||
|
var prefix = Console.ReadLine()![0];
|
||||||
|
|
||||||
|
if (prefix == ' ' || char.IsDigit(prefix) || prefix == '/' || prefix == '\\')
|
||||||
|
{
|
||||||
|
Console.Clear();
|
||||||
|
Console_Utilities.WriteColorText("&rThe prefix is invalid");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
Config.AddValueToVariables("prefix", prefix.ToString(), false);
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
} while (true);
|
||||||
|
|
||||||
HandleInput(args).Wait();
|
HandleInput(args).Wait();
|
||||||
}
|
}
|
||||||
@@ -191,18 +102,22 @@ public class Program
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// The main loop for the discord bot
|
/// The main loop for the discord bot
|
||||||
/// </summary>
|
/// </summary>
|
||||||
private static void NoGUI()
|
/// <param name="discordbooter">The discord booter used to start the application</param>
|
||||||
|
private static void NoGUI(Boot discordbooter)
|
||||||
{
|
{
|
||||||
|
|
||||||
#if DEBUG
|
#if DEBUG
|
||||||
Settings.Variables.outputStream.WriteLine();
|
Console.WriteLine();
|
||||||
ConsoleCommandsHandler.ExecuteCommad("lp").Wait();
|
ConsoleCommandsHandler.ExecuteCommad("lp").Wait();
|
||||||
#else
|
#else
|
||||||
if (loadPluginsOnStartup) consoleCommandsHandler.HandleCommand("lp");
|
if (loadPluginsOnStartup) consoleCommandsHandler.HandleCommand("lp");
|
||||||
if (listPluginsAtStartup) consoleCommandsHandler.HandleCommand("listplugs");
|
if (listPluginsAtStartup) consoleCommandsHandler.HandleCommand("listplugs");
|
||||||
#endif
|
#endif
|
||||||
|
Config.SaveConfig(SaveType.NORMAL).Wait();
|
||||||
|
|
||||||
while (true)
|
while (true)
|
||||||
{
|
{
|
||||||
|
|
||||||
var cmd = Console.ReadLine();
|
var cmd = Console.ReadLine();
|
||||||
if (!consoleCommandsHandler.HandleCommand(cmd!
|
if (!consoleCommandsHandler.HandleCommand(cmd!
|
||||||
#if DEBUG
|
#if DEBUG
|
||||||
@@ -210,7 +125,7 @@ public class Program
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
) && cmd.Length > 0)
|
) && cmd.Length > 0)
|
||||||
Settings.Variables.outputStream.WriteLine("Failed to run command " + cmd);
|
Console.WriteLine("Failed to run command " + cmd);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -218,143 +133,233 @@ public class Program
|
|||||||
/// Start the bot without user interface
|
/// Start the bot without user interface
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <returns>Returns the boot loader for the Discord Bot</returns>
|
/// <returns>Returns the boot loader for the Discord Bot</returns>
|
||||||
private static async Task<Boot> StartNoGui()
|
private static async Task<Boot> StartNoGUI()
|
||||||
{
|
{
|
||||||
Console.Clear();
|
Console.Clear();
|
||||||
Console.ForegroundColor = ConsoleColor.DarkYellow;
|
Console.ForegroundColor = ConsoleColor.DarkYellow;
|
||||||
|
|
||||||
var startupMessageList =
|
List<string> startupMessageList = await ServerCom.ReadTextFromURL("https://raw.githubusercontent.com/Wizzy69/installer/discord-bot-files/StartupMessage");
|
||||||
await ServerCom.ReadTextFromURL(
|
|
||||||
"https://raw.githubusercontent.com/Wizzy69/installer/discord-bot-files/StartupMessage");
|
|
||||||
|
|
||||||
foreach (var message in startupMessageList)
|
foreach (var message in startupMessageList)
|
||||||
Settings.Variables.outputStream.WriteLine(message);
|
Console.WriteLine(message);
|
||||||
|
|
||||||
Settings.Variables.outputStream.WriteLine(
|
Console.WriteLine($"Running on version: {Config.GetValue<string>("Version") ?? System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString()}");
|
||||||
$"Running on version: {Assembly.GetExecutingAssembly().GetName().Version}");
|
Console.WriteLine($"Git URL: {Config.GetValue<string>("GitURL") ?? " Could not find Git URL"}");
|
||||||
Settings.Variables.outputStream.WriteLine($"Git URL: {Settings.Variables.WebsiteURL}");
|
|
||||||
|
|
||||||
Utilities.WriteColorText(
|
Console_Utilities.WriteColorText("&rRemember to close the bot using the ShutDown command (&ysd&r) or some settings won't be saved\n");
|
||||||
"&rRemember to close the bot using the ShutDown command (&ysd&r) or some settings won't be saved\n");
|
|
||||||
Console.ForegroundColor = ConsoleColor.White;
|
Console.ForegroundColor = ConsoleColor.White;
|
||||||
|
|
||||||
if (Config.Variables.Exists("LaunchMessage"))
|
if (Config.ContainsKey("LaunchMessage"))
|
||||||
Utilities.WriteColorText(Config.Variables.GetValue("LaunchMessage"));
|
{
|
||||||
|
Console_Utilities.WriteColorText(Config.GetValue<string>("LaunchMessage"));
|
||||||
|
Config.RemoveKey("LaunchMessage");
|
||||||
|
}
|
||||||
|
|
||||||
|
Console_Utilities.WriteColorText("Please note that the bot saves a backup save file every time you are using the shudown command (&ysd&c)");
|
||||||
Utilities.WriteColorText(
|
Console.WriteLine($"============================ LOG ============================");
|
||||||
"Please note that the bot saves a backup save file every time you are using the shudown command (&ysd&c)");
|
|
||||||
Settings.Variables.outputStream.WriteLine("============================ LOG ============================");
|
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
string token = "";
|
var token = Config.GetValue<string>("token");
|
||||||
#if DEBUG
|
#if DEBUG
|
||||||
|
Console.WriteLine("Starting in DEBUG MODE");
|
||||||
if (await Settings.sqlDatabase.TableExistsAsync("BetaTest"))
|
if (!Directory.Exists("./Data/BetaTest"))
|
||||||
|
Console.WriteLine("Failed to start in debug mode because the folder ./Data/BetaTest does not exist");
|
||||||
|
else
|
||||||
{
|
{
|
||||||
Settings.Variables.outputStream.WriteLine("Starting in DEBUG MODE");
|
token = File.ReadAllText("./Data/BetaTest/token.txt");
|
||||||
token = await Settings.sqlDatabase.GetValueAsync("BetaTest", "VariableName", "Token", "Value");
|
|
||||||
|
//Debug mode code...
|
||||||
}
|
}
|
||||||
#else
|
|
||||||
token = Config.Variables.GetValue("token");
|
|
||||||
#endif
|
#endif
|
||||||
var prefix = Config.Variables.GetValue("prefix");
|
|
||||||
|
var prefix = Config.GetValue<string>("prefix");
|
||||||
var discordbooter = new Boot(token, prefix);
|
var discordbooter = new Boot(token, prefix);
|
||||||
await discordbooter.Awake();
|
await discordbooter.Awake();
|
||||||
return discordbooter;
|
return discordbooter;
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
Settings.Variables.outputStream.WriteLine(ex);
|
Console.WriteLine(ex);
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Clear folder
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="d">Directory path</param>
|
||||||
|
private static Task ClearFolder(string d)
|
||||||
|
{
|
||||||
|
var files = Directory.GetFiles(d);
|
||||||
|
var fileNumb = files.Length;
|
||||||
|
for (var i = 0; i < fileNumb; i++)
|
||||||
|
{
|
||||||
|
File.Delete(files[i]);
|
||||||
|
Console.WriteLine("Deleting : " + files[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
return Task.CompletedTask;
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Handle user input arguments from the startup of the application
|
/// Handle user input arguments from the startup of the application
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="args">The arguments</param>
|
/// <param name="args">The arguments</param>
|
||||||
private static async Task HandleInput(string[] args)
|
private static async Task HandleInput(string[] args)
|
||||||
{
|
{
|
||||||
|
|
||||||
var len = args.Length;
|
var len = args.Length;
|
||||||
|
|
||||||
var b = await StartNoGui();
|
if (len == 3 && args[0] == "/download")
|
||||||
|
{
|
||||||
|
var url = args[1];
|
||||||
|
var location = args[2];
|
||||||
|
|
||||||
|
await ServerCom.DownloadFileAsync(url, location);
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (len > 0 && (args.Contains("--cmd") || args.Contains("--args") || args.Contains("--nomessage")))
|
||||||
|
{
|
||||||
|
if (args.Contains("lp") || args.Contains("loadplugins"))
|
||||||
|
loadPluginsOnStartup = true;
|
||||||
|
if (args.Contains("listplugs"))
|
||||||
|
listPluginsAtStartup = true;
|
||||||
|
|
||||||
|
len = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
var b = await StartNoGUI();
|
||||||
consoleCommandsHandler = new ConsoleCommandsHandler(b.client);
|
consoleCommandsHandler = new ConsoleCommandsHandler(b.client);
|
||||||
|
|
||||||
if (len > 0 && args[0] == "/remplug")
|
if (len > 0 && args[0] == "/remplug")
|
||||||
{
|
{
|
||||||
var plugName = string.Join(' ', args, 1, args.Length - 1);
|
|
||||||
Settings.Variables.outputStream.WriteLine("Starting to remove " + plugName);
|
string plugName = Functions.MergeStrings(args, 1);
|
||||||
|
Console.WriteLine("Starting to remove " + plugName);
|
||||||
await ConsoleCommandsHandler.ExecuteCommad("remplug " + plugName);
|
await ConsoleCommandsHandler.ExecuteCommad("remplug " + plugName);
|
||||||
loadPluginsOnStartup = true;
|
loadPluginsOnStartup = true;
|
||||||
|
len = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (len > 0 && args[0] == "/lp")
|
if (len > 0 && args[0] == "/updateplug")
|
||||||
loadPluginsOnStartup = true;
|
{
|
||||||
|
string plugName = args.MergeStrings(1);
|
||||||
|
Console.WriteLine("Updating " + plugName);
|
||||||
|
await ConsoleCommandsHandler.ExecuteCommad("dwplug" + plugName);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
var mainThread = new Thread(() =>
|
if (len == 0 || (args[0] != "--exec" && args[0] != "--execute"))
|
||||||
|
{
|
||||||
|
|
||||||
|
Thread mainThread = new Thread(() =>
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
NoGUI();
|
NoGUI(b);
|
||||||
}
|
}
|
||||||
catch (IOException ex)
|
catch (IOException ex)
|
||||||
{
|
{
|
||||||
if (ex.Message == "No process is on the other end of the pipe." || (uint)ex.HResult == 0x800700E9)
|
if (ex.Message == "No process is on the other end of the pipe." || (uint)ex.HResult == 0x800700E9)
|
||||||
{
|
{
|
||||||
if (Config.Variables.Exists("LaunchMessage"))
|
if (!Config.ContainsKey("LaunchMessage"))
|
||||||
Config.Variables.Add("LaunchMessage",
|
Config.AddValueToVariables("LaunchMessage", "An error occured while closing the bot last time. Please consider closing the bot using the &rsd&c method !\nThere is a risk of losing all data or corruption of the save file, which in some cases requires to reinstall the bot !", false);
|
||||||
"An error occured while closing the bot last time. Please consider closing the bot using the &rsd&c method !\nThere is a risk of losing all data or corruption of the save file, which in some cases requires to reinstall the bot !",
|
|
||||||
false);
|
|
||||||
Functions.WriteErrFile(ex.ToString());
|
Functions.WriteErrFile(ex.ToString());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
});
|
});
|
||||||
mainThread.Start();
|
mainThread.Start();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Console.ForegroundColor = ConsoleColor.DarkYellow;
|
||||||
|
Console.WriteLine("Execute command interface noGUI\n\n");
|
||||||
|
Console.WriteLine(
|
||||||
|
"\tCommand name\t\t\t\tDescription\n" +
|
||||||
|
"-- help | -help\t\t ------ \tDisplay the help message\n" +
|
||||||
|
"--reset-full\t\t ------ \tReset all files (clear files)\n" +
|
||||||
|
"--reset-logs\t\t ------ \tClear up the output folder\n" +
|
||||||
|
"--start\t\t ------ \tStart the bot\n" +
|
||||||
|
"exit\t\t\t ------ \tClose the application"
|
||||||
|
);
|
||||||
|
while (true)
|
||||||
|
{
|
||||||
|
Console.ForegroundColor = ConsoleColor.White;
|
||||||
|
Console.Write("> ");
|
||||||
|
var message = Console.ReadLine().Split(' ');
|
||||||
|
|
||||||
|
switch (message[0])
|
||||||
|
{
|
||||||
|
case "--help":
|
||||||
|
case "-help":
|
||||||
|
Console.ForegroundColor = ConsoleColor.DarkYellow;
|
||||||
|
Console.WriteLine("\tCommand name\t\t\t\tDescription\n" + "-- help | -help\t\t ------ \tDisplay the help message\n" + "--reset-full\t\t ------ \tReset all files (clear files)\n" + "--reset-settings\t ------ \tReset only bot settings\n" + "--reset-logs\t\t ------ \tClear up the output folder\n" + "--start\t\t ------ \tStart the bot\n" + "exit\t\t\t ------ \tClose the application");
|
||||||
|
break;
|
||||||
|
case "--reset-full":
|
||||||
|
await ClearFolder("./Data/Resources/");
|
||||||
|
await ClearFolder("./Output/Logs/");
|
||||||
|
await ClearFolder("./Output/Errors");
|
||||||
|
await ClearFolder("./Data/Languages/");
|
||||||
|
await ClearFolder("./Data/Plugins/Commands");
|
||||||
|
await ClearFolder("./Data/Plugins/Events");
|
||||||
|
Console.WriteLine("Successfully cleared all folders");
|
||||||
|
break;
|
||||||
|
case "--reset-logs":
|
||||||
|
await ClearFolder("./Output/Logs");
|
||||||
|
await ClearFolder("./Output/Errors");
|
||||||
|
Console.WriteLine("Successfully clear logs folder");
|
||||||
|
break;
|
||||||
|
case "--exit":
|
||||||
|
case "exit":
|
||||||
|
Environment.Exit(0);
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
Console.WriteLine("Failed to execute command " + message[0]);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static async Task PreLoadComponents()
|
private static async Task PreLoadComponents()
|
||||||
{
|
{
|
||||||
Settings.Variables.outputStream = Console.Out;
|
Console_Utilities.ProgressBar main = new Console_Utilities.ProgressBar(ProgressBarType.NO_END);
|
||||||
Settings.Variables.outputStream.WriteLine("Loading resources ...");
|
|
||||||
var main = new Utilities.ProgressBar(ProgressBarType.NO_END);
|
|
||||||
main.Start();
|
main.Start();
|
||||||
Directory.CreateDirectory("./Data/Resources");
|
Directory.CreateDirectory("./Data/Resources");
|
||||||
Directory.CreateDirectory("./Data/Plugins");
|
Directory.CreateDirectory("./Data/Plugins/Commands");
|
||||||
|
Directory.CreateDirectory("./Data/Plugins/Events");
|
||||||
Directory.CreateDirectory("./Data/PAKS");
|
Directory.CreateDirectory("./Data/PAKS");
|
||||||
|
await Config.LoadConfig();
|
||||||
Settings.sqlDatabase = new SqlDatabase(Functions.dataFolder + "SetDB.dat");
|
if (Config.ContainsKey("DeleteLogsAtStartup"))
|
||||||
|
if (Config.GetValue<bool>("DeleteLogsAtStartup"))
|
||||||
await Settings.sqlDatabase.Open();
|
|
||||||
await Config.Initialize();
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if (await Config.Variables.ExistsAsync("DeleteLogsAtStartup"))
|
|
||||||
if (await Config.Variables.GetValueAsync("DeleteLogsAtStartup") == "true")
|
|
||||||
foreach (var file in Directory.GetFiles("./Output/Logs/"))
|
foreach (var file in Directory.GetFiles("./Output/Logs/"))
|
||||||
File.Delete(file);
|
File.Delete(file);
|
||||||
var OnlineDefaultKeys =
|
List<string> OnlineDefaultKeys = await ServerCom.ReadTextFromURL("https://raw.githubusercontent.com/Wizzy69/installer/discord-bot-files/SetupKeys");
|
||||||
await ServerCom.ReadTextFromURL(
|
|
||||||
"https://raw.githubusercontent.com/Wizzy69/installer/discord-bot-files/SetupKeys");
|
|
||||||
|
|
||||||
|
Config.PluginConfig.Load();
|
||||||
|
|
||||||
if (!await Config.Variables.ExistsAsync("Version"))
|
if (!Config.ContainsKey("Version"))
|
||||||
await Config.Variables.AddAsync("Version", Assembly.GetExecutingAssembly().GetName().Version.ToString(), false);
|
Config.AddValueToVariables("Version", Assembly.GetExecutingAssembly().GetName().Version.ToString(), false);
|
||||||
else
|
else
|
||||||
await Config.Variables.SetValueAsync("Version", Assembly.GetExecutingAssembly().GetName().Version.ToString());
|
Config.SetValue("Version", Assembly.GetExecutingAssembly().GetName().Version.ToString());
|
||||||
|
|
||||||
|
|
||||||
foreach (var key in OnlineDefaultKeys)
|
foreach (var key in OnlineDefaultKeys)
|
||||||
{
|
{
|
||||||
if (key.Length <= 3 || !key.Contains(' ')) continue;
|
if (key.Length <= 3 || !key.Contains(' ')) continue;
|
||||||
var s = key.Split(' ');
|
string[] s = key.Split(' ');
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
if (await Config.Variables.ExistsAsync(s[0])) await Config.Variables.SetValueAsync(s[0], s[1]);
|
if (Config.ContainsKey(s[0])) Config.SetValue(s[0], s[1]);
|
||||||
else
|
else Config.GetAndAddValueToVariable(s[0], s[1], s[2].Equals("true", StringComparison.CurrentCultureIgnoreCase));
|
||||||
await Config.Variables.AddAsync(s[0], s[1], s[2].ToLower() == "true");
|
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
@@ -363,79 +368,62 @@ public class Program
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
var onlineSettingsList =
|
|
||||||
await ServerCom.ReadTextFromURL(
|
|
||||||
"https://raw.githubusercontent.com/Wizzy69/installer/discord-bot-files/OnlineData");
|
List<string> onlineSettingsList = await ServerCom.ReadTextFromURL("https://raw.githubusercontent.com/Wizzy69/installer/discord-bot-files/OnlineData");
|
||||||
main.Stop("Loaded online settings. Loading updates ...");
|
main.Stop("Loaded online settings. Loading updates ...");
|
||||||
foreach (var key in onlineSettingsList)
|
foreach (var key in onlineSettingsList)
|
||||||
{
|
{
|
||||||
if (key.Length <= 3 || !key.Contains(' ')) continue;
|
if (key.Length <= 3 || !key.Contains(' ')) continue;
|
||||||
|
|
||||||
var s = key.Split(' ');
|
string[] s = key.Split(' ');
|
||||||
switch (s[0])
|
switch (s[0])
|
||||||
{
|
{
|
||||||
case "CurrentVersion":
|
case "CurrentVersion":
|
||||||
var newVersion = s[1];
|
string newVersion = s[1];
|
||||||
if (!newVersion.Equals(await Config.Variables.GetValueAsync("Version")))
|
if (!newVersion.Equals(Config.GetValue<string>("Version")))
|
||||||
{
|
{
|
||||||
var nVer = new VersionString(newVersion.Substring(2));
|
if (Functions.GetOperatingSystem() == PluginManager.Others.OperatingSystem.WINDOWS)
|
||||||
var cVer = new VersionString((await Config.Variables.GetValueAsync("Version")).Substring(2));
|
|
||||||
if (cVer > nVer)
|
|
||||||
{
|
{
|
||||||
await Config.Variables.SetValueAsync("Version", "1." + cVer.ToShortString() + " (Beta)");
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (Functions.GetOperatingSystem() == OperatingSystem.WINDOWS)
|
string url = $"https://github.com/Wizzy69/SethDiscordBot/releases/download/v{newVersion}/net6.0.zip";
|
||||||
{
|
//string url2 = $"https://github.com/Wizzy69/SethDiscordBot/releases/download/v{newVersion}-preview/net6.0.zip";
|
||||||
var url =
|
|
||||||
$"https://github.com/Wizzy69/SethDiscordBot/releases/download/v{newVersion}/net6.0.zip";
|
Process.Start(".\\Updater\\Updater.exe", $"{newVersion} {url} {Process.GetCurrentProcess().ProcessName}");
|
||||||
Process.Start(".\\Updater\\Updater.exe",
|
|
||||||
$"{newVersion} {url} {Process.GetCurrentProcess().ProcessName}");
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
var url =
|
string url = $"https://github.com/Wizzy69/SethDiscordBot/releases/download/v{newVersion}/net6.0_linux.zip";
|
||||||
$"https://github.com/Wizzy69/SethDiscordBot/releases/download/v{newVersion}/net6.0_linux.zip";
|
Process.Start("./Updater/Updater", $"/update {url} ./DiscordBot ./");
|
||||||
Settings.Variables.outputStream.WriteLine("Downloading update ...");
|
|
||||||
await ServerCom.DownloadFileNoProgressAsync(url, "./update.zip");
|
|
||||||
await File.WriteAllTextAsync("Install.sh",
|
|
||||||
"#!/bin/bash\nunzip -qq update.zip -d ./\nrm update.zip\nchmod +x SethDiscordBot\n./DiscordBot");
|
|
||||||
Process.Start("Install.sh").WaitForExit();
|
|
||||||
Environment.Exit(0);
|
|
||||||
}
|
}
|
||||||
|
//Environment.Exit(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
case "UpdaterVersion":
|
case "UpdaterVersion":
|
||||||
var updaternewversion = s[1];
|
string updaternewversion = s[1];
|
||||||
if (Functions.GetOperatingSystem() == OperatingSystem.LINUX)
|
if (Config.UpdaterVersion != updaternewversion)
|
||||||
break;
|
|
||||||
|
|
||||||
if (!await Config.Variables.ExistsAsync("UpdaterVersion"))
|
|
||||||
await Config.Variables.AddAsync("UpdaterVersion", "0.0.0.0", false);
|
|
||||||
if (await Config.Variables.GetValueAsync("UpdaterVersion") != updaternewversion ||
|
|
||||||
!Directory.Exists("./Updater") ||
|
|
||||||
!File.Exists("./Updater/Updater.exe"))
|
|
||||||
{
|
{
|
||||||
Console.Clear();
|
Console.Clear();
|
||||||
Settings.Variables.outputStream.WriteLine("Installing updater ...\nDo NOT close the bot during update !");
|
Console.WriteLine("Installing updater ...\nDo NOT close the bot during update !");
|
||||||
var bar = new Utilities.ProgressBar(ProgressBarType.NO_END);
|
Console_Utilities.ProgressBar bar = new Console_Utilities.ProgressBar(ProgressBarType.NO_END);
|
||||||
bar.Start();
|
bar.Start();
|
||||||
await ServerCom.DownloadFileNoProgressAsync(
|
await ServerCom.DownloadFileNoProgressAsync("https://github.com/Wizzy69/installer/releases/download/release-1-discordbot/Updater.zip", "./Updater.zip");
|
||||||
"https://github.com/Wizzy69/installer/releases/download/release-1-discordbot/Updater.zip",
|
await Functions.ExtractArchive("./Updater.zip", "./", null, UnzipProgressType.PercentageFromTotalSize);
|
||||||
"./Updater.zip");
|
Config.UpdaterVersion = updaternewversion;
|
||||||
await Functions.ExtractArchive("./Updater.zip", "./", null,
|
|
||||||
UnzipProgressType.PercentageFromTotalSize);
|
|
||||||
await Config.Variables.SetValueAsync("UpdaterVersion", updaternewversion);
|
|
||||||
File.Delete("Updater.zip");
|
File.Delete("Updater.zip");
|
||||||
|
await Config.SaveConfig(SaveType.NORMAL);
|
||||||
bar.Stop("Updater has been updated !");
|
bar.Stop("Updater has been updated !");
|
||||||
Console.Clear();
|
Console.Clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Console_Utilities.Initialize();
|
||||||
|
await Config.SaveConfig(SaveType.NORMAL);
|
||||||
Console.Clear();
|
Console.Clear();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
20
EVE_LevelingSystem/EVE_LevelingSystem.csproj
Normal file
20
EVE_LevelingSystem/EVE_LevelingSystem.csproj
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<TargetFramework>net6.0</TargetFramework>
|
||||||
|
<ImplicitUsings>enable</ImplicitUsings>
|
||||||
|
<Nullable>enable</Nullable>
|
||||||
|
<BaseOutputPath></BaseOutputPath>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<Compile Remove="bin\**" />
|
||||||
|
<EmbeddedResource Remove="bin\**" />
|
||||||
|
<None Remove="bin\**" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="..\PluginManager\PluginManager.csproj" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
</Project>
|
||||||
59
EVE_LevelingSystem/Level.cs
Normal file
59
EVE_LevelingSystem/Level.cs
Normal file
@@ -0,0 +1,59 @@
|
|||||||
|
using Discord;
|
||||||
|
using Discord.WebSocket;
|
||||||
|
|
||||||
|
using EVE_LevelingSystem.LevelingSystemCore;
|
||||||
|
|
||||||
|
using PluginManager;
|
||||||
|
using PluginManager.Interfaces;
|
||||||
|
using PluginManager.Others;
|
||||||
|
|
||||||
|
namespace EVE_LevelingSystem
|
||||||
|
{
|
||||||
|
internal class Level : DBEvent
|
||||||
|
{
|
||||||
|
public string name => "Leveling System Event Handler";
|
||||||
|
public string description => "The Leveling System Event Handler";
|
||||||
|
|
||||||
|
internal static Settings globalSettings = new();
|
||||||
|
|
||||||
|
|
||||||
|
public async void Start(DiscordSocketClient client)
|
||||||
|
{
|
||||||
|
Directory.CreateDirectory("./Data/Resources/LevelingSystem");
|
||||||
|
if (!Config.ContainsKey("LevelingSystemPath"))
|
||||||
|
Config.AddValueToVariables("LevelingSystemPath", "./Data/Resources/LevelingSystem", true);
|
||||||
|
if (!Config.ContainsKey("LevelingSystemSettingsFile"))
|
||||||
|
Config.AddValueToVariables("LevelingSystemSettingsFile", "./Data/Resources/LevelingSystemSettings.txt", true);
|
||||||
|
//PluginManager.Config.AddValueToVariables
|
||||||
|
if (!File.Exists(Config.GetValue<string>("LevelingSystemSettingsFile")))
|
||||||
|
{
|
||||||
|
globalSettings = new Settings { TimeToWaitBetweenMessages = 5 };
|
||||||
|
await Functions.SaveToJsonFile<Settings>(Config.GetValue<string>("LevelingSystemSettingsFile"), globalSettings);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
globalSettings = await Functions.ConvertFromJson<Settings>(Config.GetValue<string>("LevelingSystemSettingsFile"));
|
||||||
|
|
||||||
|
// Console.WriteLine(globalSettings.TimeToWaitBetweenMessages);
|
||||||
|
client.MessageReceived += ClientOnMessageReceived;
|
||||||
|
}
|
||||||
|
|
||||||
|
private async Task ClientOnMessageReceived(SocketMessage arg)
|
||||||
|
{
|
||||||
|
if (arg.Author.IsBot || arg.IsTTS || arg.Content.StartsWith(Config.GetValue<string>("prefix"))) return;
|
||||||
|
string userID = arg.Author.Id.ToString();
|
||||||
|
User user;
|
||||||
|
if (File.Exists($"{Config.GetValue<string>("LevelingSystemPath")}/{userID}.dat"))
|
||||||
|
{
|
||||||
|
user = await Functions.ConvertFromJson<User>(Config.GetValue<string>("LevelingSystemPath")! + $"/{userID}.dat");
|
||||||
|
// Console.WriteLine(Config.GetValue("LevelingSystemPath"));
|
||||||
|
if (user.AddEXP()) await arg.Channel.SendMessageAsync($"{arg.Author.Mention} is now level {user.CurrentLevel}");
|
||||||
|
await Functions.SaveToJsonFile(Config.GetValue<string>("LevelingSystemPath") + $"/{userID}.dat", user);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
user = new User { CurrentEXP = 0, CurrentLevel = 1, RequiredEXPToLevelUp = LevelCalculator.GetNextLevelRequiredEXP(1), user = new DiscordUser { DiscordTag = arg.Author.DiscriminatorValue, userID = arg.Author.Id, Username = arg.Author.Username } };
|
||||||
|
if (user.AddEXP()) await arg.Channel.SendMessageAsync($"{arg.Author.Mention} is now level {user.CurrentLevel}");
|
||||||
|
await Functions.SaveToJsonFile<User>($"{Config.GetValue<string>("LevelingSystemPath")}/{userID}.dat", user);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
58
EVE_LevelingSystem/LevelingSystemCore/LevelCalculator.cs
Normal file
58
EVE_LevelingSystem/LevelingSystemCore/LevelCalculator.cs
Normal file
@@ -0,0 +1,58 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
using PluginManager;
|
||||||
|
|
||||||
|
namespace EVE_LevelingSystem.LevelingSystemCore
|
||||||
|
{
|
||||||
|
internal static class LevelCalculator
|
||||||
|
{
|
||||||
|
internal static List<string> OnWaitingList = new();
|
||||||
|
|
||||||
|
internal static Int64 GetNextLevelRequiredEXP(int currentLevel)
|
||||||
|
{
|
||||||
|
return currentLevel * 8 + 24;
|
||||||
|
}
|
||||||
|
|
||||||
|
internal static void LevelUp(this User user)
|
||||||
|
{
|
||||||
|
user.CurrentEXP = 0;
|
||||||
|
user.RequiredEXPToLevelUp = GetNextLevelRequiredEXP(user.CurrentLevel);
|
||||||
|
user.CurrentLevel++;
|
||||||
|
}
|
||||||
|
|
||||||
|
internal static bool AddEXP(this User user)
|
||||||
|
{
|
||||||
|
if (OnWaitingList.Contains(user.user.userID.ToString())) return false;
|
||||||
|
Random r = new Random();
|
||||||
|
int exp = r.Next(Level.globalSettings.MinEXP, Level.globalSettings.MaxEXP + 1);
|
||||||
|
Int64 userXP = user.CurrentEXP;
|
||||||
|
Int64 reqEXP = user.RequiredEXPToLevelUp;
|
||||||
|
if (userXP + exp >= reqEXP)
|
||||||
|
{
|
||||||
|
user.LevelUp();
|
||||||
|
user.CurrentEXP = exp - (reqEXP - userXP);
|
||||||
|
//Console.WriteLine("Level up");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
user.CurrentEXP += exp;
|
||||||
|
|
||||||
|
OnWaitingList.Add(user.user.userID.ToString());
|
||||||
|
|
||||||
|
|
||||||
|
new Thread(() =>
|
||||||
|
{
|
||||||
|
int minutesToWait = Level.globalSettings.TimeToWaitBetweenMessages;
|
||||||
|
Thread.Sleep(60000 * minutesToWait);
|
||||||
|
OnWaitingList.Remove(user.user.userID.ToString());
|
||||||
|
}
|
||||||
|
).Start();
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
20
EVE_LevelingSystem/LevelingSystemCore/User.cs
Normal file
20
EVE_LevelingSystem/LevelingSystemCore/User.cs
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
using Discord;
|
||||||
|
using Discord.WebSocket;
|
||||||
|
|
||||||
|
namespace EVE_LevelingSystem.LevelingSystemCore
|
||||||
|
{
|
||||||
|
public class DiscordUser
|
||||||
|
{
|
||||||
|
public string Username { get; set; }
|
||||||
|
public ushort DiscordTag { get; set; }
|
||||||
|
public ulong userID { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public class User
|
||||||
|
{
|
||||||
|
public DiscordUser user { get; set; }
|
||||||
|
public int CurrentLevel { get; set; }
|
||||||
|
public long CurrentEXP { get; set; }
|
||||||
|
public long RequiredEXPToLevelUp { get; set; }
|
||||||
|
}
|
||||||
|
}
|
||||||
15
EVE_LevelingSystem/Settings.cs
Normal file
15
EVE_LevelingSystem/Settings.cs
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace EVE_LevelingSystem
|
||||||
|
{
|
||||||
|
public class Settings
|
||||||
|
{
|
||||||
|
public int TimeToWaitBetweenMessages { get; set; }
|
||||||
|
public int MinEXP { get; set; }
|
||||||
|
public int MaxEXP { get; set; }
|
||||||
|
}
|
||||||
|
}
|
||||||
35
MusicCommands/AudioFile.cs
Normal file
35
MusicCommands/AudioFile.cs
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
using AngleSharp.Dom;
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Diagnostics;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace MusicCommands
|
||||||
|
{
|
||||||
|
internal class AudioFile
|
||||||
|
{
|
||||||
|
internal string Name { get; set; }
|
||||||
|
internal string Url { get; set; }
|
||||||
|
|
||||||
|
internal AudioFile(string name, string url)
|
||||||
|
{
|
||||||
|
Name = name;
|
||||||
|
Url = url;
|
||||||
|
}
|
||||||
|
|
||||||
|
internal async Task DownloadAudioFile()
|
||||||
|
{
|
||||||
|
Process proc = new Process();
|
||||||
|
proc.StartInfo.FileName = "MusicDownloader";
|
||||||
|
proc.StartInfo.Arguments = $"{Url},{Name}";
|
||||||
|
proc.StartInfo.UseShellExecute = false;
|
||||||
|
proc.StartInfo.RedirectStandardOutput = true;
|
||||||
|
|
||||||
|
proc.Start();
|
||||||
|
await proc.WaitForExitAsync();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
13
MusicCommands/Data.cs
Normal file
13
MusicCommands/Data.cs
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
using Discord;
|
||||||
|
using Discord.Audio;
|
||||||
|
|
||||||
|
namespace MusicCommands;
|
||||||
|
|
||||||
|
internal static class Data
|
||||||
|
{
|
||||||
|
internal static IAudioClient audioClient = null;
|
||||||
|
internal static IVoiceChannel voiceChannel = null;
|
||||||
|
|
||||||
|
internal static MusicPlayer MusicPlayer = null;
|
||||||
|
internal static MusicPlaylist Playlist = new();
|
||||||
|
}
|
||||||
44
MusicCommands/Leave.cs
Normal file
44
MusicCommands/Leave.cs
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
using System.Collections.Generic;
|
||||||
|
using Discord.Commands;
|
||||||
|
using Discord.WebSocket;
|
||||||
|
using PluginManager.Interfaces;
|
||||||
|
|
||||||
|
namespace MusicCommands;
|
||||||
|
|
||||||
|
internal class Leave : DBCommand
|
||||||
|
{
|
||||||
|
public string Command => "leave";
|
||||||
|
|
||||||
|
public List<string> Aliases => null;
|
||||||
|
|
||||||
|
public string Description => "Leave the voice channel";
|
||||||
|
|
||||||
|
public string Usage => "leave";
|
||||||
|
|
||||||
|
public bool canUseDM => false;
|
||||||
|
|
||||||
|
public bool canUseServer => true;
|
||||||
|
|
||||||
|
public bool requireAdmin => false;
|
||||||
|
|
||||||
|
public async void Execute(SocketCommandContext context, SocketMessage message, DiscordSocketClient client, bool isDM)
|
||||||
|
{
|
||||||
|
if (Data.audioClient is not null && Data.voiceChannel is not null)
|
||||||
|
{
|
||||||
|
await Data.audioClient.StopAsync();
|
||||||
|
await Data.voiceChannel.DisconnectAsync();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Data.Playlist is not null)
|
||||||
|
{
|
||||||
|
Data.Playlist.ClearQueue();
|
||||||
|
Data.Playlist = new();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Data.MusicPlayer is not null)
|
||||||
|
{
|
||||||
|
Data.MusicPlayer.Stop();
|
||||||
|
Data.MusicPlayer = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
25
MusicCommands/MusicCommands.csproj
Normal file
25
MusicCommands/MusicCommands.csproj
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<TargetFramework>net6.0</TargetFramework>
|
||||||
|
<Nullable>warnings</Nullable>
|
||||||
|
<BaseOutputPath>bin\</BaseOutputPath>
|
||||||
|
<AssemblyName>Music Commands</AssemblyName>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
|
||||||
|
<OutputPath>../BUILDS/</OutputPath>
|
||||||
|
<ErrorReport>none</ErrorReport>
|
||||||
|
<DebugType>none</DebugType>
|
||||||
|
<DebugSymbols>false</DebugSymbols>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="..\PluginManager\PluginManager.csproj" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<PackageReference Include="YoutubeExplode" Version="6.2.0" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
</Project>
|
||||||
53
MusicCommands/MusicPlayer.cs
Normal file
53
MusicCommands/MusicPlayer.cs
Normal file
@@ -0,0 +1,53 @@
|
|||||||
|
using System.IO;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace MusicCommands;
|
||||||
|
|
||||||
|
internal class MusicPlayer
|
||||||
|
{
|
||||||
|
private Stream outputStream { get; }
|
||||||
|
internal AudioFile NowPlaying = null;
|
||||||
|
|
||||||
|
internal bool isPlaying, isPaused;
|
||||||
|
|
||||||
|
public MusicPlayer(Stream outputChannel)
|
||||||
|
{
|
||||||
|
outputStream = outputChannel;
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task Play(Stream source, int byteSize, AudioFile songPlaying)
|
||||||
|
{
|
||||||
|
isPlaying = true;
|
||||||
|
NowPlaying = songPlaying;
|
||||||
|
while (isPlaying)
|
||||||
|
{
|
||||||
|
if (isPaused)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
var bits = new byte[byteSize];
|
||||||
|
var read = await source.ReadAsync(bits, 0, byteSize);
|
||||||
|
if (read == 0)
|
||||||
|
break;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
await outputStream.WriteAsync(bits, 0, read);
|
||||||
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
await source.FlushAsync();
|
||||||
|
await source.DisposeAsync();
|
||||||
|
source.Close();
|
||||||
|
await outputStream.FlushAsync();
|
||||||
|
isPlaying = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Stop()
|
||||||
|
{
|
||||||
|
isPlaying = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
25
MusicCommands/MusicPlaylist.cs
Normal file
25
MusicCommands/MusicPlaylist.cs
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace MusicCommands
|
||||||
|
{
|
||||||
|
internal class MusicPlaylist
|
||||||
|
{
|
||||||
|
internal MusicPlaylist()
|
||||||
|
{
|
||||||
|
Console.WriteLine("Initialized playlist.");
|
||||||
|
}
|
||||||
|
|
||||||
|
public Queue<AudioFile> QueueList = new();
|
||||||
|
|
||||||
|
public void Enqueue(AudioFile query) => QueueList.Enqueue(query);
|
||||||
|
public void ClearQueue() => QueueList.Clear();
|
||||||
|
|
||||||
|
public int Count => QueueList.Count;
|
||||||
|
public AudioFile GetNextSong => QueueList.Dequeue();
|
||||||
|
public AudioFile WhatIsNext => QueueList.Peek();
|
||||||
|
}
|
||||||
|
}
|
||||||
28
MusicCommands/Pause.cs
Normal file
28
MusicCommands/Pause.cs
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
using System.Collections.Generic;
|
||||||
|
using Discord.Commands;
|
||||||
|
using Discord.WebSocket;
|
||||||
|
using PluginManager.Interfaces;
|
||||||
|
|
||||||
|
namespace MusicCommands;
|
||||||
|
|
||||||
|
internal class Pause : DBCommand
|
||||||
|
{
|
||||||
|
public string Command => "pause";
|
||||||
|
|
||||||
|
public List<string> Aliases => null;
|
||||||
|
|
||||||
|
public string Description => "Pause/Unpause the music that is currently running";
|
||||||
|
|
||||||
|
public string Usage => "pause";
|
||||||
|
|
||||||
|
public bool canUseDM => false;
|
||||||
|
|
||||||
|
public bool canUseServer => true;
|
||||||
|
|
||||||
|
public bool requireAdmin => false;
|
||||||
|
|
||||||
|
public void Execute(SocketCommandContext context, SocketMessage message, DiscordSocketClient client, bool isDM)
|
||||||
|
{
|
||||||
|
Data.MusicPlayer.isPaused = !Data.MusicPlayer.isPaused;
|
||||||
|
}
|
||||||
|
}
|
||||||
119
MusicCommands/Play.cs
Normal file
119
MusicCommands/Play.cs
Normal file
@@ -0,0 +1,119 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Diagnostics;
|
||||||
|
using System.IO;
|
||||||
|
using Discord;
|
||||||
|
using Discord.Audio;
|
||||||
|
using Discord.Commands;
|
||||||
|
using Discord.WebSocket;
|
||||||
|
using PluginManager.Interfaces;
|
||||||
|
using PluginManager.Others;
|
||||||
|
|
||||||
|
namespace MusicCommands;
|
||||||
|
|
||||||
|
internal class Play : DBCommand
|
||||||
|
{
|
||||||
|
public string Command => "play";
|
||||||
|
|
||||||
|
public List<string> Aliases => new() { "p" };
|
||||||
|
|
||||||
|
public string Description => "Play music from a file";
|
||||||
|
|
||||||
|
public string Usage => "play [name/url]";
|
||||||
|
|
||||||
|
public bool canUseDM => false;
|
||||||
|
|
||||||
|
public bool canUseServer => true;
|
||||||
|
|
||||||
|
public bool requireAdmin => false;
|
||||||
|
|
||||||
|
public async void Execute(SocketCommandContext context, SocketMessage message, DiscordSocketClient client, bool isDM)
|
||||||
|
{
|
||||||
|
Directory.CreateDirectory("Music");
|
||||||
|
var path = "./Music/";
|
||||||
|
string[] splitted = message.Content.Split(' ');
|
||||||
|
if (splitted.Length < 2)
|
||||||
|
return;
|
||||||
|
do
|
||||||
|
{
|
||||||
|
if (splitted.Length == 2 && splitted[1].Contains("youtube.com") || splitted[1].Contains("youtu.be"))
|
||||||
|
{
|
||||||
|
var url = splitted[1];
|
||||||
|
path += $"{Functions.CreateMD5(url)}";
|
||||||
|
if (File.Exists(path))
|
||||||
|
{
|
||||||
|
Data.Playlist.Enqueue(new AudioFile(path, null));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
var file = new AudioFile(path, url);
|
||||||
|
await file.DownloadAudioFile();
|
||||||
|
Data.Playlist.Enqueue(file);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
var searchString = splitted.MergeStrings(1);
|
||||||
|
path += $"{Functions.CreateMD5(searchString)}";
|
||||||
|
if (File.Exists(path))
|
||||||
|
{
|
||||||
|
Data.Playlist.Enqueue(new AudioFile(path, null));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
await context.Channel.SendMessageAsync("Searching for " + searchString);
|
||||||
|
var file = new AudioFile(path, searchString);
|
||||||
|
await file.DownloadAudioFile();
|
||||||
|
Data.Playlist.Enqueue(file);
|
||||||
|
if (Data.MusicPlayer is null)
|
||||||
|
await context.Channel.SendMessageAsync("Playing: " + searchString);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Data.MusicPlayer is not null)
|
||||||
|
{
|
||||||
|
await context.Channel.SendMessageAsync("Queued your request: " + splitted.MergeStrings(1));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
while (false); // run only one time !
|
||||||
|
|
||||||
|
|
||||||
|
Data.voiceChannel = (context.User as IGuildUser)?.VoiceChannel;
|
||||||
|
|
||||||
|
if (Data.voiceChannel == null)
|
||||||
|
{
|
||||||
|
await context.Channel.SendMessageAsync("User must be in a voice channel, or a voice channel must be passed as an argument.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Data.audioClient is null)
|
||||||
|
{
|
||||||
|
Data.audioClient = await Data.voiceChannel.ConnectAsync(true);
|
||||||
|
Data.MusicPlayer = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
using (var discordChanneAudioOutStream = Data.audioClient.CreatePCMStream(AudioApplication.Mixed))
|
||||||
|
{
|
||||||
|
Data.MusicPlayer ??= new MusicPlayer(discordChanneAudioOutStream);
|
||||||
|
while (Data.Playlist.Count > 0)
|
||||||
|
{
|
||||||
|
var nowPlaying = Data.Playlist.GetNextSong;
|
||||||
|
using (var ffmpeg = CreateStream(nowPlaying.Name))
|
||||||
|
using (var ffmpegOutputBaseStream = ffmpeg.StandardOutput.BaseStream)
|
||||||
|
{
|
||||||
|
await Data.MusicPlayer.Play(ffmpegOutputBaseStream, 1024, nowPlaying);
|
||||||
|
Console.WriteLine("Finished playing from " + nowPlaying.Url);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Data.MusicPlayer = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static Process CreateStream(string path)
|
||||||
|
{
|
||||||
|
return Process.Start(new ProcessStartInfo { FileName = "ffmpeg", Arguments = $"-hide_banner -loglevel panic -i \"{path}\" -ac 2 -f s16le -ar 48000 pipe:1", UseShellExecute = false, RedirectStandardOutput = true });
|
||||||
|
}
|
||||||
|
}
|
||||||
42
MusicCommands/Skip.cs
Normal file
42
MusicCommands/Skip.cs
Normal file
@@ -0,0 +1,42 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using Discord.Commands;
|
||||||
|
using Discord.WebSocket;
|
||||||
|
using PluginManager.Interfaces;
|
||||||
|
|
||||||
|
namespace MusicCommands
|
||||||
|
{
|
||||||
|
public class Skip : DBCommand
|
||||||
|
{
|
||||||
|
public string Command => "skip";
|
||||||
|
|
||||||
|
public List<string> Aliases => null;
|
||||||
|
|
||||||
|
public string Description => "skip the music that is currently running";
|
||||||
|
|
||||||
|
public string Usage => "skip";
|
||||||
|
|
||||||
|
public bool canUseDM => false;
|
||||||
|
|
||||||
|
public bool canUseServer => true;
|
||||||
|
|
||||||
|
public bool requireAdmin => false;
|
||||||
|
|
||||||
|
public void Execute(SocketCommandContext context, SocketMessage message, DiscordSocketClient client, bool isDM)
|
||||||
|
{
|
||||||
|
var loadedSong = Data.MusicPlayer.NowPlaying;
|
||||||
|
|
||||||
|
if (loadedSong is null || Data.MusicPlayer.isPlaying == false)
|
||||||
|
{
|
||||||
|
message.Channel.SendMessageAsync("There is no music playing");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Data.MusicPlayer.isPlaying = false;
|
||||||
|
message.Channel.SendMessageAsync($"You have skipped {loadedSong.Name}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
32
MusicCommands/queue.cs
Normal file
32
MusicCommands/queue.cs
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using Discord.Commands;
|
||||||
|
using Discord.WebSocket;
|
||||||
|
using PluginManager.Interfaces;
|
||||||
|
|
||||||
|
namespace MusicCommands
|
||||||
|
{
|
||||||
|
public class queue : DBCommand
|
||||||
|
{
|
||||||
|
public string Command => "queue";
|
||||||
|
public List<string> Aliases => new() { "q" };
|
||||||
|
|
||||||
|
public string Description => "check queue";
|
||||||
|
|
||||||
|
public string Usage => "queue";
|
||||||
|
|
||||||
|
public bool canUseDM => false;
|
||||||
|
|
||||||
|
public bool canUseServer => true;
|
||||||
|
|
||||||
|
public bool requireAdmin => false;
|
||||||
|
|
||||||
|
public async void Execute(SocketCommandContext context, SocketMessage message, DiscordSocketClient client, bool isDM)
|
||||||
|
{
|
||||||
|
await context.Channel.SendMessageAsync($"You have {Data.Playlist.Count} items in queue");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,199 +1,239 @@
|
|||||||
using System;
|
using System;
|
||||||
|
using PluginManager.Others;
|
||||||
|
using System.IO;
|
||||||
|
using System.Text.Json;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Collections.ObjectModel;
|
||||||
|
using System.Threading;
|
||||||
|
|
||||||
using PluginManager.Online.Helpers;
|
namespace PluginManager
|
||||||
|
{
|
||||||
namespace PluginManager;
|
internal class AppConfig
|
||||||
|
{
|
||||||
|
public string? UpdaterVersion { get; set; }
|
||||||
|
public Dictionary<string, object>? ApplicationVariables { get; init; }
|
||||||
|
public List<string>? ProtectedKeyWords { get; init; }
|
||||||
|
public Dictionary<string, string>? PluginVersions { get; init; }
|
||||||
|
}
|
||||||
|
|
||||||
public static class Config
|
public static class Config
|
||||||
{
|
{
|
||||||
private static bool IsLoaded = false;
|
public static class PluginConfig
|
||||||
public static async Task Initialize()
|
|
||||||
{
|
{
|
||||||
if (IsLoaded)
|
public static readonly List<Tuple<string, PluginType>> InstalledPlugins = new();
|
||||||
|
|
||||||
|
public static void Load()
|
||||||
|
{
|
||||||
|
new Thread(LoadCommands).Start();
|
||||||
|
new Thread(LoadEvents).Start();
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void LoadCommands()
|
||||||
|
{
|
||||||
|
string cmd_path = "./Data/Plugins/Commands/";
|
||||||
|
string[] files = Directory.GetFiles(cmd_path, $"*.{Loaders.PluginLoader.pluginCMDExtension}", SearchOption.AllDirectories);
|
||||||
|
foreach (var file in files)
|
||||||
|
if (!file.Contains("PluginManager", StringComparison.InvariantCultureIgnoreCase))
|
||||||
|
{
|
||||||
|
string PluginName = new FileInfo(file).Name;
|
||||||
|
string name = PluginName.Substring(0, PluginName.Length - 1 - PluginManager.Loaders.PluginLoader.pluginCMDExtension.Length);
|
||||||
|
InstalledPlugins.Add(new(name, PluginType.Command));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void LoadEvents()
|
||||||
|
{
|
||||||
|
string eve_path = "./Data/Plugins/Events/";
|
||||||
|
string[] files = Directory.GetFiles(eve_path, $"*.{Loaders.PluginLoader.pluginEVEExtension}", SearchOption.AllDirectories);
|
||||||
|
foreach (var file in files)
|
||||||
|
if (!file.Contains("PluginManager", StringComparison.InvariantCultureIgnoreCase))
|
||||||
|
if (!file.Contains("PluginManager", StringComparison.InvariantCultureIgnoreCase))
|
||||||
|
{
|
||||||
|
string PluginName = new FileInfo(file).Name;
|
||||||
|
string name = PluginName.Substring(0, PluginName.Length - 1 - PluginManager.Loaders.PluginLoader.pluginEVEExtension.Length);
|
||||||
|
InstalledPlugins.Add(new(name, PluginType.Event));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static bool Contains(string pluginName)
|
||||||
|
{
|
||||||
|
foreach (var tuple in InstalledPlugins)
|
||||||
|
if (tuple.Item1 == pluginName)
|
||||||
|
return true;
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static PluginType GetPluginType(string pluginName)
|
||||||
|
{
|
||||||
|
foreach (var tuple in InstalledPlugins)
|
||||||
|
if (tuple.Item1 == pluginName)
|
||||||
|
return tuple.Item2;
|
||||||
|
|
||||||
|
|
||||||
|
return PluginType.Unknown;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static AppConfig? appConfig { get; set; }
|
||||||
|
|
||||||
|
public static string UpdaterVersion { get => appConfig.UpdaterVersion; set => appConfig.UpdaterVersion = value; }
|
||||||
|
|
||||||
|
public static string GetPluginVersion(string pluginName) => appConfig!.PluginVersions![pluginName];
|
||||||
|
public static void SetPluginVersion(string pluginName, string newVersion)
|
||||||
|
{
|
||||||
|
if (appConfig!.PluginVersions!.ContainsKey(pluginName))
|
||||||
|
appConfig.PluginVersions[pluginName] = newVersion;
|
||||||
|
else appConfig.PluginVersions.Add(pluginName, newVersion);
|
||||||
|
|
||||||
|
// SaveConfig();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void RemovePluginVersion(string pluginName) => appConfig!.PluginVersions!.Remove(pluginName);
|
||||||
|
public static bool PluginVersionsContainsKey(string pluginName) => appConfig!.PluginVersions!.ContainsKey(pluginName);
|
||||||
|
|
||||||
|
public static void AddValueToVariables<T>(string key, T value, bool isProtected)
|
||||||
|
{
|
||||||
|
if (value == null)
|
||||||
|
throw new Exception("The value cannot be null");
|
||||||
|
if (appConfig!.ApplicationVariables!.ContainsKey(key))
|
||||||
|
throw new Exception($"The key ({key}) already exists in the variables. Value {GetValue<T>(key)}");
|
||||||
|
|
||||||
|
appConfig.ApplicationVariables.Add(key, value);
|
||||||
|
if (isProtected && key != "Version")
|
||||||
|
appConfig.ProtectedKeyWords!.Add(key);
|
||||||
|
|
||||||
|
SaveConfig(SaveType.NORMAL);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Type GetVariableType(string value)
|
||||||
|
{
|
||||||
|
if (int.TryParse(value, out var intValue))
|
||||||
|
return typeof(int);
|
||||||
|
if (bool.TryParse(value, out var boolValue))
|
||||||
|
return typeof(bool);
|
||||||
|
if (float.TryParse(value, out var floatValue))
|
||||||
|
return typeof(float);
|
||||||
|
if (double.TryParse(value, out var doubleValue))
|
||||||
|
return typeof(double);
|
||||||
|
if (uint.TryParse(value, out var uintValue))
|
||||||
|
return typeof(uint);
|
||||||
|
if (long.TryParse(value, out var longValue))
|
||||||
|
return typeof(long);
|
||||||
|
if (byte.TryParse(value, out var byteValue))
|
||||||
|
return typeof(byte);
|
||||||
|
return typeof(string);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void GetAndAddValueToVariable(string key, string value, bool isReadOnly)
|
||||||
|
{
|
||||||
|
if (Config.ContainsKey(key))
|
||||||
return;
|
return;
|
||||||
|
if (int.TryParse(value, out var intValue))
|
||||||
if (!await Settings.sqlDatabase.TableExistsAsync("Plugins"))
|
Config.AddValueToVariables(key, intValue, isReadOnly);
|
||||||
await Settings.sqlDatabase.CreateTableAsync("Plugins", "PluginName", "Version");
|
else if (bool.TryParse(value, out var boolValue))
|
||||||
if (!await Settings.sqlDatabase.TableExistsAsync("Variables"))
|
Config.AddValueToVariables(key, boolValue, isReadOnly);
|
||||||
await Settings.sqlDatabase.CreateTableAsync("Variables", "VarName", "Value", "ReadOnly");
|
else if (float.TryParse(value, out var floatValue))
|
||||||
|
Config.AddValueToVariables(key, floatValue, isReadOnly);
|
||||||
IsLoaded = true;
|
else if (double.TryParse(value, out var doubleValue))
|
||||||
|
Config.AddValueToVariables(key, doubleValue, isReadOnly);
|
||||||
|
else if (uint.TryParse(value, out var uintValue))
|
||||||
|
Config.AddValueToVariables(key, uintValue, isReadOnly);
|
||||||
|
else if (long.TryParse(value, out var longValue))
|
||||||
|
Config.AddValueToVariables(key, longValue, isReadOnly);
|
||||||
|
else if (byte.TryParse(value, out var byteValue))
|
||||||
|
Config.AddValueToVariables(key, byteValue, isReadOnly);
|
||||||
|
else
|
||||||
|
Config.AddValueToVariables(key, value, isReadOnly);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class Variables
|
public static T? GetValue<T>(string key)
|
||||||
{
|
{
|
||||||
public static async Task<string> GetValueAsync(string VarName)
|
if (!appConfig!.ApplicationVariables!.ContainsKey(key)) return default;
|
||||||
|
try
|
||||||
{
|
{
|
||||||
if (!IsLoaded)
|
JsonElement element = (JsonElement)appConfig.ApplicationVariables[key];
|
||||||
throw new Exception("Config is not loaded");
|
return element.Deserialize<T>();
|
||||||
return await Settings.sqlDatabase.GetValueAsync("Variables", "VarName", VarName, "Value");
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
return (T)appConfig.ApplicationVariables[key];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static string GetValue(string VarName)
|
public static void SetValue<T>(string key, T value)
|
||||||
{
|
{
|
||||||
if (!IsLoaded)
|
if (value == null)
|
||||||
throw new Exception("Config is not loaded");
|
throw new Exception("Value is null");
|
||||||
return Settings.sqlDatabase.GetValue("Variables", "VarName", VarName, "Value");
|
if (!appConfig!.ApplicationVariables!.ContainsKey(key))
|
||||||
|
throw new Exception("Key does not exist in the config file");
|
||||||
|
if (appConfig.ProtectedKeyWords!.Contains(key))
|
||||||
|
throw new Exception("Key is protected");
|
||||||
|
|
||||||
|
appConfig.ApplicationVariables[key] = JsonSerializer.SerializeToElement(value);
|
||||||
|
SaveConfig(SaveType.NORMAL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void RemoveKey(string key)
|
||||||
public static async Task SetValueAsync(string VarName, string Value)
|
|
||||||
{
|
{
|
||||||
if (!IsLoaded)
|
if (key == "Version" || key == "token" || key == "prefix")
|
||||||
throw new Exception("Config is not loaded");
|
throw new Exception("Key is protected");
|
||||||
|
appConfig!.ApplicationVariables!.Remove(key);
|
||||||
if (await IsReadOnlyAsync(VarName))
|
appConfig.ProtectedKeyWords!.Remove(key);
|
||||||
throw new Exception($"Variable ({VarName}) is read only and can not be changed to {Value}");
|
SaveConfig(SaveType.NORMAL);
|
||||||
|
|
||||||
await Settings.sqlDatabase.SetValueAsync("Variables", "VarName", VarName, "Value", Value);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void SetValue(string VarName, string Value)
|
public static bool IsReadOnly(string key)
|
||||||
{
|
{
|
||||||
if (!IsLoaded)
|
return appConfig.ProtectedKeyWords.Contains(key);
|
||||||
throw new Exception("Config is not loaded");
|
|
||||||
if (IsReadOnly(VarName))
|
|
||||||
throw new Exception($"Variable ({VarName}) is read only and can not be changed to {Value}");
|
|
||||||
Settings.sqlDatabase.SetValue("Variables", "VarName", VarName, "Value", Value);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static async Task SaveConfig(SaveType type)
|
||||||
public static async Task<bool> IsReadOnlyAsync(string VarName)
|
|
||||||
{
|
{
|
||||||
if (!IsLoaded)
|
if (type == SaveType.NORMAL)
|
||||||
throw new Exception("Config is not loaded");
|
|
||||||
return (await Settings.sqlDatabase.GetValueAsync("Variables", "VarName", VarName, "ReadOnly")).Equals("true", StringComparison.CurrentCultureIgnoreCase);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static bool IsReadOnly(string VarName)
|
|
||||||
{
|
{
|
||||||
if (!IsLoaded)
|
string path = Functions.dataFolder + "config.json";
|
||||||
throw new Exception("Config is not loaded");
|
await Functions.SaveToJsonFile<AppConfig>(path, appConfig!);
|
||||||
return (Settings.sqlDatabase.GetValue("Variables", "VarName", VarName, "ReadOnly")).Equals("true", StringComparison.CurrentCultureIgnoreCase);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static async Task SetReadOnlyAsync(string VarName, bool ReadOnly)
|
|
||||||
{
|
|
||||||
if (!IsLoaded)
|
|
||||||
throw new Exception("Config is not loaded");
|
|
||||||
await Settings.sqlDatabase.SetValueAsync("Variables", "VarName", VarName, "ReadOnly", ReadOnly ? "true" : "false");
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void SetReadOnly(string VarName, bool ReadOnly)
|
|
||||||
{
|
|
||||||
if (!IsLoaded)
|
|
||||||
throw new Exception("Config is not loaded");
|
|
||||||
Settings.sqlDatabase.SetValue("Variables", "VarName", VarName, "ReadOnly", ReadOnly ? "true" : "false");
|
|
||||||
}
|
|
||||||
|
|
||||||
public static async Task<bool> ExistsAsync(string VarName)
|
|
||||||
{
|
|
||||||
if (!IsLoaded)
|
|
||||||
throw new Exception("Config is not loaded");
|
|
||||||
return await Settings.sqlDatabase.KeyExistsAsync("Variables", "VarName", VarName);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static bool Exists(string VarName)
|
|
||||||
{
|
|
||||||
if (!IsLoaded)
|
|
||||||
throw new Exception("Config is not loaded");
|
|
||||||
return Settings.sqlDatabase.KeyExists("Variables", "VarName", VarName);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static async Task AddAsync(string VarName, string Value, bool ReadOnly = false)
|
|
||||||
{
|
|
||||||
if (!IsLoaded)
|
|
||||||
throw new Exception("Config is not loaded");
|
|
||||||
if (await ExistsAsync(VarName))
|
|
||||||
{
|
|
||||||
await SetValueAsync(VarName, Value);
|
|
||||||
await SetReadOnlyAsync(VarName, ReadOnly);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
await Settings.sqlDatabase.InsertAsync("Variables", VarName, Value, ReadOnly ? "true" : "false");
|
if (type == SaveType.BACKUP)
|
||||||
}
|
|
||||||
|
|
||||||
public static void Add(string VarName, string Value, bool ReadOnly = false)
|
|
||||||
{
|
{
|
||||||
if (!IsLoaded)
|
string path = Functions.dataFolder + "config.json.bak";
|
||||||
throw new Exception("Config is not loaded");
|
await Functions.SaveToJsonFile<AppConfig>(path, appConfig!);
|
||||||
if (Exists(VarName))
|
|
||||||
{
|
|
||||||
SetValue(VarName, Value);
|
|
||||||
SetReadOnly(VarName, ReadOnly);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
Settings.sqlDatabase.Insert("Variables", VarName, Value, ReadOnly ? "true" : "false");
|
|
||||||
}
|
|
||||||
|
|
||||||
public static async Task RemoveKeyAsync(string VarName)
|
|
||||||
{
|
|
||||||
if (!IsLoaded)
|
|
||||||
throw new Exception("Config is not loaded");
|
|
||||||
await Settings.sqlDatabase.RemoveKeyAsync("Variables", "VarName", VarName);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void RemoveKey(string VarName)
|
|
||||||
{
|
|
||||||
if (!IsLoaded)
|
|
||||||
throw new Exception("Config is not loaded");
|
|
||||||
Settings.sqlDatabase.RemoveKey("Variables", "VarName", VarName);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static class Plugins
|
|
||||||
{
|
|
||||||
public static async Task<string> GetVersionAsync(string pluginName)
|
|
||||||
{
|
|
||||||
if (!IsLoaded)
|
|
||||||
throw new Exception("Config is not loaded yet");
|
|
||||||
|
|
||||||
string result = await Settings.sqlDatabase.GetValueAsync("Plugins", "PluginName", pluginName, "Version");
|
|
||||||
if (result is null)
|
|
||||||
return "0.0.0";
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static string GetVersion(string pluginName)
|
|
||||||
{
|
|
||||||
if (!IsLoaded)
|
|
||||||
throw new Exception("Config is not loaded yet");
|
|
||||||
|
|
||||||
string result = Settings.sqlDatabase.GetValue("Plugins", "PluginName", pluginName, "Version");
|
|
||||||
if (result is null)
|
|
||||||
return "0.0.0";
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static async Task SetVersionAsync(string pluginName, VersionString version)
|
|
||||||
{
|
|
||||||
if (!IsLoaded)
|
|
||||||
throw new Exception("Config is not loaded yet");
|
|
||||||
|
|
||||||
if (!await Settings.sqlDatabase.KeyExistsAsync("Plugins", "PluginName", pluginName))
|
|
||||||
{
|
|
||||||
await Settings.sqlDatabase.InsertAsync("Plugins", pluginName, version.ToShortString());
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
await Settings.sqlDatabase.SetValueAsync("Plugins", "PluginName", pluginName, "Version", version.ToShortString());
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void SetVersion(string pluginName, VersionString version)
|
|
||||||
{
|
|
||||||
if (!IsLoaded)
|
|
||||||
throw new Exception("Config is not loaded yet");
|
|
||||||
|
|
||||||
if (!Settings.sqlDatabase.KeyExists("Plugins", "PluginName", pluginName))
|
|
||||||
{
|
|
||||||
Settings.sqlDatabase.Insert("Plugins", pluginName, version.ToShortString());
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
Settings.sqlDatabase.SetValue("Plugins", "PluginName", pluginName, "Version", version.ToShortString());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static async Task LoadConfig()
|
||||||
|
{
|
||||||
|
string path = Functions.dataFolder + "config.json";
|
||||||
|
if (File.Exists(path))
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
appConfig = await Functions.ConvertFromJson<AppConfig>(path);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
File.Delete(path);
|
||||||
|
Console.WriteLine("An error occured while loading the settings. Importing from backup file...");
|
||||||
|
path = Functions.dataFolder + "config.json.bak";
|
||||||
|
appConfig = await Functions.ConvertFromJson<AppConfig>(path);
|
||||||
|
Functions.WriteErrFile(ex.Message);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Functions.WriteLogFile($"Loaded {appConfig.ApplicationVariables!.Keys.Count} application variables.\nLoaded {appConfig.ProtectedKeyWords!.Count} readonly variables.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
appConfig = new() { ApplicationVariables = new Dictionary<string, object>(), ProtectedKeyWords = new List<string>(), PluginVersions = new Dictionary<string, string>(), UpdaterVersion = "-1" };
|
||||||
|
}
|
||||||
|
|
||||||
|
public static bool ContainsValue<T>(T value) => appConfig!.ApplicationVariables!.ContainsValue(value!);
|
||||||
|
public static bool ContainsKey(string key) => appConfig!.ApplicationVariables!.ContainsKey(key);
|
||||||
|
|
||||||
|
public static IDictionary<string, object> GetAllVariables() => appConfig.ApplicationVariables;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,310 +0,0 @@
|
|||||||
using System.Collections.Generic;
|
|
||||||
using System.Data.SQLite;
|
|
||||||
using System.IO;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
namespace PluginManager.Database
|
|
||||||
{
|
|
||||||
public class SqlDatabase
|
|
||||||
{
|
|
||||||
private string ConnectionString;
|
|
||||||
private SQLiteConnection Connection;
|
|
||||||
|
|
||||||
public SqlDatabase(string fileName)
|
|
||||||
{
|
|
||||||
if (!File.Exists(fileName))
|
|
||||||
SQLiteConnection.CreateFile(fileName);
|
|
||||||
ConnectionString = $"URI=file:{fileName}";
|
|
||||||
Connection = new SQLiteConnection(ConnectionString);
|
|
||||||
}
|
|
||||||
|
|
||||||
public async Task Open()
|
|
||||||
{
|
|
||||||
await Connection.OpenAsync();
|
|
||||||
|
|
||||||
//Console.WriteLine("Opened database successfully");
|
|
||||||
}
|
|
||||||
|
|
||||||
public async Task InsertAsync(string tableName, params string[] values)
|
|
||||||
{
|
|
||||||
|
|
||||||
string query = $"INSERT INTO {tableName} VALUES (";
|
|
||||||
for (int i = 0; i < values.Length; i++)
|
|
||||||
{
|
|
||||||
query += $"'{values[i]}'";
|
|
||||||
if (i != values.Length - 1)
|
|
||||||
query += ", ";
|
|
||||||
}
|
|
||||||
query += ")";
|
|
||||||
|
|
||||||
SQLiteCommand command = new SQLiteCommand(query, Connection);
|
|
||||||
await command.ExecuteNonQueryAsync();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void Insert(string tableName, params string[] values)
|
|
||||||
{
|
|
||||||
|
|
||||||
string query = $"INSERT INTO {tableName} VALUES (";
|
|
||||||
for (int i = 0; i < values.Length; i++)
|
|
||||||
{
|
|
||||||
query += $"'{values[i]}'";
|
|
||||||
if (i != values.Length - 1)
|
|
||||||
query += ", ";
|
|
||||||
}
|
|
||||||
query += ")";
|
|
||||||
|
|
||||||
SQLiteCommand command = new SQLiteCommand(query, Connection);
|
|
||||||
command.ExecuteNonQuery();
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public async Task RemoveKeyAsync(string tableName, string KeyName, string KeyValue)
|
|
||||||
{
|
|
||||||
|
|
||||||
string query = $"DELETE FROM {tableName} WHERE {KeyName} = '{KeyValue}'";
|
|
||||||
|
|
||||||
SQLiteCommand command = new SQLiteCommand(query, Connection);
|
|
||||||
await command.ExecuteNonQueryAsync();
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public void RemoveKey(string tableName, string KeyName, string KeyValue)
|
|
||||||
{
|
|
||||||
|
|
||||||
|
|
||||||
string query = $"DELETE FROM {tableName} WHERE {KeyName} = '{KeyValue}'";
|
|
||||||
|
|
||||||
SQLiteCommand command = new SQLiteCommand(query, Connection);
|
|
||||||
command.ExecuteNonQuery();
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public async Task<bool> KeyExistsAsync(string tableName, string keyName, string KeyValue)
|
|
||||||
{
|
|
||||||
string query = $"SELECT * FROM {tableName} where {keyName} = '{KeyValue}'";
|
|
||||||
|
|
||||||
if (await ReadDataAsync(query) is not null)
|
|
||||||
return true;
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
public bool KeyExists(string tableName, string keyName, string KeyValue)
|
|
||||||
{
|
|
||||||
string query = $"SELECT * FROM {tableName} where {keyName} = '{KeyValue}'";
|
|
||||||
|
|
||||||
if (ReadData(query) is not null)
|
|
||||||
return true;
|
|
||||||
|
|
||||||
return false;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public async Task SetValueAsync(string tableName, string keyName, string KeyValue, string ResultColumnName, string ResultColumnValue)
|
|
||||||
{
|
|
||||||
if (!await TableExistsAsync(tableName))
|
|
||||||
throw new System.Exception($"Table {tableName} does not exist");
|
|
||||||
|
|
||||||
await ExecuteAsync($"UPDATE {tableName} SET {ResultColumnName}='{ResultColumnValue}' WHERE {keyName}='{KeyValue}'");
|
|
||||||
}
|
|
||||||
|
|
||||||
public void SetValue(string tableName, string keyName, string KeyValue, string ResultColumnName, string ResultColumnValue)
|
|
||||||
{
|
|
||||||
if (!TableExists(tableName))
|
|
||||||
throw new System.Exception($"Table {tableName} does not exist");
|
|
||||||
|
|
||||||
Execute($"UPDATE {tableName} SET {ResultColumnName}='{ResultColumnValue}' WHERE {keyName}='{KeyValue}'");
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public async Task<string> GetValueAsync(string tableName, string keyName, string KeyValue, string ResultColumnName)
|
|
||||||
{
|
|
||||||
if (!await TableExistsAsync(tableName))
|
|
||||||
throw new System.Exception($"Table {tableName} does not exist");
|
|
||||||
|
|
||||||
return await ReadDataAsync($"SELECT {ResultColumnName} FROM {tableName} WHERE {keyName}='{KeyValue}'");
|
|
||||||
}
|
|
||||||
|
|
||||||
public string GetValue(string tableName, string keyName, string KeyValue, string ResultColumnName)
|
|
||||||
{
|
|
||||||
if (!TableExists(tableName))
|
|
||||||
throw new System.Exception($"Table {tableName} does not exist");
|
|
||||||
|
|
||||||
return ReadData($"SELECT {ResultColumnName} FROM {tableName} WHERE {keyName}='{KeyValue}'");
|
|
||||||
}
|
|
||||||
|
|
||||||
public async void Stop()
|
|
||||||
{
|
|
||||||
await Connection.CloseAsync();
|
|
||||||
}
|
|
||||||
|
|
||||||
public async Task AddColumnsToTableAsync(string tableName, string[] columns)
|
|
||||||
{
|
|
||||||
|
|
||||||
var command = Connection.CreateCommand();
|
|
||||||
command.CommandText = $"SELECT * FROM {tableName}";
|
|
||||||
var reader = await command.ExecuteReaderAsync();
|
|
||||||
var tableColumns = new List<string>();
|
|
||||||
for (int i = 0; i < reader.FieldCount; i++)
|
|
||||||
tableColumns.Add(reader.GetName(i));
|
|
||||||
|
|
||||||
foreach (var column in columns)
|
|
||||||
{
|
|
||||||
if (!tableColumns.Contains(column))
|
|
||||||
{
|
|
||||||
command.CommandText = $"ALTER TABLE {tableName} ADD COLUMN {column} TEXT";
|
|
||||||
await command.ExecuteNonQueryAsync();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void AddColumnsToTable(string tableName, string[] columns)
|
|
||||||
{
|
|
||||||
|
|
||||||
var command = Connection.CreateCommand();
|
|
||||||
command.CommandText = $"SELECT * FROM {tableName}";
|
|
||||||
var reader = command.ExecuteReader();
|
|
||||||
var tableColumns = new List<string>();
|
|
||||||
for (int i = 0; i < reader.FieldCount; i++)
|
|
||||||
tableColumns.Add(reader.GetName(i));
|
|
||||||
|
|
||||||
foreach (var column in columns)
|
|
||||||
{
|
|
||||||
if (!tableColumns.Contains(column))
|
|
||||||
{
|
|
||||||
command.CommandText = $"ALTER TABLE {tableName} ADD COLUMN {column} TEXT";
|
|
||||||
command.ExecuteNonQuery();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public async Task<bool> TableExistsAsync(string tableName)
|
|
||||||
{
|
|
||||||
|
|
||||||
var cmd = Connection.CreateCommand();
|
|
||||||
cmd.CommandText = $"SELECT name FROM sqlite_master WHERE type='table' AND name='{tableName}'";
|
|
||||||
var result = await cmd.ExecuteScalarAsync();
|
|
||||||
|
|
||||||
if (result == null)
|
|
||||||
return false;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
public bool TableExists(string tableName)
|
|
||||||
{
|
|
||||||
|
|
||||||
var cmd = Connection.CreateCommand();
|
|
||||||
cmd.CommandText = $"SELECT name FROM sqlite_master WHERE type='table' AND name='{tableName}'";
|
|
||||||
var result = cmd.ExecuteScalar();
|
|
||||||
|
|
||||||
if (result == null)
|
|
||||||
return false;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
public async Task CreateTableAsync(string tableName, params string[] columns)
|
|
||||||
{
|
|
||||||
|
|
||||||
var cmd = Connection.CreateCommand();
|
|
||||||
cmd.CommandText = $"CREATE TABLE IF NOT EXISTS {tableName} ({string.Join(", ", columns)})";
|
|
||||||
await cmd.ExecuteNonQueryAsync();
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public void CreateTable(string tableName, params string[] columns)
|
|
||||||
{
|
|
||||||
|
|
||||||
var cmd = Connection.CreateCommand();
|
|
||||||
cmd.CommandText = $"CREATE TABLE IF NOT EXISTS {tableName} ({string.Join(", ", columns)})";
|
|
||||||
cmd.ExecuteNonQuery();
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public async Task<int> ExecuteAsync(string query)
|
|
||||||
{
|
|
||||||
if (!Connection.State.HasFlag(System.Data.ConnectionState.Open))
|
|
||||||
await Connection.OpenAsync();
|
|
||||||
var command = new SQLiteCommand(query, Connection);
|
|
||||||
int answer = await command.ExecuteNonQueryAsync();
|
|
||||||
return answer;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int Execute(string query)
|
|
||||||
{
|
|
||||||
if (!Connection.State.HasFlag(System.Data.ConnectionState.Open))
|
|
||||||
Connection.Open();
|
|
||||||
var command = new SQLiteCommand(query, Connection);
|
|
||||||
int r = command.ExecuteNonQuery();
|
|
||||||
|
|
||||||
return r;
|
|
||||||
}
|
|
||||||
|
|
||||||
public async Task<string> ReadDataAsync(string query)
|
|
||||||
{
|
|
||||||
if (!Connection.State.HasFlag(System.Data.ConnectionState.Open))
|
|
||||||
await Connection.OpenAsync();
|
|
||||||
var command = new SQLiteCommand(query, Connection);
|
|
||||||
var reader = await command.ExecuteReaderAsync();
|
|
||||||
|
|
||||||
object[] values = new object[reader.FieldCount];
|
|
||||||
if (reader.Read())
|
|
||||||
{
|
|
||||||
reader.GetValues(values);
|
|
||||||
return string.Join<object>(" ", values);
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public string ReadData(string query)
|
|
||||||
{
|
|
||||||
if (!Connection.State.HasFlag(System.Data.ConnectionState.Open))
|
|
||||||
Connection.Open();
|
|
||||||
var command = new SQLiteCommand(query, Connection);
|
|
||||||
var reader = command.ExecuteReader();
|
|
||||||
|
|
||||||
object[] values = new object[reader.FieldCount];
|
|
||||||
if (reader.Read())
|
|
||||||
{
|
|
||||||
reader.GetValues(values);
|
|
||||||
return string.Join<object>(" ", values);
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public async Task<object[]> ReadDataArrayAsync(string query)
|
|
||||||
{
|
|
||||||
if (!Connection.State.HasFlag(System.Data.ConnectionState.Open))
|
|
||||||
await Connection.OpenAsync();
|
|
||||||
var command = new SQLiteCommand(query, Connection);
|
|
||||||
var reader = await command.ExecuteReaderAsync();
|
|
||||||
|
|
||||||
object[] values = new object[reader.FieldCount];
|
|
||||||
if (reader.Read())
|
|
||||||
{
|
|
||||||
reader.GetValues(values);
|
|
||||||
return values;
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public object[] ReadDataArray(string query)
|
|
||||||
{
|
|
||||||
if (!Connection.State.HasFlag(System.Data.ConnectionState.Open))
|
|
||||||
Connection.Open();
|
|
||||||
var command = new SQLiteCommand(query, Connection);
|
|
||||||
var reader = command.ExecuteReader();
|
|
||||||
|
|
||||||
object[] values = new object[reader.FieldCount];
|
|
||||||
if (reader.Read())
|
|
||||||
{
|
|
||||||
reader.GetValues(values);
|
|
||||||
return values;
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,6 +1,7 @@
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
|
||||||
using Discord.Commands;
|
using Discord.Commands;
|
||||||
|
using Discord.WebSocket;
|
||||||
|
|
||||||
namespace PluginManager.Interfaces;
|
namespace PluginManager.Interfaces;
|
||||||
|
|
||||||
@@ -37,15 +38,11 @@ public interface DBCommand
|
|||||||
/// The main body of the command. This is what is executed when user calls the command in Server
|
/// The main body of the command. This is what is executed when user calls the command in Server
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="context">The disocrd Context</param>
|
/// <param name="context">The disocrd Context</param>
|
||||||
void ExecuteServer(SocketCommandContext context)
|
void ExecuteServer(SocketCommandContext context) { }
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The main body of the command. This is what is executed when user calls the command in DM
|
/// The main body of the command. This is what is executed when user calls the command in DM
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="context">The disocrd Context</param>
|
/// <param name="context">The disocrd Context</param>
|
||||||
void ExecuteDM(SocketCommandContext context)
|
void ExecuteDM(SocketCommandContext context) { }
|
||||||
{
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
@@ -7,12 +7,12 @@ public interface DBEvent
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// The name of the event
|
/// The name of the event
|
||||||
/// </summary>
|
/// </summary>
|
||||||
string Name { get; }
|
string name { get; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The description of the event
|
/// The description of the event
|
||||||
/// </summary>
|
/// </summary>
|
||||||
string Description { get; }
|
string description { get; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The method that is invoked when the event is loaded into memory
|
/// The method that is invoked when the event is loaded into memory
|
||||||
|
|||||||
@@ -1,25 +0,0 @@
|
|||||||
using System.Collections.Generic;
|
|
||||||
|
|
||||||
using Discord;
|
|
||||||
using Discord.WebSocket;
|
|
||||||
|
|
||||||
namespace PluginManager.Interfaces
|
|
||||||
{
|
|
||||||
public interface DBSlashCommand
|
|
||||||
{
|
|
||||||
string Name { get; }
|
|
||||||
string Description { get; }
|
|
||||||
|
|
||||||
bool canUseDM { get; }
|
|
||||||
|
|
||||||
List<SlashCommandOptionBuilder> Options { get; }
|
|
||||||
|
|
||||||
void ExecuteServer(SocketSlashCommand context)
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
void ExecuteDM(SocketSlashCommand context) { }
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,7 +1,8 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.Threading.Tasks;
|
||||||
using Discord.WebSocket;
|
using Discord.WebSocket;
|
||||||
|
using PluginManager.Others;
|
||||||
|
|
||||||
namespace PluginManager.Items;
|
namespace PluginManager.Items;
|
||||||
|
|
||||||
@@ -20,7 +21,7 @@ public class Command
|
|||||||
{
|
{
|
||||||
Author = message.Author;
|
Author = message.Author;
|
||||||
var data = message.Content.Split(' ');
|
var data = message.Content.Split(' ');
|
||||||
Arguments = data.Length > 1 ? new List<string>(string.Join(' ', data, 1, data.Length - 1).Split(' ')) : new List<string>();
|
Arguments = data.Length > 1 ? new List<string>(data.MergeStrings(1).Split(' ')) : new List<string>();
|
||||||
CommandName = data[0].Substring(1);
|
CommandName = data[0].Substring(1);
|
||||||
PrefixUsed = data[0][0];
|
PrefixUsed = data[0][0];
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ using System.IO;
|
|||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Net.Http;
|
using System.Net.Http;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
|
using System.Threading;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
using Discord.WebSocket;
|
using Discord.WebSocket;
|
||||||
@@ -12,43 +13,38 @@ using Discord.WebSocket;
|
|||||||
using PluginManager.Interfaces;
|
using PluginManager.Interfaces;
|
||||||
using PluginManager.Loaders;
|
using PluginManager.Loaders;
|
||||||
using PluginManager.Online;
|
using PluginManager.Online;
|
||||||
|
using PluginManager.Online.Helpers;
|
||||||
using PluginManager.Others;
|
using PluginManager.Others;
|
||||||
|
|
||||||
using OperatingSystem = PluginManager.Others.OperatingSystem;
|
|
||||||
|
|
||||||
namespace PluginManager.Items;
|
namespace PluginManager.Items;
|
||||||
|
|
||||||
public class ConsoleCommandsHandler
|
public class ConsoleCommandsHandler
|
||||||
{
|
{
|
||||||
private static readonly PluginsManager manager =
|
private static readonly PluginsManager manager = new("https://raw.githubusercontent.com/Wizzy69/installer/discord-bot-files/Plugins.txt");
|
||||||
new("https://raw.githubusercontent.com/Wizzy69/installer/discord-bot-files/Plugins.txt");
|
|
||||||
|
|
||||||
private static readonly List<ConsoleCommand> commandList = new();
|
private static readonly List<ConsoleCommand> commandList = new();
|
||||||
|
|
||||||
|
|
||||||
private static bool isDownloading;
|
|
||||||
private static bool pluginsLoaded;
|
|
||||||
private readonly DiscordSocketClient? client;
|
private readonly DiscordSocketClient? client;
|
||||||
|
|
||||||
|
|
||||||
|
private static bool isDownloading = false;
|
||||||
|
private static bool pluginsLoaded = false;
|
||||||
|
|
||||||
public ConsoleCommandsHandler(DiscordSocketClient client)
|
public ConsoleCommandsHandler(DiscordSocketClient client)
|
||||||
{
|
{
|
||||||
this.client = client;
|
this.client = client;
|
||||||
InitializeBasicCommands();
|
InitializeBasicCommands();
|
||||||
|
//Console.WriteLine("Initialized console command handler !");
|
||||||
|
|
||||||
//Settings.Variables.outputStream.WriteLine("Initialized console command handler !");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void InitializeBasicCommands()
|
private void InitializeBasicCommands()
|
||||||
{
|
{
|
||||||
|
|
||||||
commandList.Clear();
|
commandList.Clear();
|
||||||
|
|
||||||
AddCommand("help", "Show help", "help <command>", args =>
|
AddCommand("help", "Show help", "help <command>", args =>
|
||||||
{
|
{
|
||||||
if (args.Length <= 1)
|
if (args.Length <= 1)
|
||||||
{
|
{
|
||||||
Settings.Variables.outputStream.WriteLine("Available commands:");
|
Console.WriteLine("Available commands:");
|
||||||
var items = new List<string[]>();
|
List<string[]> items = new List<string[]>();
|
||||||
items.Add(new[] { "-", "-", "-" });
|
items.Add(new[] { "-", "-", "-" });
|
||||||
items.Add(new[] { "Command", "Description", "Usage" });
|
items.Add(new[] { "Command", "Description", "Usage" });
|
||||||
items.Add(new[] { " ", " ", "Argument type: <optional> [required]" });
|
items.Add(new[] { " ", " ", "Argument type: <optional> [required]" });
|
||||||
@@ -56,26 +52,24 @@ public class ConsoleCommandsHandler
|
|||||||
|
|
||||||
foreach (var command in commandList)
|
foreach (var command in commandList)
|
||||||
{
|
{
|
||||||
var pa = from p in command.Action.Method.GetParameters()
|
var pa = from p in command.Action.Method.GetParameters() where p.Name != null select p.ParameterType.FullName;
|
||||||
where p.Name != null
|
|
||||||
select p.ParameterType.FullName;
|
|
||||||
items.Add(new[] { command.CommandName, command.Description, command.Usage });
|
items.Add(new[] { command.CommandName, command.Description, command.Usage });
|
||||||
}
|
}
|
||||||
|
|
||||||
items.Add(new[] { "-", "-", "-" });
|
items.Add(new[] { "-", "-", "-" });
|
||||||
Utilities.FormatAndAlignTable(items, TableFormat.DEFAULT);
|
Console_Utilities.FormatAndAlignTable(items, TableFormat.DEFAULT);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
foreach (var command in commandList)
|
foreach (var command in commandList)
|
||||||
if (command.CommandName == args[1])
|
if (command.CommandName == args[1])
|
||||||
{
|
{
|
||||||
Settings.Variables.outputStream.WriteLine("Command description: " + command.Description);
|
Console.WriteLine("Command description: " + command.Description);
|
||||||
Settings.Variables.outputStream.WriteLine("Command execution format:" + command.Usage);
|
Console.WriteLine("Command execution format:" + command.Usage);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
Settings.Variables.outputStream.WriteLine("Command not found");
|
Console.WriteLine("Command not found");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
@@ -86,26 +80,24 @@ public class ConsoleCommandsHandler
|
|||||||
if (pluginsLoaded)
|
if (pluginsLoaded)
|
||||||
return;
|
return;
|
||||||
var loader = new PluginLoader(client!);
|
var loader = new PluginLoader(client!);
|
||||||
var cc = Console.ForegroundColor;
|
ConsoleColor cc = Console.ForegroundColor;
|
||||||
loader.onCMDLoad += (name, typeName, success, exception) =>
|
loader.onCMDLoad += (name, typeName, success, exception) =>
|
||||||
{
|
{
|
||||||
|
|
||||||
if (name == null || name.Length < 2)
|
if (name == null || name.Length < 2)
|
||||||
name = typeName;
|
name = typeName;
|
||||||
if (success)
|
if (success)
|
||||||
{
|
{
|
||||||
Console.ForegroundColor = ConsoleColor.Green;
|
Console.ForegroundColor = ConsoleColor.Green;
|
||||||
Settings.Variables.outputStream.WriteLine("[CMD] Successfully loaded command : " + name);
|
Console.WriteLine("[CMD] Successfully loaded command : " + name);
|
||||||
}
|
}
|
||||||
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Console.ForegroundColor = ConsoleColor.Red;
|
Console.ForegroundColor = ConsoleColor.Red;
|
||||||
if (exception is null)
|
|
||||||
Settings.Variables.outputStream.WriteLine("An error occured while loading: " + name);
|
|
||||||
else
|
|
||||||
Settings.Variables.outputStream.WriteLine("[CMD] Failed to load command : " + name + " because " + exception!.Message);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
Console.WriteLine("[CMD] Failed to load command : " + name + " because " + exception!.Message);
|
||||||
|
}
|
||||||
Console.ForegroundColor = cc;
|
Console.ForegroundColor = cc;
|
||||||
};
|
};
|
||||||
loader.onEVELoad += (name, typeName, success, exception) =>
|
loader.onEVELoad += (name, typeName, success, exception) =>
|
||||||
@@ -116,39 +108,20 @@ public class ConsoleCommandsHandler
|
|||||||
if (success)
|
if (success)
|
||||||
{
|
{
|
||||||
Console.ForegroundColor = ConsoleColor.Green;
|
Console.ForegroundColor = ConsoleColor.Green;
|
||||||
Settings.Variables.outputStream.WriteLine("[EVENT] Successfully loaded event : " + name);
|
Console.WriteLine("[EVENT] Successfully loaded event : " + name);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Console.ForegroundColor = ConsoleColor.Red;
|
Console.ForegroundColor = ConsoleColor.Red;
|
||||||
Settings.Variables.outputStream.WriteLine("[EVENT] Failed to load event : " + name + " because " + exception!.Message);
|
Console.WriteLine("[EVENT] Failed to load event : " + name + " because " + exception!.Message);
|
||||||
}
|
}
|
||||||
|
|
||||||
Console.ForegroundColor = cc;
|
|
||||||
};
|
|
||||||
|
|
||||||
loader.onSLSHLoad += (name, typeName, success, exception) =>
|
|
||||||
{
|
|
||||||
if (name == null || name.Length < 2)
|
|
||||||
name = typeName;
|
|
||||||
|
|
||||||
if (success)
|
|
||||||
{
|
|
||||||
Console.ForegroundColor = ConsoleColor.Green;
|
|
||||||
Settings.Variables.outputStream.WriteLine("[SLASH] Successfully loaded command : " + name);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
Console.ForegroundColor = ConsoleColor.Red;
|
|
||||||
Settings.Variables.outputStream.WriteLine("[SLASH] Failed to load command : " + name + " because " + exception!.Message);
|
|
||||||
}
|
|
||||||
|
|
||||||
Console.ForegroundColor = cc;
|
Console.ForegroundColor = cc;
|
||||||
};
|
};
|
||||||
|
|
||||||
loader.LoadPlugins();
|
loader.LoadPlugins();
|
||||||
Console.ForegroundColor = cc;
|
Console.ForegroundColor = cc;
|
||||||
pluginsLoaded = true;
|
pluginsLoaded = true;
|
||||||
|
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -160,11 +133,11 @@ public class ConsoleCommandsHandler
|
|||||||
if (args.Length == 1)
|
if (args.Length == 1)
|
||||||
{
|
{
|
||||||
isDownloading = false;
|
isDownloading = false;
|
||||||
Settings.Variables.outputStream.WriteLine("Please specify plugin name");
|
Console.WriteLine("Please specify plugin name");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
var name = string.Join(' ', args, 1, args.Length - 1);
|
var name = args.MergeStrings(1);
|
||||||
// info[0] = plugin type
|
// info[0] = plugin type
|
||||||
// info[1] = plugin link
|
// info[1] = plugin link
|
||||||
// info[2] = if others are required, or string.Empty if none
|
// info[2] = if others are required, or string.Empty if none
|
||||||
@@ -174,42 +147,44 @@ public class ConsoleCommandsHandler
|
|||||||
if (name == "")
|
if (name == "")
|
||||||
{
|
{
|
||||||
isDownloading = false;
|
isDownloading = false;
|
||||||
Utilities.WriteColorText("Name is invalid");
|
Console_Utilities.WriteColorText("Name is invalid");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
isDownloading = false;
|
isDownloading = false;
|
||||||
Utilities.WriteColorText($"Failed to find plugin &b{name} &c!" +
|
Console_Utilities.WriteColorText($"Failed to find plugin &b{name} &c!" + " Use &glistplugs &ccommand to display all available plugins !");
|
||||||
" Use &glistplugs &ccommand to display all available plugins !");
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
string path;
|
string path;
|
||||||
if (info[0] == "Plugin")
|
if (info[0] == "Command" || info[0] == "Event")
|
||||||
path = "./Data/Plugins/" + name + ".dll";
|
path = "./Data/Plugins/" + info[0] + "s/" + name + "." + (info[0] == "Command" ? PluginLoader.pluginCMDExtension : PluginLoader.pluginEVEExtension);
|
||||||
else
|
else
|
||||||
path = $"./{info[1].Split('/')[info[1].Split('/').Length - 1]}";
|
path = $"./{info[1].Split('/')[info[1].Split('/').Length - 1]}";
|
||||||
|
if (Others.OperatingSystem.WINDOWS == Functions.GetOperatingSystem())
|
||||||
if (OperatingSystem.WINDOWS == Functions.GetOperatingSystem())
|
|
||||||
{
|
{
|
||||||
await ServerCom.DownloadFileAsync(info[1], path);
|
await ServerCom.DownloadFileAsync(info[1], path);
|
||||||
}
|
}
|
||||||
else if (OperatingSystem.LINUX == Functions.GetOperatingSystem())
|
else if (Others.OperatingSystem.LINUX == Functions.GetOperatingSystem())
|
||||||
{
|
{
|
||||||
var bar = new Utilities.ProgressBar(ProgressBarType.NO_END);
|
Others.Console_Utilities.ProgressBar bar = new Console_Utilities.ProgressBar(ProgressBarType.NO_END);
|
||||||
bar.Start();
|
bar.Start();
|
||||||
await ServerCom.DownloadFileNoProgressAsync(info[1], path);
|
await ServerCom.DownloadFileNoProgressAsync(info[1], path);
|
||||||
bar.Stop("Plugin Downloaded !");
|
bar.Stop("Plugin Downloaded !");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (info[0] == "Event")
|
||||||
|
Config.PluginConfig.InstalledPlugins.Add(new(name, PluginType.Event));
|
||||||
|
else if (info[0] == "Command")
|
||||||
|
Config.PluginConfig.InstalledPlugins.Add(new(name, PluginType.Command));
|
||||||
|
|
||||||
Settings.Variables.outputStream.WriteLine("\n");
|
|
||||||
|
Console.WriteLine("\n");
|
||||||
|
|
||||||
// check requirements if any
|
// check requirements if any
|
||||||
|
|
||||||
if (info.Length == 3 && info[2] != string.Empty && info[2] != null)
|
if (info.Length == 3 && info[2] != string.Empty && info[2] != null)
|
||||||
{
|
{
|
||||||
Settings.Variables.outputStream.WriteLine($"Downloading requirements for plugin : {name}");
|
Console.WriteLine($"Downloading requirements for plugin : {name}");
|
||||||
|
|
||||||
var lines = await ServerCom.ReadTextFromURL(info[2]);
|
var lines = await ServerCom.ReadTextFromURL(info[2]);
|
||||||
|
|
||||||
@@ -218,48 +193,44 @@ public class ConsoleCommandsHandler
|
|||||||
if (!(line.Length > 0 && line.Contains(",")))
|
if (!(line.Length > 0 && line.Contains(",")))
|
||||||
continue;
|
continue;
|
||||||
var split = line.Split(',');
|
var split = line.Split(',');
|
||||||
Settings.Variables.outputStream.WriteLine($"\nDownloading item: {split[1]}");
|
Console.WriteLine($"\nDownloading item: {split[1]}");
|
||||||
if (File.Exists("./" + split[1])) File.Delete("./" + split[1]);
|
if (File.Exists("./" + split[1])) File.Delete("./" + split[1]);
|
||||||
if (OperatingSystem.WINDOWS == Functions.GetOperatingSystem())
|
if (Others.OperatingSystem.WINDOWS == Functions.GetOperatingSystem())
|
||||||
{
|
|
||||||
await ServerCom.DownloadFileAsync(split[0], "./" + split[1]);
|
await ServerCom.DownloadFileAsync(split[0], "./" + split[1]);
|
||||||
}
|
else if (Others.OperatingSystem.LINUX == Functions.GetOperatingSystem())
|
||||||
else if (OperatingSystem.LINUX == Functions.GetOperatingSystem())
|
|
||||||
{
|
{
|
||||||
var bar = new Utilities.ProgressBar(ProgressBarType.NO_END);
|
Others.Console_Utilities.ProgressBar bar = new Console_Utilities.ProgressBar(ProgressBarType.NO_END);
|
||||||
bar.Start();
|
bar.Start();
|
||||||
await ServerCom.DownloadFileNoProgressAsync(split[0], "./" + split[1]);
|
await ServerCom.DownloadFileNoProgressAsync(split[0], "./" + split[1]);
|
||||||
bar.Stop("Item downloaded !");
|
bar.Stop("Item downloaded !");
|
||||||
}
|
|
||||||
|
|
||||||
Settings.Variables.outputStream.WriteLine();
|
|
||||||
if (split[0].EndsWith(".pak"))
|
|
||||||
{
|
|
||||||
File.Move("./" + split[1], "./Data/PAKS/" + split[1], true);
|
|
||||||
}
|
}
|
||||||
|
Console.WriteLine();
|
||||||
|
if (split[0].EndsWith(".pak"))
|
||||||
|
File.Move("./" + split[1], "./Data/PAKS/" + split[1], true);
|
||||||
else if (split[0].EndsWith(".zip") || split[0].EndsWith(".pkg"))
|
else if (split[0].EndsWith(".zip") || split[0].EndsWith(".pkg"))
|
||||||
{
|
{
|
||||||
Settings.Variables.outputStream.WriteLine($"Extracting {split[1]} ...");
|
Console.WriteLine($"Extracting {split[1]} ...");
|
||||||
var bar = new Utilities.ProgressBar(
|
var bar = new Console_Utilities.ProgressBar(ProgressBarType.NO_END);// { Max = 100f, Color = ConsoleColor.Green };
|
||||||
ProgressBarType.NO_END);
|
|
||||||
bar.Start();
|
bar.Start();
|
||||||
await Functions.ExtractArchive("./" + split[1], "./", null,
|
await Functions.ExtractArchive("./" + split[1], "./", null, UnzipProgressType.PercentageFromTotalSize);
|
||||||
UnzipProgressType.PercentageFromTotalSize);
|
|
||||||
bar.Stop("Extracted");
|
bar.Stop("Extracted");
|
||||||
Settings.Variables.outputStream.WriteLine("\n");
|
Console.WriteLine("\n");
|
||||||
File.Delete("./" + split[1]);
|
File.Delete("./" + split[1]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Settings.Variables.outputStream.WriteLine();
|
Console.WriteLine();
|
||||||
}
|
}
|
||||||
|
VersionString? ver = await VersionString.GetVersionOfPackageFromWeb(name);
|
||||||
var ver = await ServerCom.GetVersionOfPackageFromWeb(name);
|
|
||||||
if (ver is null) throw new Exception("Incorrect version");
|
if (ver is null) throw new Exception("Incorrect version");
|
||||||
await Config.Plugins.SetVersionAsync(name, ver);
|
Config.SetPluginVersion(name, $"{ver.PackageVersionID}.{ver.PackageMainVersion}.{ver.PackageCheckVersion}");
|
||||||
|
|
||||||
isDownloading = false;
|
isDownloading = false;
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
@@ -267,11 +238,11 @@ public class ConsoleCommandsHandler
|
|||||||
{
|
{
|
||||||
if (args.Length != 2)
|
if (args.Length != 2)
|
||||||
return;
|
return;
|
||||||
if (!Config.Variables.Exists(args[1]))
|
if (!Config.ContainsKey(args[1]))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
var data = Config.Variables.GetValue(args[1]);
|
var data = Config.GetValue<string>(args[1]);
|
||||||
Settings.Variables.outputStream.WriteLine($"{args[1]} => {data}");
|
Console.WriteLine($"{args[1]} => {data}");
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -285,12 +256,12 @@ public class ConsoleCommandsHandler
|
|||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
Config.Variables.Add(key, value, isReadOnly);
|
Config.GetAndAddValueToVariable(key, value, isReadOnly);
|
||||||
Settings.Variables.outputStream.WriteLine($"Updated config file with the following command: {args[1]} => {value}");
|
Console.WriteLine($"Updated config file with the following command: {args[1]} => {value}");
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
Settings.Variables.outputStream.WriteLine(ex.ToString());
|
Console.WriteLine(ex.ToString());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
@@ -299,7 +270,7 @@ public class ConsoleCommandsHandler
|
|||||||
{
|
{
|
||||||
if (args.Length < 2)
|
if (args.Length < 2)
|
||||||
return;
|
return;
|
||||||
Config.Variables.RemoveKey(args[1]);
|
Config.RemoveKey(args[1]);
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -307,63 +278,60 @@ public class ConsoleCommandsHandler
|
|||||||
{
|
{
|
||||||
if (client is null)
|
if (client is null)
|
||||||
return;
|
return;
|
||||||
var bar = new Utilities.ProgressBar(ProgressBarType.NO_END);
|
Console_Utilities.ProgressBar bar = new Console_Utilities.ProgressBar(ProgressBarType.NO_END);
|
||||||
|
|
||||||
bar.Start();
|
bar.Start();
|
||||||
|
await Config.SaveConfig(SaveType.NORMAL);
|
||||||
|
await Config.SaveConfig(SaveType.BACKUP);
|
||||||
bar.Stop("Saved config !");
|
bar.Stop("Saved config !");
|
||||||
Settings.Variables.outputStream.WriteLine();
|
Console.WriteLine();
|
||||||
Settings.sqlDatabase.Stop();
|
|
||||||
await client.StopAsync();
|
await client.StopAsync();
|
||||||
await client.DisposeAsync();
|
await client.DisposeAsync();
|
||||||
|
|
||||||
await Task.Delay(1000);
|
await Task.Delay(1000);
|
||||||
Environment.Exit(0);
|
Environment.Exit(0);
|
||||||
|
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
AddCommand("import", "Load an external command", "import [pluginName]", async args =>
|
AddCommand("import", "Load an external command", "import [pluginName]", async (args) =>
|
||||||
{
|
{
|
||||||
if (args.Length <= 1) return;
|
if (args.Length <= 1) return;
|
||||||
try
|
string pName = Functions.MergeStrings(args, 1);
|
||||||
{
|
HttpClient client = new HttpClient();
|
||||||
var pName = string.Join(' ', args, 1, args.Length - 1);
|
string url = (await manager.GetPluginLinkByName(pName))[1];
|
||||||
var client = new HttpClient();
|
Stream s = await client.GetStreamAsync(url);
|
||||||
var url = (await manager.GetPluginLinkByName(pName))[1];
|
MemoryStream str = new MemoryStream();
|
||||||
if (url is null) throw new Exception($"Invalid plugin name {pName}.");
|
|
||||||
var s = await client.GetStreamAsync(url);
|
|
||||||
var str = new MemoryStream();
|
|
||||||
await s.CopyToAsync(str);
|
await s.CopyToAsync(str);
|
||||||
var asmb = Assembly.Load(str.ToArray());
|
var asmb = Assembly.Load(str.ToArray());
|
||||||
|
|
||||||
var types = asmb.GetTypes();
|
var types = asmb.GetTypes();
|
||||||
foreach (var type in types)
|
foreach (var type in types)
|
||||||
|
{
|
||||||
if (type.IsClass && typeof(DBEvent).IsAssignableFrom(type))
|
if (type.IsClass && typeof(DBEvent).IsAssignableFrom(type))
|
||||||
{
|
{
|
||||||
var instance = (DBEvent)Activator.CreateInstance(type);
|
DBEvent instance = (DBEvent)Activator.CreateInstance(type);
|
||||||
instance.Start(this.client);
|
instance.Start(this.client);
|
||||||
Settings.Variables.outputStream.WriteLine($"[EVENT] Loaded external {type.FullName}!");
|
Console.WriteLine($"Loaded external {type.FullName}!");
|
||||||
}
|
}
|
||||||
else if (type.IsClass && typeof(DBCommand).IsAssignableFrom(type))
|
else if (type.IsClass && typeof(DBCommand).IsAssignableFrom(type))
|
||||||
{
|
{
|
||||||
var instance = (DBCommand)Activator.CreateInstance(type);
|
Console.WriteLine("Only events can be loaded from external sources !");
|
||||||
Settings.Variables.outputStream.WriteLine($"[CMD] Instance: {type.FullName} loaded !");
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
Settings.Variables.outputStream.WriteLine(ex.Message);
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
AddCommand("remplug", "Remove a plugin", "remplug [plugName]", async args =>
|
AddCommand("remplug", "Remove a plugin", "remplug [plugName]", async args =>
|
||||||
{
|
{
|
||||||
|
|
||||||
if (args.Length <= 1) return;
|
if (args.Length <= 1) return;
|
||||||
|
|
||||||
isDownloading = true;
|
isDownloading = true;
|
||||||
var plugName = string.Join(' ', args, 1, args.Length - 1);
|
string plugName = Functions.MergeStrings(args, 1);
|
||||||
if (pluginsLoaded)
|
if (pluginsLoaded)
|
||||||
{
|
{
|
||||||
if (Functions.GetOperatingSystem() == OperatingSystem.WINDOWS)
|
if (Functions.GetOperatingSystem() == Others.OperatingSystem.WINDOWS)
|
||||||
{
|
{
|
||||||
Process.Start("DiscordBot.exe", $"/remplug {plugName}");
|
Process.Start("DiscordBot.exe", $"/remplug {plugName}");
|
||||||
await Task.Delay(100);
|
await Task.Delay(100);
|
||||||
@@ -375,23 +343,37 @@ public class ConsoleCommandsHandler
|
|||||||
await Task.Delay(100);
|
await Task.Delay(100);
|
||||||
Environment.Exit(0);
|
Environment.Exit(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
isDownloading = false;
|
isDownloading = false;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
var location = $"./Data/Plugins/{plugName}.dll";
|
string location = "./Data/Plugins/";
|
||||||
|
|
||||||
|
location = Config.PluginConfig.GetPluginType(plugName) switch
|
||||||
|
{
|
||||||
|
PluginType.Command => location + "Commands/" + plugName + "." + PluginLoader.pluginCMDExtension,
|
||||||
|
PluginType.Event => location + "Events/" + plugName + "." + PluginLoader.pluginEVEExtension,
|
||||||
|
PluginType.Unknown => "./",
|
||||||
|
_ => throw new NotImplementedException("Plugin type incorrect")
|
||||||
|
};
|
||||||
|
|
||||||
if (!File.Exists(location))
|
if (!File.Exists(location))
|
||||||
{
|
{
|
||||||
Settings.Variables.outputStream.WriteLine("The plugin does not exist");
|
Console.WriteLine("The plugin does not exist");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
File.Delete(location);
|
File.Delete(location);
|
||||||
|
if (Config.PluginConfig.Contains(plugName))
|
||||||
Settings.Variables.outputStream.WriteLine("Removed the plugin DLL. Checking for other files ...");
|
{
|
||||||
|
var tuple = Config.PluginConfig.InstalledPlugins.Where(t => t.Item1 == plugName).FirstOrDefault();
|
||||||
|
Console.WriteLine("Found: " + tuple.ToString());
|
||||||
|
Config.PluginConfig.InstalledPlugins.Remove(tuple);
|
||||||
|
Config.RemovePluginVersion(plugName);
|
||||||
|
await Config.SaveConfig(SaveType.NORMAL);
|
||||||
|
}
|
||||||
|
Console.WriteLine("Removed the plugin DLL. Checking for other files ...");
|
||||||
|
|
||||||
var info = await manager.GetPluginLinkByName(plugName);
|
var info = await manager.GetPluginLinkByName(plugName);
|
||||||
if (info[2] != string.Empty)
|
if (info[2] != string.Empty)
|
||||||
@@ -406,46 +388,42 @@ public class ConsoleCommandsHandler
|
|||||||
File.Delete("./" + split[1]);
|
File.Delete("./" + split[1]);
|
||||||
|
|
||||||
|
|
||||||
Settings.Variables.outputStream.WriteLine("Removed: " + split[1]);
|
Console.WriteLine("Removed: " + split[1]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Directory.Exists($"./Data/Plugins/{plugName}"))
|
|
||||||
Directory.Delete($"./Data/Plugins/{plugName}", true);
|
|
||||||
|
|
||||||
if (Directory.Exists(plugName))
|
if (Directory.Exists(plugName))
|
||||||
Directory.Delete(plugName, true);
|
Directory.Delete(plugName, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
isDownloading = false;
|
isDownloading = false;
|
||||||
Settings.Variables.outputStream.WriteLine(plugName + " has been successfully deleted !");
|
Console.WriteLine(plugName + " has been successfully deleted !");
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
AddCommand("reload", "Reload the bot with all plugins", () =>
|
AddCommand("reload", "Reload the bot with all plugins", () =>
|
||||||
{
|
{
|
||||||
if (Functions.GetOperatingSystem() == OperatingSystem.WINDOWS)
|
if (Functions.GetOperatingSystem() == Others.OperatingSystem.WINDOWS)
|
||||||
{
|
{
|
||||||
Process.Start("DiscordBot.exe", "lp");
|
Process.Start("DiscordBot.exe", $"lp");
|
||||||
HandleCommand("sd");
|
HandleCommand("sd");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Process.Start("./DiscordBot", "lp");
|
|
||||||
|
Process.Start("./DiscordBot", $"lp");
|
||||||
HandleCommand("sd");
|
HandleCommand("sd");
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
//AddCommand("");
|
|
||||||
|
|
||||||
//Sort the commands by name
|
//Sort the commands by name
|
||||||
commandList.Sort((x, y) => x.CommandName.CompareTo(y.CommandName));
|
commandList.Sort((x, y) => x.CommandName.CompareTo(y.CommandName));
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void AddCommand(string command, string description, string usage, Action<string[]> action)
|
public static void AddCommand(string command, string description, string usage, Action<string[]> action)
|
||||||
{
|
{
|
||||||
commandList.Add(new ConsoleCommand
|
commandList.Add(new ConsoleCommand { CommandName = command, Description = description, Action = action, Usage = usage });
|
||||||
{ CommandName = command, Description = description, Action = action, Usage = usage });
|
|
||||||
Console.ForegroundColor = ConsoleColor.White;
|
Console.ForegroundColor = ConsoleColor.White;
|
||||||
Utilities.WriteColorText($"Command &r{command} &cadded to the list of commands");
|
Console_Utilities.WriteColorText($"Command &r{command} &cadded to the list of commands");
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void AddCommand(string command, string description, Action action)
|
public static void AddCommand(string command, string description, Action action)
|
||||||
@@ -471,11 +449,15 @@ public class ConsoleCommandsHandler
|
|||||||
public static async Task ExecuteCommad(string command)
|
public static async Task ExecuteCommad(string command)
|
||||||
{
|
{
|
||||||
var args = command.Split(' ');
|
var args = command.Split(' ');
|
||||||
|
// Console.WriteLine(command);
|
||||||
foreach (var item in commandList.ToList())
|
foreach (var item in commandList.ToList())
|
||||||
if (item.CommandName == args[0])
|
if (item.CommandName == args[0])
|
||||||
{
|
{
|
||||||
item.Action.Invoke(args);
|
item.Action.Invoke(args);
|
||||||
|
Console.WriteLine();
|
||||||
|
|
||||||
while (isDownloading) await Task.Delay(1000);
|
while (isDownloading) await Task.Delay(1000);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -489,18 +471,18 @@ public class ConsoleCommandsHandler
|
|||||||
if (removeCommandExecution)
|
if (removeCommandExecution)
|
||||||
{
|
{
|
||||||
Console.SetCursorPosition(0, Console.CursorTop - 1);
|
Console.SetCursorPosition(0, Console.CursorTop - 1);
|
||||||
for (var i = 0; i < command.Length + 30; i++)
|
for (int i = 0; i < command.Length + 30; i++)
|
||||||
Settings.Variables.outputStream.Write(" ");
|
Console.Write(" ");
|
||||||
Console.SetCursorPosition(0, Console.CursorTop);
|
Console.SetCursorPosition(0, Console.CursorTop);
|
||||||
}
|
}
|
||||||
|
|
||||||
Settings.Variables.outputStream.WriteLine();
|
Console.WriteLine();
|
||||||
item.Action(args);
|
item.Action(args);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
//Settings.Variables.outputStream.WriteLine($"Executing: {args[0]} with the following parameters: {args.MergeStrings(1)}");
|
//Console.WriteLine($"Executing: {args[0]} with the following parameters: {args.MergeStrings(1)}");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -3,7 +3,9 @@ using System.Collections.Generic;
|
|||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
using PluginManager.Online.Updates;
|
||||||
using PluginManager.Others;
|
using PluginManager.Others;
|
||||||
|
|
||||||
namespace PluginManager.Loaders;
|
namespace PluginManager.Loaders;
|
||||||
@@ -29,6 +31,11 @@ internal class Loader<T>
|
|||||||
private string path { get; }
|
private string path { get; }
|
||||||
private string extension { get; }
|
private string extension { get; }
|
||||||
|
|
||||||
|
|
||||||
|
internal delegate void FileLoadedEventHandler(LoaderArgs args);
|
||||||
|
|
||||||
|
internal delegate void PluginLoadedEventHandler(LoaderArgs args);
|
||||||
|
|
||||||
internal event FileLoadedEventHandler? FileLoaded;
|
internal event FileLoadedEventHandler? FileLoaded;
|
||||||
|
|
||||||
internal event PluginLoadedEventHandler? PluginLoaded;
|
internal event PluginLoadedEventHandler? PluginLoaded;
|
||||||
@@ -45,6 +52,7 @@ internal class Loader<T>
|
|||||||
var files = Directory.GetFiles(path, $"*.{extension}", SearchOption.AllDirectories);
|
var files = Directory.GetFiles(path, $"*.{extension}", SearchOption.AllDirectories);
|
||||||
foreach (var file in files)
|
foreach (var file in files)
|
||||||
{
|
{
|
||||||
|
|
||||||
Assembly.LoadFrom(file);
|
Assembly.LoadFrom(file);
|
||||||
if (FileLoaded != null)
|
if (FileLoaded != null)
|
||||||
{
|
{
|
||||||
@@ -90,14 +98,7 @@ internal class Loader<T>
|
|||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
if (PluginLoaded != null)
|
if (PluginLoaded != null) PluginLoaded.Invoke(new LoaderArgs { Exception = ex, IsLoaded = false, PluginName = type.FullName, TypeName = nameof(T) });
|
||||||
PluginLoaded.Invoke(new LoaderArgs
|
|
||||||
{
|
|
||||||
Exception = ex,
|
|
||||||
IsLoaded = false,
|
|
||||||
PluginName = type.FullName,
|
|
||||||
TypeName = nameof(T)
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
@@ -108,9 +109,4 @@ internal class Loader<T>
|
|||||||
|
|
||||||
return list;
|
return list;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
internal delegate void FileLoadedEventHandler(LoaderArgs args);
|
|
||||||
|
|
||||||
internal delegate void PluginLoadedEventHandler(LoaderArgs args);
|
|
||||||
}
|
}
|
||||||
@@ -1,127 +0,0 @@
|
|||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.IO;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Reflection;
|
|
||||||
|
|
||||||
using PluginManager.Interfaces;
|
|
||||||
using PluginManager.Others;
|
|
||||||
|
|
||||||
namespace PluginManager.Loaders
|
|
||||||
{
|
|
||||||
internal class LoaderV2
|
|
||||||
{
|
|
||||||
internal LoaderV2(string path, string extension)
|
|
||||||
{
|
|
||||||
this.path = path;
|
|
||||||
this.extension = extension;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
private string path { get; }
|
|
||||||
private string extension { get; }
|
|
||||||
|
|
||||||
internal event FileLoadedEventHandler? FileLoaded;
|
|
||||||
|
|
||||||
internal event PluginLoadedEventHandler? PluginLoaded;
|
|
||||||
|
|
||||||
|
|
||||||
internal delegate void FileLoadedEventHandler(LoaderArgs args);
|
|
||||||
|
|
||||||
internal delegate void PluginLoadedEventHandler(LoaderArgs args);
|
|
||||||
|
|
||||||
|
|
||||||
internal (List<DBEvent>?, List<DBCommand>?, List<DBSlashCommand>?) Load()
|
|
||||||
{
|
|
||||||
|
|
||||||
List<DBEvent> events = new();
|
|
||||||
List<DBSlashCommand> slashCommands = new();
|
|
||||||
List<DBCommand> commands = new();
|
|
||||||
|
|
||||||
if (!Directory.Exists(path))
|
|
||||||
{
|
|
||||||
Directory.CreateDirectory(path);
|
|
||||||
return (null, null, null);
|
|
||||||
}
|
|
||||||
|
|
||||||
var files = Directory.GetFiles(path, $"*.{extension}", SearchOption.AllDirectories);
|
|
||||||
foreach (var file in files)
|
|
||||||
{
|
|
||||||
Assembly.LoadFrom(file);
|
|
||||||
if (FileLoaded != null)
|
|
||||||
{
|
|
||||||
var args = new LoaderArgs
|
|
||||||
{
|
|
||||||
Exception = null,
|
|
||||||
TypeName = null,
|
|
||||||
IsLoaded = false,
|
|
||||||
PluginName = new FileInfo(file).Name.Split('.')[0],
|
|
||||||
Plugin = null
|
|
||||||
};
|
|
||||||
FileLoaded.Invoke(args);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
return (LoadItems<DBEvent>(), LoadItems<DBCommand>(), LoadItems<DBSlashCommand>());
|
|
||||||
}
|
|
||||||
|
|
||||||
internal List<T> LoadItems<T>()
|
|
||||||
{
|
|
||||||
List<T> list = new();
|
|
||||||
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
var interfaceType = typeof(T);
|
|
||||||
var types = AppDomain.CurrentDomain.GetAssemblies()
|
|
||||||
.SelectMany(a => a.GetTypes())
|
|
||||||
.Where(p => interfaceType.IsAssignableFrom(p) && p.IsClass)
|
|
||||||
.ToArray();
|
|
||||||
|
|
||||||
|
|
||||||
list.Clear();
|
|
||||||
foreach (var type in types)
|
|
||||||
try
|
|
||||||
{
|
|
||||||
var plugin = (T)Activator.CreateInstance(type)!;
|
|
||||||
list.Add(plugin);
|
|
||||||
|
|
||||||
|
|
||||||
if (PluginLoaded != null)
|
|
||||||
PluginLoaded.Invoke(new LoaderArgs
|
|
||||||
{
|
|
||||||
Exception = null,
|
|
||||||
IsLoaded = true,
|
|
||||||
PluginName = type.FullName,
|
|
||||||
TypeName = typeof(T) == typeof(DBCommand) ? "DBCommand" : typeof(T) == typeof(DBEvent) ? "DBEvent" : "DBSlashCommand",
|
|
||||||
Plugin = plugin
|
|
||||||
}
|
|
||||||
);
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
if (PluginLoaded != null)
|
|
||||||
PluginLoaded.Invoke(new LoaderArgs
|
|
||||||
{
|
|
||||||
Exception = ex,
|
|
||||||
IsLoaded = false,
|
|
||||||
PluginName = type.FullName,
|
|
||||||
TypeName = nameof(T)
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
return list;
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
Functions.WriteErrFile(ex.ToString());
|
|
||||||
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,13 +1,14 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
|
using System.Runtime.CompilerServices;
|
||||||
|
using System.Threading;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
using Discord;
|
|
||||||
using Discord.WebSocket;
|
using Discord.WebSocket;
|
||||||
|
|
||||||
using PluginManager.Interfaces;
|
using PluginManager.Interfaces;
|
||||||
using PluginManager.Online;
|
using PluginManager.Online.Helpers;
|
||||||
using PluginManager.Online.Updates;
|
using PluginManager.Online.Updates;
|
||||||
using PluginManager.Others;
|
using PluginManager.Others;
|
||||||
|
|
||||||
@@ -19,11 +20,11 @@ public class PluginLoader
|
|||||||
|
|
||||||
public delegate void EVELoaded(string name, string typeName, bool success, Exception? e = null);
|
public delegate void EVELoaded(string name, string typeName, bool success, Exception? e = null);
|
||||||
|
|
||||||
public delegate void SLSHLoaded(string name, string tyypename, bool success, Exception? e = null);
|
private const string pluginCMDFolder = @"./Data/Plugins/Commands/";
|
||||||
|
private const string pluginEVEFolder = @"./Data/Plugins/Events/";
|
||||||
|
|
||||||
private const string pluginFolder = @"./Data/Plugins/";
|
internal const string pluginCMDExtension = "dll";
|
||||||
|
internal const string pluginEVEExtension = "dll";
|
||||||
internal const string pluginExtension = "dll";
|
|
||||||
private readonly DiscordSocketClient _client;
|
private readonly DiscordSocketClient _client;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -36,11 +37,6 @@ public class PluginLoader
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public EVELoaded? onEVELoad;
|
public EVELoaded? onEVELoad;
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Event that is fired when a <see cref="DBEvent" /> is successfully loaded into events list
|
|
||||||
/// </summary>
|
|
||||||
public SLSHLoaded? onSLSHLoad;
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The Plugin Loader constructor
|
/// The Plugin Loader constructor
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -61,91 +57,104 @@ public class PluginLoader
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public static List<DBEvent>? Events { get; set; }
|
public static List<DBEvent>? Events { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// A list of <see cref="DBSlashCommand"/> commands
|
|
||||||
/// </summary>
|
|
||||||
public static List<DBSlashCommand>? SlashCommands { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The main mathod that is called to load all events
|
/// The main mathod that is called to load all events
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public async void LoadPlugins()
|
public async void LoadPlugins()
|
||||||
{
|
{
|
||||||
//Check for updates in commands
|
//Check for updates in commands
|
||||||
foreach (var file in Directory.GetFiles("./Data/Plugins/", $"*.{pluginExtension}",
|
foreach (var file in Directory.GetFiles("./Data/Plugins/Commands", $"*.{pluginCMDExtension}", SearchOption.AllDirectories))
|
||||||
SearchOption.AllDirectories))
|
{
|
||||||
await Task.Run(async () =>
|
await Task.Run(async () =>
|
||||||
{
|
{
|
||||||
var name = new FileInfo(file).Name.Split('.')[0];
|
string name = new FileInfo(file).Name.Split('.')[0];
|
||||||
var version = await ServerCom.GetVersionOfPackageFromWeb(name);
|
if (!Config.PluginVersionsContainsKey(name))
|
||||||
if (version is null)
|
Config.SetPluginVersion(name, (await VersionString.GetVersionOfPackageFromWeb(name))?.PackageVersionID + ".0.0");
|
||||||
return;
|
|
||||||
if (Config.Plugins.GetVersion(name) is not null)
|
|
||||||
Config.Plugins.SetVersion(name, version);
|
|
||||||
|
|
||||||
if (await PluginUpdater.CheckForUpdates(name))
|
if (await PluginUpdater.CheckForUpdates(name))
|
||||||
await PluginUpdater.Download(name);
|
await PluginUpdater.Download(name);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
//Check for updates in events
|
||||||
|
foreach (var file in Directory.GetFiles("./Data/Plugins/Events", $"*.{pluginEVEExtension}", SearchOption.AllDirectories))
|
||||||
|
{
|
||||||
|
await Task.Run(async () =>
|
||||||
|
{
|
||||||
|
string name = new FileInfo(file).Name.Split('.')[0];
|
||||||
|
if (!Config.PluginVersionsContainsKey(name))
|
||||||
|
Config.SetPluginVersion(name, (await VersionString.GetVersionOfPackageFromWeb(name))?.PackageVersionID + ".0.0");
|
||||||
|
|
||||||
|
if (await PluginUpdater.CheckForUpdates(name))
|
||||||
|
await PluginUpdater.Download(name);
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//Save the new config file (after the updates)
|
||||||
|
await Config.SaveConfig(SaveType.NORMAL);
|
||||||
|
|
||||||
|
|
||||||
//Load all plugins
|
//Load all plugins
|
||||||
|
|
||||||
Commands = new List<DBCommand>();
|
Commands = new List<DBCommand>();
|
||||||
Events = new List<DBEvent>();
|
Events = new List<DBEvent>();
|
||||||
SlashCommands = new List<DBSlashCommand>();
|
|
||||||
|
|
||||||
Functions.WriteLogFile("Starting plugin loader ... Client: " + _client.CurrentUser.Username);
|
Functions.WriteLogFile("Starting plugin loader ... Client: " + _client.CurrentUser.Username);
|
||||||
Settings.Variables.outputStream.WriteLine("Loading plugins");
|
Console.WriteLine("Loading plugins");
|
||||||
|
|
||||||
|
var commandsLoader = new Loader<DBCommand>(pluginCMDFolder, pluginCMDExtension);
|
||||||
|
var eventsLoader = new Loader<DBEvent>(pluginEVEFolder, pluginEVEExtension);
|
||||||
|
|
||||||
|
commandsLoader.FileLoaded += OnCommandFileLoaded;
|
||||||
|
commandsLoader.PluginLoaded += OnCommandLoaded;
|
||||||
|
|
||||||
|
eventsLoader.FileLoaded += EventFileLoaded;
|
||||||
|
eventsLoader.PluginLoaded += OnEventLoaded;
|
||||||
|
|
||||||
|
Commands = commandsLoader.Load();
|
||||||
|
Events = eventsLoader.Load();
|
||||||
|
|
||||||
var loader = new LoaderV2("./Data/Plugins", "dll");
|
|
||||||
loader.FileLoaded += (args) => Functions.WriteLogFile($"{args.PluginName} file Loaded");
|
|
||||||
loader.PluginLoaded += Loader_PluginLoaded;
|
|
||||||
var res = loader.Load();
|
|
||||||
Events = res.Item1;
|
|
||||||
Commands = res.Item2;
|
|
||||||
SlashCommands = res.Item3;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private async void Loader_PluginLoaded(LoaderArgs args)
|
private void EventFileLoaded(LoaderArgs e)
|
||||||
{
|
{
|
||||||
// Settings.Variables.outputStream.WriteLine(args.TypeName);
|
if (!e.IsLoaded)
|
||||||
switch (args.TypeName)
|
{
|
||||||
|
Functions.WriteLogFile($"[EVENT] Event from file [{e.PluginName}] has been successfully created !");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnCommandFileLoaded(LoaderArgs e)
|
||||||
|
{
|
||||||
|
if (!e.IsLoaded)
|
||||||
|
{
|
||||||
|
Functions.WriteLogFile($"[CMD] Command from file [{e.PluginName}] has been successfully loaded !");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnEventLoaded(LoaderArgs e)
|
||||||
{
|
{
|
||||||
case "DBCommand":
|
|
||||||
onCMDLoad?.Invoke(((DBCommand)args.Plugin!).Command, args.TypeName!, args.IsLoaded, args.Exception);
|
|
||||||
break;
|
|
||||||
case "DBEvent":
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
if (args.IsLoaded)
|
if (e.IsLoaded)
|
||||||
((DBEvent)args.Plugin!).Start(_client);
|
((DBEvent)e.Plugin!).Start(_client);
|
||||||
|
|
||||||
onEVELoad?.Invoke(((DBEvent)args.Plugin!).Name, args.TypeName!, args.IsLoaded, args.Exception);
|
onEVELoad?.Invoke(((DBEvent)e.Plugin!).name, e.TypeName!, e.IsLoaded, e.Exception);
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
Settings.Variables.outputStream.WriteLine(ex.ToString());
|
Console.WriteLine(ex.ToString());
|
||||||
Settings.Variables.outputStream.WriteLine("Plugin: " + args.PluginName);
|
Console.WriteLine("Plugin: " + e.PluginName);
|
||||||
Settings.Variables.outputStream.WriteLine("Type: " + args.TypeName);
|
Console.WriteLine("Type: " + e.TypeName);
|
||||||
Settings.Variables.outputStream.WriteLine("IsLoaded: " + args.IsLoaded);
|
Console.WriteLine("IsLoaded: " + e.IsLoaded);
|
||||||
}
|
}
|
||||||
break;
|
}
|
||||||
case "DBSlashCommand":
|
|
||||||
if (args.IsLoaded)
|
private void OnCommandLoaded(LoaderArgs e)
|
||||||
{
|
{
|
||||||
var slash = (DBSlashCommand)args.Plugin;
|
onCMDLoad?.Invoke(((DBCommand)e.Plugin!).Command, e.TypeName!, e.IsLoaded, e.Exception);
|
||||||
SlashCommandBuilder builder = new SlashCommandBuilder();
|
|
||||||
builder.WithName(slash.Name);
|
|
||||||
builder.WithDescription(slash.Description);
|
|
||||||
builder.WithDMPermission(slash.canUseDM);
|
|
||||||
builder.Options = slash.Options;
|
|
||||||
//Settings.Variables.outputStream.WriteLine("Loaded " + slash.Name);
|
|
||||||
onSLSHLoad?.Invoke(((DBSlashCommand)args.Plugin!).Name, args.TypeName, args.IsLoaded, args.Exception);
|
|
||||||
await _client.CreateGlobalApplicationCommandAsync(builder.Build());
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,12 +1,12 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.IO;
|
|
||||||
using System.Net.Http;
|
using System.Net.Http;
|
||||||
using System.Threading;
|
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
using System.IO;
|
||||||
|
using System.Threading;
|
||||||
using PluginManager.Others;
|
using PluginManager.Others;
|
||||||
|
|
||||||
namespace PluginManager.Online.Helpers;
|
namespace PluginManager.Online.Helpers
|
||||||
|
{
|
||||||
internal static class OnlineFunctions
|
internal static class OnlineFunctions
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -18,10 +18,7 @@ internal static class OnlineFunctions
|
|||||||
/// <param name="progress">The <see cref="IProgress{T}"/> that is used to track the download progress</param>
|
/// <param name="progress">The <see cref="IProgress{T}"/> that is used to track the download progress</param>
|
||||||
/// <param name="cancellation">The cancellation token</param>
|
/// <param name="cancellation">The cancellation token</param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
internal static async Task DownloadFileAsync(this HttpClient client, string url, Stream destination,
|
internal static async Task DownloadFileAsync(this HttpClient client, string url, Stream destination, IProgress<float>? progress = null, IProgress<long>? downloadedBytes = null, int bufferSize = 81920, CancellationToken cancellation = default)
|
||||||
IProgress<float>? progress = null,
|
|
||||||
IProgress<long>? downloadedBytes = null, int bufferSize = 81920,
|
|
||||||
CancellationToken cancellation = default)
|
|
||||||
{
|
{
|
||||||
using (var response = await client.GetAsync(url, HttpCompletionOption.ResponseHeadersRead, cancellation))
|
using (var response = await client.GetAsync(url, HttpCompletionOption.ResponseHeadersRead, cancellation))
|
||||||
{
|
{
|
||||||
@@ -63,4 +60,8 @@ internal static class OnlineFunctions
|
|||||||
using var client = new HttpClient();
|
using var client = new HttpClient();
|
||||||
return await client.GetStringAsync(url, cancellation);
|
return await client.GetStringAsync(url, cancellation);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -1,16 +1,21 @@
|
|||||||
using System;
|
using PluginManager.Others;
|
||||||
|
|
||||||
namespace PluginManager.Online.Helpers;
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using System.Linq;
|
||||||
|
|
||||||
|
namespace PluginManager.Online.Helpers
|
||||||
|
{
|
||||||
public class VersionString
|
public class VersionString
|
||||||
{
|
{
|
||||||
public int PackageCheckVersion;
|
|
||||||
public int PackageMainVersion;
|
|
||||||
public int PackageVersionID;
|
public int PackageVersionID;
|
||||||
|
public int PackageMainVersion;
|
||||||
|
public int PackageCheckVersion;
|
||||||
|
|
||||||
public VersionString(string version)
|
public VersionString(string version)
|
||||||
{
|
{
|
||||||
var data = version.Split('.');
|
string[] data = version.Split('.');
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
PackageVersionID = int.Parse(data[0]);
|
PackageVersionID = int.Parse(data[0]);
|
||||||
@@ -19,15 +24,42 @@ public class VersionString
|
|||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
Console.WriteLine(version);
|
|
||||||
throw new Exception("Failed to write Version", ex);
|
throw new Exception("Failed to write Version", ex);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#region operators
|
||||||
|
public static bool operator >(VersionString s1, VersionString s2)
|
||||||
|
{
|
||||||
|
if (s1.PackageVersionID > s2.PackageVersionID) return true;
|
||||||
|
if (s1.PackageVersionID == s2.PackageVersionID)
|
||||||
|
{
|
||||||
|
if (s1.PackageMainVersion > s2.PackageMainVersion) return true;
|
||||||
|
if (s1.PackageMainVersion == s2.PackageMainVersion && s1.PackageCheckVersion > s2.PackageCheckVersion) return true;
|
||||||
|
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
public static bool operator <(VersionString s1, VersionString s2) => !(s1 > s2) && s1 != s2;
|
||||||
|
|
||||||
|
public static bool operator ==(VersionString s1, VersionString s2)
|
||||||
|
{
|
||||||
|
if (s1.PackageVersionID == s2.PackageVersionID && s1.PackageMainVersion == s2.PackageMainVersion && s1.PackageCheckVersion == s2.PackageCheckVersion) return true;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static bool operator !=(VersionString s1, VersionString s2) => !(s1 == s2);
|
||||||
|
|
||||||
|
public static bool operator <=(VersionString s1, VersionString s2) => (s1 < s2 || s1 == s2);
|
||||||
|
public static bool operator >=(VersionString s1, VersionString s2) => (s1 > s2 || s1 == s2);
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
public override string ToString()
|
public override string ToString()
|
||||||
{
|
{
|
||||||
return "{PackageID: " + PackageVersionID + ", PackageVersion: " + PackageMainVersion +
|
return "{PackageID: " + PackageVersionID + ", PackageVersion: " + PackageMainVersion + ", PackageCheckVersion: " + PackageCheckVersion + "}";
|
||||||
", PackageCheckVersion: " + PackageCheckVersion + "}";
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public string ToShortString()
|
public string ToShortString()
|
||||||
@@ -37,48 +69,23 @@ public class VersionString
|
|||||||
return $"{PackageVersionID}.{PackageMainVersion}.{PackageCheckVersion}";
|
return $"{PackageVersionID}.{PackageMainVersion}.{PackageCheckVersion}";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static VersionString? GetVersionOfPackage(string pakName)
|
||||||
#region operators
|
|
||||||
|
|
||||||
public static bool operator >(VersionString s1, VersionString s2)
|
|
||||||
{
|
{
|
||||||
if (s1.PackageVersionID > s2.PackageVersionID) return true;
|
if (!Config.PluginVersionsContainsKey(pakName))
|
||||||
if (s1.PackageVersionID == s2.PackageVersionID)
|
return null;
|
||||||
|
return new VersionString(Config.GetPluginVersion(pakName));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static async Task<VersionString?> GetVersionOfPackageFromWeb(string pakName)
|
||||||
{
|
{
|
||||||
if (s1.PackageMainVersion > s2.PackageMainVersion) return true;
|
string url = "https://raw.githubusercontent.com/Wizzy69/installer/discord-bot-files/Versions";
|
||||||
if (s1.PackageMainVersion == s2.PackageMainVersion &&
|
List<string> data = await ServerCom.ReadTextFromURL(url);
|
||||||
s1.PackageCheckVersion > s2.PackageCheckVersion) return true;
|
string? version = (from item in data
|
||||||
|
where !item.StartsWith("#") && item.StartsWith(pakName)
|
||||||
|
select item.Split(',')[1]).FirstOrDefault();
|
||||||
|
if (version == default || version == null) return null;
|
||||||
|
return new VersionString(version);
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static bool operator <(VersionString s1, VersionString s2)
|
|
||||||
{
|
|
||||||
return !(s1 > s2) && s1 != s2;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static bool operator ==(VersionString s1, VersionString s2)
|
|
||||||
{
|
|
||||||
if (s1.PackageVersionID == s2.PackageVersionID && s1.PackageMainVersion == s2.PackageMainVersion &&
|
|
||||||
s1.PackageCheckVersion == s2.PackageCheckVersion) return true;
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static bool operator !=(VersionString s1, VersionString s2)
|
|
||||||
{
|
|
||||||
return !(s1 == s2);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static bool operator <=(VersionString s1, VersionString s2)
|
|
||||||
{
|
|
||||||
return s1 < s2 || s1 == s2;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static bool operator >=(VersionString s1, VersionString s2)
|
|
||||||
{
|
|
||||||
return s1 > s2 || s1 == s2;
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
}
|
}
|
||||||
@@ -40,10 +40,10 @@ public class PluginsManager
|
|||||||
var op = Functions.GetOperatingSystem();
|
var op = Functions.GetOperatingSystem();
|
||||||
|
|
||||||
var len = lines.Length;
|
var len = lines.Length;
|
||||||
string[] titles = { "Name", "Description", "Type", "Version" };
|
string[] titles = { "Name", "Description", "Type", "Version", "Installed" };
|
||||||
data.Add(new[] { "-", "-", "-", "-" });
|
data.Add(new[] { "-", "-", "-", "-", "-" });
|
||||||
data.Add(titles);
|
data.Add(titles);
|
||||||
data.Add(new[] { "-", "-", "-", "-" });
|
data.Add(new[] { "-", "-", "-", "-", "-" });
|
||||||
for (var i = 0; i < len; i++)
|
for (var i = 0; i < len; i++)
|
||||||
{
|
{
|
||||||
if (lines[i].Length <= 2)
|
if (lines[i].Length <= 2)
|
||||||
@@ -57,9 +57,11 @@ public class PluginsManager
|
|||||||
display[0] = content[0];
|
display[0] = content[0];
|
||||||
display[1] = content[1];
|
display[1] = content[1];
|
||||||
display[2] = content[2];
|
display[2] = content[2];
|
||||||
display[3] =
|
display[3] = (await VersionString.GetVersionOfPackageFromWeb(content[0]) ?? new VersionString("0.0.0")).ToShortString();
|
||||||
(await ServerCom.GetVersionOfPackageFromWeb(content[0]) ?? new VersionString("0.0.0"))
|
if (Config.PluginConfig.Contains(content[0]) || Config.PluginConfig.Contains(content[0]))
|
||||||
.ToShortString();
|
display[4] = "✓";
|
||||||
|
else
|
||||||
|
display[4] = "X";
|
||||||
data.Add(display);
|
data.Add(display);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -70,21 +72,23 @@ public class PluginsManager
|
|||||||
display[0] = content[0];
|
display[0] = content[0];
|
||||||
display[1] = content[1];
|
display[1] = content[1];
|
||||||
display[2] = content[2];
|
display[2] = content[2];
|
||||||
display[3] =
|
display[3] = (await VersionString.GetVersionOfPackageFromWeb(content[0]) ?? new VersionString("0.0.0")).ToShortString();
|
||||||
(await ServerCom.GetVersionOfPackageFromWeb(content[0]) ?? new VersionString("0.0.0"))
|
if (Config.PluginConfig.Contains(content[0]) || Config.PluginConfig.Contains(content[0]))
|
||||||
.ToShortString();
|
display[4] = "✓";
|
||||||
|
else
|
||||||
|
display[4] = "X";
|
||||||
data.Add(display);
|
data.Add(display);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
data.Add(new[] { "-", "-", "-", "-" });
|
data.Add(new[] { "-", "-", "-", "-", "-" });
|
||||||
|
|
||||||
Utilities.FormatAndAlignTable(data, TableFormat.CENTER_EACH_COLUMN_BASED);
|
Console_Utilities.FormatAndAlignTable(data, TableFormat.CENTER_EACH_COLUMN_BASED);
|
||||||
}
|
}
|
||||||
catch (Exception exception)
|
catch (Exception exception)
|
||||||
{
|
{
|
||||||
Settings.Variables.outputStream.WriteLine("Failed to execute command: listplugs\nReason: " + exception.Message);
|
Console.WriteLine("Failed to execute command: listplugs\nReason: " + exception.Message);
|
||||||
Functions.WriteErrFile(exception.ToString());
|
Functions.WriteErrFile(exception.ToString());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -116,7 +120,7 @@ public class PluginsManager
|
|||||||
}
|
}
|
||||||
catch (Exception exception)
|
catch (Exception exception)
|
||||||
{
|
{
|
||||||
Settings.Variables.outputStream.WriteLine("Failed to execute command: listplugs\nReason: " + exception.Message);
|
Console.WriteLine("Failed to execute command: listplugs\nReason: " + exception.Message);
|
||||||
Functions.WriteErrFile(exception.ToString());
|
Functions.WriteErrFile(exception.ToString());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,16 +1,14 @@
|
|||||||
using System;
|
using PluginManager.Online.Helpers;
|
||||||
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Net.Http;
|
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
using PluginManager.Online.Helpers;
|
|
||||||
using PluginManager.Others;
|
using PluginManager.Others;
|
||||||
|
|
||||||
namespace PluginManager.Online;
|
namespace PluginManager.Online
|
||||||
|
{
|
||||||
public static class ServerCom
|
public static class ServerCom
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -20,8 +18,8 @@ public static class ServerCom
|
|||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public static async Task<List<string>> ReadTextFromURL(string link)
|
public static async Task<List<string>> ReadTextFromURL(string link)
|
||||||
{
|
{
|
||||||
var response = await OnlineFunctions.DownloadStringAsync(link);
|
string response = await OnlineFunctions.DownloadStringAsync(link);
|
||||||
var lines = response.Split('\n');
|
string[] lines = response.Split('\n');
|
||||||
return lines.ToList();
|
return lines.ToList();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -32,10 +30,9 @@ public static class ServerCom
|
|||||||
/// <param name="location">The location where to store the downloaded data</param>
|
/// <param name="location">The location where to store the downloaded data</param>
|
||||||
/// <param name="progress">The <see cref="IProgress{T}"/> to track the download</param>
|
/// <param name="progress">The <see cref="IProgress{T}"/> to track the download</param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public static async Task DownloadFileAsync(string URL, string location, IProgress<float> progress,
|
public static async Task DownloadFileAsync(string URL, string location, IProgress<float> progress, IProgress<long>? downloadedBytes = null)
|
||||||
IProgress<long>? downloadedBytes = null)
|
|
||||||
{
|
{
|
||||||
using (var client = new HttpClient())
|
using (var client = new System.Net.Http.HttpClient())
|
||||||
{
|
{
|
||||||
client.Timeout = TimeSpan.FromMinutes(5);
|
client.Timeout = TimeSpan.FromMinutes(5);
|
||||||
|
|
||||||
@@ -54,15 +51,15 @@ public static class ServerCom
|
|||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public static async Task DownloadFileAsync(string URL, string location)
|
public static async Task DownloadFileAsync(string URL, string location)
|
||||||
{
|
{
|
||||||
var isDownloading = true;
|
bool isDownloading = true;
|
||||||
float c_progress = 0;
|
float c_progress = 0;
|
||||||
|
|
||||||
var pbar = new Utilities.ProgressBar(ProgressBarType.NORMAL) { Max = 100f, NoColor = true };
|
Console_Utilities.ProgressBar pbar = new Console_Utilities.ProgressBar(ProgressBarType.NORMAL) { Max = 100f, NoColor = true };
|
||||||
|
|
||||||
IProgress<float> progress = new Progress<float>(percent => { c_progress = percent; });
|
IProgress<float> progress = new Progress<float>(percent => { c_progress = percent; });
|
||||||
|
|
||||||
|
|
||||||
var updateProgressBarTask = new Task(() =>
|
Task updateProgressBarTask = new Task(() =>
|
||||||
{
|
{
|
||||||
while (isDownloading)
|
while (isDownloading)
|
||||||
{
|
{
|
||||||
@@ -82,33 +79,11 @@ public static class ServerCom
|
|||||||
pbar.Update(100f);
|
pbar.Update(100f);
|
||||||
isDownloading = false;
|
isDownloading = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static async Task DownloadFileNoProgressAsync(string URL, string location)
|
public static async Task DownloadFileNoProgressAsync(string URL, string location)
|
||||||
{
|
{
|
||||||
IProgress<float> progress = new Progress<float>();
|
IProgress<float> progress = new Progress<float>();
|
||||||
await DownloadFileAsync(URL, location, progress);
|
await DownloadFileAsync(URL, location, progress);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static VersionString? GetVersionOfPackage(string pakName)
|
|
||||||
{
|
|
||||||
if (Config.Plugins.GetVersion(pakName) is null)
|
|
||||||
return null;
|
|
||||||
return new VersionString(Config.Plugins.GetVersion(pakName));
|
|
||||||
}
|
|
||||||
|
|
||||||
public static async Task<VersionString?> GetVersionOfPackageFromWeb(string pakName)
|
|
||||||
{
|
|
||||||
var url = "https://raw.githubusercontent.com/Wizzy69/installer/discord-bot-files/Versions";
|
|
||||||
var data = await ReadTextFromURL(url);
|
|
||||||
foreach (var item in data)
|
|
||||||
{
|
|
||||||
if (item.StartsWith("#"))
|
|
||||||
continue;
|
|
||||||
|
|
||||||
string[] split = item.Split(',');
|
|
||||||
if (split[0] == pakName)
|
|
||||||
return new VersionString(split[1]);
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,18 +1,21 @@
|
|||||||
using System;
|
using PluginManager.Items;
|
||||||
using System.Threading.Tasks;
|
using PluginManager.Online.Helpers;
|
||||||
using PluginManager.Items;
|
|
||||||
using PluginManager.Others;
|
using PluginManager.Others;
|
||||||
|
|
||||||
namespace PluginManager.Online.Updates;
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace PluginManager.Online.Updates
|
||||||
|
{
|
||||||
public class PluginUpdater
|
public class PluginUpdater
|
||||||
{
|
{
|
||||||
public static async Task<bool> CheckForUpdates(string pakName)
|
public static async Task<bool> CheckForUpdates(string pakName)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var webV = await ServerCom.GetVersionOfPackageFromWeb(pakName);
|
var webV = await VersionString.GetVersionOfPackageFromWeb(pakName);
|
||||||
var local = ServerCom.GetVersionOfPackage(pakName);
|
var local = VersionString.GetVersionOfPackage(pakName);
|
||||||
|
|
||||||
if (local is null) return true;
|
if (local is null) return true;
|
||||||
if (webV is null) return false;
|
if (webV is null) return false;
|
||||||
@@ -20,10 +23,7 @@ public class PluginUpdater
|
|||||||
if (webV == local) return false;
|
if (webV == local) return false;
|
||||||
if (webV > local) return true;
|
if (webV > local) return true;
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex) { Console.WriteLine(ex.Message); }
|
||||||
{
|
|
||||||
Console.WriteLine(ex.Message);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
@@ -31,21 +31,21 @@ public class PluginUpdater
|
|||||||
|
|
||||||
public static async Task<Update> DownloadUpdateInfo(string pakName)
|
public static async Task<Update> DownloadUpdateInfo(string pakName)
|
||||||
{
|
{
|
||||||
var url = "https://raw.githubusercontent.com/Wizzy69/installer/discord-bot-files/Versions";
|
string url = "https://raw.githubusercontent.com/Wizzy69/installer/discord-bot-files/Versions";
|
||||||
var info = await ServerCom.ReadTextFromURL(url);
|
List<string> info = await ServerCom.ReadTextFromURL(url);
|
||||||
var version = await ServerCom.GetVersionOfPackageFromWeb(pakName);
|
VersionString? version = await VersionString.GetVersionOfPackageFromWeb(pakName);
|
||||||
|
|
||||||
if (version is null) return Update.Empty;
|
if (version is null) return Update.Empty;
|
||||||
var update = new Update(pakName, string.Join('\n', info), version);
|
Update update = new Update(pakName, string.Join('\n', info), version);
|
||||||
return update;
|
return update;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static async Task Download(string pakName)
|
public static async Task Download(string pakName)
|
||||||
{
|
{
|
||||||
Utilities.WriteColorText("An update was found for &g" + pakName + "&c. Version: &r" +
|
Console_Utilities.WriteColorText("An update was found for &g" + pakName + "&c. Version: &r" + (await VersionString.GetVersionOfPackageFromWeb(pakName))?.ToShortString() + "&c. Current Version: &y" + VersionString.GetVersionOfPackage(pakName)?.ToShortString());
|
||||||
(await ServerCom.GetVersionOfPackageFromWeb(pakName))?.ToShortString() +
|
|
||||||
"&c. Current Version: &y" +
|
|
||||||
ServerCom.GetVersionOfPackage(pakName)?.ToShortString());
|
|
||||||
await ConsoleCommandsHandler.ExecuteCommad("dwplug " + pakName);
|
await ConsoleCommandsHandler.ExecuteCommad("dwplug " + pakName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -1,18 +1,17 @@
|
|||||||
using System;
|
using PluginManager.Online.Helpers;
|
||||||
using PluginManager.Online.Helpers;
|
|
||||||
|
|
||||||
namespace PluginManager.Online.Updates;
|
|
||||||
|
|
||||||
|
namespace PluginManager.Online.Updates
|
||||||
|
{
|
||||||
public class Update
|
public class Update
|
||||||
{
|
{
|
||||||
public static Update Empty = new(null, null, null);
|
public static Update Empty = new Update(null, null, null);
|
||||||
|
|
||||||
private readonly bool isEmpty;
|
|
||||||
|
|
||||||
public VersionString newVersion;
|
|
||||||
public string pakName;
|
public string pakName;
|
||||||
public string UpdateMessage;
|
public string UpdateMessage;
|
||||||
|
|
||||||
|
public VersionString newVersion;
|
||||||
|
|
||||||
|
private bool isEmpty;
|
||||||
|
|
||||||
public Update(string pakName, string updateMessage, VersionString newVersion)
|
public Update(string pakName, string updateMessage, VersionString newVersion)
|
||||||
{
|
{
|
||||||
this.pakName = pakName;
|
this.pakName = pakName;
|
||||||
@@ -21,14 +20,17 @@ public class Update
|
|||||||
|
|
||||||
if (pakName is null && updateMessage is null && newVersion is null)
|
if (pakName is null && updateMessage is null && newVersion is null)
|
||||||
isEmpty = true;
|
isEmpty = true;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public override string ToString()
|
public override string ToString()
|
||||||
{
|
{
|
||||||
if (isEmpty)
|
if (isEmpty)
|
||||||
throw new Exception("The update is EMPTY. Can not print information about an empty update !");
|
throw new System.Exception("The update is EMPTY. Can not print information about an empty update !");
|
||||||
return $"Package Name: {pakName}\n" +
|
return $"Package Name: {this.pakName}\n" +
|
||||||
$"Update Message: {UpdateMessage}\n" +
|
$"Update Message: {UpdateMessage}\n" +
|
||||||
$"Version: {newVersion}";
|
$"Version: {newVersion.ToString()}";
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,208 +1,29 @@
|
|||||||
using System;
|
using Discord;
|
||||||
|
|
||||||
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
namespace PluginManager.Others;
|
namespace PluginManager.Others
|
||||||
|
|
||||||
public static class Utilities
|
|
||||||
{
|
{
|
||||||
private static Dictionary<char, ConsoleColor> Colors = new()
|
public static class Console_Utilities
|
||||||
|
{
|
||||||
|
public static void Initialize()
|
||||||
|
{
|
||||||
|
if (!Config.ContainsKey("TableVariables"))
|
||||||
|
Config.AddValueToVariables("TableVariables", new Dictionary<string, string> { { "DefaultSpace", "3" } }, false);
|
||||||
|
if (!Config.ContainsKey("ColorDataBase"))
|
||||||
|
Config.AddValueToVariables("ColorDataBase", new Dictionary<char, ConsoleColor>()
|
||||||
{
|
{
|
||||||
{ 'g', ConsoleColor.Green },
|
{ 'g', ConsoleColor.Green },
|
||||||
{ 'b', ConsoleColor.Blue },
|
{ 'b', ConsoleColor.Blue },
|
||||||
{ 'r', ConsoleColor.Red },
|
{ 'r', ConsoleColor.Red },
|
||||||
{ 'm', ConsoleColor.Magenta },
|
{ 'm', ConsoleColor.Magenta },
|
||||||
{ 'y', ConsoleColor.Yellow }
|
{ 'y', ConsoleColor.Yellow },
|
||||||
};
|
}, false
|
||||||
|
);
|
||||||
|
|
||||||
private static char ColorPrefix = '&';
|
if (!Config.ContainsKey("ColorPrefix"))
|
||||||
|
Config.AddValueToVariables("ColorPrefix", '&', false);
|
||||||
|
|
||||||
private static bool CanAproximateTo(this float f, float y)
|
|
||||||
{
|
|
||||||
return MathF.Abs(f - y) < 0.000001;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// A way to create a table based on input data
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="data">The List of arrays of strings that represent the rows.</param>
|
|
||||||
public static void FormatAndAlignTable(List<string[]> data, TableFormat format)
|
|
||||||
{
|
|
||||||
if (format == TableFormat.CENTER_EACH_COLUMN_BASED)
|
|
||||||
{
|
|
||||||
var tableLine = '-';
|
|
||||||
var tableCross = '+';
|
|
||||||
var tableWall = '|';
|
|
||||||
|
|
||||||
var len = new int[data[0].Length];
|
|
||||||
foreach (var line in data)
|
|
||||||
for (var i = 0; i < line.Length; i++)
|
|
||||||
if (line[i].Length > len[i])
|
|
||||||
len[i] = line[i].Length;
|
|
||||||
|
|
||||||
|
|
||||||
foreach (var row in data)
|
|
||||||
{
|
|
||||||
if (row[0][0] == tableLine)
|
|
||||||
Settings.Variables.outputStream.Write(tableCross);
|
|
||||||
else
|
|
||||||
Settings.Variables.outputStream.Write(tableWall);
|
|
||||||
for (var l = 0; l < row.Length; l++)
|
|
||||||
{
|
|
||||||
if (row[l][0] == tableLine)
|
|
||||||
{
|
|
||||||
for (var i = 0; i < len[l] + 4; ++i)
|
|
||||||
Settings.Variables.outputStream.Write(tableLine);
|
|
||||||
}
|
|
||||||
else if (row[l].Length == len[l])
|
|
||||||
{
|
|
||||||
Settings.Variables.outputStream.Write(" ");
|
|
||||||
Settings.Variables.outputStream.Write(row[l]);
|
|
||||||
Settings.Variables.outputStream.Write(" ");
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
var lenHalf = row[l].Length / 2;
|
|
||||||
for (var i = 0; i < (len[l] + 4) / 2 - lenHalf; ++i)
|
|
||||||
Settings.Variables.outputStream.Write(" ");
|
|
||||||
Settings.Variables.outputStream.Write(row[l]);
|
|
||||||
for (var i = (len[l] + 4) / 2 + lenHalf + 1; i < len[l] + 4; ++i)
|
|
||||||
Settings.Variables.outputStream.Write(" ");
|
|
||||||
if (row[l].Length % 2 == 0)
|
|
||||||
Settings.Variables.outputStream.Write(" ");
|
|
||||||
}
|
|
||||||
|
|
||||||
Settings.Variables.outputStream.Write(row[l][0] == tableLine ? tableCross : tableWall);
|
|
||||||
}
|
|
||||||
|
|
||||||
Settings.Variables.outputStream.WriteLine(); //end line
|
|
||||||
}
|
|
||||||
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (format == TableFormat.CENTER_OVERALL_LENGTH)
|
|
||||||
{
|
|
||||||
var maxLen = 0;
|
|
||||||
foreach (var row in data)
|
|
||||||
foreach (var s in row)
|
|
||||||
if (s.Length > maxLen)
|
|
||||||
maxLen = s.Length;
|
|
||||||
|
|
||||||
var div = (maxLen + 4) / 2;
|
|
||||||
|
|
||||||
foreach (var row in data)
|
|
||||||
{
|
|
||||||
Settings.Variables.outputStream.Write("\t");
|
|
||||||
if (row[0] == "-")
|
|
||||||
Settings.Variables.outputStream.Write("+");
|
|
||||||
else
|
|
||||||
Settings.Variables.outputStream.Write("|");
|
|
||||||
|
|
||||||
foreach (var s in row)
|
|
||||||
{
|
|
||||||
if (s == "-")
|
|
||||||
{
|
|
||||||
for (var i = 0; i < maxLen + 4; ++i)
|
|
||||||
Settings.Variables.outputStream.Write("-");
|
|
||||||
}
|
|
||||||
else if (s.Length == maxLen)
|
|
||||||
{
|
|
||||||
Settings.Variables.outputStream.Write(" ");
|
|
||||||
Settings.Variables.outputStream.Write(s);
|
|
||||||
Settings.Variables.outputStream.Write(" ");
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
var lenHalf = s.Length / 2;
|
|
||||||
for (var i = 0; i < div - lenHalf; ++i)
|
|
||||||
Settings.Variables.outputStream.Write(" ");
|
|
||||||
Settings.Variables.outputStream.Write(s);
|
|
||||||
for (var i = div + lenHalf + 1; i < maxLen + 4; ++i)
|
|
||||||
Settings.Variables.outputStream.Write(" ");
|
|
||||||
if (s.Length % 2 == 0)
|
|
||||||
Settings.Variables.outputStream.Write(" ");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (s == "-")
|
|
||||||
Settings.Variables.outputStream.Write("+");
|
|
||||||
else
|
|
||||||
Settings.Variables.outputStream.Write("|");
|
|
||||||
}
|
|
||||||
|
|
||||||
Settings.Variables.outputStream.WriteLine(); //end line
|
|
||||||
}
|
|
||||||
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (format == TableFormat.DEFAULT)
|
|
||||||
{
|
|
||||||
var widths = new int[data[0].Length];
|
|
||||||
var space_between_columns = 3;
|
|
||||||
for (var i = 0; i < data.Count; i++)
|
|
||||||
for (var j = 0; j < data[i].Length; j++)
|
|
||||||
if (data[i][j].Length > widths[j])
|
|
||||||
widths[j] = data[i][j].Length;
|
|
||||||
|
|
||||||
for (var i = 0; i < data.Count; i++)
|
|
||||||
{
|
|
||||||
for (var j = 0; j < data[i].Length; j++)
|
|
||||||
{
|
|
||||||
if (data[i][j] == "-")
|
|
||||||
data[i][j] = " ";
|
|
||||||
Settings.Variables.outputStream.Write(data[i][j]);
|
|
||||||
for (var k = 0; k < widths[j] - data[i][j].Length + 1 + space_between_columns; k++)
|
|
||||||
Settings.Variables.outputStream.Write(" ");
|
|
||||||
}
|
|
||||||
|
|
||||||
Settings.Variables.outputStream.WriteLine();
|
|
||||||
}
|
|
||||||
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
throw new Exception("Unknown type of table");
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void WriteColorText(string text, bool appendNewLineAtEnd = true)
|
|
||||||
{
|
|
||||||
if (Console.Out != Settings.Variables.outputStream)
|
|
||||||
{
|
|
||||||
Settings.Variables.outputStream.Write(text);
|
|
||||||
if (appendNewLineAtEnd)
|
|
||||||
Settings.Variables.outputStream.WriteLine();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
var initialForeGround = Console.ForegroundColor;
|
|
||||||
var input = text.ToCharArray();
|
|
||||||
for (var i = 0; i < input.Length; i++)
|
|
||||||
if (input[i] == ColorPrefix)
|
|
||||||
{
|
|
||||||
if (i + 1 < input.Length)
|
|
||||||
{
|
|
||||||
if (Colors.ContainsKey(input[i + 1]))
|
|
||||||
{
|
|
||||||
Console.ForegroundColor = Colors[input[i + 1]];
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
else if (input[i + 1] == 'c')
|
|
||||||
{
|
|
||||||
Console.ForegroundColor = initialForeGround;
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
Settings.Variables.outputStream.Write(input[i]);
|
|
||||||
}
|
|
||||||
|
|
||||||
Console.ForegroundColor = initialForeGround;
|
|
||||||
if (appendNewLineAtEnd)
|
|
||||||
Settings.Variables.outputStream.WriteLine();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -211,16 +32,8 @@ public static class Utilities
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public class ProgressBar
|
public class ProgressBar
|
||||||
{
|
{
|
||||||
private readonly int BarLength = 32;
|
|
||||||
|
|
||||||
private bool isRunning;
|
|
||||||
private int position = 1;
|
|
||||||
private bool positive = true;
|
|
||||||
|
|
||||||
public ProgressBar(ProgressBarType type)
|
public ProgressBar(ProgressBarType type)
|
||||||
{
|
{
|
||||||
if (Settings.Variables.outputStream != Console.Out)
|
|
||||||
throw new Exception("This class (or function) can be used with console only. For UI please use another approach.");
|
|
||||||
this.type = type;
|
this.type = type;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -231,6 +44,12 @@ public static class Utilities
|
|||||||
|
|
||||||
public int TotalLength { get; private set; }
|
public int TotalLength { get; private set; }
|
||||||
|
|
||||||
|
private int BarLength = 32;
|
||||||
|
private int position = 1;
|
||||||
|
private bool positive = true;
|
||||||
|
|
||||||
|
private bool isRunning;
|
||||||
|
|
||||||
|
|
||||||
public async void Start()
|
public async void Start()
|
||||||
{
|
{
|
||||||
@@ -243,7 +62,7 @@ public static class Utilities
|
|||||||
while (isRunning)
|
while (isRunning)
|
||||||
{
|
{
|
||||||
UpdateNoEnd();
|
UpdateNoEnd();
|
||||||
await Task.Delay(100);
|
await System.Threading.Tasks.Task.Delay(100);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -260,7 +79,7 @@ public static class Utilities
|
|||||||
while (isRunning)
|
while (isRunning)
|
||||||
{
|
{
|
||||||
UpdateNoEnd(message);
|
UpdateNoEnd(message);
|
||||||
await Task.Delay(100);
|
await System.Threading.Tasks.Task.Delay(100);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -280,10 +99,10 @@ public static class Utilities
|
|||||||
if (message is not null)
|
if (message is not null)
|
||||||
{
|
{
|
||||||
Console.CursorLeft = 0;
|
Console.CursorLeft = 0;
|
||||||
for (var i = 0; i < BarLength + message.Length + 1; i++)
|
for (int i = 0; i < BarLength + message.Length + 1; i++)
|
||||||
Settings.Variables.outputStream.Write(" ");
|
Console.Write(" ");
|
||||||
Console.CursorLeft = 0;
|
Console.CursorLeft = 0;
|
||||||
Settings.Variables.outputStream.WriteLine(message);
|
Console.WriteLine(message);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -298,14 +117,16 @@ public static class Utilities
|
|||||||
private void UpdateNoEnd(string message)
|
private void UpdateNoEnd(string message)
|
||||||
{
|
{
|
||||||
Console.CursorLeft = 0;
|
Console.CursorLeft = 0;
|
||||||
Settings.Variables.outputStream.Write("[");
|
Console.Write("[");
|
||||||
for (var i = 1; i <= position; i++)
|
for (int i = 1; i <= position; i++)
|
||||||
Settings.Variables.outputStream.Write(" ");
|
Console.Write(" ");
|
||||||
Settings.Variables.outputStream.Write("<==()==>");
|
Console.Write("<==()==>");
|
||||||
position += positive ? 1 : -1;
|
position += positive ? 1 : -1;
|
||||||
for (var i = position; i <= BarLength - 1 - (positive ? 0 : 2); i++)
|
for (int i = position; i <= BarLength - 1 - (positive ? 0 : 2); i++)
|
||||||
Settings.Variables.outputStream.Write(" ");
|
Console.Write(" ");
|
||||||
Settings.Variables.outputStream.Write("] " + message);
|
Console.Write("] " + message);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if (position == BarLength - 1 || position == 1)
|
if (position == BarLength - 1 || position == 1)
|
||||||
@@ -315,14 +136,16 @@ public static class Utilities
|
|||||||
private void UpdateNoEnd()
|
private void UpdateNoEnd()
|
||||||
{
|
{
|
||||||
Console.CursorLeft = 0;
|
Console.CursorLeft = 0;
|
||||||
Settings.Variables.outputStream.Write("[");
|
Console.Write("[");
|
||||||
for (var i = 1; i <= position; i++)
|
for (int i = 1; i <= position; i++)
|
||||||
Settings.Variables.outputStream.Write(" ");
|
Console.Write(" ");
|
||||||
Settings.Variables.outputStream.Write("<==()==>");
|
Console.Write("<==()==>");
|
||||||
position += positive ? 1 : -1;
|
position += positive ? 1 : -1;
|
||||||
for (var i = position; i <= BarLength - 1 - (positive ? 0 : 2); i++)
|
for (int i = position; i <= BarLength - 1 - (positive ? 0 : 2); i++)
|
||||||
Settings.Variables.outputStream.Write(" ");
|
Console.Write(" ");
|
||||||
Settings.Variables.outputStream.Write("]");
|
Console.Write("]");
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if (position == BarLength - 1 || position == 1)
|
if (position == BarLength - 1 || position == 1)
|
||||||
@@ -332,34 +155,217 @@ public static class Utilities
|
|||||||
private void UpdateNormal(float progress)
|
private void UpdateNormal(float progress)
|
||||||
{
|
{
|
||||||
Console.CursorLeft = 0;
|
Console.CursorLeft = 0;
|
||||||
Settings.Variables.outputStream.Write("[");
|
Console.Write("[");
|
||||||
Console.CursorLeft = BarLength;
|
Console.CursorLeft = BarLength;
|
||||||
Settings.Variables.outputStream.Write("]");
|
Console.Write("]");
|
||||||
Console.CursorLeft = 1;
|
Console.CursorLeft = 1;
|
||||||
var onechunk = 30.0f / Max;
|
float onechunk = 30.0f / Max;
|
||||||
|
|
||||||
var position = 1;
|
int position = 1;
|
||||||
|
|
||||||
for (var i = 0; i < onechunk * progress; i++)
|
for (int i = 0; i < onechunk * progress; i++)
|
||||||
{
|
{
|
||||||
Console.BackgroundColor = NoColor ? ConsoleColor.Black : Color;
|
Console.BackgroundColor = NoColor ? ConsoleColor.Black : this.Color;
|
||||||
Console.CursorLeft = position++;
|
Console.CursorLeft = position++;
|
||||||
Settings.Variables.outputStream.Write("#");
|
Console.Write("#");
|
||||||
}
|
}
|
||||||
|
|
||||||
for (var i = position; i < BarLength; i++)
|
for (int i = position; i < BarLength; i++)
|
||||||
{
|
{
|
||||||
Console.BackgroundColor = NoColor ? ConsoleColor.Black : ConsoleColor.DarkGray;
|
Console.BackgroundColor = NoColor ? ConsoleColor.Black : ConsoleColor.DarkGray;
|
||||||
Console.CursorLeft = position++;
|
Console.CursorLeft = position++;
|
||||||
Settings.Variables.outputStream.Write(" ");
|
Console.Write(" ");
|
||||||
}
|
}
|
||||||
|
|
||||||
Console.CursorLeft = BarLength + 4;
|
Console.CursorLeft = BarLength + 4;
|
||||||
Console.BackgroundColor = ConsoleColor.Black;
|
Console.BackgroundColor = ConsoleColor.Black;
|
||||||
if (progress.CanAproximateTo(Max))
|
if (progress.CanAproximateTo(Max))
|
||||||
Settings.Variables.outputStream.Write(progress + " % ✓");
|
Console.Write(progress + " % ✓");
|
||||||
else
|
else
|
||||||
Settings.Variables.outputStream.Write(MathF.Round(progress, 2) + " % ");
|
Console.Write(MathF.Round(progress, 2) + " % ");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private static bool CanAproximateTo(this float f, float y) => (MathF.Abs(f - y) < 0.000001);
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// A way to create a table based on input data
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="data">The List of arrays of strings that represent the rows.</param>
|
||||||
|
public static void FormatAndAlignTable(List<string[]> data, TableFormat format)
|
||||||
|
{
|
||||||
|
if (format == TableFormat.CENTER_EACH_COLUMN_BASED)
|
||||||
|
{
|
||||||
|
char tableLine = '-';
|
||||||
|
char tableCross = '+';
|
||||||
|
char tableWall = '|';
|
||||||
|
|
||||||
|
int[] len = new int[data[0].Length];
|
||||||
|
foreach (var line in data)
|
||||||
|
for (int i = 0; i < line.Length; i++)
|
||||||
|
if (line[i].Length > len[i])
|
||||||
|
len[i] = line[i].Length;
|
||||||
|
|
||||||
|
|
||||||
|
foreach (string[] row in data)
|
||||||
|
{
|
||||||
|
if (row[0][0] == tableLine)
|
||||||
|
Console.Write(tableCross);
|
||||||
|
else
|
||||||
|
Console.Write(tableWall);
|
||||||
|
for (int l = 0; l < row.Length; l++)
|
||||||
|
{
|
||||||
|
if (row[l][0] == tableLine)
|
||||||
|
{
|
||||||
|
for (int i = 0; i < len[l] + 4; ++i)
|
||||||
|
Console.Write(tableLine);
|
||||||
|
}
|
||||||
|
else if (row[l].Length == len[l])
|
||||||
|
{
|
||||||
|
Console.Write(" ");
|
||||||
|
Console.Write(row[l]);
|
||||||
|
Console.Write(" ");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
int lenHalf = row[l].Length / 2;
|
||||||
|
for (int i = 0; i < ((len[l] + 4) / 2 - lenHalf); ++i)
|
||||||
|
Console.Write(" ");
|
||||||
|
Console.Write(row[l]);
|
||||||
|
for (int i = (len[l] + 4) / 2 + lenHalf + 1; i < len[l] + 4; ++i)
|
||||||
|
Console.Write(" ");
|
||||||
|
if (row[l].Length % 2 == 0)
|
||||||
|
Console.Write(" ");
|
||||||
|
}
|
||||||
|
|
||||||
|
Console.Write(row[l][0] == tableLine ? tableCross : tableWall);
|
||||||
|
}
|
||||||
|
|
||||||
|
Console.WriteLine(); //end line
|
||||||
|
}
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (format == TableFormat.CENTER_OVERALL_LENGTH)
|
||||||
|
{
|
||||||
|
int maxLen = 0;
|
||||||
|
foreach (string[] row in data)
|
||||||
|
foreach (string s in row)
|
||||||
|
if (s.Length > maxLen)
|
||||||
|
maxLen = s.Length;
|
||||||
|
|
||||||
|
int div = (maxLen + 4) / 2;
|
||||||
|
|
||||||
|
foreach (string[] row in data)
|
||||||
|
{
|
||||||
|
Console.Write("\t");
|
||||||
|
if (row[0] == "-")
|
||||||
|
Console.Write("+");
|
||||||
|
else
|
||||||
|
Console.Write("|");
|
||||||
|
|
||||||
|
foreach (string s in row)
|
||||||
|
{
|
||||||
|
if (s == "-")
|
||||||
|
{
|
||||||
|
for (int i = 0; i < maxLen + 4; ++i)
|
||||||
|
Console.Write("-");
|
||||||
|
}
|
||||||
|
else if (s.Length == maxLen)
|
||||||
|
{
|
||||||
|
Console.Write(" ");
|
||||||
|
Console.Write(s);
|
||||||
|
Console.Write(" ");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
int lenHalf = s.Length / 2;
|
||||||
|
for (int i = 0; i < div - lenHalf; ++i)
|
||||||
|
Console.Write(" ");
|
||||||
|
Console.Write(s);
|
||||||
|
for (int i = div + lenHalf + 1; i < maxLen + 4; ++i)
|
||||||
|
Console.Write(" ");
|
||||||
|
if (s.Length % 2 == 0)
|
||||||
|
Console.Write(" ");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (s == "-")
|
||||||
|
Console.Write("+");
|
||||||
|
else
|
||||||
|
Console.Write("|");
|
||||||
|
}
|
||||||
|
|
||||||
|
Console.WriteLine(); //end line
|
||||||
|
}
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (format == TableFormat.DEFAULT)
|
||||||
|
{
|
||||||
|
int[] widths = new int[data[0].Length];
|
||||||
|
int space_between_columns = int.Parse(Config.GetValue<Dictionary<string, string>>("TableVariables")?["DefaultSpace"]!);
|
||||||
|
for (int i = 0; i < data.Count; i++)
|
||||||
|
{
|
||||||
|
for (int j = 0; j < data[i].Length; j++)
|
||||||
|
{
|
||||||
|
if (data[i][j].Length > widths[j])
|
||||||
|
widths[j] = data[i][j].Length;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int i = 0; i < data.Count; i++)
|
||||||
|
{
|
||||||
|
for (int j = 0; j < data[i].Length; j++)
|
||||||
|
{
|
||||||
|
if (data[i][j] == "-")
|
||||||
|
data[i][j] = " ";
|
||||||
|
Console.Write(data[i][j]);
|
||||||
|
for (int k = 0; k < widths[j] - data[i][j].Length + 1 + space_between_columns; k++)
|
||||||
|
Console.Write(" ");
|
||||||
|
}
|
||||||
|
|
||||||
|
Console.WriteLine();
|
||||||
|
}
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
throw new Exception("Unknown type of table");
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void WriteColorText(string text, bool appendNewLineAtEnd = true)
|
||||||
|
{
|
||||||
|
ConsoleColor initialForeGround = Console.ForegroundColor;
|
||||||
|
char[] input = text.ToCharArray();
|
||||||
|
for (int i = 0; i < input.Length; i++)
|
||||||
|
{
|
||||||
|
if (input[i] == Config.GetValue<char>("ColorPrefix"))
|
||||||
|
{
|
||||||
|
if (i + 1 < input.Length)
|
||||||
|
{
|
||||||
|
if (Config.GetValue<Dictionary<char, ConsoleColor>>("ColorDataBase")!.ContainsKey(input[i + 1]))
|
||||||
|
{
|
||||||
|
Console.ForegroundColor = Config.GetValue<Dictionary<char, ConsoleColor>>("ColorDataBase")![input[i + 1]];
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
else if (input[i + 1] == 'c')
|
||||||
|
{
|
||||||
|
Console.ForegroundColor = initialForeGround;
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
Console.Write(input[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
Console.ForegroundColor = initialForeGround;
|
||||||
|
if (appendNewLineAtEnd)
|
||||||
|
Console.WriteLine();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,14 +1,13 @@
|
|||||||
namespace PluginManager.Others;
|
using PluginManager.Interfaces;
|
||||||
|
|
||||||
|
namespace PluginManager.Others;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// A list of operating systems
|
/// A list of operating systems
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public enum OperatingSystem
|
public enum OperatingSystem
|
||||||
{
|
{
|
||||||
WINDOWS,
|
WINDOWS, LINUX, MAC_OS, UNKNOWN
|
||||||
LINUX,
|
|
||||||
MAC_OS,
|
|
||||||
UNKNOWN
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -16,47 +15,22 @@ public enum OperatingSystem
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public enum Error
|
public enum Error
|
||||||
{
|
{
|
||||||
UNKNOWN_ERROR,
|
UNKNOWN_ERROR, GUILD_NOT_FOUND, STREAM_NOT_FOUND, INVALID_USER, INVALID_CHANNEL, INVALID_PERMISSIONS
|
||||||
GUILD_NOT_FOUND,
|
|
||||||
STREAM_NOT_FOUND,
|
|
||||||
INVALID_USER,
|
|
||||||
INVALID_CHANNEL,
|
|
||||||
INVALID_PERMISSIONS
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The output log type
|
/// The output log type
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public enum OutputLogLevel
|
public enum OutputLogLevel { NONE, INFO, WARNING, ERROR, CRITICAL }
|
||||||
{
|
|
||||||
NONE,
|
|
||||||
INFO,
|
|
||||||
WARNING,
|
|
||||||
ERROR,
|
|
||||||
CRITICAL
|
|
||||||
}
|
|
||||||
|
|
||||||
public enum UnzipProgressType
|
/// <summary>
|
||||||
{
|
/// Plugin Type
|
||||||
PercentageFromNumberOfFiles,
|
/// </summary>
|
||||||
PercentageFromTotalSize
|
public enum PluginType { Command, Event, Unknown }
|
||||||
}
|
|
||||||
|
|
||||||
public enum TableFormat
|
public enum UnzipProgressType { PercentageFromNumberOfFiles, PercentageFromTotalSize }
|
||||||
{
|
|
||||||
CENTER_EACH_COLUMN_BASED,
|
|
||||||
CENTER_OVERALL_LENGTH,
|
|
||||||
DEFAULT
|
|
||||||
}
|
|
||||||
|
|
||||||
public enum SaveType
|
public enum TableFormat { CENTER_EACH_COLUMN_BASED, CENTER_OVERALL_LENGTH, DEFAULT }
|
||||||
{
|
|
||||||
NORMAL,
|
|
||||||
BACKUP
|
|
||||||
}
|
|
||||||
|
|
||||||
public enum ProgressBarType
|
public enum SaveType { NORMAL, BACKUP }
|
||||||
{
|
public enum ProgressBarType { NORMAL, NO_END }
|
||||||
NORMAL,
|
|
||||||
NO_END
|
|
||||||
}
|
|
||||||
@@ -1,21 +1,18 @@
|
|||||||
using System;
|
using System.IO.Compression;
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.IO.Compression;
|
using System;
|
||||||
using System.Linq;
|
|
||||||
using System.Runtime.InteropServices;
|
|
||||||
using System.Security.Cryptography;
|
|
||||||
using System.Text;
|
|
||||||
using System.Text.Json;
|
|
||||||
using System.Threading;
|
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Security.Cryptography;
|
||||||
using Discord.WebSocket;
|
using Discord.WebSocket;
|
||||||
|
|
||||||
using PluginManager.Items;
|
using PluginManager.Items;
|
||||||
|
using System.Threading;
|
||||||
|
using System.Text.Json;
|
||||||
|
using System.Text;
|
||||||
|
|
||||||
namespace PluginManager.Others;
|
namespace PluginManager.Others
|
||||||
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// A special class with functions
|
/// A special class with functions
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -64,11 +61,12 @@ public static class Functions
|
|||||||
string textValue = null;
|
string textValue = null;
|
||||||
using (var fs = new FileStream(archFile, FileMode.Open))
|
using (var fs = new FileStream(archFile, FileMode.Open))
|
||||||
using (var zip = new ZipArchive(fs, ZipArchiveMode.Read))
|
using (var zip = new ZipArchive(fs, ZipArchiveMode.Read))
|
||||||
{
|
|
||||||
foreach (var entry in zip.Entries)
|
foreach (var entry in zip.Entries)
|
||||||
|
{
|
||||||
if (entry.Name == FileName || entry.FullName == FileName)
|
if (entry.Name == FileName || entry.FullName == FileName)
|
||||||
using (var s = entry.Open())
|
{
|
||||||
using (var reader = new StreamReader(s))
|
using (Stream s = entry.Open())
|
||||||
|
using (StreamReader reader = new StreamReader(s))
|
||||||
{
|
{
|
||||||
textValue = await reader.ReadToEndAsync();
|
textValue = await reader.ReadToEndAsync();
|
||||||
reader.Close();
|
reader.Close();
|
||||||
@@ -76,7 +74,7 @@ public static class Functions
|
|||||||
fs.Close();
|
fs.Close();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
return textValue;
|
return textValue;
|
||||||
}
|
}
|
||||||
catch
|
catch
|
||||||
@@ -84,6 +82,7 @@ public static class Functions
|
|||||||
await Task.Delay(100);
|
await Task.Delay(100);
|
||||||
return await ReadFromPakAsync(FileName, archFile);
|
return await ReadFromPakAsync(FileName, archFile);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -93,7 +92,7 @@ public static class Functions
|
|||||||
/// <param name="LogMessage">The message to be wrote</param>
|
/// <param name="LogMessage">The message to be wrote</param>
|
||||||
public static void WriteLogFile(string LogMessage)
|
public static void WriteLogFile(string LogMessage)
|
||||||
{
|
{
|
||||||
var logsPath = logFolder + $"{DateTime.Today.ToShortDateString().Replace("/", "-").Replace("\\", "-")} Log.txt";
|
string logsPath = logFolder + $"{DateTime.Today.ToShortDateString().Replace("/", "-").Replace("\\", "-")} Log.txt";
|
||||||
Directory.CreateDirectory(logFolder);
|
Directory.CreateDirectory(logFolder);
|
||||||
File.AppendAllText(logsPath, LogMessage + " \n");
|
File.AppendAllText(logsPath, LogMessage + " \n");
|
||||||
}
|
}
|
||||||
@@ -104,8 +103,7 @@ public static class Functions
|
|||||||
/// <param name="ErrMessage">The message to be wrote</param>
|
/// <param name="ErrMessage">The message to be wrote</param>
|
||||||
public static void WriteErrFile(string ErrMessage)
|
public static void WriteErrFile(string ErrMessage)
|
||||||
{
|
{
|
||||||
var errPath = errFolder +
|
string errPath = errFolder + $"{DateTime.Today.ToShortDateString().Replace("/", "-").Replace("\\", "-")} Error.txt";
|
||||||
$"{DateTime.Today.ToShortDateString().Replace("/", "-").Replace("\\", "-")} Error.txt";
|
|
||||||
Directory.CreateDirectory(errFolder);
|
Directory.CreateDirectory(errFolder);
|
||||||
File.AppendAllText(errPath, ErrMessage + " \n");
|
File.AppendAllText(errPath, ErrMessage + " \n");
|
||||||
}
|
}
|
||||||
@@ -115,21 +113,42 @@ public static class Functions
|
|||||||
WriteErrFile(ex.ToString());
|
WriteErrFile(ex.ToString());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Merge one array of strings into one string
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="s">The array of strings</param>
|
||||||
|
/// <param name="indexToStart">The index from where the merge should start (included)</param>
|
||||||
|
/// <returns>A string built based on the array</returns>
|
||||||
|
public static string MergeStrings(this string[] s, int indexToStart)
|
||||||
|
{
|
||||||
|
string r = "";
|
||||||
|
int len = s.Length;
|
||||||
|
if (len <= indexToStart) return "";
|
||||||
|
for (int i = indexToStart; i < len - 1; ++i)
|
||||||
|
{
|
||||||
|
r += s[i] + " ";
|
||||||
|
}
|
||||||
|
|
||||||
|
r += s[len - 1];
|
||||||
|
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Get the Operating system you are runnin on
|
/// Get the Operating system you are runnin on
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <returns>An Operating system</returns>
|
/// <returns>An Operating system</returns>
|
||||||
public static OperatingSystem GetOperatingSystem()
|
public static OperatingSystem GetOperatingSystem()
|
||||||
{
|
{
|
||||||
if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) return OperatingSystem.WINDOWS;
|
if (System.Runtime.InteropServices.RuntimeInformation.IsOSPlatform(System.Runtime.InteropServices.OSPlatform.Windows)) return OperatingSystem.WINDOWS;
|
||||||
if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux)) return OperatingSystem.LINUX;
|
if (System.Runtime.InteropServices.RuntimeInformation.IsOSPlatform(System.Runtime.InteropServices.OSPlatform.Linux)) return OperatingSystem.LINUX;
|
||||||
if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX)) return OperatingSystem.MAC_OS;
|
if (System.Runtime.InteropServices.RuntimeInformation.IsOSPlatform(System.Runtime.InteropServices.OSPlatform.OSX)) return OperatingSystem.MAC_OS;
|
||||||
return OperatingSystem.UNKNOWN;
|
return OperatingSystem.UNKNOWN;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static List<string> GetArguments(SocketMessage message)
|
public static List<string> GetArguments(SocketMessage message)
|
||||||
{
|
{
|
||||||
var command = new Command(message);
|
Command command = new Command(message);
|
||||||
return command.Arguments;
|
return command.Arguments;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -145,18 +164,15 @@ public static class Functions
|
|||||||
/// <exception cref="ArgumentOutOfRangeException">Triggered if <paramref name="bufferSize"/> is less then or equal to 0</exception>
|
/// <exception cref="ArgumentOutOfRangeException">Triggered if <paramref name="bufferSize"/> is less then or equal to 0</exception>
|
||||||
/// <exception cref="InvalidOperationException">Triggered if <paramref name="stream"/> is not readable</exception>
|
/// <exception cref="InvalidOperationException">Triggered if <paramref name="stream"/> is not readable</exception>
|
||||||
/// <exception cref="ArgumentException">Triggered in <paramref name="destination"/> is not writable</exception>
|
/// <exception cref="ArgumentException">Triggered in <paramref name="destination"/> is not writable</exception>
|
||||||
public static async Task CopyToOtherStreamAsync(this Stream stream, Stream destination, int bufferSize,
|
public static async Task CopyToOtherStreamAsync(this Stream stream, Stream destination, int bufferSize, IProgress<long>? progress = null, CancellationToken cancellationToken = default)
|
||||||
IProgress<long>? progress = null,
|
|
||||||
CancellationToken cancellationToken = default)
|
|
||||||
{
|
{
|
||||||
if (stream == null) throw new ArgumentNullException(nameof(stream));
|
if (stream == null) throw new ArgumentNullException(nameof(stream));
|
||||||
if (destination == null) throw new ArgumentNullException(nameof(destination));
|
if (destination == null) throw new ArgumentNullException(nameof(destination));
|
||||||
if (bufferSize <= 0) throw new ArgumentOutOfRangeException(nameof(bufferSize));
|
if (bufferSize <= 0) throw new ArgumentOutOfRangeException(nameof(bufferSize));
|
||||||
if (!stream.CanRead) throw new InvalidOperationException("The stream is not readable.");
|
if (!stream.CanRead) throw new InvalidOperationException("The stream is not readable.");
|
||||||
if (!destination.CanWrite)
|
if (!destination.CanWrite) throw new ArgumentException("Destination stream is not writable", nameof(destination));
|
||||||
throw new ArgumentException("Destination stream is not writable", nameof(destination));
|
|
||||||
|
|
||||||
var buffer = new byte[bufferSize];
|
byte[] buffer = new byte[bufferSize];
|
||||||
long totalBytesRead = 0;
|
long totalBytesRead = 0;
|
||||||
int bytesRead;
|
int bytesRead;
|
||||||
while ((bytesRead = await stream.ReadAsync(buffer, 0, buffer.Length, cancellationToken).ConfigureAwait(false)) != 0)
|
while ((bytesRead = await stream.ReadAsync(buffer, 0, buffer.Length, cancellationToken).ConfigureAwait(false)) != 0)
|
||||||
@@ -165,6 +181,7 @@ public static class Functions
|
|||||||
totalBytesRead += bytesRead;
|
totalBytesRead += bytesRead;
|
||||||
progress?.Report(totalBytesRead);
|
progress?.Report(totalBytesRead);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -175,17 +192,16 @@ public static class Functions
|
|||||||
/// <param name="progress">The progress that is updated as a file is processed</param>
|
/// <param name="progress">The progress that is updated as a file is processed</param>
|
||||||
/// <param name="type">The type of progress</param>
|
/// <param name="type">The type of progress</param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public static async Task ExtractArchive(string zip, string folder, IProgress<float> progress,
|
public static async Task ExtractArchive(string zip, string folder, IProgress<float> progress, UnzipProgressType type)
|
||||||
UnzipProgressType type)
|
|
||||||
{
|
{
|
||||||
Directory.CreateDirectory(folder);
|
Directory.CreateDirectory(folder);
|
||||||
using (var archive = ZipFile.OpenRead(zip))
|
using (ZipArchive archive = ZipFile.OpenRead(zip))
|
||||||
{
|
{
|
||||||
if (type == UnzipProgressType.PercentageFromNumberOfFiles)
|
if (type == UnzipProgressType.PercentageFromNumberOfFiles)
|
||||||
{
|
{
|
||||||
var totalZIPFiles = archive.Entries.Count();
|
int totalZIPFiles = archive.Entries.Count();
|
||||||
var currentZIPFile = 0;
|
int currentZIPFile = 0;
|
||||||
foreach (var entry in archive.Entries)
|
foreach (ZipArchiveEntry entry in archive.Entries)
|
||||||
{
|
{
|
||||||
if (entry.FullName.EndsWith("/")) // it is a folder
|
if (entry.FullName.EndsWith("/")) // it is a folder
|
||||||
Directory.CreateDirectory(Path.Combine(folder, entry.FullName));
|
Directory.CreateDirectory(Path.Combine(folder, entry.FullName));
|
||||||
@@ -197,7 +213,7 @@ public static class Functions
|
|||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
Settings.Variables.outputStream.WriteLine($"Failed to extract {entry.Name}. Exception: {ex.Message}");
|
Console.WriteLine($"Failed to extract {entry.Name}. Exception: {ex.Message}");
|
||||||
}
|
}
|
||||||
|
|
||||||
currentZIPFile++;
|
currentZIPFile++;
|
||||||
@@ -210,11 +226,11 @@ public static class Functions
|
|||||||
{
|
{
|
||||||
ulong zipSize = 0;
|
ulong zipSize = 0;
|
||||||
|
|
||||||
foreach (var entry in archive.Entries)
|
foreach (ZipArchiveEntry entry in archive.Entries)
|
||||||
zipSize += (ulong)entry.CompressedLength;
|
zipSize += (ulong)entry.CompressedLength;
|
||||||
|
|
||||||
ulong currentSize = 0;
|
ulong currentSize = 0;
|
||||||
foreach (var entry in archive.Entries)
|
foreach (ZipArchiveEntry entry in archive.Entries)
|
||||||
{
|
{
|
||||||
if (entry.FullName.EndsWith("/"))
|
if (entry.FullName.EndsWith("/"))
|
||||||
{
|
{
|
||||||
@@ -229,7 +245,7 @@ public static class Functions
|
|||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
Settings.Variables.outputStream.WriteLine($"Failed to extract {entry.Name}. Exception: {ex.Message}");
|
Console.WriteLine($"Failed to extract {entry.Name}. Exception: {ex.Message}");
|
||||||
}
|
}
|
||||||
|
|
||||||
await Task.Delay(10);
|
await Task.Delay(10);
|
||||||
@@ -240,6 +256,32 @@ public static class Functions
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Convert Bytes to highest measurement unit possible
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="bytes">The amount of bytes</param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public static (double, string) ConvertBytes(long bytes)
|
||||||
|
{
|
||||||
|
List<string> units = new List<string>()
|
||||||
|
{
|
||||||
|
"B",
|
||||||
|
"KB",
|
||||||
|
"MB",
|
||||||
|
"GB",
|
||||||
|
"TB"
|
||||||
|
};
|
||||||
|
int i = 0;
|
||||||
|
while (bytes >= 1024)
|
||||||
|
{
|
||||||
|
i++;
|
||||||
|
bytes /= 1024;
|
||||||
|
}
|
||||||
|
|
||||||
|
return (bytes, units[i]);
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Save to JSON file
|
/// Save to JSON file
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -249,7 +291,7 @@ public static class Functions
|
|||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public static async Task SaveToJsonFile<T>(string file, T Data)
|
public static async Task SaveToJsonFile<T>(string file, T Data)
|
||||||
{
|
{
|
||||||
var str = new MemoryStream();
|
MemoryStream str = new MemoryStream();
|
||||||
await JsonSerializer.SerializeAsync(str, Data, typeof(T), new JsonSerializerOptions { WriteIndented = true });
|
await JsonSerializer.SerializeAsync(str, Data, typeof(T), new JsonSerializerOptions { WriteIndented = true });
|
||||||
await File.WriteAllBytesAsync(file, str.ToArray());
|
await File.WriteAllBytesAsync(file, str.ToArray());
|
||||||
}
|
}
|
||||||
@@ -273,6 +315,35 @@ public static class Functions
|
|||||||
return (obj ?? default)!;
|
return (obj ?? default)!;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Check if all words from <paramref name="str"/> are in <paramref name="baseString"/><br/>
|
||||||
|
/// This function returns true if<br/>
|
||||||
|
/// 1. The <paramref name="str"/> is part of <paramref name="baseString"/><br/>
|
||||||
|
/// 2. The words (split by a space) of <paramref name="str"/> are located (separately) in <paramref name="baseString"/> <br/>
|
||||||
|
/// <example>
|
||||||
|
/// The following example will return <see langword="TRUE"/><br/>
|
||||||
|
/// <c>STRContains("Hello World !", "I type word Hello and then i typed word World !")</c><br/>
|
||||||
|
/// The following example will return <see langword="TRUE"/><br/>
|
||||||
|
/// <c>STRContains("Hello World !", "I typed Hello World !" </c><br/>
|
||||||
|
/// The following example will return <see langword="TRUE"/><br/>
|
||||||
|
/// <c>STRContains("Hello World", "I type World then Hello")</c><br/>
|
||||||
|
/// The following example will return <see langword="FALSE"/><br/>
|
||||||
|
/// <c>STRContains("Hello World !", "I typed Hello World")</c><br/>
|
||||||
|
/// </example>
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="str">The string you are checking</param>
|
||||||
|
/// <param name="baseString">The main string that should contain <paramref name="str"/></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public static bool STRContains(this string str, string baseString)
|
||||||
|
{
|
||||||
|
if (baseString.Contains(str)) return true;
|
||||||
|
string[] array = str.Split(' ');
|
||||||
|
foreach (var s in array)
|
||||||
|
if (!baseString.Contains(s))
|
||||||
|
return false;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
public static bool TryReadValueFromJson(string input, string codeName, out JsonElement element)
|
public static bool TryReadValueFromJson(string input, string codeName, out JsonElement element)
|
||||||
{
|
{
|
||||||
Stream text;
|
Stream text;
|
||||||
@@ -290,11 +361,12 @@ public static class Functions
|
|||||||
|
|
||||||
public static string CreateMD5(string input)
|
public static string CreateMD5(string input)
|
||||||
{
|
{
|
||||||
using (var md5 = MD5.Create())
|
using (MD5 md5 = MD5.Create())
|
||||||
{
|
{
|
||||||
var inputBytes = Encoding.ASCII.GetBytes(input);
|
byte[] inputBytes = Encoding.ASCII.GetBytes(input);
|
||||||
var hashBytes = md5.ComputeHash(inputBytes);
|
byte[] hashBytes = md5.ComputeHash(inputBytes);
|
||||||
return Convert.ToHexString(hashBytes);
|
return Convert.ToHexString(hashBytes);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
<Project Sdk="Microsoft.NET.Sdk">
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<TargetFramework>net6.0</TargetFramework>
|
<TargetFramework>net6.0</TargetFramework>
|
||||||
@@ -17,8 +17,6 @@
|
|||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="Discord.Net" Version="3.7.2" />
|
<PackageReference Include="Discord.Net" Version="3.7.2" />
|
||||||
<PackageReference Include="System.Data.SQLite" Version="1.0.116" />
|
|
||||||
<PackageReference Include="Terminal.Gui" Version="1.8.2" />
|
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
</Project>
|
</Project>
|
||||||
|
|||||||
@@ -1,21 +0,0 @@
|
|||||||
using System.IO;
|
|
||||||
|
|
||||||
using PluginManager.Database;
|
|
||||||
|
|
||||||
namespace PluginManager
|
|
||||||
{
|
|
||||||
public class Settings
|
|
||||||
{
|
|
||||||
|
|
||||||
public static class Variables
|
|
||||||
{
|
|
||||||
public static string WebsiteURL = "https://wizzy69.github.io/SethDiscordBot";
|
|
||||||
public static string UpdaterURL = "https://github.com/Wizzy69/installer/releases/download/release-1-discordbot/Updater.zip";
|
|
||||||
|
|
||||||
public static TextWriter outputStream;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static SqlDatabase sqlDatabase;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
57
Roles/AddRole.cs
Normal file
57
Roles/AddRole.cs
Normal file
@@ -0,0 +1,57 @@
|
|||||||
|
using System.IO.Compression;
|
||||||
|
using System.Runtime.CompilerServices;
|
||||||
|
using Discord;
|
||||||
|
using Discord.Commands;
|
||||||
|
using Discord.Rest;
|
||||||
|
using Discord.WebSocket;
|
||||||
|
using Microsoft.Win32.SafeHandles;
|
||||||
|
using PluginManager.Interfaces;
|
||||||
|
using PluginManager.Others;
|
||||||
|
using Roles.Internals;
|
||||||
|
|
||||||
|
namespace Roles
|
||||||
|
{
|
||||||
|
public class AddRole : DBCommand
|
||||||
|
{
|
||||||
|
public string Command => "addrole";
|
||||||
|
|
||||||
|
public List<string> Aliases => new() { "ar", "addr", "roleadd" };
|
||||||
|
|
||||||
|
public string Description => "Role options";
|
||||||
|
|
||||||
|
public string Usage => "addrole [user1] [user2] ... [role1] [role2] ...";
|
||||||
|
|
||||||
|
public bool canUseDM => false;
|
||||||
|
|
||||||
|
public bool canUseServer => true;
|
||||||
|
|
||||||
|
public bool requireAdmin => true;
|
||||||
|
|
||||||
|
public async void Execute(SocketCommandContext context, SocketMessage message, DiscordSocketClient client, bool isDM)
|
||||||
|
{
|
||||||
|
if (message.MentionedUsers.Count == 0 || message.MentionedRoles.Count == 0)
|
||||||
|
{
|
||||||
|
await context.Channel.SendMessageAsync($"Invalid invocation\nUsage:{Usage}");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var users = message.MentionedUsers;
|
||||||
|
var roles = message.MentionedRoles as IEnumerable<IRole>;
|
||||||
|
|
||||||
|
foreach (var user in users)
|
||||||
|
{
|
||||||
|
SocketGuildUser? usr = context.Client.GetUser(user.Username, user.Discriminator) as SocketGuildUser;
|
||||||
|
if (usr is null)
|
||||||
|
throw new Exception("User is null");
|
||||||
|
await usr.AddRolesAsync(roles);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
await context.Channel.SendMessageAsync(ex.Message);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
79
Roles/Internals/RoleManagement.cs
Normal file
79
Roles/Internals/RoleManagement.cs
Normal file
@@ -0,0 +1,79 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using Discord;
|
||||||
|
using Discord.WebSocket;
|
||||||
|
using PluginManager.Others;
|
||||||
|
|
||||||
|
namespace Roles.Internals
|
||||||
|
{
|
||||||
|
internal static class RoleManagement
|
||||||
|
{
|
||||||
|
internal static async void AddRole(this SocketGuildUser user, string roleName)
|
||||||
|
{
|
||||||
|
string role = roleName;
|
||||||
|
IRole? r = user.Guild.Roles.FirstOrDefault(rl => rl.Name == role || rl.Mention == role);
|
||||||
|
if (r is null)
|
||||||
|
throw new Exception("The role does not exist");
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
await user.AddRoleAsync(r);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
if (ex.Message.Contains("Permission", StringComparison.CurrentCultureIgnoreCase))
|
||||||
|
throw new Exception("Insufficient permissions");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
internal static async void AddRole(this SocketGuildUser user, IRole role)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
await user.AddRoleAsync(role);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
if (ex.Message.Contains("Permission", StringComparison.CurrentCultureIgnoreCase))
|
||||||
|
throw new Exception("Insufficient permissions");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
internal static async void AddRoles(this SocketGuildUser user, string[] roleNames)
|
||||||
|
{
|
||||||
|
foreach (string rolename in roleNames)
|
||||||
|
{
|
||||||
|
string roleName = rolename;
|
||||||
|
IRole? r = user.Guild.Roles.FirstOrDefault(rl => rl.Name == roleName || rl.Mention == roleName);
|
||||||
|
if (r is null)
|
||||||
|
throw new Exception("The role does not exist");
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
await user.AddRoleAsync(r);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
if (ex.Message.Contains("Permission", StringComparison.CurrentCultureIgnoreCase))
|
||||||
|
throw new Exception("Insufficient permissions");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
internal static async void AddRoles(this SocketGuildUser user, IEnumerable<IRole> roles)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
await user.AddRolesAsync(roles);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
if (ex.Message.Contains("Permission", StringComparison.CurrentCultureIgnoreCase))
|
||||||
|
throw new Exception("Insufficient permissions");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
13
Roles/Roles.csproj
Normal file
13
Roles/Roles.csproj
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<TargetFramework>net6.0</TargetFramework>
|
||||||
|
<ImplicitUsings>enable</ImplicitUsings>
|
||||||
|
<Nullable>enable</Nullable>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="..\PluginManager\PluginManager.csproj" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
</Project>
|
||||||
@@ -7,11 +7,21 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DiscordBot", "DiscordBot\Di
|
|||||||
EndProject
|
EndProject
|
||||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PluginManager", "PluginManager\PluginManager.csproj", "{EDD4D9B3-98DD-4367-A09F-D1C5ACB61132}"
|
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PluginManager", "PluginManager\PluginManager.csproj", "{EDD4D9B3-98DD-4367-A09F-D1C5ACB61132}"
|
||||||
EndProject
|
EndProject
|
||||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MusicLibrary", "..\DiscordBotItems\Plugins\MusicLibrary\MusicLibrary.csproj", "{878DFE01-4596-4EBC-9651-0679598CE794}"
|
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Plugins", "Plugins", "{1862ABD5-7C30-4F15-A561-45AC8A9CA10E}"
|
||||||
EndProject
|
EndProject
|
||||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SlashCommands", "..\DiscordBotItems\Plugins\SlashCommands\SlashCommands.csproj", "{C2D73BE8-997B-4A4A-8EA5-989BE33EE1DD}"
|
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Events", "Events", "{A290C028-77C4-4D1D-AB43-DDFE6ABD9012}"
|
||||||
EndProject
|
EndProject
|
||||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LevelingSystem", "..\DiscordBotItems\Plugins\LevelingSystem\LevelingSystem.csproj", "{0138F343-BBB9-4D5F-B499-D9C2978BE9AA}"
|
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Commands", "Commands", "{449FA364-0B72-43FF-B3A3-806E2916200E}"
|
||||||
|
EndProject
|
||||||
|
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CMD_Utils", "CMD_Utils\CMD_Utils.csproj", "{E26C87A4-3DD6-4B58-B14B-C8E086B852F9}"
|
||||||
|
EndProject
|
||||||
|
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MusicCommands", "MusicCommands\MusicCommands.csproj", "{B1B4976E-5112-4217-B57B-3A03C5207B6E}"
|
||||||
|
EndProject
|
||||||
|
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EVE_LevelingSystem", "EVE_LevelingSystem\EVE_LevelingSystem.csproj", "{EEC445DC-0C4B-43EA-8694-606BA0390B77}"
|
||||||
|
EndProject
|
||||||
|
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CMD_LevelingSystem", "CMD_LevelingSystem\CMD_LevelingSystem.csproj", "{1A4E49FF-9A0A-4C54-AF35-CFFBA64353D9}"
|
||||||
|
EndProject
|
||||||
|
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Roles", "Roles\Roles.csproj", "{954F2AA9-6624-4554-946D-0F17B84487C3}"
|
||||||
EndProject
|
EndProject
|
||||||
Global
|
Global
|
||||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
@@ -27,22 +37,39 @@ Global
|
|||||||
{EDD4D9B3-98DD-4367-A09F-D1C5ACB61132}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
{EDD4D9B3-98DD-4367-A09F-D1C5ACB61132}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
{EDD4D9B3-98DD-4367-A09F-D1C5ACB61132}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
{EDD4D9B3-98DD-4367-A09F-D1C5ACB61132}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
{EDD4D9B3-98DD-4367-A09F-D1C5ACB61132}.Release|Any CPU.Build.0 = Release|Any CPU
|
{EDD4D9B3-98DD-4367-A09F-D1C5ACB61132}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
{878DFE01-4596-4EBC-9651-0679598CE794}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
{E26C87A4-3DD6-4B58-B14B-C8E086B852F9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
{878DFE01-4596-4EBC-9651-0679598CE794}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
{E26C87A4-3DD6-4B58-B14B-C8E086B852F9}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
{878DFE01-4596-4EBC-9651-0679598CE794}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
{E26C87A4-3DD6-4B58-B14B-C8E086B852F9}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
{878DFE01-4596-4EBC-9651-0679598CE794}.Release|Any CPU.Build.0 = Release|Any CPU
|
{E26C87A4-3DD6-4B58-B14B-C8E086B852F9}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
{C2D73BE8-997B-4A4A-8EA5-989BE33EE1DD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
{B1B4976E-5112-4217-B57B-3A03C5207B6E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
{C2D73BE8-997B-4A4A-8EA5-989BE33EE1DD}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
{B1B4976E-5112-4217-B57B-3A03C5207B6E}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
{C2D73BE8-997B-4A4A-8EA5-989BE33EE1DD}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
{B1B4976E-5112-4217-B57B-3A03C5207B6E}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
{C2D73BE8-997B-4A4A-8EA5-989BE33EE1DD}.Release|Any CPU.Build.0 = Release|Any CPU
|
{B1B4976E-5112-4217-B57B-3A03C5207B6E}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
{0138F343-BBB9-4D5F-B499-D9C2978BE9AA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
{EEC445DC-0C4B-43EA-8694-606BA0390B77}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
{0138F343-BBB9-4D5F-B499-D9C2978BE9AA}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
{EEC445DC-0C4B-43EA-8694-606BA0390B77}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
{0138F343-BBB9-4D5F-B499-D9C2978BE9AA}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
{EEC445DC-0C4B-43EA-8694-606BA0390B77}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
{0138F343-BBB9-4D5F-B499-D9C2978BE9AA}.Release|Any CPU.Build.0 = Release|Any CPU
|
{EEC445DC-0C4B-43EA-8694-606BA0390B77}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{1A4E49FF-9A0A-4C54-AF35-CFFBA64353D9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{1A4E49FF-9A0A-4C54-AF35-CFFBA64353D9}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{1A4E49FF-9A0A-4C54-AF35-CFFBA64353D9}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{1A4E49FF-9A0A-4C54-AF35-CFFBA64353D9}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{954F2AA9-6624-4554-946D-0F17B84487C3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{954F2AA9-6624-4554-946D-0F17B84487C3}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{954F2AA9-6624-4554-946D-0F17B84487C3}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{954F2AA9-6624-4554-946D-0F17B84487C3}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(SolutionProperties) = preSolution
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
HideSolutionNode = FALSE
|
HideSolutionNode = FALSE
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
|
GlobalSection(NestedProjects) = preSolution
|
||||||
|
{A290C028-77C4-4D1D-AB43-DDFE6ABD9012} = {1862ABD5-7C30-4F15-A561-45AC8A9CA10E}
|
||||||
|
{449FA364-0B72-43FF-B3A3-806E2916200E} = {1862ABD5-7C30-4F15-A561-45AC8A9CA10E}
|
||||||
|
{E26C87A4-3DD6-4B58-B14B-C8E086B852F9} = {449FA364-0B72-43FF-B3A3-806E2916200E}
|
||||||
|
{B1B4976E-5112-4217-B57B-3A03C5207B6E} = {449FA364-0B72-43FF-B3A3-806E2916200E}
|
||||||
|
{EEC445DC-0C4B-43EA-8694-606BA0390B77} = {A290C028-77C4-4D1D-AB43-DDFE6ABD9012}
|
||||||
|
{1A4E49FF-9A0A-4C54-AF35-CFFBA64353D9} = {449FA364-0B72-43FF-B3A3-806E2916200E}
|
||||||
|
{954F2AA9-6624-4554-946D-0F17B84487C3} = {449FA364-0B72-43FF-B3A3-806E2916200E}
|
||||||
|
EndGlobalSection
|
||||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||||
SolutionGuid = {3FB3C5DE-ED21-4D2E-ABDD-3A00EE4A2FFF}
|
SolutionGuid = {3FB3C5DE-ED21-4D2E-ABDD-3A00EE4A2FFF}
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
|
|||||||
Reference in New Issue
Block a user