Compare commits
59 Commits
v1.0.3-bet
...
v1.0.7-pre
| Author | SHA1 | Date | |
|---|---|---|---|
| 8b36c086ef | |||
| 1f5e5d0611 | |||
| bbc1c601c9 | |||
| 5ab3195956 | |||
| 1f1983480a | |||
| 2fcd86cf12 | |||
| 2c83d00c00 | |||
|
|
ccac0ca6d0 | ||
| 4c9c7410f0 | |||
| eef13db3aa | |||
| 27bbe899ab | |||
| 79002de9a5 | |||
| 17f68a8e5e | |||
| c415fa1c0c | |||
| b8ec6f42df | |||
| 3f67d7f3f9 | |||
| 2dae8a3a63 | |||
| 47aae730c7 | |||
| aa808e950a | |||
| 7dd43b7841 | |||
| 82a3744d48 | |||
| 3839e4d838 | |||
| a66ebc43d9 | |||
| 45bbda8185 | |||
| 2db6bf2729 | |||
| 3097eb7fca | |||
| efb6ac5192 | |||
| 27fe615447 | |||
| c40fcdac9d | |||
| c674c76bd0 | |||
| 1292e0f585 | |||
| 3abb4cdda7 | |||
| c6e8976456 | |||
| 19115a837c | |||
| 0a200abec6 | |||
| c80fe33e6d | |||
|
|
edc5cb97ba | ||
| 059228ca52 | |||
| 861b83cda2 | |||
| 97888626b6 | |||
| 781bb489bd | |||
| 1712205222 | |||
| 51324f6dca | |||
| 531edcd3cc | |||
| c66ff52d94 | |||
|
|
195c082cd7 | ||
| 16005ef30d | |||
| c15f7b4874 | |||
| fd28a166f7 | |||
| 4fbea983da | |||
| 690b7fe5f1 | |||
| e88d654da1 | |||
| 0b6b57cc84 | |||
| 8fcd33e734 | |||
| 0d524cdf65 | |||
| ab6f14e74c | |||
| 3e01e75de3 | |||
| 1ae48a100e | |||
| 4855c8495d |
2
.gitignore
vendored
2
.gitignore
vendored
@@ -362,3 +362,5 @@ MigrationBackup/
|
|||||||
|
|
||||||
# Fody - auto-generated XML schema
|
# Fody - auto-generated XML schema
|
||||||
FodyWeavers.xsd
|
FodyWeavers.xsd
|
||||||
|
|
||||||
|
*.txt
|
||||||
13
.idea/.idea.SethDiscordBot/.idea/.gitignore
generated
vendored
Normal file
13
.idea/.idea.SethDiscordBot/.idea/.gitignore
generated
vendored
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
# Default ignored files
|
||||||
|
/shelf/
|
||||||
|
/workspace.xml
|
||||||
|
# Rider ignored files
|
||||||
|
/projectSettingsUpdater.xml
|
||||||
|
/contentModel.xml
|
||||||
|
/.idea.SethDiscordBot.iml
|
||||||
|
/modules.xml
|
||||||
|
# Editor-based HTTP Client requests
|
||||||
|
/httpRequests/
|
||||||
|
# Datasource local storage ignored files
|
||||||
|
/dataSources/
|
||||||
|
/dataSources.local.xml
|
||||||
1
.idea/.idea.SethDiscordBot/.idea/.name
generated
Normal file
1
.idea/.idea.SethDiscordBot/.idea/.name
generated
Normal file
@@ -0,0 +1 @@
|
|||||||
|
SethDiscordBot
|
||||||
4
.idea/.idea.SethDiscordBot/.idea/encodings.xml
generated
Normal file
4
.idea/.idea.SethDiscordBot/.idea/encodings.xml
generated
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="Encoding" addBOMForNewFiles="with BOM under Windows, with no BOM otherwise" />
|
||||||
|
</project>
|
||||||
8
.idea/.idea.SethDiscordBot/.idea/indexLayout.xml
generated
Normal file
8
.idea/.idea.SethDiscordBot/.idea/indexLayout.xml
generated
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="UserContentModel">
|
||||||
|
<attachedFolders />
|
||||||
|
<explicitIncludes />
|
||||||
|
<explicitExcludes />
|
||||||
|
</component>
|
||||||
|
</project>
|
||||||
6
.idea/.idea.SethDiscordBot/.idea/vcs.xml
generated
Normal file
6
.idea/.idea.SethDiscordBot/.idea/vcs.xml
generated
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="VcsDirectoryMappings">
|
||||||
|
<mapping directory="$PROJECT_DIR$" vcs="Git" />
|
||||||
|
</component>
|
||||||
|
</project>
|
||||||
26
.vscode/launch.json
vendored
26
.vscode/launch.json
vendored
@@ -1,26 +0,0 @@
|
|||||||
{
|
|
||||||
"version": "0.2.0",
|
|
||||||
"configurations": [
|
|
||||||
{
|
|
||||||
// Use IntelliSense to find out which attributes exist for C# debugging
|
|
||||||
// Use hover for the description of the existing attributes
|
|
||||||
// For further information visit https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md
|
|
||||||
"name": ".NET Core Launch (console)",
|
|
||||||
"type": "coreclr",
|
|
||||||
"request": "launch",
|
|
||||||
"preLaunchTask": "build",
|
|
||||||
// If you have changed target frameworks, make sure to update the program path.
|
|
||||||
"program": "${workspaceFolder}/DiscordBot/bin/Debug/net5.0/DiscordBot.dll",
|
|
||||||
"args": [],
|
|
||||||
"cwd": "${workspaceFolder}/DiscordBot",
|
|
||||||
// For more information about the 'console' field, see https://aka.ms/VSCode-CS-LaunchJson-Console
|
|
||||||
"console": "internalConsole",
|
|
||||||
"stopAtEntry": false
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": ".NET Core Attach",
|
|
||||||
"type": "coreclr",
|
|
||||||
"request": "attach"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
5
.vscode/solution-explorer/class.cs-template
vendored
5
.vscode/solution-explorer/class.cs-template
vendored
@@ -1,5 +0,0 @@
|
|||||||
namespace {{namespace}};
|
|
||||||
|
|
||||||
public class {{name}}
|
|
||||||
{
|
|
||||||
}
|
|
||||||
3
.vscode/solution-explorer/class.ts-template
vendored
3
.vscode/solution-explorer/class.ts-template
vendored
@@ -1,3 +0,0 @@
|
|||||||
export class {{name}} {
|
|
||||||
|
|
||||||
}
|
|
||||||
9
.vscode/solution-explorer/class.vb-template
vendored
9
.vscode/solution-explorer/class.vb-template
vendored
@@ -1,9 +0,0 @@
|
|||||||
Imports System
|
|
||||||
|
|
||||||
Namespace {{namespace}}
|
|
||||||
|
|
||||||
Public Class {{name}}
|
|
||||||
|
|
||||||
End Class
|
|
||||||
|
|
||||||
End Namespace
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
export default {{name}} {
|
|
||||||
|
|
||||||
}
|
|
||||||
5
.vscode/solution-explorer/enum.cs-template
vendored
5
.vscode/solution-explorer/enum.cs-template
vendored
@@ -1,5 +0,0 @@
|
|||||||
namespace {{namespace}};
|
|
||||||
|
|
||||||
public enum {{name}}
|
|
||||||
{
|
|
||||||
}
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
namespace {{namespace}};
|
|
||||||
|
|
||||||
public interface {{name}}
|
|
||||||
{
|
|
||||||
}
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
export interface {{name}} {
|
|
||||||
|
|
||||||
}
|
|
||||||
46
.vscode/solution-explorer/template-list.json
vendored
46
.vscode/solution-explorer/template-list.json
vendored
@@ -1,46 +0,0 @@
|
|||||||
{
|
|
||||||
"templates": [
|
|
||||||
{
|
|
||||||
"name": "Class",
|
|
||||||
"extension": "cs",
|
|
||||||
"file": "./class.cs-template",
|
|
||||||
"parameters": "./template-parameters.js"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Interface",
|
|
||||||
"extension": "cs",
|
|
||||||
"file": "./interface.cs-template",
|
|
||||||
"parameters": "./template-parameters.js"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Enum",
|
|
||||||
"extension": "cs",
|
|
||||||
"file": "./enum.cs-template",
|
|
||||||
"parameters": "./template-parameters.js"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Class",
|
|
||||||
"extension": "ts",
|
|
||||||
"file": "./class.ts-template",
|
|
||||||
"parameters": "./template-parameters.js"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Interface",
|
|
||||||
"extension": "ts",
|
|
||||||
"file": "./interface.ts-template",
|
|
||||||
"parameters": "./template-parameters.js"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Default",
|
|
||||||
"extension": "ts",
|
|
||||||
"file": "./default.ts-template",
|
|
||||||
"parameters": "./template-parameters.js"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Class",
|
|
||||||
"extension": "vb",
|
|
||||||
"file": "./class.vb-template",
|
|
||||||
"parameters": "./template-parameters.js"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
17
.vscode/solution-explorer/template-parameters.js
vendored
17
.vscode/solution-explorer/template-parameters.js
vendored
@@ -1,17 +0,0 @@
|
|||||||
var path = require("path");
|
|
||||||
|
|
||||||
module.exports = function(filename, projectPath, folderPath) {
|
|
||||||
var namespace = "Unknown";
|
|
||||||
if (projectPath) {
|
|
||||||
namespace = path.basename(projectPath, path.extname(projectPath));
|
|
||||||
if (folderPath) {
|
|
||||||
namespace += "." + folderPath.replace(path.dirname(projectPath), "").substring(1).replace(/[\\\/]/g, ".");
|
|
||||||
}
|
|
||||||
namespace = namespace.replace(/[\\\-]/g, "_");
|
|
||||||
}
|
|
||||||
|
|
||||||
return {
|
|
||||||
namespace: namespace,
|
|
||||||
name: path.basename(filename, path.extname(filename))
|
|
||||||
}
|
|
||||||
};
|
|
||||||
42
.vscode/tasks.json
vendored
42
.vscode/tasks.json
vendored
@@ -1,42 +0,0 @@
|
|||||||
{
|
|
||||||
"version": "2.0.0",
|
|
||||||
"tasks": [
|
|
||||||
{
|
|
||||||
"label": "build",
|
|
||||||
"command": "dotnet",
|
|
||||||
"type": "process",
|
|
||||||
"args": [
|
|
||||||
"build",
|
|
||||||
"${workspaceFolder}/DiscordBot/DiscordBot.csproj",
|
|
||||||
"/property:GenerateFullPaths=true",
|
|
||||||
"/consoleloggerparameters:NoSummary"
|
|
||||||
],
|
|
||||||
"problemMatcher": "$msCompile"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"label": "publish",
|
|
||||||
"command": "dotnet",
|
|
||||||
"type": "process",
|
|
||||||
"args": [
|
|
||||||
"publish",
|
|
||||||
"${workspaceFolder}/DiscordBot/DiscordBot.csproj",
|
|
||||||
"/property:GenerateFullPaths=true",
|
|
||||||
"/consoleloggerparameters:NoSummary"
|
|
||||||
],
|
|
||||||
"problemMatcher": "$msCompile"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"label": "watch",
|
|
||||||
"command": "dotnet",
|
|
||||||
"type": "process",
|
|
||||||
"args": [
|
|
||||||
"watch",
|
|
||||||
"run",
|
|
||||||
"${workspaceFolder}/DiscordBot/DiscordBot.csproj",
|
|
||||||
"/property:GenerateFullPaths=true",
|
|
||||||
"/consoleloggerparameters:NoSummary"
|
|
||||||
],
|
|
||||||
"problemMatcher": "$msCompile"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
Binary file not shown.
@@ -14,28 +14,28 @@
|
|||||||
"CMD_Utils.dll": {}
|
"CMD_Utils.dll": {}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"Discord.Net/3.6.1": {
|
"Discord.Net/3.7.2": {
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"Discord.Net.Commands": "3.6.1",
|
"Discord.Net.Commands": "3.7.2",
|
||||||
"Discord.Net.Core": "3.6.1",
|
"Discord.Net.Core": "3.7.2",
|
||||||
"Discord.Net.Interactions": "3.6.1",
|
"Discord.Net.Interactions": "3.7.2",
|
||||||
"Discord.Net.Rest": "3.6.1",
|
"Discord.Net.Rest": "3.7.2",
|
||||||
"Discord.Net.WebSocket": "3.6.1",
|
"Discord.Net.WebSocket": "3.7.2",
|
||||||
"Discord.Net.Webhook": "3.6.1"
|
"Discord.Net.Webhook": "3.7.2"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"Discord.Net.Commands/3.6.1": {
|
"Discord.Net.Commands/3.7.2": {
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"Discord.Net.Core": "3.6.1"
|
"Discord.Net.Core": "3.7.2"
|
||||||
},
|
},
|
||||||
"runtime": {
|
"runtime": {
|
||||||
"lib/net6.0/Discord.Net.Commands.dll": {
|
"lib/net6.0/Discord.Net.Commands.dll": {
|
||||||
"assemblyVersion": "3.6.1.0",
|
"assemblyVersion": "3.7.2.0",
|
||||||
"fileVersion": "3.6.1.0"
|
"fileVersion": "3.7.2.0"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"Discord.Net.Core/3.6.1": {
|
"Discord.Net.Core/3.7.2": {
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"Newtonsoft.Json": "13.0.1",
|
"Newtonsoft.Json": "13.0.1",
|
||||||
"System.Collections.Immutable": "5.0.0",
|
"System.Collections.Immutable": "5.0.0",
|
||||||
@@ -44,59 +44,59 @@
|
|||||||
},
|
},
|
||||||
"runtime": {
|
"runtime": {
|
||||||
"lib/net6.0/Discord.Net.Core.dll": {
|
"lib/net6.0/Discord.Net.Core.dll": {
|
||||||
"assemblyVersion": "3.6.1.0",
|
"assemblyVersion": "3.7.2.0",
|
||||||
"fileVersion": "3.6.1.0"
|
"fileVersion": "3.7.2.0"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"Discord.Net.Interactions/3.6.1": {
|
"Discord.Net.Interactions/3.7.2": {
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"Discord.Net.Core": "3.6.1",
|
"Discord.Net.Core": "3.7.2",
|
||||||
"Discord.Net.Rest": "3.6.1",
|
"Discord.Net.Rest": "3.7.2",
|
||||||
"Discord.Net.WebSocket": "3.6.1",
|
"Discord.Net.WebSocket": "3.7.2",
|
||||||
"Microsoft.Extensions.DependencyInjection.Abstractions": "5.0.0",
|
"Microsoft.Extensions.DependencyInjection.Abstractions": "5.0.0",
|
||||||
"System.Collections.Immutable": "5.0.0",
|
"System.Collections.Immutable": "5.0.0",
|
||||||
"System.Reactive": "5.0.0"
|
"System.Reactive": "5.0.0"
|
||||||
},
|
},
|
||||||
"runtime": {
|
"runtime": {
|
||||||
"lib/net6.0/Discord.Net.Interactions.dll": {
|
"lib/net6.0/Discord.Net.Interactions.dll": {
|
||||||
"assemblyVersion": "3.6.1.0",
|
"assemblyVersion": "3.7.2.0",
|
||||||
"fileVersion": "3.6.1.0"
|
"fileVersion": "3.7.2.0"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"Discord.Net.Rest/3.6.1": {
|
"Discord.Net.Rest/3.7.2": {
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"Discord.Net.Core": "3.6.1"
|
"Discord.Net.Core": "3.7.2"
|
||||||
},
|
},
|
||||||
"runtime": {
|
"runtime": {
|
||||||
"lib/net6.0/Discord.Net.Rest.dll": {
|
"lib/net6.0/Discord.Net.Rest.dll": {
|
||||||
"assemblyVersion": "3.6.1.0",
|
"assemblyVersion": "3.7.2.0",
|
||||||
"fileVersion": "3.6.1.0"
|
"fileVersion": "3.7.2.0"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"Discord.Net.Webhook/3.6.1": {
|
"Discord.Net.Webhook/3.7.2": {
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"Discord.Net.Core": "3.6.1",
|
"Discord.Net.Core": "3.7.2",
|
||||||
"Discord.Net.Rest": "3.6.1"
|
"Discord.Net.Rest": "3.7.2"
|
||||||
},
|
},
|
||||||
"runtime": {
|
"runtime": {
|
||||||
"lib/net6.0/Discord.Net.Webhook.dll": {
|
"lib/net6.0/Discord.Net.Webhook.dll": {
|
||||||
"assemblyVersion": "3.6.1.0",
|
"assemblyVersion": "3.7.2.0",
|
||||||
"fileVersion": "3.6.1.0"
|
"fileVersion": "3.7.2.0"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"Discord.Net.WebSocket/3.6.1": {
|
"Discord.Net.WebSocket/3.7.2": {
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"Discord.Net.Core": "3.6.1",
|
"Discord.Net.Core": "3.7.2",
|
||||||
"Discord.Net.Rest": "3.6.1"
|
"Discord.Net.Rest": "3.7.2"
|
||||||
},
|
},
|
||||||
"runtime": {
|
"runtime": {
|
||||||
"lib/net6.0/Discord.Net.WebSocket.dll": {
|
"lib/net6.0/Discord.Net.WebSocket.dll": {
|
||||||
"assemblyVersion": "3.6.1.0",
|
"assemblyVersion": "3.7.2.0",
|
||||||
"fileVersion": "3.6.1.0"
|
"fileVersion": "3.7.2.0"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -147,7 +147,7 @@
|
|||||||
"System.ValueTuple/4.5.0": {},
|
"System.ValueTuple/4.5.0": {},
|
||||||
"PluginManager/1.0.0": {
|
"PluginManager/1.0.0": {
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"Discord.Net": "3.6.1"
|
"Discord.Net": "3.7.2"
|
||||||
},
|
},
|
||||||
"runtime": {
|
"runtime": {
|
||||||
"PluginManager.dll": {}
|
"PluginManager.dll": {}
|
||||||
@@ -161,54 +161,54 @@
|
|||||||
"serviceable": false,
|
"serviceable": false,
|
||||||
"sha512": ""
|
"sha512": ""
|
||||||
},
|
},
|
||||||
"Discord.Net/3.6.1": {
|
"Discord.Net/3.7.2": {
|
||||||
"type": "package",
|
"type": "package",
|
||||||
"serviceable": true,
|
"serviceable": true,
|
||||||
"sha512": "sha512-TfcL/HG57fVt//WVJ2XyF2PlytY9IYkkwwkPLIhvu5FW4wf9rm7+N8RPh4qtELLfsa5ES0FK2RbgYjABRR9AjA==",
|
"sha512": "sha512-FAiCLGu5rp6+Z10FjKbbJ6LLpKjbMBGpozixkJlz5LZvuncPx8f4AWFAw7pBecKUuAh983qiZ8CZYZcNXsI4qg==",
|
||||||
"path": "discord.net/3.6.1",
|
"path": "discord.net/3.7.2",
|
||||||
"hashPath": "discord.net.3.6.1.nupkg.sha512"
|
"hashPath": "discord.net.3.7.2.nupkg.sha512"
|
||||||
},
|
},
|
||||||
"Discord.Net.Commands/3.6.1": {
|
"Discord.Net.Commands/3.7.2": {
|
||||||
"type": "package",
|
"type": "package",
|
||||||
"serviceable": true,
|
"serviceable": true,
|
||||||
"sha512": "sha512-kK7m571yzSzPd93o+n8Z+TfvX62BT1HtOEZIWXKwXWO8itP/sgqBNExjWK/6DOpkbD6+khc2f3rp+TA0rJD88g==",
|
"sha512": "sha512-aOEGP04X64htsTr7ozKj9qHpmvOfitSw5gfR8Tw9TX0+FdswD2LNL2KfOAIaxRKZmRTm34aXQEJrVq0K8AptmQ==",
|
||||||
"path": "discord.net.commands/3.6.1",
|
"path": "discord.net.commands/3.7.2",
|
||||||
"hashPath": "discord.net.commands.3.6.1.nupkg.sha512"
|
"hashPath": "discord.net.commands.3.7.2.nupkg.sha512"
|
||||||
},
|
},
|
||||||
"Discord.Net.Core/3.6.1": {
|
"Discord.Net.Core/3.7.2": {
|
||||||
"type": "package",
|
"type": "package",
|
||||||
"serviceable": true,
|
"serviceable": true,
|
||||||
"sha512": "sha512-ibVjQiWzgqh0GyP/GXE2kv3TA/9ysmmNFG/WmRE7GepQQAXXGxVUO9IMJ8h14EvIXMQ0m0DktMe5DkUnilo3Ag==",
|
"sha512": "sha512-apwswc6LjN4dj3u27SO3Hr56Jzl91wzReahieoD7IQhV+BJQaRxhTRiEEWFTrBzHfeFHEOQ7r6vZnra3zeFhKA==",
|
||||||
"path": "discord.net.core/3.6.1",
|
"path": "discord.net.core/3.7.2",
|
||||||
"hashPath": "discord.net.core.3.6.1.nupkg.sha512"
|
"hashPath": "discord.net.core.3.7.2.nupkg.sha512"
|
||||||
},
|
},
|
||||||
"Discord.Net.Interactions/3.6.1": {
|
"Discord.Net.Interactions/3.7.2": {
|
||||||
"type": "package",
|
"type": "package",
|
||||||
"serviceable": true,
|
"serviceable": true,
|
||||||
"sha512": "sha512-WGOxz6SMUu4WS5b/JdrhlwQletcplBIYqvjFBBDfnqE+uNJqcNGtAdyjLqIILfXGx8aSSSSYZSCeAUa7FZ8Yew==",
|
"sha512": "sha512-dwGhEdDB0yyo/lGtjwIDVZmsuD52di7lIZWu/sBtvvA05dMgYZq5S6ILdsBXjOyaHeXd+EV4YMlj2VS/rm619w==",
|
||||||
"path": "discord.net.interactions/3.6.1",
|
"path": "discord.net.interactions/3.7.2",
|
||||||
"hashPath": "discord.net.interactions.3.6.1.nupkg.sha512"
|
"hashPath": "discord.net.interactions.3.7.2.nupkg.sha512"
|
||||||
},
|
},
|
||||||
"Discord.Net.Rest/3.6.1": {
|
"Discord.Net.Rest/3.7.2": {
|
||||||
"type": "package",
|
"type": "package",
|
||||||
"serviceable": true,
|
"serviceable": true,
|
||||||
"sha512": "sha512-T7RRThIS23roFEJwTL1l7aawjVyn7ZB5yH3tMge0d6TiCzzp4V4FAZ+ArTt19LHRFhPly90v8V3sWqmTMN+5Zg==",
|
"sha512": "sha512-dyp8YaMBNJ837EH1KNz2PNGZqc2y71WFd1+pdldF+pLQJ3Gf/+V7685paAR7bQw7yFNyqEBR/QRBCNp+QIQ7Wg==",
|
||||||
"path": "discord.net.rest/3.6.1",
|
"path": "discord.net.rest/3.7.2",
|
||||||
"hashPath": "discord.net.rest.3.6.1.nupkg.sha512"
|
"hashPath": "discord.net.rest.3.7.2.nupkg.sha512"
|
||||||
},
|
},
|
||||||
"Discord.Net.Webhook/3.6.1": {
|
"Discord.Net.Webhook/3.7.2": {
|
||||||
"type": "package",
|
"type": "package",
|
||||||
"serviceable": true,
|
"serviceable": true,
|
||||||
"sha512": "sha512-xikKHIGAIMz0BzHkaTKb48DNpFjKW8mvJjLJSezJ1xQOu+laHNk/hav4qxVtyZz7HSI/vGTkmlq9hKVhWzpaUA==",
|
"sha512": "sha512-da3i/mTq2y7mfj3xlHH14S4PivHbflJCVr8OUikJtQrxBOxvPkqP7ZYk3Y9S28q0K8qik+TUjCcjL5gELKrh/A==",
|
||||||
"path": "discord.net.webhook/3.6.1",
|
"path": "discord.net.webhook/3.7.2",
|
||||||
"hashPath": "discord.net.webhook.3.6.1.nupkg.sha512"
|
"hashPath": "discord.net.webhook.3.7.2.nupkg.sha512"
|
||||||
},
|
},
|
||||||
"Discord.Net.WebSocket/3.6.1": {
|
"Discord.Net.WebSocket/3.7.2": {
|
||||||
"type": "package",
|
"type": "package",
|
||||||
"serviceable": true,
|
"serviceable": true,
|
||||||
"sha512": "sha512-hF22Xy7URlVEDQZ69INOgzPvFUsIDfd+r6U+1yF9HWdBn3d4THnvAAhkv1TraSx/T/MKS7g+jvk/HZ3mh5S3aw==",
|
"sha512": "sha512-pYCd6ET44ADaNiyEw82TaJnR7TKYHfrKCytWFWMPL5faJhoh260avZn3Hwunlf331lEQ0f4K1CujPkQbNuq7kQ==",
|
||||||
"path": "discord.net.websocket/3.6.1",
|
"path": "discord.net.websocket/3.7.2",
|
||||||
"hashPath": "discord.net.websocket.3.6.1.nupkg.sha512"
|
"hashPath": "discord.net.websocket.3.7.2.nupkg.sha512"
|
||||||
},
|
},
|
||||||
"Microsoft.Extensions.DependencyInjection.Abstractions/5.0.0": {
|
"Microsoft.Extensions.DependencyInjection.Abstractions/5.0.0": {
|
||||||
"type": "package",
|
"type": "package",
|
||||||
|
|||||||
Binary file not shown.
@@ -1,268 +0,0 @@
|
|||||||
{
|
|
||||||
"runtimeTarget": {
|
|
||||||
"name": ".NETCoreApp,Version=v6.0",
|
|
||||||
"signature": ""
|
|
||||||
},
|
|
||||||
"compilationOptions": {},
|
|
||||||
"targets": {
|
|
||||||
".NETCoreApp,Version=v6.0": {
|
|
||||||
"EVE_LevelingSystem/1.0.0": {
|
|
||||||
"dependencies": {
|
|
||||||
"PluginManager": "1.0.0"
|
|
||||||
},
|
|
||||||
"runtime": {
|
|
||||||
"EVE_LevelingSystem.dll": {}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"Discord.Net/3.6.1": {
|
|
||||||
"dependencies": {
|
|
||||||
"Discord.Net.Commands": "3.6.1",
|
|
||||||
"Discord.Net.Core": "3.6.1",
|
|
||||||
"Discord.Net.Interactions": "3.6.1",
|
|
||||||
"Discord.Net.Rest": "3.6.1",
|
|
||||||
"Discord.Net.WebSocket": "3.6.1",
|
|
||||||
"Discord.Net.Webhook": "3.6.1"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"Discord.Net.Commands/3.6.1": {
|
|
||||||
"dependencies": {
|
|
||||||
"Discord.Net.Core": "3.6.1"
|
|
||||||
},
|
|
||||||
"runtime": {
|
|
||||||
"lib/net6.0/Discord.Net.Commands.dll": {
|
|
||||||
"assemblyVersion": "3.6.1.0",
|
|
||||||
"fileVersion": "3.6.1.0"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"Discord.Net.Core/3.6.1": {
|
|
||||||
"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.6.1.0",
|
|
||||||
"fileVersion": "3.6.1.0"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"Discord.Net.Interactions/3.6.1": {
|
|
||||||
"dependencies": {
|
|
||||||
"Discord.Net.Core": "3.6.1",
|
|
||||||
"Discord.Net.Rest": "3.6.1",
|
|
||||||
"Discord.Net.WebSocket": "3.6.1",
|
|
||||||
"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.6.1.0",
|
|
||||||
"fileVersion": "3.6.1.0"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"Discord.Net.Rest/3.6.1": {
|
|
||||||
"dependencies": {
|
|
||||||
"Discord.Net.Core": "3.6.1"
|
|
||||||
},
|
|
||||||
"runtime": {
|
|
||||||
"lib/net6.0/Discord.Net.Rest.dll": {
|
|
||||||
"assemblyVersion": "3.6.1.0",
|
|
||||||
"fileVersion": "3.6.1.0"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"Discord.Net.Webhook/3.6.1": {
|
|
||||||
"dependencies": {
|
|
||||||
"Discord.Net.Core": "3.6.1",
|
|
||||||
"Discord.Net.Rest": "3.6.1"
|
|
||||||
},
|
|
||||||
"runtime": {
|
|
||||||
"lib/net6.0/Discord.Net.Webhook.dll": {
|
|
||||||
"assemblyVersion": "3.6.1.0",
|
|
||||||
"fileVersion": "3.6.1.0"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"Discord.Net.WebSocket/3.6.1": {
|
|
||||||
"dependencies": {
|
|
||||||
"Discord.Net.Core": "3.6.1",
|
|
||||||
"Discord.Net.Rest": "3.6.1"
|
|
||||||
},
|
|
||||||
"runtime": {
|
|
||||||
"lib/net6.0/Discord.Net.WebSocket.dll": {
|
|
||||||
"assemblyVersion": "3.6.1.0",
|
|
||||||
"fileVersion": "3.6.1.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.6.1"
|
|
||||||
},
|
|
||||||
"runtime": {
|
|
||||||
"PluginManager.dll": {}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"libraries": {
|
|
||||||
"EVE_LevelingSystem/1.0.0": {
|
|
||||||
"type": "project",
|
|
||||||
"serviceable": false,
|
|
||||||
"sha512": ""
|
|
||||||
},
|
|
||||||
"Discord.Net/3.6.1": {
|
|
||||||
"type": "package",
|
|
||||||
"serviceable": true,
|
|
||||||
"sha512": "sha512-TfcL/HG57fVt//WVJ2XyF2PlytY9IYkkwwkPLIhvu5FW4wf9rm7+N8RPh4qtELLfsa5ES0FK2RbgYjABRR9AjA==",
|
|
||||||
"path": "discord.net/3.6.1",
|
|
||||||
"hashPath": "discord.net.3.6.1.nupkg.sha512"
|
|
||||||
},
|
|
||||||
"Discord.Net.Commands/3.6.1": {
|
|
||||||
"type": "package",
|
|
||||||
"serviceable": true,
|
|
||||||
"sha512": "sha512-kK7m571yzSzPd93o+n8Z+TfvX62BT1HtOEZIWXKwXWO8itP/sgqBNExjWK/6DOpkbD6+khc2f3rp+TA0rJD88g==",
|
|
||||||
"path": "discord.net.commands/3.6.1",
|
|
||||||
"hashPath": "discord.net.commands.3.6.1.nupkg.sha512"
|
|
||||||
},
|
|
||||||
"Discord.Net.Core/3.6.1": {
|
|
||||||
"type": "package",
|
|
||||||
"serviceable": true,
|
|
||||||
"sha512": "sha512-ibVjQiWzgqh0GyP/GXE2kv3TA/9ysmmNFG/WmRE7GepQQAXXGxVUO9IMJ8h14EvIXMQ0m0DktMe5DkUnilo3Ag==",
|
|
||||||
"path": "discord.net.core/3.6.1",
|
|
||||||
"hashPath": "discord.net.core.3.6.1.nupkg.sha512"
|
|
||||||
},
|
|
||||||
"Discord.Net.Interactions/3.6.1": {
|
|
||||||
"type": "package",
|
|
||||||
"serviceable": true,
|
|
||||||
"sha512": "sha512-WGOxz6SMUu4WS5b/JdrhlwQletcplBIYqvjFBBDfnqE+uNJqcNGtAdyjLqIILfXGx8aSSSSYZSCeAUa7FZ8Yew==",
|
|
||||||
"path": "discord.net.interactions/3.6.1",
|
|
||||||
"hashPath": "discord.net.interactions.3.6.1.nupkg.sha512"
|
|
||||||
},
|
|
||||||
"Discord.Net.Rest/3.6.1": {
|
|
||||||
"type": "package",
|
|
||||||
"serviceable": true,
|
|
||||||
"sha512": "sha512-T7RRThIS23roFEJwTL1l7aawjVyn7ZB5yH3tMge0d6TiCzzp4V4FAZ+ArTt19LHRFhPly90v8V3sWqmTMN+5Zg==",
|
|
||||||
"path": "discord.net.rest/3.6.1",
|
|
||||||
"hashPath": "discord.net.rest.3.6.1.nupkg.sha512"
|
|
||||||
},
|
|
||||||
"Discord.Net.Webhook/3.6.1": {
|
|
||||||
"type": "package",
|
|
||||||
"serviceable": true,
|
|
||||||
"sha512": "sha512-xikKHIGAIMz0BzHkaTKb48DNpFjKW8mvJjLJSezJ1xQOu+laHNk/hav4qxVtyZz7HSI/vGTkmlq9hKVhWzpaUA==",
|
|
||||||
"path": "discord.net.webhook/3.6.1",
|
|
||||||
"hashPath": "discord.net.webhook.3.6.1.nupkg.sha512"
|
|
||||||
},
|
|
||||||
"Discord.Net.WebSocket/3.6.1": {
|
|
||||||
"type": "package",
|
|
||||||
"serviceable": true,
|
|
||||||
"sha512": "sha512-hF22Xy7URlVEDQZ69INOgzPvFUsIDfd+r6U+1yF9HWdBn3d4THnvAAhkv1TraSx/T/MKS7g+jvk/HZ3mh5S3aw==",
|
|
||||||
"path": "discord.net.websocket/3.6.1",
|
|
||||||
"hashPath": "discord.net.websocket.3.6.1.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": ""
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Binary file not shown.
@@ -6,36 +6,49 @@
|
|||||||
"compilationOptions": {},
|
"compilationOptions": {},
|
||||||
"targets": {
|
"targets": {
|
||||||
".NETCoreApp,Version=v6.0": {
|
".NETCoreApp,Version=v6.0": {
|
||||||
"CMD_LevelingSystem/1.0.0": {
|
"Music Commands/1.0.0": {
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"PluginManager": "1.0.0"
|
"PluginManager": "1.0.0",
|
||||||
|
"YoutubeExplode": "6.2.0"
|
||||||
},
|
},
|
||||||
"runtime": {
|
"runtime": {
|
||||||
"CMD_LevelingSystem.dll": {}
|
"Music Commands.dll": {}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"Discord.Net/3.6.1": {
|
"AngleSharp/0.17.0": {
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"Discord.Net.Commands": "3.6.1",
|
"System.Buffers": "4.5.1",
|
||||||
"Discord.Net.Core": "3.6.1",
|
"System.Text.Encoding.CodePages": "5.0.0"
|
||||||
"Discord.Net.Interactions": "3.6.1",
|
},
|
||||||
"Discord.Net.Rest": "3.6.1",
|
"runtime": {
|
||||||
"Discord.Net.WebSocket": "3.6.1",
|
"lib/netstandard2.0/AngleSharp.dll": {
|
||||||
"Discord.Net.Webhook": "3.6.1"
|
"assemblyVersion": "0.17.0.0",
|
||||||
|
"fileVersion": "0.17.0.0"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"Discord.Net.Commands/3.6.1": {
|
"Discord.Net/3.7.2": {
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"Discord.Net.Core": "3.6.1"
|
"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": {
|
"runtime": {
|
||||||
"lib/net6.0/Discord.Net.Commands.dll": {
|
"lib/net6.0/Discord.Net.Commands.dll": {
|
||||||
"assemblyVersion": "3.6.1.0",
|
"assemblyVersion": "3.7.2.0",
|
||||||
"fileVersion": "3.6.1.0"
|
"fileVersion": "3.7.2.0"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"Discord.Net.Core/3.6.1": {
|
"Discord.Net.Core/3.7.2": {
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"Newtonsoft.Json": "13.0.1",
|
"Newtonsoft.Json": "13.0.1",
|
||||||
"System.Collections.Immutable": "5.0.0",
|
"System.Collections.Immutable": "5.0.0",
|
||||||
@@ -44,59 +57,59 @@
|
|||||||
},
|
},
|
||||||
"runtime": {
|
"runtime": {
|
||||||
"lib/net6.0/Discord.Net.Core.dll": {
|
"lib/net6.0/Discord.Net.Core.dll": {
|
||||||
"assemblyVersion": "3.6.1.0",
|
"assemblyVersion": "3.7.2.0",
|
||||||
"fileVersion": "3.6.1.0"
|
"fileVersion": "3.7.2.0"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"Discord.Net.Interactions/3.6.1": {
|
"Discord.Net.Interactions/3.7.2": {
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"Discord.Net.Core": "3.6.1",
|
"Discord.Net.Core": "3.7.2",
|
||||||
"Discord.Net.Rest": "3.6.1",
|
"Discord.Net.Rest": "3.7.2",
|
||||||
"Discord.Net.WebSocket": "3.6.1",
|
"Discord.Net.WebSocket": "3.7.2",
|
||||||
"Microsoft.Extensions.DependencyInjection.Abstractions": "5.0.0",
|
"Microsoft.Extensions.DependencyInjection.Abstractions": "5.0.0",
|
||||||
"System.Collections.Immutable": "5.0.0",
|
"System.Collections.Immutable": "5.0.0",
|
||||||
"System.Reactive": "5.0.0"
|
"System.Reactive": "5.0.0"
|
||||||
},
|
},
|
||||||
"runtime": {
|
"runtime": {
|
||||||
"lib/net6.0/Discord.Net.Interactions.dll": {
|
"lib/net6.0/Discord.Net.Interactions.dll": {
|
||||||
"assemblyVersion": "3.6.1.0",
|
"assemblyVersion": "3.7.2.0",
|
||||||
"fileVersion": "3.6.1.0"
|
"fileVersion": "3.7.2.0"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"Discord.Net.Rest/3.6.1": {
|
"Discord.Net.Rest/3.7.2": {
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"Discord.Net.Core": "3.6.1"
|
"Discord.Net.Core": "3.7.2"
|
||||||
},
|
},
|
||||||
"runtime": {
|
"runtime": {
|
||||||
"lib/net6.0/Discord.Net.Rest.dll": {
|
"lib/net6.0/Discord.Net.Rest.dll": {
|
||||||
"assemblyVersion": "3.6.1.0",
|
"assemblyVersion": "3.7.2.0",
|
||||||
"fileVersion": "3.6.1.0"
|
"fileVersion": "3.7.2.0"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"Discord.Net.Webhook/3.6.1": {
|
"Discord.Net.Webhook/3.7.2": {
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"Discord.Net.Core": "3.6.1",
|
"Discord.Net.Core": "3.7.2",
|
||||||
"Discord.Net.Rest": "3.6.1"
|
"Discord.Net.Rest": "3.7.2"
|
||||||
},
|
},
|
||||||
"runtime": {
|
"runtime": {
|
||||||
"lib/net6.0/Discord.Net.Webhook.dll": {
|
"lib/net6.0/Discord.Net.Webhook.dll": {
|
||||||
"assemblyVersion": "3.6.1.0",
|
"assemblyVersion": "3.7.2.0",
|
||||||
"fileVersion": "3.6.1.0"
|
"fileVersion": "3.7.2.0"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"Discord.Net.WebSocket/3.6.1": {
|
"Discord.Net.WebSocket/3.7.2": {
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"Discord.Net.Core": "3.6.1",
|
"Discord.Net.Core": "3.7.2",
|
||||||
"Discord.Net.Rest": "3.6.1"
|
"Discord.Net.Rest": "3.7.2"
|
||||||
},
|
},
|
||||||
"runtime": {
|
"runtime": {
|
||||||
"lib/net6.0/Discord.Net.WebSocket.dll": {
|
"lib/net6.0/Discord.Net.WebSocket.dll": {
|
||||||
"assemblyVersion": "3.6.1.0",
|
"assemblyVersion": "3.7.2.0",
|
||||||
"fileVersion": "3.6.1.0"
|
"fileVersion": "3.7.2.0"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -108,6 +121,7 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"Microsoft.NETCore.Platforms/5.0.0": {},
|
||||||
"Newtonsoft.Json/13.0.1": {
|
"Newtonsoft.Json/13.0.1": {
|
||||||
"runtime": {
|
"runtime": {
|
||||||
"lib/netstandard2.0/Newtonsoft.Json.dll": {
|
"lib/netstandard2.0/Newtonsoft.Json.dll": {
|
||||||
@@ -116,6 +130,7 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"System.Buffers/4.5.1": {},
|
||||||
"System.Collections.Immutable/5.0.0": {},
|
"System.Collections.Immutable/5.0.0": {},
|
||||||
"System.Interactive.Async/5.0.0": {
|
"System.Interactive.Async/5.0.0": {
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
@@ -144,10 +159,26 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"System.Text.Encoding.CodePages/5.0.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"Microsoft.NETCore.Platforms": "5.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"System.ValueTuple/4.5.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": {
|
"PluginManager/1.0.0": {
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"Discord.Net": "3.6.1"
|
"Discord.Net": "3.7.2"
|
||||||
},
|
},
|
||||||
"runtime": {
|
"runtime": {
|
||||||
"PluginManager.dll": {}
|
"PluginManager.dll": {}
|
||||||
@@ -156,59 +187,66 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"libraries": {
|
"libraries": {
|
||||||
"CMD_LevelingSystem/1.0.0": {
|
"Music Commands/1.0.0": {
|
||||||
"type": "project",
|
"type": "project",
|
||||||
"serviceable": false,
|
"serviceable": false,
|
||||||
"sha512": ""
|
"sha512": ""
|
||||||
},
|
},
|
||||||
"Discord.Net/3.6.1": {
|
"AngleSharp/0.17.0": {
|
||||||
"type": "package",
|
"type": "package",
|
||||||
"serviceable": true,
|
"serviceable": true,
|
||||||
"sha512": "sha512-TfcL/HG57fVt//WVJ2XyF2PlytY9IYkkwwkPLIhvu5FW4wf9rm7+N8RPh4qtELLfsa5ES0FK2RbgYjABRR9AjA==",
|
"sha512": "sha512-74haoXINcj4SdMsmiNzk+9VUwIX1U9P61O6AZd5Uao8SGNnJJB8Y/r8VJRc8orn4c7Vk/oURAKSNF9XcSDxbfA==",
|
||||||
"path": "discord.net/3.6.1",
|
"path": "anglesharp/0.17.0",
|
||||||
"hashPath": "discord.net.3.6.1.nupkg.sha512"
|
"hashPath": "anglesharp.0.17.0.nupkg.sha512"
|
||||||
},
|
},
|
||||||
"Discord.Net.Commands/3.6.1": {
|
"Discord.Net/3.7.2": {
|
||||||
"type": "package",
|
"type": "package",
|
||||||
"serviceable": true,
|
"serviceable": true,
|
||||||
"sha512": "sha512-kK7m571yzSzPd93o+n8Z+TfvX62BT1HtOEZIWXKwXWO8itP/sgqBNExjWK/6DOpkbD6+khc2f3rp+TA0rJD88g==",
|
"sha512": "sha512-FAiCLGu5rp6+Z10FjKbbJ6LLpKjbMBGpozixkJlz5LZvuncPx8f4AWFAw7pBecKUuAh983qiZ8CZYZcNXsI4qg==",
|
||||||
"path": "discord.net.commands/3.6.1",
|
"path": "discord.net/3.7.2",
|
||||||
"hashPath": "discord.net.commands.3.6.1.nupkg.sha512"
|
"hashPath": "discord.net.3.7.2.nupkg.sha512"
|
||||||
},
|
},
|
||||||
"Discord.Net.Core/3.6.1": {
|
"Discord.Net.Commands/3.7.2": {
|
||||||
"type": "package",
|
"type": "package",
|
||||||
"serviceable": true,
|
"serviceable": true,
|
||||||
"sha512": "sha512-ibVjQiWzgqh0GyP/GXE2kv3TA/9ysmmNFG/WmRE7GepQQAXXGxVUO9IMJ8h14EvIXMQ0m0DktMe5DkUnilo3Ag==",
|
"sha512": "sha512-aOEGP04X64htsTr7ozKj9qHpmvOfitSw5gfR8Tw9TX0+FdswD2LNL2KfOAIaxRKZmRTm34aXQEJrVq0K8AptmQ==",
|
||||||
"path": "discord.net.core/3.6.1",
|
"path": "discord.net.commands/3.7.2",
|
||||||
"hashPath": "discord.net.core.3.6.1.nupkg.sha512"
|
"hashPath": "discord.net.commands.3.7.2.nupkg.sha512"
|
||||||
},
|
},
|
||||||
"Discord.Net.Interactions/3.6.1": {
|
"Discord.Net.Core/3.7.2": {
|
||||||
"type": "package",
|
"type": "package",
|
||||||
"serviceable": true,
|
"serviceable": true,
|
||||||
"sha512": "sha512-WGOxz6SMUu4WS5b/JdrhlwQletcplBIYqvjFBBDfnqE+uNJqcNGtAdyjLqIILfXGx8aSSSSYZSCeAUa7FZ8Yew==",
|
"sha512": "sha512-apwswc6LjN4dj3u27SO3Hr56Jzl91wzReahieoD7IQhV+BJQaRxhTRiEEWFTrBzHfeFHEOQ7r6vZnra3zeFhKA==",
|
||||||
"path": "discord.net.interactions/3.6.1",
|
"path": "discord.net.core/3.7.2",
|
||||||
"hashPath": "discord.net.interactions.3.6.1.nupkg.sha512"
|
"hashPath": "discord.net.core.3.7.2.nupkg.sha512"
|
||||||
},
|
},
|
||||||
"Discord.Net.Rest/3.6.1": {
|
"Discord.Net.Interactions/3.7.2": {
|
||||||
"type": "package",
|
"type": "package",
|
||||||
"serviceable": true,
|
"serviceable": true,
|
||||||
"sha512": "sha512-T7RRThIS23roFEJwTL1l7aawjVyn7ZB5yH3tMge0d6TiCzzp4V4FAZ+ArTt19LHRFhPly90v8V3sWqmTMN+5Zg==",
|
"sha512": "sha512-dwGhEdDB0yyo/lGtjwIDVZmsuD52di7lIZWu/sBtvvA05dMgYZq5S6ILdsBXjOyaHeXd+EV4YMlj2VS/rm619w==",
|
||||||
"path": "discord.net.rest/3.6.1",
|
"path": "discord.net.interactions/3.7.2",
|
||||||
"hashPath": "discord.net.rest.3.6.1.nupkg.sha512"
|
"hashPath": "discord.net.interactions.3.7.2.nupkg.sha512"
|
||||||
},
|
},
|
||||||
"Discord.Net.Webhook/3.6.1": {
|
"Discord.Net.Rest/3.7.2": {
|
||||||
"type": "package",
|
"type": "package",
|
||||||
"serviceable": true,
|
"serviceable": true,
|
||||||
"sha512": "sha512-xikKHIGAIMz0BzHkaTKb48DNpFjKW8mvJjLJSezJ1xQOu+laHNk/hav4qxVtyZz7HSI/vGTkmlq9hKVhWzpaUA==",
|
"sha512": "sha512-dyp8YaMBNJ837EH1KNz2PNGZqc2y71WFd1+pdldF+pLQJ3Gf/+V7685paAR7bQw7yFNyqEBR/QRBCNp+QIQ7Wg==",
|
||||||
"path": "discord.net.webhook/3.6.1",
|
"path": "discord.net.rest/3.7.2",
|
||||||
"hashPath": "discord.net.webhook.3.6.1.nupkg.sha512"
|
"hashPath": "discord.net.rest.3.7.2.nupkg.sha512"
|
||||||
},
|
},
|
||||||
"Discord.Net.WebSocket/3.6.1": {
|
"Discord.Net.Webhook/3.7.2": {
|
||||||
"type": "package",
|
"type": "package",
|
||||||
"serviceable": true,
|
"serviceable": true,
|
||||||
"sha512": "sha512-hF22Xy7URlVEDQZ69INOgzPvFUsIDfd+r6U+1yF9HWdBn3d4THnvAAhkv1TraSx/T/MKS7g+jvk/HZ3mh5S3aw==",
|
"sha512": "sha512-da3i/mTq2y7mfj3xlHH14S4PivHbflJCVr8OUikJtQrxBOxvPkqP7ZYk3Y9S28q0K8qik+TUjCcjL5gELKrh/A==",
|
||||||
"path": "discord.net.websocket/3.6.1",
|
"path": "discord.net.webhook/3.7.2",
|
||||||
"hashPath": "discord.net.websocket.3.6.1.nupkg.sha512"
|
"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": {
|
"Microsoft.Extensions.DependencyInjection.Abstractions/5.0.0": {
|
||||||
"type": "package",
|
"type": "package",
|
||||||
@@ -217,6 +255,13 @@
|
|||||||
"path": "microsoft.extensions.dependencyinjection.abstractions/5.0.0",
|
"path": "microsoft.extensions.dependencyinjection.abstractions/5.0.0",
|
||||||
"hashPath": "microsoft.extensions.dependencyinjection.abstractions.5.0.0.nupkg.sha512"
|
"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": {
|
"Newtonsoft.Json/13.0.1": {
|
||||||
"type": "package",
|
"type": "package",
|
||||||
"serviceable": true,
|
"serviceable": true,
|
||||||
@@ -224,6 +269,13 @@
|
|||||||
"path": "newtonsoft.json/13.0.1",
|
"path": "newtonsoft.json/13.0.1",
|
||||||
"hashPath": "newtonsoft.json.13.0.1.nupkg.sha512"
|
"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": {
|
"System.Collections.Immutable/5.0.0": {
|
||||||
"type": "package",
|
"type": "package",
|
||||||
"serviceable": true,
|
"serviceable": true,
|
||||||
@@ -252,6 +304,13 @@
|
|||||||
"path": "system.reactive/5.0.0",
|
"path": "system.reactive/5.0.0",
|
||||||
"hashPath": "system.reactive.5.0.0.nupkg.sha512"
|
"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": {
|
"System.ValueTuple/4.5.0": {
|
||||||
"type": "package",
|
"type": "package",
|
||||||
"serviceable": true,
|
"serviceable": true,
|
||||||
@@ -259,6 +318,13 @@
|
|||||||
"path": "system.valuetuple/4.5.0",
|
"path": "system.valuetuple/4.5.0",
|
||||||
"hashPath": "system.valuetuple.4.5.0.nupkg.sha512"
|
"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": {
|
"PluginManager/1.0.0": {
|
||||||
"type": "project",
|
"type": "project",
|
||||||
"serviceable": false,
|
"serviceable": false,
|
||||||
BIN
BUILDS/net6.0/Music Commands.dll
Normal file
BIN
BUILDS/net6.0/Music Commands.dll
Normal file
Binary file not shown.
@@ -1,268 +0,0 @@
|
|||||||
{
|
|
||||||
"runtimeTarget": {
|
|
||||||
"name": ".NETCoreApp,Version=v6.0",
|
|
||||||
"signature": ""
|
|
||||||
},
|
|
||||||
"compilationOptions": {},
|
|
||||||
"targets": {
|
|
||||||
".NETCoreApp,Version=v6.0": {
|
|
||||||
"MusicCommands/1.0.0": {
|
|
||||||
"dependencies": {
|
|
||||||
"PluginManager": "1.0.0"
|
|
||||||
},
|
|
||||||
"runtime": {
|
|
||||||
"MusicCommands.dll": {}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"Discord.Net/3.6.1": {
|
|
||||||
"dependencies": {
|
|
||||||
"Discord.Net.Commands": "3.6.1",
|
|
||||||
"Discord.Net.Core": "3.6.1",
|
|
||||||
"Discord.Net.Interactions": "3.6.1",
|
|
||||||
"Discord.Net.Rest": "3.6.1",
|
|
||||||
"Discord.Net.WebSocket": "3.6.1",
|
|
||||||
"Discord.Net.Webhook": "3.6.1"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"Discord.Net.Commands/3.6.1": {
|
|
||||||
"dependencies": {
|
|
||||||
"Discord.Net.Core": "3.6.1"
|
|
||||||
},
|
|
||||||
"runtime": {
|
|
||||||
"lib/net6.0/Discord.Net.Commands.dll": {
|
|
||||||
"assemblyVersion": "3.6.1.0",
|
|
||||||
"fileVersion": "3.6.1.0"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"Discord.Net.Core/3.6.1": {
|
|
||||||
"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.6.1.0",
|
|
||||||
"fileVersion": "3.6.1.0"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"Discord.Net.Interactions/3.6.1": {
|
|
||||||
"dependencies": {
|
|
||||||
"Discord.Net.Core": "3.6.1",
|
|
||||||
"Discord.Net.Rest": "3.6.1",
|
|
||||||
"Discord.Net.WebSocket": "3.6.1",
|
|
||||||
"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.6.1.0",
|
|
||||||
"fileVersion": "3.6.1.0"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"Discord.Net.Rest/3.6.1": {
|
|
||||||
"dependencies": {
|
|
||||||
"Discord.Net.Core": "3.6.1"
|
|
||||||
},
|
|
||||||
"runtime": {
|
|
||||||
"lib/net6.0/Discord.Net.Rest.dll": {
|
|
||||||
"assemblyVersion": "3.6.1.0",
|
|
||||||
"fileVersion": "3.6.1.0"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"Discord.Net.Webhook/3.6.1": {
|
|
||||||
"dependencies": {
|
|
||||||
"Discord.Net.Core": "3.6.1",
|
|
||||||
"Discord.Net.Rest": "3.6.1"
|
|
||||||
},
|
|
||||||
"runtime": {
|
|
||||||
"lib/net6.0/Discord.Net.Webhook.dll": {
|
|
||||||
"assemblyVersion": "3.6.1.0",
|
|
||||||
"fileVersion": "3.6.1.0"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"Discord.Net.WebSocket/3.6.1": {
|
|
||||||
"dependencies": {
|
|
||||||
"Discord.Net.Core": "3.6.1",
|
|
||||||
"Discord.Net.Rest": "3.6.1"
|
|
||||||
},
|
|
||||||
"runtime": {
|
|
||||||
"lib/net6.0/Discord.Net.WebSocket.dll": {
|
|
||||||
"assemblyVersion": "3.6.1.0",
|
|
||||||
"fileVersion": "3.6.1.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.6.1"
|
|
||||||
},
|
|
||||||
"runtime": {
|
|
||||||
"PluginManager.dll": {}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"libraries": {
|
|
||||||
"MusicCommands/1.0.0": {
|
|
||||||
"type": "project",
|
|
||||||
"serviceable": false,
|
|
||||||
"sha512": ""
|
|
||||||
},
|
|
||||||
"Discord.Net/3.6.1": {
|
|
||||||
"type": "package",
|
|
||||||
"serviceable": true,
|
|
||||||
"sha512": "sha512-TfcL/HG57fVt//WVJ2XyF2PlytY9IYkkwwkPLIhvu5FW4wf9rm7+N8RPh4qtELLfsa5ES0FK2RbgYjABRR9AjA==",
|
|
||||||
"path": "discord.net/3.6.1",
|
|
||||||
"hashPath": "discord.net.3.6.1.nupkg.sha512"
|
|
||||||
},
|
|
||||||
"Discord.Net.Commands/3.6.1": {
|
|
||||||
"type": "package",
|
|
||||||
"serviceable": true,
|
|
||||||
"sha512": "sha512-kK7m571yzSzPd93o+n8Z+TfvX62BT1HtOEZIWXKwXWO8itP/sgqBNExjWK/6DOpkbD6+khc2f3rp+TA0rJD88g==",
|
|
||||||
"path": "discord.net.commands/3.6.1",
|
|
||||||
"hashPath": "discord.net.commands.3.6.1.nupkg.sha512"
|
|
||||||
},
|
|
||||||
"Discord.Net.Core/3.6.1": {
|
|
||||||
"type": "package",
|
|
||||||
"serviceable": true,
|
|
||||||
"sha512": "sha512-ibVjQiWzgqh0GyP/GXE2kv3TA/9ysmmNFG/WmRE7GepQQAXXGxVUO9IMJ8h14EvIXMQ0m0DktMe5DkUnilo3Ag==",
|
|
||||||
"path": "discord.net.core/3.6.1",
|
|
||||||
"hashPath": "discord.net.core.3.6.1.nupkg.sha512"
|
|
||||||
},
|
|
||||||
"Discord.Net.Interactions/3.6.1": {
|
|
||||||
"type": "package",
|
|
||||||
"serviceable": true,
|
|
||||||
"sha512": "sha512-WGOxz6SMUu4WS5b/JdrhlwQletcplBIYqvjFBBDfnqE+uNJqcNGtAdyjLqIILfXGx8aSSSSYZSCeAUa7FZ8Yew==",
|
|
||||||
"path": "discord.net.interactions/3.6.1",
|
|
||||||
"hashPath": "discord.net.interactions.3.6.1.nupkg.sha512"
|
|
||||||
},
|
|
||||||
"Discord.Net.Rest/3.6.1": {
|
|
||||||
"type": "package",
|
|
||||||
"serviceable": true,
|
|
||||||
"sha512": "sha512-T7RRThIS23roFEJwTL1l7aawjVyn7ZB5yH3tMge0d6TiCzzp4V4FAZ+ArTt19LHRFhPly90v8V3sWqmTMN+5Zg==",
|
|
||||||
"path": "discord.net.rest/3.6.1",
|
|
||||||
"hashPath": "discord.net.rest.3.6.1.nupkg.sha512"
|
|
||||||
},
|
|
||||||
"Discord.Net.Webhook/3.6.1": {
|
|
||||||
"type": "package",
|
|
||||||
"serviceable": true,
|
|
||||||
"sha512": "sha512-xikKHIGAIMz0BzHkaTKb48DNpFjKW8mvJjLJSezJ1xQOu+laHNk/hav4qxVtyZz7HSI/vGTkmlq9hKVhWzpaUA==",
|
|
||||||
"path": "discord.net.webhook/3.6.1",
|
|
||||||
"hashPath": "discord.net.webhook.3.6.1.nupkg.sha512"
|
|
||||||
},
|
|
||||||
"Discord.Net.WebSocket/3.6.1": {
|
|
||||||
"type": "package",
|
|
||||||
"serviceable": true,
|
|
||||||
"sha512": "sha512-hF22Xy7URlVEDQZ69INOgzPvFUsIDfd+r6U+1yF9HWdBn3d4THnvAAhkv1TraSx/T/MKS7g+jvk/HZ3mh5S3aw==",
|
|
||||||
"path": "discord.net.websocket/3.6.1",
|
|
||||||
"hashPath": "discord.net.websocket.3.6.1.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": ""
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Binary file not shown.
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.
@@ -1,268 +0,0 @@
|
|||||||
{
|
|
||||||
"runtimeTarget": {
|
|
||||||
"name": ".NETCoreApp,Version=v6.0",
|
|
||||||
"signature": ""
|
|
||||||
},
|
|
||||||
"compilationOptions": {},
|
|
||||||
"targets": {
|
|
||||||
".NETCoreApp,Version=v6.0": {
|
|
||||||
"StartupEvents/1.0.0": {
|
|
||||||
"dependencies": {
|
|
||||||
"PluginManager": "1.0.0"
|
|
||||||
},
|
|
||||||
"runtime": {
|
|
||||||
"StartupEvents.dll": {}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"Discord.Net/3.6.1": {
|
|
||||||
"dependencies": {
|
|
||||||
"Discord.Net.Commands": "3.6.1",
|
|
||||||
"Discord.Net.Core": "3.6.1",
|
|
||||||
"Discord.Net.Interactions": "3.6.1",
|
|
||||||
"Discord.Net.Rest": "3.6.1",
|
|
||||||
"Discord.Net.WebSocket": "3.6.1",
|
|
||||||
"Discord.Net.Webhook": "3.6.1"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"Discord.Net.Commands/3.6.1": {
|
|
||||||
"dependencies": {
|
|
||||||
"Discord.Net.Core": "3.6.1"
|
|
||||||
},
|
|
||||||
"runtime": {
|
|
||||||
"lib/net6.0/Discord.Net.Commands.dll": {
|
|
||||||
"assemblyVersion": "3.6.1.0",
|
|
||||||
"fileVersion": "3.6.1.0"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"Discord.Net.Core/3.6.1": {
|
|
||||||
"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.6.1.0",
|
|
||||||
"fileVersion": "3.6.1.0"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"Discord.Net.Interactions/3.6.1": {
|
|
||||||
"dependencies": {
|
|
||||||
"Discord.Net.Core": "3.6.1",
|
|
||||||
"Discord.Net.Rest": "3.6.1",
|
|
||||||
"Discord.Net.WebSocket": "3.6.1",
|
|
||||||
"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.6.1.0",
|
|
||||||
"fileVersion": "3.6.1.0"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"Discord.Net.Rest/3.6.1": {
|
|
||||||
"dependencies": {
|
|
||||||
"Discord.Net.Core": "3.6.1"
|
|
||||||
},
|
|
||||||
"runtime": {
|
|
||||||
"lib/net6.0/Discord.Net.Rest.dll": {
|
|
||||||
"assemblyVersion": "3.6.1.0",
|
|
||||||
"fileVersion": "3.6.1.0"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"Discord.Net.Webhook/3.6.1": {
|
|
||||||
"dependencies": {
|
|
||||||
"Discord.Net.Core": "3.6.1",
|
|
||||||
"Discord.Net.Rest": "3.6.1"
|
|
||||||
},
|
|
||||||
"runtime": {
|
|
||||||
"lib/net6.0/Discord.Net.Webhook.dll": {
|
|
||||||
"assemblyVersion": "3.6.1.0",
|
|
||||||
"fileVersion": "3.6.1.0"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"Discord.Net.WebSocket/3.6.1": {
|
|
||||||
"dependencies": {
|
|
||||||
"Discord.Net.Core": "3.6.1",
|
|
||||||
"Discord.Net.Rest": "3.6.1"
|
|
||||||
},
|
|
||||||
"runtime": {
|
|
||||||
"lib/net6.0/Discord.Net.WebSocket.dll": {
|
|
||||||
"assemblyVersion": "3.6.1.0",
|
|
||||||
"fileVersion": "3.6.1.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.6.1"
|
|
||||||
},
|
|
||||||
"runtime": {
|
|
||||||
"PluginManager.dll": {}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"libraries": {
|
|
||||||
"StartupEvents/1.0.0": {
|
|
||||||
"type": "project",
|
|
||||||
"serviceable": false,
|
|
||||||
"sha512": ""
|
|
||||||
},
|
|
||||||
"Discord.Net/3.6.1": {
|
|
||||||
"type": "package",
|
|
||||||
"serviceable": true,
|
|
||||||
"sha512": "sha512-TfcL/HG57fVt//WVJ2XyF2PlytY9IYkkwwkPLIhvu5FW4wf9rm7+N8RPh4qtELLfsa5ES0FK2RbgYjABRR9AjA==",
|
|
||||||
"path": "discord.net/3.6.1",
|
|
||||||
"hashPath": "discord.net.3.6.1.nupkg.sha512"
|
|
||||||
},
|
|
||||||
"Discord.Net.Commands/3.6.1": {
|
|
||||||
"type": "package",
|
|
||||||
"serviceable": true,
|
|
||||||
"sha512": "sha512-kK7m571yzSzPd93o+n8Z+TfvX62BT1HtOEZIWXKwXWO8itP/sgqBNExjWK/6DOpkbD6+khc2f3rp+TA0rJD88g==",
|
|
||||||
"path": "discord.net.commands/3.6.1",
|
|
||||||
"hashPath": "discord.net.commands.3.6.1.nupkg.sha512"
|
|
||||||
},
|
|
||||||
"Discord.Net.Core/3.6.1": {
|
|
||||||
"type": "package",
|
|
||||||
"serviceable": true,
|
|
||||||
"sha512": "sha512-ibVjQiWzgqh0GyP/GXE2kv3TA/9ysmmNFG/WmRE7GepQQAXXGxVUO9IMJ8h14EvIXMQ0m0DktMe5DkUnilo3Ag==",
|
|
||||||
"path": "discord.net.core/3.6.1",
|
|
||||||
"hashPath": "discord.net.core.3.6.1.nupkg.sha512"
|
|
||||||
},
|
|
||||||
"Discord.Net.Interactions/3.6.1": {
|
|
||||||
"type": "package",
|
|
||||||
"serviceable": true,
|
|
||||||
"sha512": "sha512-WGOxz6SMUu4WS5b/JdrhlwQletcplBIYqvjFBBDfnqE+uNJqcNGtAdyjLqIILfXGx8aSSSSYZSCeAUa7FZ8Yew==",
|
|
||||||
"path": "discord.net.interactions/3.6.1",
|
|
||||||
"hashPath": "discord.net.interactions.3.6.1.nupkg.sha512"
|
|
||||||
},
|
|
||||||
"Discord.Net.Rest/3.6.1": {
|
|
||||||
"type": "package",
|
|
||||||
"serviceable": true,
|
|
||||||
"sha512": "sha512-T7RRThIS23roFEJwTL1l7aawjVyn7ZB5yH3tMge0d6TiCzzp4V4FAZ+ArTt19LHRFhPly90v8V3sWqmTMN+5Zg==",
|
|
||||||
"path": "discord.net.rest/3.6.1",
|
|
||||||
"hashPath": "discord.net.rest.3.6.1.nupkg.sha512"
|
|
||||||
},
|
|
||||||
"Discord.Net.Webhook/3.6.1": {
|
|
||||||
"type": "package",
|
|
||||||
"serviceable": true,
|
|
||||||
"sha512": "sha512-xikKHIGAIMz0BzHkaTKb48DNpFjKW8mvJjLJSezJ1xQOu+laHNk/hav4qxVtyZz7HSI/vGTkmlq9hKVhWzpaUA==",
|
|
||||||
"path": "discord.net.webhook/3.6.1",
|
|
||||||
"hashPath": "discord.net.webhook.3.6.1.nupkg.sha512"
|
|
||||||
},
|
|
||||||
"Discord.Net.WebSocket/3.6.1": {
|
|
||||||
"type": "package",
|
|
||||||
"serviceable": true,
|
|
||||||
"sha512": "sha512-hF22Xy7URlVEDQZ69INOgzPvFUsIDfd+r6U+1yF9HWdBn3d4THnvAAhkv1TraSx/T/MKS7g+jvk/HZ3mh5S3aw==",
|
|
||||||
"path": "discord.net.websocket/3.6.1",
|
|
||||||
"hashPath": "discord.net.websocket.3.6.1.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": ""
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Binary file not shown.
@@ -2,16 +2,9 @@
|
|||||||
|
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<TargetFramework>net6.0</TargetFramework>
|
<TargetFramework>net6.0</TargetFramework>
|
||||||
</PropertyGroup>
|
<ImplicitUsings>enable</ImplicitUsings>
|
||||||
|
<Nullable>enable</Nullable>
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
|
<BaseOutputPath>bin\</BaseOutputPath>
|
||||||
<OutputPath>..\BUILDS\</OutputPath>
|
|
||||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
|
||||||
<ErrorReport>prompt</ErrorReport>
|
|
||||||
<DebugType>none</DebugType>
|
|
||||||
<DebugSymbols>false</DebugSymbols>
|
|
||||||
<TreatWarningsAsErrors>false</TreatWarningsAsErrors>
|
|
||||||
<WarningsAsErrors />
|
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
|||||||
@@ -1,61 +0,0 @@
|
|||||||
using Discord;
|
|
||||||
using Discord.Commands;
|
|
||||||
using Discord.WebSocket;
|
|
||||||
|
|
||||||
using PluginManager.Interfaces;
|
|
||||||
using PluginManager.LanguageSystem;
|
|
||||||
|
|
||||||
using System;
|
|
||||||
|
|
||||||
|
|
||||||
public class level : DBCommand
|
|
||||||
{
|
|
||||||
public string Command => "rank";
|
|
||||||
|
|
||||||
public string Description => "Display your current level";
|
|
||||||
|
|
||||||
public string Usage => "rank";
|
|
||||||
|
|
||||||
public bool canUseDM => false;
|
|
||||||
|
|
||||||
public bool canUseServer => true;
|
|
||||||
|
|
||||||
public bool requireAdmin => false;
|
|
||||||
|
|
||||||
public async void Execute(SocketCommandContext context, SocketMessage message, DiscordSocketClient client, bool isDM)
|
|
||||||
{
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
int cLv = Data.GetLevel(message.Author.Id);
|
|
||||||
Int64 cEXP = Data.GetExp(message.Author.Id);
|
|
||||||
Int64 rEXP = Data.GetReqEXP(message.Author.Id);
|
|
||||||
|
|
||||||
var embed = new EmbedBuilder()
|
|
||||||
{
|
|
||||||
Title = "Leveling System",
|
|
||||||
Description = message.Author.Mention
|
|
||||||
};
|
|
||||||
Random r = new Random();
|
|
||||||
int _r = r.Next(0, 256);
|
|
||||||
int _g = r.Next(0, 256);
|
|
||||||
int _b = r.Next(0, 256);
|
|
||||||
embed.WithColor(new Color(_r, _g, _b));
|
|
||||||
embed.AddField("Level", cLv);
|
|
||||||
embed.AddField("Current EXP", cEXP);
|
|
||||||
embed.AddField("Required Exp to Level up", rEXP);
|
|
||||||
embed.WithCurrentTimestamp();
|
|
||||||
await message.Channel.SendMessageAsync(embed: embed.Build());
|
|
||||||
}
|
|
||||||
catch
|
|
||||||
{
|
|
||||||
if (Language.ActiveLanguage != null)
|
|
||||||
await message.Channel.SendMessageAsync(Language.ActiveLanguage.LanguageWords["DB_COMMAND_RANK_NO_RANK"]);
|
|
||||||
else await message.Channel.SendMessageAsync("You are unranked now. Please type a message in chat that is not a command and try again this command");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -1,62 +0,0 @@
|
|||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.IO;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
public class Core
|
|
||||||
{
|
|
||||||
|
|
||||||
public static Dictionary<ulong, string> playerMessages = new Dictionary<ulong, string>();
|
|
||||||
|
|
||||||
private static readonly string folder = @".\Data\Resources\LevelingSystem\";
|
|
||||||
|
|
||||||
public static int GetLevel(ulong id) => int.Parse(File.ReadAllText(Path.Combine(folder, id.ToString() + ".data")).Split(',')[0].Split('=')[1]);
|
|
||||||
|
|
||||||
|
|
||||||
public static Int64 GetExp(ulong id) => Int64.Parse(File.ReadAllText(Path.Combine(folder, id.ToString() + ".data")).Split(',')[1].Split('=')[1]);
|
|
||||||
|
|
||||||
|
|
||||||
public static Int64 GetReqEXP(ulong id) => Int64.Parse(File.ReadAllText(Path.Combine(folder, id.ToString() + ".data")).Split(',')[2].Split('=')[1]);
|
|
||||||
public static void SaveData(ulong id, int lv, Int64 cexp, Int64 rexp)
|
|
||||||
{
|
|
||||||
Directory.CreateDirectory(folder);
|
|
||||||
File.WriteAllText(Path.Combine(folder, id.ToString() + ".data"), $"Level={lv},EXP={cexp},REXP={rexp}");
|
|
||||||
}
|
|
||||||
private static Int64 NextLevelXP(int level)
|
|
||||||
{
|
|
||||||
return (level * level) + 2 * level + 75;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static (bool, int) MessageSent(ulong id, int messageLength)
|
|
||||||
{
|
|
||||||
WaitForTimeToRemoveFromList(id, 60);
|
|
||||||
|
|
||||||
if (!File.Exists(Path.Combine(folder, id.ToString() + ".data")))
|
|
||||||
{
|
|
||||||
SaveData(id, 0, 0, 0);
|
|
||||||
}
|
|
||||||
Int64 cEXp = GetExp(id);
|
|
||||||
Int64 rExp = GetReqEXP(id);
|
|
||||||
int random = new System.Random().Next(3, 6) + messageLength;
|
|
||||||
cEXp += random;
|
|
||||||
if (cEXp >= rExp)
|
|
||||||
{
|
|
||||||
cEXp = cEXp - rExp;
|
|
||||||
int lv = GetLevel(id);
|
|
||||||
rExp = NextLevelXP(lv);
|
|
||||||
lv++;
|
|
||||||
SaveData(id, lv, cEXp, rExp);
|
|
||||||
return (true, lv);
|
|
||||||
}
|
|
||||||
|
|
||||||
SaveData(id, GetLevel(id), cEXp, rExp);
|
|
||||||
return (false, -1);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static async void WaitForTimeToRemoveFromList(ulong id, int time_seconds)
|
|
||||||
{
|
|
||||||
await Task.Delay(time_seconds * 1000);
|
|
||||||
playerMessages.Remove(id);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,24 +0,0 @@
|
|||||||
using Discord.WebSocket;
|
|
||||||
|
|
||||||
using System;
|
|
||||||
using System.IO;
|
|
||||||
public static class Data
|
|
||||||
{
|
|
||||||
private static readonly string folder = @".\Data\Resources\LevelingSystem\";
|
|
||||||
public static void registerPlayer(SocketGuildUser user)
|
|
||||||
{
|
|
||||||
ulong id = user.Id;
|
|
||||||
Directory.CreateDirectory(folder);
|
|
||||||
File.WriteAllText(Path.Combine(folder, id.ToString() + ".data"), "Level=0,EXP=0,REXP=100");
|
|
||||||
}
|
|
||||||
|
|
||||||
public static int GetLevel(ulong id) => int.Parse(File.ReadAllText(Path.Combine(folder, id.ToString() + ".data")).Split(',')[0].Split('=')[1]);
|
|
||||||
|
|
||||||
|
|
||||||
public static Int64 GetExp(ulong id) => Int64.Parse(File.ReadAllText(Path.Combine(folder, id.ToString() + ".data")).Split(',')[1].Split('=')[1]);
|
|
||||||
|
|
||||||
|
|
||||||
public static Int64 GetReqEXP(ulong id) => Int64.Parse(File.ReadAllText(Path.Combine(folder, id.ToString() + ".data")).Split(',')[2].Split('=')[1]);
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
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; }
|
||||||
|
}
|
||||||
@@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<TargetFramework>net6.0</TargetFramework>
|
<TargetFramework>net6.0</TargetFramework>
|
||||||
|
<BaseOutputPath>bin\</BaseOutputPath>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
|
||||||
|
|||||||
@@ -1,12 +1,14 @@
|
|||||||
using Discord.Commands;
|
using Discord.Commands;
|
||||||
using Discord.WebSocket;
|
using Discord.WebSocket;
|
||||||
|
|
||||||
using PluginManager.Interfaces;
|
using PluginManager.Interfaces;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
|
||||||
internal class Echo : DBCommand
|
internal class Echo : DBCommand
|
||||||
{
|
{
|
||||||
public string Command => "echo";
|
public string Command => "echo";
|
||||||
|
|
||||||
|
public List<string> Aliases => null;
|
||||||
|
|
||||||
public string Description => "Replay with the same message";
|
public string Description => "Replay with the same message";
|
||||||
|
|
||||||
public string Usage => "echo [message]";
|
public string Usage => "echo [message]";
|
||||||
@@ -18,7 +20,7 @@ internal class Echo : DBCommand
|
|||||||
|
|
||||||
public async void Execute(SocketCommandContext context, SocketMessage message, DiscordSocketClient client, bool isDM)
|
public async void Execute(SocketCommandContext context, SocketMessage message, DiscordSocketClient client, bool isDM)
|
||||||
{
|
{
|
||||||
string m = message.Content.Substring(6);
|
var m = message.Content.Substring(6);
|
||||||
await message.Channel.SendMessageAsync(m);
|
await message.Channel.SendMessageAsync(m);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,20 +1,16 @@
|
|||||||
using System;
|
using Discord.Commands;
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
using Discord.Commands;
|
|
||||||
using Discord.WebSocket;
|
using Discord.WebSocket;
|
||||||
|
|
||||||
using PluginManager.Interfaces;
|
using PluginManager.Interfaces;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
|
||||||
namespace CMD_Utils
|
namespace CMD_Utils;
|
||||||
{
|
|
||||||
class FlipCoin : DBCommand
|
internal class FlipCoin : DBCommand
|
||||||
{
|
{
|
||||||
public string Command => "flip";
|
public string Command => "flip";
|
||||||
|
|
||||||
|
public List<string> Aliases => null;
|
||||||
|
|
||||||
public string Description => "Flip a coin";
|
public string Description => "Flip a coin";
|
||||||
|
|
||||||
public string Usage => "flip";
|
public string Usage => "flip";
|
||||||
@@ -27,11 +23,11 @@ namespace CMD_Utils
|
|||||||
|
|
||||||
public async void Execute(SocketCommandContext context, SocketMessage message, DiscordSocketClient client, bool isDM)
|
public async void Execute(SocketCommandContext context, SocketMessage message, DiscordSocketClient client, bool isDM)
|
||||||
{
|
{
|
||||||
System.Random random = new System.Random();
|
var random = new System.Random();
|
||||||
int r = random.Next(1, 3);
|
var r = random.Next(1, 3);
|
||||||
if (r == 1)
|
if (r == 1)
|
||||||
await message.Channel.SendMessageAsync("Heads");
|
await message.Channel.SendMessageAsync("Heads");
|
||||||
else await message.Channel.SendMessageAsync("Tails");
|
else
|
||||||
}
|
await message.Channel.SendMessageAsync("Tails");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,21 +1,18 @@
|
|||||||
using System;
|
using System.Collections.Generic;
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
using Discord;
|
using Discord;
|
||||||
using Discord.Commands;
|
using Discord.Commands;
|
||||||
using Discord.WebSocket;
|
using Discord.WebSocket;
|
||||||
|
|
||||||
using PluginManager.Interfaces;
|
using PluginManager.Interfaces;
|
||||||
|
using PluginManager.Others;
|
||||||
|
|
||||||
|
namespace CMD_Utils;
|
||||||
|
|
||||||
namespace CMD_Utils
|
|
||||||
{
|
|
||||||
public class Poll : DBCommand
|
public class Poll : DBCommand
|
||||||
{
|
{
|
||||||
public string Command => "poll";
|
public string Command => "poll";
|
||||||
|
|
||||||
|
public List<string> Aliases => null;
|
||||||
|
|
||||||
public string Description => "Create a poll with options";
|
public string Description => "Create a poll with options";
|
||||||
|
|
||||||
public string Usage => "poll [This-is-question] [This-is-answer-1] [This-is-answer-2] ... ";
|
public string Usage => "poll [This-is-question] [This-is-answer-1] [This-is-answer-2] ... ";
|
||||||
@@ -29,16 +26,15 @@ namespace CMD_Utils
|
|||||||
public async void Execute(SocketCommandContext context, SocketMessage message, DiscordSocketClient client, bool isDM)
|
public async void Execute(SocketCommandContext context, SocketMessage message, DiscordSocketClient client, bool isDM)
|
||||||
{
|
{
|
||||||
if (isDM) return;
|
if (isDM) return;
|
||||||
string question = message.Content.Split(' ')[1].Replace('-', ' ');
|
var question = message.Content.Split(' ')[1].Replace('-', ' ');
|
||||||
string[] answers = PluginManager.Others.Functions.MergeStrings(message.Content.Split(' '), 2).Split(' ');
|
var answers = Functions.MergeStrings(message.Content.Split(' '), 2).Split(' ');
|
||||||
EmbedBuilder embedBuilder = new EmbedBuilder();
|
var embedBuilder = new EmbedBuilder();
|
||||||
embedBuilder.Title = question;
|
embedBuilder.Title = question;
|
||||||
int len = answers.Length;
|
var len = answers.Length;
|
||||||
for (int i = 0; i < len; i++)
|
for (var i = 0; i < len; i++) embedBuilder.AddField($"Answer {i + 1}", answers[i].Replace('-', ' '), true);
|
||||||
embedBuilder.AddField($"Answer {i + 1}", answers[i].Replace('-', ' '), true);
|
|
||||||
var msg = await context.Channel.SendMessageAsync(embed: embedBuilder.Build());
|
var msg = await context.Channel.SendMessageAsync(embed: embedBuilder.Build());
|
||||||
|
|
||||||
List<IEmote> emotes = new List<IEmote>();
|
var emotes = new List<IEmote>();
|
||||||
emotes.Add(Emoji.Parse(":one:"));
|
emotes.Add(Emoji.Parse(":one:"));
|
||||||
emotes.Add(Emoji.Parse(":two:"));
|
emotes.Add(Emoji.Parse(":two:"));
|
||||||
emotes.Add(Emoji.Parse(":three:"));
|
emotes.Add(Emoji.Parse(":three:"));
|
||||||
@@ -46,8 +42,6 @@ namespace CMD_Utils
|
|||||||
emotes.Add(Emoji.Parse(":five:"));
|
emotes.Add(Emoji.Parse(":five:"));
|
||||||
emotes.Add(Emoji.Parse(":six:"));
|
emotes.Add(Emoji.Parse(":six:"));
|
||||||
|
|
||||||
for (int i = 0; i < len; i++)
|
for (var i = 0; i < len; i++) await msg.AddReactionAsync(emotes[i]);
|
||||||
await msg.AddReactionAsync(emotes[i]);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,12 +1,14 @@
|
|||||||
using Discord.Commands;
|
using System.Collections.Generic;
|
||||||
|
using Discord.Commands;
|
||||||
using Discord.WebSocket;
|
using Discord.WebSocket;
|
||||||
|
|
||||||
using PluginManager.Interfaces;
|
using PluginManager.Interfaces;
|
||||||
|
|
||||||
public class Random : DBCommand
|
public class Random : DBCommand
|
||||||
{
|
{
|
||||||
public string Command => "random";
|
public string Command => "random";
|
||||||
|
|
||||||
|
public List<string> Aliases => new() { "rnd" };
|
||||||
|
|
||||||
public string Description => "random number between number1 and number2";
|
public string Description => "random number between number1 and number2";
|
||||||
|
|
||||||
public string Usage => "random [number1] [number2]";
|
public string Usage => "random [number1] [number2]";
|
||||||
@@ -19,19 +21,18 @@ public class Random : DBCommand
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
string msg = message.Content;
|
var msg = message.Content;
|
||||||
int a = int.Parse(msg.Split(' ')[1]);
|
var a = int.Parse(msg.Split(' ')[1]);
|
||||||
int b = int.Parse(msg.Split(' ')[2]);
|
var b = int.Parse(msg.Split(' ')[2]);
|
||||||
|
|
||||||
if (a > b)
|
if (a > b)
|
||||||
{
|
{
|
||||||
int x = a;
|
var temp = a;
|
||||||
a = b;
|
a = b;
|
||||||
b = x;
|
b = temp;
|
||||||
}
|
}
|
||||||
|
|
||||||
await message.Channel.SendMessageAsync("Your random generated number is " + new System.Random().Next(a, b));
|
await message.Channel.SendMessageAsync("Your random generated number is " + new System.Random().Next(a, b));
|
||||||
|
|
||||||
}
|
}
|
||||||
catch
|
catch
|
||||||
{
|
{
|
||||||
|
|||||||
BIN
DiscordBot.dll
BIN
DiscordBot.dll
Binary file not shown.
@@ -1,16 +1,14 @@
|
|||||||
using Discord;
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using Discord;
|
||||||
using Discord.Commands;
|
using Discord.Commands;
|
||||||
using Discord.WebSocket;
|
using Discord.WebSocket;
|
||||||
|
|
||||||
using PluginManager.Loaders;
|
|
||||||
using PluginManager.Interfaces;
|
using PluginManager.Interfaces;
|
||||||
using PluginManager.Others.Permissions;
|
using PluginManager.Loaders;
|
||||||
using PluginManager.Others;
|
using PluginManager.Others;
|
||||||
|
|
||||||
using System.Collections.Generic;
|
namespace DiscordBot.Discord.Commands;
|
||||||
|
|
||||||
namespace DiscordBot.Discord.Commands
|
|
||||||
{
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The help command
|
/// The help command
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -21,15 +19,17 @@ namespace DiscordBot.Discord.Commands
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public string Command => "help";
|
public string Command => "help";
|
||||||
|
|
||||||
|
public List<string> Aliases => null;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Command Description
|
/// Command Description
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public string Description => "This command allows you to check all loadded commands";
|
public string Description => "This command allows you to check all loaded commands";
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Command usage
|
/// Command usage
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public string Usage => "help";
|
public string Usage => "help <command>";
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Check if the command can be used <inheritdoca DM <see cref="IChannel" />/>
|
/// Check if the command can be used <inheritdoca DM <see cref="IChannel" />/>
|
||||||
@@ -55,53 +55,55 @@ namespace DiscordBot.Discord.Commands
|
|||||||
/// <param name="isDM">True if the message was sent from a DM channel, false otherwise</param>
|
/// <param name="isDM">True if the message was sent from a DM channel, false otherwise</param>
|
||||||
public void Execute(SocketCommandContext context, SocketMessage message, DiscordSocketClient client, bool isDM)
|
public void Execute(SocketCommandContext context, SocketMessage message, DiscordSocketClient client, bool isDM)
|
||||||
{
|
{
|
||||||
List<string> args = Functions.GetArguments(message);
|
var args = Functions.GetArguments(message);
|
||||||
if (args.Count != 0)
|
if (args.Count != 0)
|
||||||
{
|
{
|
||||||
|
|
||||||
foreach (var item in args)
|
foreach (var item in args)
|
||||||
{
|
{
|
||||||
var e = GenerateHelpCommand(item);
|
var e = GenerateHelpCommand(item);
|
||||||
if (e != null)
|
if (e is null)
|
||||||
context.Channel.SendMessageAsync(embed: e.Build());
|
|
||||||
else
|
|
||||||
context.Channel.SendMessageAsync("Unknown Command " + item);
|
context.Channel.SendMessageAsync("Unknown Command " + item);
|
||||||
|
else
|
||||||
|
context.Channel.SendMessageAsync(embed: e.Build());
|
||||||
}
|
}
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
EmbedBuilder embedBuilder = new EmbedBuilder();
|
|
||||||
|
|
||||||
string adminCommands = "";
|
var embedBuilder = new EmbedBuilder();
|
||||||
string normalCommands = "";
|
|
||||||
string DMCommands = "";
|
|
||||||
|
|
||||||
foreach (var cmd in PluginLoader.Plugins!)
|
var adminCommands = "";
|
||||||
|
var normalCommands = "";
|
||||||
|
var DMCommands = "";
|
||||||
|
|
||||||
|
foreach (var cmd in PluginLoader.Commands!)
|
||||||
{
|
{
|
||||||
if (cmd.canUseDM)
|
if (cmd.canUseDM)
|
||||||
DMCommands += cmd.Command + " ";
|
DMCommands += cmd.Command + " ";
|
||||||
if (cmd.requireAdmin)
|
if (cmd.requireAdmin)
|
||||||
adminCommands += cmd.Command + " ";
|
adminCommands += cmd.Command + " ";
|
||||||
else if (cmd.canUseServer) normalCommands += cmd.Command + " ";
|
if (cmd.canUseServer)
|
||||||
|
normalCommands += cmd.Command + " ";
|
||||||
}
|
}
|
||||||
|
|
||||||
embedBuilder.AddField("Admin Commands", adminCommands);
|
embedBuilder.AddField("Admin Commands", adminCommands);
|
||||||
embedBuilder.AddField("Normal Commands", normalCommands);
|
embedBuilder.AddField("Normal Commands", normalCommands);
|
||||||
embedBuilder.AddField("DM Commands", DMCommands);
|
embedBuilder.AddField("DM Commands", DMCommands);
|
||||||
context.Channel.SendMessageAsync(embed: embedBuilder.Build());
|
context.Channel.SendMessageAsync(embed: embedBuilder.Build());
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private EmbedBuilder GenerateHelpCommand(string command)
|
private EmbedBuilder GenerateHelpCommand(string command)
|
||||||
{
|
{
|
||||||
EmbedBuilder embedBuilder = new EmbedBuilder();
|
var embedBuilder = new EmbedBuilder();
|
||||||
DBCommand cmd = PluginLoader.Plugins.Find(p => p.Command == command);
|
var cmd = PluginLoader.Commands!.Find(p => p.Command == command || (p.Aliases is not null && p.Aliases.Contains(command)));
|
||||||
if (cmd == null)
|
if (cmd == null) return null;
|
||||||
return null;
|
|
||||||
|
|
||||||
embedBuilder.AddField("Usage", cmd.Usage);
|
embedBuilder.AddField("Usage", cmd.Usage);
|
||||||
embedBuilder.AddField("Description", cmd.Description);
|
embedBuilder.AddField("Description", cmd.Description);
|
||||||
|
if (cmd.Aliases is null)
|
||||||
|
return embedBuilder;
|
||||||
|
embedBuilder.AddField("Alias", cmd.Aliases.Count == 0 ? "-" : string.Join(", ", cmd.Aliases));
|
||||||
|
|
||||||
return embedBuilder;
|
return embedBuilder;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
@@ -1,16 +1,16 @@
|
|||||||
using System;
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
|
|
||||||
using Discord.WebSocket;
|
using Discord.WebSocket;
|
||||||
|
using PluginManager.Interfaces;
|
||||||
|
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 PluginManager.Interfaces;
|
namespace DiscordBot.Discord.Commands;
|
||||||
using PluginManager.Others.Permissions;
|
|
||||||
using PluginManager.Others;
|
|
||||||
|
|
||||||
namespace DiscordBot.Discord.Commands
|
|
||||||
{
|
|
||||||
internal class Restart : DBCommand
|
internal class Restart : DBCommand
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -18,6 +18,8 @@ namespace DiscordBot.Discord.Commands
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public string Command => "restart";
|
public string Command => "restart";
|
||||||
|
|
||||||
|
public List<string> Aliases => null;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Command Description
|
/// Command Description
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -42,6 +44,7 @@ namespace DiscordBot.Discord.Commands
|
|||||||
/// Check if the command require administrator to be executed
|
/// Check if the command require administrator to be executed
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public bool requireAdmin => false;
|
public bool requireAdmin => false;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The main body of the command
|
/// The main body of the command
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -51,25 +54,27 @@ namespace DiscordBot.Discord.Commands
|
|||||||
/// <param name="isDM">True if the message was sent from a DM channel, false otherwise</param>
|
/// <param name="isDM">True if the message was sent from a DM channel, false otherwise</param>
|
||||||
public async void Execute(DiscordLibCommands.SocketCommandContext context, SocketMessage message, DiscordSocketClient client, bool isDM)
|
public async void Execute(DiscordLibCommands.SocketCommandContext context, SocketMessage message, DiscordSocketClient client, bool isDM)
|
||||||
{
|
{
|
||||||
if (!DiscordPermissions.hasPermission(message.Author as SocketGuildUser, DiscordLib.GuildPermission.Administrator)) return;
|
if (!(message.Author as SocketGuildUser).hasPermission(DiscordLib.GuildPermission.Administrator)) return;
|
||||||
var args = Functions.GetArguments(message);
|
var args = Functions.GetArguments(message);
|
||||||
var OS = Functions.GetOperatingSystem();
|
var OS = Functions.GetOperatingSystem();
|
||||||
if (args.Count == 0)
|
if (args.Count == 0)
|
||||||
{
|
{
|
||||||
switch (OS)
|
switch (OS)
|
||||||
{
|
{
|
||||||
case PluginManager.Others.OperatingSystem.WINDOWS:
|
case OperatingSystem.WINDOWS:
|
||||||
Process.Start("./DiscordBot.exe");
|
Process.Start("./DiscordBot.exe");
|
||||||
break;
|
break;
|
||||||
case PluginManager.Others.OperatingSystem.LINUX:
|
case OperatingSystem.LINUX:
|
||||||
case PluginManager.Others.OperatingSystem.MAC_OS:
|
case OperatingSystem.MAC_OS:
|
||||||
Process.Start("./DiscordBot");
|
Process.Start("./DiscordBot");
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (args[0])
|
switch (args[0])
|
||||||
{
|
{
|
||||||
case "-p":
|
case "-p":
|
||||||
@@ -80,35 +85,32 @@ namespace DiscordBot.Discord.Commands
|
|||||||
break;
|
break;
|
||||||
case "-cmd":
|
case "-cmd":
|
||||||
case "-args":
|
case "-args":
|
||||||
string cmd = "--args";
|
var cmd = "--args";
|
||||||
|
|
||||||
if (args.Count > 1)
|
if (args.Count > 1)
|
||||||
for (int i = 1; i < args.Count; i++)
|
for (var i = 1; i < args.Count; i++)
|
||||||
cmd += $" {args[i]}";
|
cmd += $" {args[i]}";
|
||||||
|
|
||||||
|
|
||||||
switch (OS)
|
switch (OS)
|
||||||
{
|
{
|
||||||
case PluginManager.Others.OperatingSystem.WINDOWS:
|
case OperatingSystem.WINDOWS:
|
||||||
Functions.WriteLogFile("Restarting the bot with the following arguments: \"" + cmd + "\"");
|
Functions.WriteLogFile("Restarting the bot with the following arguments: \"" + cmd + "\"");
|
||||||
Process.Start("./DiscordBot.exe", cmd);
|
Process.Start("./DiscordBot.exe", cmd);
|
||||||
break;
|
break;
|
||||||
case PluginManager.Others.OperatingSystem.LINUX:
|
case OperatingSystem.LINUX:
|
||||||
//case PluginManager.Others.OperatingSystem.MAC_OS: ?? - not tested
|
//case PluginManager.Others.OperatingSystem.MAC_OS: ?? - not tested
|
||||||
Process.Start("./DiscordBot", cmd);
|
Process.Start("./DiscordBot", cmd);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
Environment.Exit(0);
|
Environment.Exit(0);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
await context.Channel.SendMessageAsync("Invalid argument. Use `help restart` to see the usage.");
|
await context.Channel.SendMessageAsync("Invalid argument. Use `help restart` to see the usage.");
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,28 +1,22 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
using Discord;
|
using Discord;
|
||||||
using Discord.Commands;
|
using Discord.Commands;
|
||||||
using Discord.WebSocket;
|
using Discord.WebSocket;
|
||||||
|
using PluginManager;
|
||||||
using PluginManager.Core;
|
|
||||||
using PluginManager.Interfaces;
|
using PluginManager.Interfaces;
|
||||||
using PluginManager.Others;
|
|
||||||
using PluginManager.Others.Permissions;
|
|
||||||
|
|
||||||
namespace DiscordBot.Discord.Commands
|
namespace DiscordBot.Discord.Commands;
|
||||||
{
|
|
||||||
class Settings : DBCommand
|
|
||||||
{
|
|
||||||
|
|
||||||
|
internal class Settings : DBCommand
|
||||||
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Command name
|
/// Command name
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public string Command => "set";
|
public string Command => "set";
|
||||||
|
|
||||||
|
public List<string> Aliases => null;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Command Description
|
/// Command Description
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -60,10 +54,9 @@ namespace DiscordBot.Discord.Commands
|
|||||||
var channel = message.Channel;
|
var channel = message.Channel;
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
var content = message.Content;
|
||||||
string content = message.Content;
|
var data = content.Split(' ');
|
||||||
string[] data = content.Split(' ');
|
var keyword = data[1];
|
||||||
string keyword = data[1];
|
|
||||||
if (keyword.ToLower() == "help")
|
if (keyword.ToLower() == "help")
|
||||||
{
|
{
|
||||||
await channel.SendMessageAsync("set token [new value] -- set the value of the new token (require restart)");
|
await channel.SendMessageAsync("set token [new value] -- set the value of the new token (require restart)");
|
||||||
@@ -80,7 +73,8 @@ namespace DiscordBot.Discord.Commands
|
|||||||
await channel.SendMessageAsync("Invalid token !");
|
await channel.SendMessageAsync("Invalid token !");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
Functions.WriteToSettings("./Data/Resources/DiscordBotCore.data", "BOT_TOKEN", data[2], '\t');
|
|
||||||
|
Config.SetValue("token", data[2]);
|
||||||
break;
|
break;
|
||||||
case "prefix":
|
case "prefix":
|
||||||
if (data.Length != 3)
|
if (data.Length != 3)
|
||||||
@@ -88,7 +82,8 @@ namespace DiscordBot.Discord.Commands
|
|||||||
await channel.SendMessageAsync("Invalid token !");
|
await channel.SendMessageAsync("Invalid token !");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
Functions.WriteToSettings("./Data/Resources/DiscordBotCore.data", "BOT_PREFIX", data[2], '\t');
|
|
||||||
|
Config.SetValue("token", data[2]);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
return;
|
return;
|
||||||
@@ -96,11 +91,10 @@ namespace DiscordBot.Discord.Commands
|
|||||||
|
|
||||||
await channel.SendMessageAsync("Restart required ...");
|
await channel.SendMessageAsync("Restart required ...");
|
||||||
}
|
}
|
||||||
catch
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
|
Console.WriteLine(ex.Message);
|
||||||
await channel.SendMessageAsync("Unknown usage to this command !\nUsage: " + Usage);
|
await channel.SendMessageAsync("Unknown usage to this command !\nUsage: " + Usage);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,14 +1,14 @@
|
|||||||
using Discord;
|
using System;
|
||||||
|
using System.Threading;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using Discord;
|
||||||
using Discord.Commands;
|
using Discord.Commands;
|
||||||
using Discord.WebSocket;
|
using Discord.WebSocket;
|
||||||
|
using PluginManager;
|
||||||
using System;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
using static PluginManager.Others.Functions;
|
using static PluginManager.Others.Functions;
|
||||||
|
|
||||||
namespace PluginManager.Core
|
namespace DiscordBot.Discord.Core;
|
||||||
{
|
|
||||||
internal class Boot
|
internal class Boot
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -21,13 +21,6 @@ namespace PluginManager.Core
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public readonly string botToken;
|
public readonly string botToken;
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Checks if the bot is ready
|
|
||||||
/// </summary>
|
|
||||||
/// <value> true if the bot is ready, othwerwise false </value>
|
|
||||||
public bool isReady { get; private set; } = false;
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The bot client
|
/// The bot client
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -54,13 +47,22 @@ namespace PluginManager.Core
|
|||||||
this.botToken = botToken;
|
this.botToken = botToken;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Checks if the bot is ready
|
||||||
|
/// </summary>
|
||||||
|
/// <value> true if the bot is ready, othwerwise false </value>
|
||||||
|
public bool isReady { get; private set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The start method for the bot. This method is used to load the bot
|
/// The start method for the bot. This method is used to load the bot
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <returns>Task</returns>
|
/// <returns>Task</returns>
|
||||||
public async Task Awake()
|
public async Task Awake()
|
||||||
{
|
{
|
||||||
client = new DiscordSocketClient();
|
DiscordSocketConfig config = new DiscordSocketConfig { AlwaysDownloadUsers = true };
|
||||||
|
|
||||||
|
client = new DiscordSocketClient(config);
|
||||||
service = new CommandService();
|
service = new CommandService();
|
||||||
|
|
||||||
CommonTasks();
|
CommonTasks();
|
||||||
@@ -73,18 +75,6 @@ namespace PluginManager.Core
|
|||||||
|
|
||||||
await Task.Delay(2000);
|
await Task.Delay(2000);
|
||||||
while (!isReady) ;
|
while (!isReady) ;
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// The method that stops the bot from running
|
|
||||||
/// </summary>
|
|
||||||
/// <returns></returns>
|
|
||||||
public async Task ShutDown()
|
|
||||||
{
|
|
||||||
if (client == null) return;
|
|
||||||
await client.LogoutAsync();
|
|
||||||
await client.StopAsync();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void CommonTasks()
|
private void CommonTasks()
|
||||||
@@ -107,6 +97,7 @@ namespace PluginManager.Core
|
|||||||
{
|
{
|
||||||
Console.Title = "ONLINE";
|
Console.Title = "ONLINE";
|
||||||
isReady = true;
|
isReady = true;
|
||||||
|
|
||||||
return Task.CompletedTask;
|
return Task.CompletedTask;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -114,7 +105,8 @@ namespace PluginManager.Core
|
|||||||
{
|
{
|
||||||
Console.Title = "CONNECTED";
|
Console.Title = "CONNECTED";
|
||||||
WriteLogFile("The bot has been logged in at " + DateTime.Now.ToShortDateString() + " (" +
|
WriteLogFile("The bot has been logged in at " + DateTime.Now.ToShortDateString() + " (" +
|
||||||
DateTime.Now.ToShortTimeString() + ")");
|
DateTime.Now.ToShortTimeString() + ")"
|
||||||
|
);
|
||||||
return Task.CompletedTask;
|
return Task.CompletedTask;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -147,4 +139,3 @@ namespace PluginManager.Core
|
|||||||
return Task.CompletedTask;
|
return Task.CompletedTask;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|||||||
@@ -1,25 +1,19 @@
|
|||||||
using Discord.Commands;
|
using System.Linq;
|
||||||
using Discord.WebSocket;
|
|
||||||
|
|
||||||
using PluginManager.Interfaces;
|
|
||||||
|
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using Discord.Commands;
|
||||||
|
using Discord.WebSocket;
|
||||||
|
using PluginManager.Loaders;
|
||||||
using PluginManager.Others;
|
using PluginManager.Others;
|
||||||
using PluginManager.Others.Permissions;
|
using PluginManager.Others.Permissions;
|
||||||
using PluginManager.Loaders;
|
|
||||||
|
|
||||||
using System.Threading.Tasks;
|
namespace DiscordBot.Discord.Core;
|
||||||
using System.Linq;
|
|
||||||
using Discord;
|
|
||||||
using System;
|
|
||||||
|
|
||||||
namespace PluginManager.Core
|
|
||||||
{
|
|
||||||
internal class CommandHandler
|
internal class CommandHandler
|
||||||
{
|
{
|
||||||
|
private readonly string botPrefix;
|
||||||
private readonly DiscordSocketClient client;
|
private readonly DiscordSocketClient client;
|
||||||
private readonly CommandService commandService;
|
private readonly CommandService commandService;
|
||||||
private readonly string botPrefix;
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Command handler constructor
|
/// Command handler constructor
|
||||||
@@ -41,7 +35,7 @@ namespace PluginManager.Core
|
|||||||
public async Task InstallCommandsAsync()
|
public async Task InstallCommandsAsync()
|
||||||
{
|
{
|
||||||
client.MessageReceived += MessageHandler;
|
client.MessageReceived += MessageHandler;
|
||||||
await commandService.AddModulesAsync(assembly: Assembly.GetEntryAssembly(), services: null);
|
await commandService.AddModulesAsync(Assembly.GetEntryAssembly(), null);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -58,11 +52,13 @@ namespace PluginManager.Core
|
|||||||
|
|
||||||
var message = Message as SocketUserMessage;
|
var message = Message as SocketUserMessage;
|
||||||
|
|
||||||
if (message == null) return;
|
if (message == null)
|
||||||
|
return;
|
||||||
|
|
||||||
if (!message.Content.StartsWith(botPrefix)) return;
|
if (!message.Content.StartsWith(botPrefix))
|
||||||
|
return;
|
||||||
|
|
||||||
int argPos = 0;
|
var argPos = 0;
|
||||||
|
|
||||||
if (message.HasMentionPrefix(client.CurrentUser, ref argPos))
|
if (message.HasMentionPrefix(client.CurrentUser, ref argPos))
|
||||||
{
|
{
|
||||||
@@ -70,17 +66,14 @@ namespace PluginManager.Core
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (message.Author.IsBot) return;
|
if (message.Author.IsBot)
|
||||||
|
return;
|
||||||
|
|
||||||
var context = new SocketCommandContext(client, message);
|
var context = new SocketCommandContext(client, message);
|
||||||
|
|
||||||
await commandService.ExecuteAsync(
|
await commandService.ExecuteAsync(context, argPos, null);
|
||||||
context: context,
|
|
||||||
argPos: argPos,
|
|
||||||
services: null
|
|
||||||
);
|
|
||||||
|
|
||||||
DBCommand plugin = PluginLoader.Plugins!.Where(p => p.Command == (message.Content.Split(' ')[0]).Substring(botPrefix.Length)).FirstOrDefault();
|
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();
|
||||||
|
|
||||||
|
|
||||||
if (plugin != null)
|
if (plugin != null)
|
||||||
@@ -97,9 +90,11 @@ namespace PluginManager.Core
|
|||||||
Functions.WriteLogFile($"[{message.Author.Id}] Executed command (DM) : " + plugin.Command);
|
Functions.WriteLogFile($"[{message.Author.Id}] Executed command (DM) : " + plugin.Command);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
await message.Channel.SendMessageAsync("This command is for administrators only !");
|
await message.Channel.SendMessageAsync("This command is for administrators only !");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
plugin.Execute(context, message, client, true);
|
plugin.Execute(context, message, client, true);
|
||||||
Functions.WriteLogFile($"[{message.Author.Id}] Executed command (DM) : " + plugin.Command);
|
Functions.WriteLogFile($"[{message.Author.Id}] Executed command (DM) : " + plugin.Command);
|
||||||
return;
|
return;
|
||||||
@@ -108,6 +103,7 @@ namespace PluginManager.Core
|
|||||||
await message.Channel.SendMessageAsync("This command is not for DMs");
|
await message.Channel.SendMessageAsync("This command is not for DMs");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (plugin.canUseServer)
|
if (plugin.canUseServer)
|
||||||
{
|
{
|
||||||
if (plugin.requireAdmin)
|
if (plugin.requireAdmin)
|
||||||
@@ -118,19 +114,18 @@ namespace PluginManager.Core
|
|||||||
Functions.WriteLogFile($"[{message.Author.Id}] Executed command : " + plugin.Command);
|
Functions.WriteLogFile($"[{message.Author.Id}] Executed command : " + plugin.Command);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
await message.Channel.SendMessageAsync("This command is for administrators only !");
|
await message.Channel.SendMessageAsync("This command is for administrators only !");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
plugin.Execute(context, message, client, false);
|
plugin.Execute(context, message, client, false);
|
||||||
Functions.WriteLogFile($"[{message.Author.Id}] Executed command : " + plugin.Command);
|
Functions.WriteLogFile($"[{message.Author.Id}] Executed command : " + plugin.Command);
|
||||||
return;
|
}
|
||||||
}
|
}
|
||||||
return;
|
}
|
||||||
|
catch
|
||||||
}
|
{
|
||||||
}
|
|
||||||
catch { }
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -6,6 +6,17 @@
|
|||||||
<Nullable>disable</Nullable>
|
<Nullable>disable</Nullable>
|
||||||
<ApplicationIcon />
|
<ApplicationIcon />
|
||||||
<StartupObject />
|
<StartupObject />
|
||||||
|
<SignAssembly>False</SignAssembly>
|
||||||
|
<IsPublishable>True</IsPublishable>
|
||||||
|
<AssemblyVersion>1.0.0.2</AssemblyVersion>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
|
||||||
|
<DebugType>none</DebugType>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'">
|
||||||
|
<DebugType>none</DebugType>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
@@ -27,7 +38,7 @@
|
|||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="Discord.Net" Version="3.6.1" />
|
<PackageReference Include="Discord.Net" Version="3.7.2" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
|||||||
@@ -1,94 +1,129 @@
|
|||||||
using Discord;
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
using System;
|
|
||||||
using System.IO;
|
using System.IO;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Reflection;
|
||||||
|
using System.Threading;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
using PluginManager.Core;
|
using DiscordBot.Discord.Core;
|
||||||
using PluginManager.Others;
|
|
||||||
using PluginManager.LanguageSystem;
|
|
||||||
using PluginManager.Online;
|
|
||||||
|
|
||||||
using System.Collections.Generic;
|
using PluginManager;
|
||||||
using System.Linq;
|
|
||||||
using PluginManager.Items;
|
using PluginManager.Items;
|
||||||
|
using PluginManager.Online;
|
||||||
|
using PluginManager.Others;
|
||||||
|
|
||||||
|
namespace DiscordBot;
|
||||||
|
|
||||||
namespace DiscordBot
|
|
||||||
{
|
|
||||||
public class Program
|
public class Program
|
||||||
{
|
{
|
||||||
private static bool loadPluginsOnStartup = false;
|
private static bool loadPluginsOnStartup;
|
||||||
private static bool listPluginsAtStartup = false;
|
private static bool listPluginsAtStartup;
|
||||||
private static bool listLanguagAtStartup = false;
|
|
||||||
|
|
||||||
private static bool ShowStartupMessage = true;
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The main entry point for the application.
|
/// The main entry point for the application.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[STAThread]
|
[STAThread]
|
||||||
[Obsolete]
|
[Obsolete]
|
||||||
|
|
||||||
public static void Main(string[] args)
|
public static void Main(string[] args)
|
||||||
{
|
{
|
||||||
|
|
||||||
Directory.CreateDirectory("./Data/Resources");
|
Directory.CreateDirectory("./Data/Resources");
|
||||||
Directory.CreateDirectory("./Data/Languages");
|
|
||||||
Directory.CreateDirectory("./Data/Plugins/Commands");
|
Directory.CreateDirectory("./Data/Plugins/Commands");
|
||||||
Directory.CreateDirectory("./Data/Plugins/Events");
|
Directory.CreateDirectory("./Data/Plugins/Events");
|
||||||
if (!File.Exists("./Data/Resources/DiscordBotCore.data") || (Functions.readCodeFromFile("./Data/Resources/DiscordBotCore.data", "BOT_TOKEN", '=').Length != 59 && Functions.readCodeFromFile("./Data/Resources/DiscordBotCore.data", "BOT_TOKEN", '=').Length != 70))
|
PreLoadComponents().Wait();
|
||||||
|
|
||||||
|
if (!Config.ContainsKey("ServerID"))
|
||||||
{
|
{
|
||||||
File.WriteAllText("./Data/Resources/DiscordBotCore.data", "BOT_TOKEN=token\nBOT_PREFIX=!\n");
|
do
|
||||||
while (true)
|
|
||||||
{
|
{
|
||||||
Console.WriteLine("Please insert your token: ");
|
Console.Clear();
|
||||||
Console.Write("TOKEN: ");
|
Console.WriteLine("Please enter the server ID: ");
|
||||||
string botToken = Console.ReadLine();
|
Console_Utilities.WriteColorText("You can find it in the Server Settings at &r\"Widget\"&c section");
|
||||||
if (botToken.Length == 59 || botToken.Length == 70)
|
Console.WriteLine("Example: 1234567890123456789");
|
||||||
|
|
||||||
|
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
|
||||||
{
|
{
|
||||||
string prefix = Functions.readCodeFromFile("./Data/Resources/DiscordBotCore.data", "BOT_PREFIX", '=');
|
string SID = key.KeyChar + Console.ReadLine();
|
||||||
if (prefix == string.Empty || prefix == null)
|
if (SID.Length != 18)
|
||||||
prefix = "!";
|
{
|
||||||
File.WriteAllText("./Data/Resources/DiscordBotCore.data", $"BOT_TOKEN={botToken}\nBOT_PREFIX={prefix}\n");
|
Console.WriteLine("Your server ID is not 18 characters long. Please try again.");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Config.AddValueToVariables("ServerID", SID, false);
|
||||||
|
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
} while (true);
|
||||||
|
|
||||||
}
|
}
|
||||||
else Console.WriteLine("Invalid Token !");
|
|
||||||
|
if (!Config.ContainsKey("token") || Config.GetValue<string>("token") == null || Config.GetValue<string>("token")?.Length != 70)
|
||||||
|
{
|
||||||
|
Console.WriteLine("Please insert your token");
|
||||||
|
Console.Write("Token = ");
|
||||||
|
var token = Console.ReadLine();
|
||||||
|
if (token?.Length == 59 || token?.Length == 70)
|
||||||
|
Config.AddValueToVariables("token", token, true);
|
||||||
|
else
|
||||||
|
Console.WriteLine("Invalid token");
|
||||||
|
|
||||||
|
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 or numbers allowed");
|
||||||
|
Console.Write("Prefix = ");
|
||||||
|
var prefix = Console.ReadLine()![0];
|
||||||
|
|
||||||
|
if (prefix == ' ' || char.IsDigit(prefix))
|
||||||
|
return;
|
||||||
|
Config.AddValueToVariables("prefix", prefix.ToString(), false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!Config.ContainsKey("prefix") || Config.GetValue<string>("prefix") == default)
|
||||||
|
{
|
||||||
|
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 or numbers allowed");
|
||||||
|
Console.Write("Prefix = ");
|
||||||
|
var prefix = Console.ReadLine()![0];
|
||||||
|
if (prefix == ' ') return;
|
||||||
|
Config.AddValueToVariables("prefix", prefix.ToString(), false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
HandleInput(args).Wait();
|
HandleInput(args).Wait();
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Reset all settings for the bot
|
|
||||||
/// </summary>
|
|
||||||
private static Task ResetSettings()
|
|
||||||
{
|
|
||||||
string[] files = Directory.GetFiles(@"./Data/Resources");
|
|
||||||
foreach (string file in files) File.Delete(file);
|
|
||||||
return Task.CompletedTask;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The main loop for the discord bot
|
/// The main loop for the discord bot
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="discordbooter">The discord booter used to start the application</param>
|
/// <param name="discordbooter">The discord booter used to start the application</param>
|
||||||
private static async Task NoGUI(Boot discordbooter)
|
private static void NoGUI(Boot discordbooter)
|
||||||
{
|
{
|
||||||
Language.LoadLanguage();
|
var consoleCommandsHandler = new ConsoleCommandsHandler(discordbooter.client);
|
||||||
|
#if DEBUG
|
||||||
ConsoleCommandsHandler consoleCommandsHandler = new ConsoleCommandsHandler(discordbooter.client);
|
Console.WriteLine();
|
||||||
if (loadPluginsOnStartup)
|
|
||||||
consoleCommandsHandler.HandleCommand("lp");
|
consoleCommandsHandler.HandleCommand("lp");
|
||||||
if (listPluginsAtStartup)
|
#else
|
||||||
consoleCommandsHandler.HandleCommand("listplugs");
|
if (loadPluginsOnStartup) consoleCommandsHandler.HandleCommand("lp");
|
||||||
if (listLanguagAtStartup)
|
if (listPluginsAtStartup) consoleCommandsHandler.HandleCommand("listplugs");
|
||||||
consoleCommandsHandler.HandleCommand("listlang");
|
#endif
|
||||||
|
Config.SaveConfig();
|
||||||
while (true)
|
while (true)
|
||||||
{
|
{
|
||||||
Console.ForegroundColor = ConsoleColor.White;
|
//Console_Utilities.WriteColorText("&rSethBot (&yDEBUG&r) &c> ", false);
|
||||||
string cmd = Console.ReadLine();
|
var cmd = Console.ReadLine();
|
||||||
consoleCommandsHandler.HandleCommand(cmd);
|
if (!consoleCommandsHandler.HandleCommand(cmd!,
|
||||||
|
#if DEBUG
|
||||||
|
false
|
||||||
|
#endif
|
||||||
|
) && cmd.Length > 0)
|
||||||
|
Console.WriteLine("Failed to run command " + cmd);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -98,29 +133,48 @@ namespace DiscordBot
|
|||||||
/// <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;
|
||||||
Console.WriteLine("Discord BOT for Cross Platform");
|
|
||||||
Console.WriteLine("Created by: Wizzy\nDiscord: Wizzy#9181");
|
List<string> startupMessageList = await ServerCom.ReadTextFromURL("https://raw.githubusercontent.com/Wizzy69/installer/discord-bot-files/StartupMessage");
|
||||||
if (ShowStartupMessage)
|
|
||||||
|
foreach (var message in startupMessageList)
|
||||||
|
Console.WriteLine(message);
|
||||||
|
|
||||||
|
Console.WriteLine($"Running on version: {Config.GetValue<string>("Version") ?? System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString()}");
|
||||||
|
Console.WriteLine($"Git URL: {Config.GetValue<string>("GitURL") ?? " Could not find Git URL"}");
|
||||||
|
|
||||||
|
Console_Utilities.WriteColorText("&rRemember to close the bot using the ShutDown command (&ysd&r) or some settings won't be saved\n");
|
||||||
|
Console.ForegroundColor = ConsoleColor.White;
|
||||||
|
Console.WriteLine($"============================ LOG ============================");
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
Console.WriteLine("Connecting to server ...");
|
var token = Config.GetValue<string>("token");
|
||||||
List<string> text = await ServerCom.ReadTextFromFile("https://sethdiscordbot.000webhostapp.com/Storage/Discord%20Bot/StartupMessage");
|
#if DEBUG
|
||||||
foreach (var t in text) Console_Utilities.WriteColorText(t);
|
Console.WriteLine("Starting in DEBUG MODE");
|
||||||
|
if (!Directory.Exists("./Data/BetaTest"))
|
||||||
|
Console.WriteLine("Failed to start in debug mode because the folder ./Data/BetaTest does not exist");
|
||||||
|
else
|
||||||
|
{
|
||||||
|
token = File.ReadAllText("./Data/BetaTest/token.txt");
|
||||||
|
|
||||||
|
//Debug mode code...
|
||||||
}
|
}
|
||||||
catch { Console.WriteLine("Failed to connect to server."); }
|
#endif
|
||||||
Console.ForegroundColor = ConsoleColor.White;
|
|
||||||
Console.WriteLine("============================ Discord BOT - Cross Platform ============================");
|
var prefix = Config.GetValue<string>("prefix");
|
||||||
string token = Functions.readCodeFromFile(Functions.dataFolder + "DiscordBotCore.data", "BOT_TOKEN", '=');
|
|
||||||
string prefix = Functions.readCodeFromFile(Functions.dataFolder + "DiscordBotCore.data", "BOT_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)
|
||||||
|
{
|
||||||
|
Console.WriteLine(ex);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Clear folder
|
/// Clear folder
|
||||||
@@ -128,8 +182,8 @@ namespace DiscordBot
|
|||||||
/// <param name="d">Directory path</param>
|
/// <param name="d">Directory path</param>
|
||||||
private static Task ClearFolder(string d)
|
private static Task ClearFolder(string d)
|
||||||
{
|
{
|
||||||
string[] files = Directory.GetFiles(d);
|
var files = Directory.GetFiles(d);
|
||||||
int fileNumb = files.Length;
|
var fileNumb = files.Length;
|
||||||
for (var i = 0; i < fileNumb; i++)
|
for (var i = 0; i < fileNumb; i++)
|
||||||
{
|
{
|
||||||
File.Delete(files[i]);
|
File.Delete(files[i]);
|
||||||
@@ -145,35 +199,15 @@ namespace DiscordBot
|
|||||||
/// <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;
|
||||||
|
|
||||||
if (args.Length == 0)
|
if (len == 3 && args[0] == "/download")
|
||||||
{
|
{
|
||||||
if (File.Exists("./ref/startupArguments.txt"))
|
var url = args[1];
|
||||||
{
|
var location = args[2];
|
||||||
var lines = await File.ReadAllLinesAsync("./ref/startupArguments.txt");
|
|
||||||
args = lines;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
int len = args.Length;
|
await ServerCom.DownloadFileAsync(url, location);
|
||||||
if (len == 1 && args[0] == "--help")
|
|
||||||
{
|
|
||||||
Console.WriteLine("Available commands:\n--exec -> start the bot with tools enabled");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (len == 1 && args[0] == "--logout")
|
|
||||||
{
|
|
||||||
File.Delete(Functions.dataFolder + "Login.dat");
|
|
||||||
Console.WriteLine("Logged out. Please restart the application !");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (len >= 2 && args[0] == "--encrypt")
|
|
||||||
{
|
|
||||||
string s2e = args.MergeStrings(1);
|
|
||||||
Console.WriteLine("MD5: " + await Cryptography.CreateMD5(s2e));
|
|
||||||
Console.WriteLine("SHA356: " + await Cryptography.CreateSHA256(s2e));
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -183,30 +217,27 @@ namespace DiscordBot
|
|||||||
loadPluginsOnStartup = true;
|
loadPluginsOnStartup = true;
|
||||||
if (args.Contains("listplugs"))
|
if (args.Contains("listplugs"))
|
||||||
listPluginsAtStartup = true;
|
listPluginsAtStartup = true;
|
||||||
if (args.Contains("listlang"))
|
|
||||||
listLanguagAtStartup = true;
|
|
||||||
if (args.Contains("--nomessage"))
|
|
||||||
ShowStartupMessage = false;
|
|
||||||
len = 0;
|
len = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (len == 0 || (args[0] != "--exec" && args[0] != "--execute"))
|
||||||
|
|
||||||
if (len == 0 || args[0] != "--exec" && args[0] != "--execute")
|
|
||||||
{
|
{
|
||||||
Boot b = await StartNoGUI();
|
var b = await StartNoGUI();
|
||||||
await NoGUI(b);
|
|
||||||
|
Thread mainThread = new Thread(() => NoGUI(b));
|
||||||
|
mainThread.Start();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
Console.ForegroundColor = ConsoleColor.DarkYellow;
|
Console.ForegroundColor = ConsoleColor.DarkYellow;
|
||||||
Console.WriteLine("Execute command interface noGUI\n\n");
|
Console.WriteLine("Execute command interface noGUI\n\n");
|
||||||
Console.WriteLine(
|
Console.WriteLine(
|
||||||
"\tCommand name\t\t\t\tDescription\n" +
|
"\tCommand name\t\t\t\tDescription\n" +
|
||||||
"-- help | -help\t\t ------ \tDisplay the help message\n" +
|
"-- help | -help\t\t ------ \tDisplay the help message\n" +
|
||||||
"--reset-full\t\t ------ \tReset all files (clear files)\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" +
|
"--reset-logs\t\t ------ \tClear up the output folder\n" +
|
||||||
"--start\t\t ------ \tStart the bot\n" +
|
"--start\t\t ------ \tStart the bot\n" +
|
||||||
"exit\t\t\t ------ \tClose the application"
|
"exit\t\t\t ------ \tClose the application"
|
||||||
@@ -215,33 +246,20 @@ namespace DiscordBot
|
|||||||
{
|
{
|
||||||
Console.ForegroundColor = ConsoleColor.White;
|
Console.ForegroundColor = ConsoleColor.White;
|
||||||
Console.Write("> ");
|
Console.Write("> ");
|
||||||
string[] message = Console.ReadLine().Split(' ');
|
var message = Console.ReadLine().Split(' ');
|
||||||
|
|
||||||
switch (message[0])
|
switch (message[0])
|
||||||
{
|
{
|
||||||
case "--reset-settings":
|
|
||||||
await ResetSettings();
|
|
||||||
Console.WriteLine("Successfully reseted all settings !");
|
|
||||||
break;
|
|
||||||
case "--help":
|
case "--help":
|
||||||
case "-help":
|
case "-help":
|
||||||
Console.ForegroundColor = ConsoleColor.DarkYellow;
|
Console.ForegroundColor = ConsoleColor.DarkYellow;
|
||||||
Console.WriteLine(
|
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");
|
||||||
"\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;
|
break;
|
||||||
case "--reset-full":
|
case "--reset-full":
|
||||||
await ClearFolder("./Data/Resources/");
|
await ClearFolder("./Data/Resources/");
|
||||||
await ClearFolder("./Output/Logs/");
|
await ClearFolder("./Output/Logs/");
|
||||||
await ClearFolder("./Output/Errors");
|
await ClearFolder("./Output/Errors");
|
||||||
await ClearFolder("./Data/Languages/");
|
await ClearFolder("./Data/Languages/");
|
||||||
await ClearFolder("./Data/Plugins/Addons");
|
|
||||||
await ClearFolder("./Data/Plugins/Commands");
|
await ClearFolder("./Data/Plugins/Commands");
|
||||||
await ClearFolder("./Data/Plugins/Events");
|
await ClearFolder("./Data/Plugins/Events");
|
||||||
Console.WriteLine("Successfully cleared all folders");
|
Console.WriteLine("Successfully cleared all folders");
|
||||||
@@ -249,21 +267,99 @@ namespace DiscordBot
|
|||||||
case "--reset-logs":
|
case "--reset-logs":
|
||||||
await ClearFolder("./Output/Logs");
|
await ClearFolder("./Output/Logs");
|
||||||
await ClearFolder("./Output/Errors");
|
await ClearFolder("./Output/Errors");
|
||||||
Console.WriteLine("Successfully cleard logs folder");
|
Console.WriteLine("Successfully clear logs folder");
|
||||||
break;
|
break;
|
||||||
case "--exit":
|
case "--exit":
|
||||||
case "exit":
|
case "exit":
|
||||||
Environment.Exit(0);
|
Environment.Exit(0);
|
||||||
break;
|
break;
|
||||||
case "--start":
|
|
||||||
Boot booter = await StartNoGUI();
|
|
||||||
await NoGUI(booter);
|
|
||||||
return;
|
|
||||||
default:
|
default:
|
||||||
Console.WriteLine("Failed to execute command " + message[0]);
|
Console.WriteLine("Failed to execute command " + message[0]);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static async Task PreLoadComponents()
|
||||||
|
{
|
||||||
|
await Config.LoadConfig();
|
||||||
|
if (Config.ContainsKey("DeleteLogsAtStartup"))
|
||||||
|
if (Config.GetValue<bool>("DeleteLogsAtStartup"))
|
||||||
|
foreach (var file in Directory.GetFiles("./Output/Logs/"))
|
||||||
|
File.Delete(file);
|
||||||
|
List<string> OnlineDefaultKeys = await ServerCom.ReadTextFromURL("https://raw.githubusercontent.com/Wizzy69/installer/discord-bot-files/SetupKeys");
|
||||||
|
|
||||||
|
Config.PluginConfig.Load();
|
||||||
|
|
||||||
|
if (!Config.ContainsKey("Version"))
|
||||||
|
Config.AddValueToVariables("Version", Assembly.GetExecutingAssembly().GetName().Version.ToString(), false);
|
||||||
|
else
|
||||||
|
Config.SetValue("Version", Assembly.GetExecutingAssembly().GetName().Version.ToString());
|
||||||
|
|
||||||
|
foreach (var key in OnlineDefaultKeys)
|
||||||
|
{
|
||||||
|
if (key.Length <= 3 || !key.Contains(' ')) continue;
|
||||||
|
string[] s = key.Split(' ');
|
||||||
|
try
|
||||||
|
{
|
||||||
|
if (Config.ContainsKey(s[0])) Config.SetValue(s[0], s[1]);
|
||||||
|
else Config.GetAndAddValueToVariable(s[0], s[1], s[2].Equals("true", StringComparison.CurrentCultureIgnoreCase));
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Functions.WriteErrFile(ex.Message);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
List<string> onlineSettingsList = await ServerCom.ReadTextFromURL("https://raw.githubusercontent.com/Wizzy69/installer/discord-bot-files/OnlineData");
|
||||||
|
foreach (var key in onlineSettingsList)
|
||||||
|
{
|
||||||
|
if (key.Length <= 3 || !key.Contains(' ')) continue;
|
||||||
|
|
||||||
|
string[] s = key.Split(' ');
|
||||||
|
switch (s[0])
|
||||||
|
{
|
||||||
|
case "CurrentVersion":
|
||||||
|
string newVersion = s[1];
|
||||||
|
if (!newVersion.Equals(Config.GetValue<string>("Version")))
|
||||||
|
{
|
||||||
|
Console.WriteLine("A new version has been released on github page.");
|
||||||
|
Console.WriteLine("Download the new version using the following link wrote in yellow");
|
||||||
|
Console_Utilities.WriteColorText("&y" + Config.GetValue<string>("GitURL") + "&c");
|
||||||
|
|
||||||
|
Console.WriteLine();
|
||||||
|
Console.WriteLine("Your product will work just fine on this outdated version, but an update is recommended.\n" +
|
||||||
|
"From now on, this version is no longer supported"
|
||||||
|
);
|
||||||
|
Console_Utilities.WriteColorText("&rUse at your own risk&c");
|
||||||
|
|
||||||
|
Console_Utilities.WriteColorText("&mCurrent Version: " + Config.GetValue<string>("Version") + "&c");
|
||||||
|
Console_Utilities.WriteColorText("&gNew Version: " + newVersion + "&c");
|
||||||
|
|
||||||
|
Console.WriteLine("\n\n");
|
||||||
|
await Task.Delay(1000);
|
||||||
|
|
||||||
|
int waitTime = 10; //wait time to proceed
|
||||||
|
|
||||||
|
Console.Write($"The bot will start in {waitTime} seconds");
|
||||||
|
while (waitTime > 0)
|
||||||
|
{
|
||||||
|
await Task.Delay(1000);
|
||||||
|
waitTime--;
|
||||||
|
Console.SetCursorPosition("The bot will start in ".Length, Console.CursorTop);
|
||||||
|
Console.Write(" ");
|
||||||
|
Console.SetCursorPosition("The bot will start in ".Length, Console.CursorTop);
|
||||||
|
Console.Write(waitTime + " seconds");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Console_Utilities.Initialize();
|
||||||
|
|
||||||
|
Config.SaveConfig();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,17 +1,12 @@
|
|||||||
<Project Sdk="Microsoft.NET.Sdk">
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
|
<OutputType>Exe</OutputType>
|
||||||
<TargetFramework>net6.0</TargetFramework>
|
<TargetFramework>net6.0</TargetFramework>
|
||||||
<ImplicitUsings>enable</ImplicitUsings>
|
<ImplicitUsings>enable</ImplicitUsings>
|
||||||
<Nullable>enable</Nullable>
|
<Nullable>enable</Nullable>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
|
||||||
<Compile Remove="Server\**" />
|
|
||||||
<EmbeddedResource Remove="Server\**" />
|
|
||||||
<None Remove="Server\**" />
|
|
||||||
</ItemGroup>
|
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ProjectReference Include="..\PluginManager\PluginManager.csproj" />
|
<ProjectReference Include="..\PluginManager\PluginManager.csproj" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
21
DiscordBotConsoleLauncher/Program.cs
Normal file
21
DiscordBotConsoleLauncher/Program.cs
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
using PluginManager.Online.Updates;
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
bool requireUpdate = await PluginUpdater.CheckForUpdates("DiscordBotConsoleLauncher");
|
||||||
|
if (requireUpdate)
|
||||||
|
{
|
||||||
|
var update = await PluginUpdater.DownloadUpdateInfo("DiscordBotConsoleLauncher");
|
||||||
|
if (update == Update.Empty)
|
||||||
|
return;
|
||||||
|
|
||||||
|
Console.WriteLine("Found an update: ");
|
||||||
|
Console.WriteLine(update.ToString());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Console.WriteLine("An exception was thrown. ");
|
||||||
|
Console.WriteLine(ex.Message);
|
||||||
|
Environment.Exit(-2);
|
||||||
|
}
|
||||||
454
DiscordBotGUI/.gitignore
vendored
454
DiscordBotGUI/.gitignore
vendored
@@ -1,454 +0,0 @@
|
|||||||
## Ignore Visual Studio temporary files, build results, and
|
|
||||||
## files generated by popular Visual Studio add-ons.
|
|
||||||
##
|
|
||||||
## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore
|
|
||||||
|
|
||||||
# User-specific files
|
|
||||||
*.rsuser
|
|
||||||
*.suo
|
|
||||||
*.user
|
|
||||||
*.userosscache
|
|
||||||
*.sln.docstates
|
|
||||||
|
|
||||||
# User-specific files (MonoDevelop/Xamarin Studio)
|
|
||||||
*.userprefs
|
|
||||||
|
|
||||||
# Mono auto generated files
|
|
||||||
mono_crash.*
|
|
||||||
|
|
||||||
# Build results
|
|
||||||
[Dd]ebug/
|
|
||||||
[Dd]ebugPublic/
|
|
||||||
[Rr]elease/
|
|
||||||
[Rr]eleases/
|
|
||||||
x64/
|
|
||||||
x86/
|
|
||||||
[Ww][Ii][Nn]32/
|
|
||||||
[Aa][Rr][Mm]/
|
|
||||||
[Aa][Rr][Mm]64/
|
|
||||||
bld/
|
|
||||||
[Bb]in/
|
|
||||||
[Oo]bj/
|
|
||||||
[Ll]og/
|
|
||||||
[Ll]ogs/
|
|
||||||
|
|
||||||
# Visual Studio 2015/2017 cache/options directory
|
|
||||||
.vs/
|
|
||||||
# Uncomment if you have tasks that create the project's static files in wwwroot
|
|
||||||
#wwwroot/
|
|
||||||
|
|
||||||
# Visual Studio 2017 auto generated files
|
|
||||||
Generated\ Files/
|
|
||||||
|
|
||||||
# MSTest test Results
|
|
||||||
[Tt]est[Rr]esult*/
|
|
||||||
[Bb]uild[Ll]og.*
|
|
||||||
|
|
||||||
# NUnit
|
|
||||||
*.VisualState.xml
|
|
||||||
TestResult.xml
|
|
||||||
nunit-*.xml
|
|
||||||
|
|
||||||
# Build Results of an ATL Project
|
|
||||||
[Dd]ebugPS/
|
|
||||||
[Rr]eleasePS/
|
|
||||||
dlldata.c
|
|
||||||
|
|
||||||
# Benchmark Results
|
|
||||||
BenchmarkDotNet.Artifacts/
|
|
||||||
|
|
||||||
# .NET Core
|
|
||||||
project.lock.json
|
|
||||||
project.fragment.lock.json
|
|
||||||
artifacts/
|
|
||||||
|
|
||||||
# Tye
|
|
||||||
.tye/
|
|
||||||
|
|
||||||
# ASP.NET Scaffolding
|
|
||||||
ScaffoldingReadMe.txt
|
|
||||||
|
|
||||||
# StyleCop
|
|
||||||
StyleCopReport.xml
|
|
||||||
|
|
||||||
# Files built by Visual Studio
|
|
||||||
*_i.c
|
|
||||||
*_p.c
|
|
||||||
*_h.h
|
|
||||||
*.ilk
|
|
||||||
*.meta
|
|
||||||
*.obj
|
|
||||||
*.iobj
|
|
||||||
*.pch
|
|
||||||
*.pdb
|
|
||||||
*.ipdb
|
|
||||||
*.pgc
|
|
||||||
*.pgd
|
|
||||||
*.rsp
|
|
||||||
*.sbr
|
|
||||||
*.tlb
|
|
||||||
*.tli
|
|
||||||
*.tlh
|
|
||||||
*.tmp
|
|
||||||
*.tmp_proj
|
|
||||||
*_wpftmp.csproj
|
|
||||||
*.log
|
|
||||||
*.vspscc
|
|
||||||
*.vssscc
|
|
||||||
.builds
|
|
||||||
*.pidb
|
|
||||||
*.svclog
|
|
||||||
*.scc
|
|
||||||
|
|
||||||
# Chutzpah Test files
|
|
||||||
_Chutzpah*
|
|
||||||
|
|
||||||
# Visual C++ cache files
|
|
||||||
ipch/
|
|
||||||
*.aps
|
|
||||||
*.ncb
|
|
||||||
*.opendb
|
|
||||||
*.opensdf
|
|
||||||
*.sdf
|
|
||||||
*.cachefile
|
|
||||||
*.VC.db
|
|
||||||
*.VC.VC.opendb
|
|
||||||
|
|
||||||
# Visual Studio profiler
|
|
||||||
*.psess
|
|
||||||
*.vsp
|
|
||||||
*.vspx
|
|
||||||
*.sap
|
|
||||||
|
|
||||||
# Visual Studio Trace Files
|
|
||||||
*.e2e
|
|
||||||
|
|
||||||
# TFS 2012 Local Workspace
|
|
||||||
$tf/
|
|
||||||
|
|
||||||
# Guidance Automation Toolkit
|
|
||||||
*.gpState
|
|
||||||
|
|
||||||
# ReSharper is a .NET coding add-in
|
|
||||||
_ReSharper*/
|
|
||||||
*.[Rr]e[Ss]harper
|
|
||||||
*.DotSettings.user
|
|
||||||
|
|
||||||
# TeamCity is a build add-in
|
|
||||||
_TeamCity*
|
|
||||||
|
|
||||||
# DotCover is a Code Coverage Tool
|
|
||||||
*.dotCover
|
|
||||||
|
|
||||||
# AxoCover is a Code Coverage Tool
|
|
||||||
.axoCover/*
|
|
||||||
!.axoCover/settings.json
|
|
||||||
|
|
||||||
# Coverlet is a free, cross platform Code Coverage Tool
|
|
||||||
coverage*.json
|
|
||||||
coverage*.xml
|
|
||||||
coverage*.info
|
|
||||||
|
|
||||||
# Visual Studio code coverage results
|
|
||||||
*.coverage
|
|
||||||
*.coveragexml
|
|
||||||
|
|
||||||
# NCrunch
|
|
||||||
_NCrunch_*
|
|
||||||
.*crunch*.local.xml
|
|
||||||
nCrunchTemp_*
|
|
||||||
|
|
||||||
# MightyMoose
|
|
||||||
*.mm.*
|
|
||||||
AutoTest.Net/
|
|
||||||
|
|
||||||
# Web workbench (sass)
|
|
||||||
.sass-cache/
|
|
||||||
|
|
||||||
# Installshield output folder
|
|
||||||
[Ee]xpress/
|
|
||||||
|
|
||||||
# DocProject is a documentation generator add-in
|
|
||||||
DocProject/buildhelp/
|
|
||||||
DocProject/Help/*.HxT
|
|
||||||
DocProject/Help/*.HxC
|
|
||||||
DocProject/Help/*.hhc
|
|
||||||
DocProject/Help/*.hhk
|
|
||||||
DocProject/Help/*.hhp
|
|
||||||
DocProject/Help/Html2
|
|
||||||
DocProject/Help/html
|
|
||||||
|
|
||||||
# Click-Once directory
|
|
||||||
publish/
|
|
||||||
|
|
||||||
# Publish Web Output
|
|
||||||
*.[Pp]ublish.xml
|
|
||||||
*.azurePubxml
|
|
||||||
# Note: Comment the next line if you want to checkin your web deploy settings,
|
|
||||||
# but database connection strings (with potential passwords) will be unencrypted
|
|
||||||
*.pubxml
|
|
||||||
*.publishproj
|
|
||||||
|
|
||||||
# Microsoft Azure Web App publish settings. Comment the next line if you want to
|
|
||||||
# checkin your Azure Web App publish settings, but sensitive information contained
|
|
||||||
# in these scripts will be unencrypted
|
|
||||||
PublishScripts/
|
|
||||||
|
|
||||||
# NuGet Packages
|
|
||||||
*.nupkg
|
|
||||||
# NuGet Symbol Packages
|
|
||||||
*.snupkg
|
|
||||||
# The packages folder can be ignored because of Package Restore
|
|
||||||
**/[Pp]ackages/*
|
|
||||||
# except build/, which is used as an MSBuild target.
|
|
||||||
!**/[Pp]ackages/build/
|
|
||||||
# Uncomment if necessary however generally it will be regenerated when needed
|
|
||||||
#!**/[Pp]ackages/repositories.config
|
|
||||||
# NuGet v3's project.json files produces more ignorable files
|
|
||||||
*.nuget.props
|
|
||||||
*.nuget.targets
|
|
||||||
|
|
||||||
# Microsoft Azure Build Output
|
|
||||||
csx/
|
|
||||||
*.build.csdef
|
|
||||||
|
|
||||||
# Microsoft Azure Emulator
|
|
||||||
ecf/
|
|
||||||
rcf/
|
|
||||||
|
|
||||||
# Windows Store app package directories and files
|
|
||||||
AppPackages/
|
|
||||||
BundleArtifacts/
|
|
||||||
Package.StoreAssociation.xml
|
|
||||||
_pkginfo.txt
|
|
||||||
*.appx
|
|
||||||
*.appxbundle
|
|
||||||
*.appxupload
|
|
||||||
|
|
||||||
# Visual Studio cache files
|
|
||||||
# files ending in .cache can be ignored
|
|
||||||
*.[Cc]ache
|
|
||||||
# but keep track of directories ending in .cache
|
|
||||||
!?*.[Cc]ache/
|
|
||||||
|
|
||||||
# Others
|
|
||||||
ClientBin/
|
|
||||||
~$*
|
|
||||||
*~
|
|
||||||
*.dbmdl
|
|
||||||
*.dbproj.schemaview
|
|
||||||
*.jfm
|
|
||||||
*.pfx
|
|
||||||
*.publishsettings
|
|
||||||
orleans.codegen.cs
|
|
||||||
|
|
||||||
# Including strong name files can present a security risk
|
|
||||||
# (https://github.com/github/gitignore/pull/2483#issue-259490424)
|
|
||||||
#*.snk
|
|
||||||
|
|
||||||
# Since there are multiple workflows, uncomment next line to ignore bower_components
|
|
||||||
# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
|
|
||||||
#bower_components/
|
|
||||||
|
|
||||||
# RIA/Silverlight projects
|
|
||||||
Generated_Code/
|
|
||||||
|
|
||||||
# Backup & report files from converting an old project file
|
|
||||||
# to a newer Visual Studio version. Backup files are not needed,
|
|
||||||
# because we have git ;-)
|
|
||||||
_UpgradeReport_Files/
|
|
||||||
Backup*/
|
|
||||||
UpgradeLog*.XML
|
|
||||||
UpgradeLog*.htm
|
|
||||||
ServiceFabricBackup/
|
|
||||||
*.rptproj.bak
|
|
||||||
|
|
||||||
# SQL Server files
|
|
||||||
*.mdf
|
|
||||||
*.ldf
|
|
||||||
*.ndf
|
|
||||||
|
|
||||||
# Business Intelligence projects
|
|
||||||
*.rdl.data
|
|
||||||
*.bim.layout
|
|
||||||
*.bim_*.settings
|
|
||||||
*.rptproj.rsuser
|
|
||||||
*- [Bb]ackup.rdl
|
|
||||||
*- [Bb]ackup ([0-9]).rdl
|
|
||||||
*- [Bb]ackup ([0-9][0-9]).rdl
|
|
||||||
|
|
||||||
# Microsoft Fakes
|
|
||||||
FakesAssemblies/
|
|
||||||
|
|
||||||
# GhostDoc plugin setting file
|
|
||||||
*.GhostDoc.xml
|
|
||||||
|
|
||||||
# Node.js Tools for Visual Studio
|
|
||||||
.ntvs_analysis.dat
|
|
||||||
node_modules/
|
|
||||||
|
|
||||||
# Visual Studio 6 build log
|
|
||||||
*.plg
|
|
||||||
|
|
||||||
# Visual Studio 6 workspace options file
|
|
||||||
*.opt
|
|
||||||
|
|
||||||
# Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
|
|
||||||
*.vbw
|
|
||||||
|
|
||||||
# Visual Studio LightSwitch build output
|
|
||||||
**/*.HTMLClient/GeneratedArtifacts
|
|
||||||
**/*.DesktopClient/GeneratedArtifacts
|
|
||||||
**/*.DesktopClient/ModelManifest.xml
|
|
||||||
**/*.Server/GeneratedArtifacts
|
|
||||||
**/*.Server/ModelManifest.xml
|
|
||||||
_Pvt_Extensions
|
|
||||||
|
|
||||||
# Paket dependency manager
|
|
||||||
.paket/paket.exe
|
|
||||||
paket-files/
|
|
||||||
|
|
||||||
# FAKE - F# Make
|
|
||||||
.fake/
|
|
||||||
|
|
||||||
# CodeRush personal settings
|
|
||||||
.cr/personal
|
|
||||||
|
|
||||||
# Python Tools for Visual Studio (PTVS)
|
|
||||||
__pycache__/
|
|
||||||
*.pyc
|
|
||||||
|
|
||||||
# Cake - Uncomment if you are using it
|
|
||||||
# tools/**
|
|
||||||
# !tools/packages.config
|
|
||||||
|
|
||||||
# Tabs Studio
|
|
||||||
*.tss
|
|
||||||
|
|
||||||
# Telerik's JustMock configuration file
|
|
||||||
*.jmconfig
|
|
||||||
|
|
||||||
# BizTalk build output
|
|
||||||
*.btp.cs
|
|
||||||
*.btm.cs
|
|
||||||
*.odx.cs
|
|
||||||
*.xsd.cs
|
|
||||||
|
|
||||||
# OpenCover UI analysis results
|
|
||||||
OpenCover/
|
|
||||||
|
|
||||||
# Azure Stream Analytics local run output
|
|
||||||
ASALocalRun/
|
|
||||||
|
|
||||||
# MSBuild Binary and Structured Log
|
|
||||||
*.binlog
|
|
||||||
|
|
||||||
# NVidia Nsight GPU debugger configuration file
|
|
||||||
*.nvuser
|
|
||||||
|
|
||||||
# MFractors (Xamarin productivity tool) working folder
|
|
||||||
.mfractor/
|
|
||||||
|
|
||||||
# Local History for Visual Studio
|
|
||||||
.localhistory/
|
|
||||||
|
|
||||||
# BeatPulse healthcheck temp database
|
|
||||||
healthchecksdb
|
|
||||||
|
|
||||||
# Backup folder for Package Reference Convert tool in Visual Studio 2017
|
|
||||||
MigrationBackup/
|
|
||||||
|
|
||||||
# Ionide (cross platform F# VS Code tools) working folder
|
|
||||||
.ionide/
|
|
||||||
|
|
||||||
# Fody - auto-generated XML schema
|
|
||||||
FodyWeavers.xsd
|
|
||||||
|
|
||||||
##
|
|
||||||
## Visual studio for Mac
|
|
||||||
##
|
|
||||||
|
|
||||||
|
|
||||||
# globs
|
|
||||||
Makefile.in
|
|
||||||
*.userprefs
|
|
||||||
*.usertasks
|
|
||||||
config.make
|
|
||||||
config.status
|
|
||||||
aclocal.m4
|
|
||||||
install-sh
|
|
||||||
autom4te.cache/
|
|
||||||
*.tar.gz
|
|
||||||
tarballs/
|
|
||||||
test-results/
|
|
||||||
|
|
||||||
# Mac bundle stuff
|
|
||||||
*.dmg
|
|
||||||
*.app
|
|
||||||
|
|
||||||
# content below from: https://github.com/github/gitignore/blob/master/Global/macOS.gitignore
|
|
||||||
# General
|
|
||||||
.DS_Store
|
|
||||||
.AppleDouble
|
|
||||||
.LSOverride
|
|
||||||
|
|
||||||
# Icon must end with two \r
|
|
||||||
Icon
|
|
||||||
|
|
||||||
|
|
||||||
# Thumbnails
|
|
||||||
._*
|
|
||||||
|
|
||||||
# Files that might appear in the root of a volume
|
|
||||||
.DocumentRevisions-V100
|
|
||||||
.fseventsd
|
|
||||||
.Spotlight-V100
|
|
||||||
.TemporaryItems
|
|
||||||
.Trashes
|
|
||||||
.VolumeIcon.icns
|
|
||||||
.com.apple.timemachine.donotpresent
|
|
||||||
|
|
||||||
# Directories potentially created on remote AFP share
|
|
||||||
.AppleDB
|
|
||||||
.AppleDesktop
|
|
||||||
Network Trash Folder
|
|
||||||
Temporary Items
|
|
||||||
.apdisk
|
|
||||||
|
|
||||||
# content below from: https://github.com/github/gitignore/blob/master/Global/Windows.gitignore
|
|
||||||
# Windows thumbnail cache files
|
|
||||||
Thumbs.db
|
|
||||||
ehthumbs.db
|
|
||||||
ehthumbs_vista.db
|
|
||||||
|
|
||||||
# Dump file
|
|
||||||
*.stackdump
|
|
||||||
|
|
||||||
# Folder config file
|
|
||||||
[Dd]esktop.ini
|
|
||||||
|
|
||||||
# Recycle Bin used on file shares
|
|
||||||
$RECYCLE.BIN/
|
|
||||||
|
|
||||||
# Windows Installer files
|
|
||||||
*.cab
|
|
||||||
*.msi
|
|
||||||
*.msix
|
|
||||||
*.msm
|
|
||||||
*.msp
|
|
||||||
|
|
||||||
# Windows shortcuts
|
|
||||||
*.lnk
|
|
||||||
|
|
||||||
# JetBrains Rider
|
|
||||||
.idea/
|
|
||||||
*.sln.iml
|
|
||||||
|
|
||||||
##
|
|
||||||
## Visual Studio Code
|
|
||||||
##
|
|
||||||
.vscode/*
|
|
||||||
!.vscode/settings.json
|
|
||||||
!.vscode/tasks.json
|
|
||||||
!.vscode/launch.json
|
|
||||||
!.vscode/extensions.json
|
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
<Application xmlns="https://github.com/avaloniaui"
|
|
||||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
|
||||||
x:Class="DiscordBotGUI.App">
|
|
||||||
<Application.Styles>
|
|
||||||
<FluentTheme Mode="Dark"/>
|
|
||||||
</Application.Styles>
|
|
||||||
</Application>
|
|
||||||
@@ -1,27 +0,0 @@
|
|||||||
using Avalonia;
|
|
||||||
using Avalonia.Controls.ApplicationLifetimes;
|
|
||||||
using Avalonia.Markup.Xaml;
|
|
||||||
|
|
||||||
namespace DiscordBotGUI
|
|
||||||
{
|
|
||||||
public partial class App : Application
|
|
||||||
{
|
|
||||||
public override void Initialize()
|
|
||||||
{
|
|
||||||
AvaloniaXamlLoader.Load(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
public override void OnFrameworkInitializationCompleted()
|
|
||||||
{
|
|
||||||
if (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop)
|
|
||||||
{
|
|
||||||
|
|
||||||
|
|
||||||
desktop.MainWindow = new AppUpdater() { Width = 300, Height = 50, WindowStartupLocation = Avalonia.Controls.WindowStartupLocation.CenterScreen };
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
base.OnFrameworkInitializationCompleted();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,16 +0,0 @@
|
|||||||
<Window xmlns="https://github.com/avaloniaui"
|
|
||||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
|
||||||
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
|
||||||
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
|
||||||
mc:Ignorable="d" d:DesignWidth="250" d:DesignHeight="50"
|
|
||||||
x:Class="DiscordBotGUI.AppUpdater"
|
|
||||||
Title="AppUpdater"
|
|
||||||
Background="Transparent"
|
|
||||||
TransparencyLevelHint="AcrylicBlur"
|
|
||||||
HasSystemDecorations="False">
|
|
||||||
|
|
||||||
<StackPanel Margin="10">
|
|
||||||
<TextBlock x:Class="DiscordBotGUI.AppUpdater" x:Name="textBox1" Text="Checking for updates..." />
|
|
||||||
<ProgressBar IsIndeterminate="True" x:Class="DiscordBotGUI.AppUpdater" x:Name="progressBar1" Foreground="Yellow" />
|
|
||||||
</StackPanel>
|
|
||||||
</Window>
|
|
||||||
@@ -1,171 +0,0 @@
|
|||||||
using Avalonia;
|
|
||||||
using Avalonia.Controls;
|
|
||||||
using Avalonia.Markup.Xaml;
|
|
||||||
|
|
||||||
using PluginManager.Online;
|
|
||||||
using PluginManager.Others;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using System;
|
|
||||||
using System.IO;
|
|
||||||
using System.Threading;
|
|
||||||
using System.Drawing;
|
|
||||||
using Avalonia.Media;
|
|
||||||
|
|
||||||
namespace DiscordBotGUI
|
|
||||||
{
|
|
||||||
public partial class AppUpdater : Window
|
|
||||||
{
|
|
||||||
private string _version;
|
|
||||||
public AppUpdater()
|
|
||||||
{
|
|
||||||
InitializeComponent();
|
|
||||||
if (!File.Exists("./Version.txt"))
|
|
||||||
{
|
|
||||||
textBox1.Text = "Checking ...";
|
|
||||||
File.WriteAllText("./Version.txt", "DiscordBotVersion=0");
|
|
||||||
//DownloadDiscordBotClientNoGUIAsDLL();
|
|
||||||
}
|
|
||||||
|
|
||||||
Updates();
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/* private async void DownloadDiscordBotClientNoGUIAsDLL()
|
|
||||||
{
|
|
||||||
|
|
||||||
//await Task.Delay(5000);
|
|
||||||
string url_bot_dll = "https://sethdiscordbot.000webhostapp.com/Storage/Discord%20Bot/Updates/DiscordBot.dll";
|
|
||||||
IProgress<float> progress = new Progress<float>((percent) =>
|
|
||||||
{
|
|
||||||
textBox1.Text = "Downloading DiscordBot.dll ... " + (percent * 100).ToString() + "%";
|
|
||||||
this.progressBar1.Value = percent * 100;
|
|
||||||
});
|
|
||||||
|
|
||||||
this.progressBar1.IsIndeterminate = false;
|
|
||||||
try
|
|
||||||
{
|
|
||||||
await ServerCom.DownloadFileAsync(url_bot_dll, "./DiscordBot.dll", progress);
|
|
||||||
}
|
|
||||||
catch
|
|
||||||
{
|
|
||||||
textBox1.Text = "Error downloading DiscordBot.dll. Server is not responding.";
|
|
||||||
|
|
||||||
await Task.Delay(1000);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
//new MainWindow() { Height = 425, Width = 500 }.Show();
|
|
||||||
//Close();
|
|
||||||
}*/
|
|
||||||
|
|
||||||
private async void Updates()
|
|
||||||
{
|
|
||||||
this.progressBar1.IsIndeterminate = true;
|
|
||||||
await Task.Delay(1000);
|
|
||||||
if (!await CheckForUpdates())
|
|
||||||
{
|
|
||||||
//await Task.Delay(5000);
|
|
||||||
textBox1.Text = $"You are running on the latest version ({_version}) !";
|
|
||||||
await Task.Delay(2000);
|
|
||||||
new MainWindow() { Height = 425, Width = 650 }.Show();
|
|
||||||
this.Close();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
string file = await DownloadNewUpdate();
|
|
||||||
if (file == null)
|
|
||||||
{
|
|
||||||
textBox1.Text = "There was an error while downloading the update !";
|
|
||||||
await Task.Delay(2000);
|
|
||||||
new MainWindow() { Height = 425, Width = 650 }.Show();
|
|
||||||
this.Close();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
IProgress<float> progress = new Progress<float>((percent) =>
|
|
||||||
{
|
|
||||||
this.progressBar1.Value = percent;
|
|
||||||
});
|
|
||||||
|
|
||||||
textBox1.Text = "Extracting update files ...";
|
|
||||||
await Functions.ExtractArchive(file, "./", progress);
|
|
||||||
progressBar1.IsIndeterminate = true;
|
|
||||||
textBox1.Text = "Setting up the new version ...";
|
|
||||||
File.Delete(file);
|
|
||||||
File.WriteAllText("./Version.txt", "DiscordBotVersion=" + _version);
|
|
||||||
await Task.Delay(5000);
|
|
||||||
new MainWindow() { Height = 425, Width = 650 }.Show();
|
|
||||||
this.Close();
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
private async Task<string> DownloadNewUpdate()
|
|
||||||
{
|
|
||||||
string urlNewUpdateZip = (await ServerCom.ReadTextFromFile("https://sethdiscordbot.000webhostapp.com/Storage/Discord%20Bot/Updates/Version"))[1];
|
|
||||||
int secondsPast = 0;
|
|
||||||
|
|
||||||
bool isDownloading = true;
|
|
||||||
this.progressBar1.IsIndeterminate = true;
|
|
||||||
textBox1.Text = "Downloading update ...";
|
|
||||||
|
|
||||||
|
|
||||||
IProgress<long> downloaded = new Progress<long>((bytes) =>
|
|
||||||
{
|
|
||||||
(double, string) download = Functions.ConvertBytes(bytes);
|
|
||||||
textBox1.Text = $"Downloading update ... {Math.Round(download.Item1 / secondsPast, 2)} {download.Item2}/s";
|
|
||||||
});
|
|
||||||
IProgress<float> progress = new Progress<float>((percent) =>
|
|
||||||
{
|
|
||||||
progressBar1.IsIndeterminate = false;
|
|
||||||
this.progressBar1.Value = percent;
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
string FileName = $"{urlNewUpdateZip.Split('/')[urlNewUpdateZip.Split('/').Length - 1]}";
|
|
||||||
try
|
|
||||||
{
|
|
||||||
|
|
||||||
new Thread(new Task(() =>
|
|
||||||
{
|
|
||||||
while (isDownloading)
|
|
||||||
{
|
|
||||||
Thread.Sleep(1000);
|
|
||||||
secondsPast++;
|
|
||||||
}
|
|
||||||
}).Start).Start();
|
|
||||||
await ServerCom.DownloadFileAsync(urlNewUpdateZip, FileName, progress, downloaded);
|
|
||||||
}
|
|
||||||
catch
|
|
||||||
{
|
|
||||||
textBox1.Text = "Error downloading the update. Server is not responding.";
|
|
||||||
isDownloading = false;
|
|
||||||
await Task.Delay(1000);
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
isDownloading = false;
|
|
||||||
return FileName;
|
|
||||||
}
|
|
||||||
|
|
||||||
private async Task<bool> CheckForUpdates()
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
|
|
||||||
string current_version = Functions.readCodeFromFile("Version.txt", "DiscordBotVersion", '=') ?? "0";
|
|
||||||
string latest_version = (await ServerCom.ReadTextFromFile("https://sethdiscordbot.000webhostapp.com/Storage/Discord%20Bot/Updates/Version"))[0];
|
|
||||||
_version = latest_version;
|
|
||||||
if (current_version != latest_version)
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
textBox1.Text = "Error while checking for updates. Server is not responding.";
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,40 +0,0 @@
|
|||||||
<Project Sdk="Microsoft.NET.Sdk">
|
|
||||||
<PropertyGroup>
|
|
||||||
<OutputType>WinExe</OutputType>
|
|
||||||
<TargetFramework>net6.0</TargetFramework>
|
|
||||||
<Nullable>enable</Nullable>
|
|
||||||
<!--Avalonia doesen't support TrimMode=link currently,but we are working on that https://github.com/AvaloniaUI/Avalonia/issues/6892 -->
|
|
||||||
<TrimMode>copyused</TrimMode>
|
|
||||||
<BuiltInComInteropSupport>true</BuiltInComInteropSupport>
|
|
||||||
<BaseOutputPath>..\BUILDS\DiscordBotUI\</BaseOutputPath>
|
|
||||||
</PropertyGroup>
|
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
|
|
||||||
<Optimize>False</Optimize>
|
|
||||||
</PropertyGroup>
|
|
||||||
<ItemGroup>
|
|
||||||
<AvaloniaXaml Remove="bin\**" />
|
|
||||||
<Compile Remove="bin\**" />
|
|
||||||
<EmbeddedResource Remove="bin\**" />
|
|
||||||
<None Remove="bin\**" />
|
|
||||||
</ItemGroup>
|
|
||||||
<ItemGroup>
|
|
||||||
<None Remove=".gitignore" />
|
|
||||||
</ItemGroup>
|
|
||||||
<ItemGroup>
|
|
||||||
<!--This helps with theme dll-s trimming.
|
|
||||||
If you will publish your application in self-contained mode with p:PublishTrimmed=true and it will use Fluent theme Default theme will be trimmed from the output and vice versa.
|
|
||||||
https://github.com/AvaloniaUI/Avalonia/issues/5593 -->
|
|
||||||
<TrimmableAssembly Include="Avalonia.Themes.Fluent" />
|
|
||||||
<TrimmableAssembly Include="Avalonia.Themes.Default" />
|
|
||||||
</ItemGroup>
|
|
||||||
<ItemGroup>
|
|
||||||
<PackageReference Include="Avalonia" Version="0.10.14" />
|
|
||||||
<PackageReference Include="Avalonia.Desktop" Version="0.10.14" />
|
|
||||||
<!--Condition below is needed to remove Avalonia.Diagnostics package from build output in Release configuration.-->
|
|
||||||
<PackageReference Condition="'$(Configuration)' == 'Debug'" Include="Avalonia.Diagnostics" Version="0.10.14" />
|
|
||||||
<PackageReference Include="XamlNameReferenceGenerator" Version="1.3.4" />
|
|
||||||
</ItemGroup>
|
|
||||||
<ItemGroup>
|
|
||||||
<ProjectReference Include="..\PluginManager\PluginManager.csproj" />
|
|
||||||
</ItemGroup>
|
|
||||||
</Project>
|
|
||||||
@@ -1,35 +0,0 @@
|
|||||||
<Window xmlns="https://github.com/avaloniaui"
|
|
||||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
|
||||||
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
|
||||||
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
|
||||||
mc:Ignorable="d" d:DesignWidth="500" d:DesignHeight="425"
|
|
||||||
x:Class="DiscordBotGUI.MainWindow"
|
|
||||||
Title="DiscordBotGUI"
|
|
||||||
Background="Transparent"
|
|
||||||
TransparencyLevelHint="AcrylicBlur"
|
|
||||||
ExtendClientAreaToDecorationsHint="True" >
|
|
||||||
|
|
||||||
<StackPanel Margin="20">
|
|
||||||
<Menu>
|
|
||||||
<MenuItem Header="Plugins">
|
|
||||||
<MenuItem Header="Commands" x:Class="DiscordBotGUI.MainWindow" x:Name="commandsSettingMenuItem" />
|
|
||||||
<MenuItem Header="Events" x:Class="DiscordBotGUI.MainWindow" x:Name="eventsSettingMenuItem" />
|
|
||||||
</MenuItem>
|
|
||||||
</Menu>
|
|
||||||
<Label x:Class="DiscordBotGUI.MainWindow" x:Name="label1" Content="Discord Token" />
|
|
||||||
<TextBox x:Class="DiscordBotGUI.MainWindow" x:Name="textBox1" IsReadOnly="True" TextAlignment="Center" Text=""/>
|
|
||||||
<Label x:Class="DiscordBotGUI.MainWindow" x:Name="label2" Content="Bot Prefix" />
|
|
||||||
<TextBox x:Class="DiscordBotGUI.MainWindow" x:Name="textBox2" TextAlignment="Center" HorizontalAlignment="Left" IsReadOnly="True" Text=""/>
|
|
||||||
<Border Background="Black" Padding="0.5" Margin="25"/>
|
|
||||||
<Label x:Class="DiscordBotGUI.MainWindow" x:Name="label3" Content="Start Arguments: " />
|
|
||||||
<TextBox x:Class="DiscordBotGUI.MainWindow" x:Name="textBox3" Width="250" TextAlignment="Center" HorizontalAlignment="Left" IsReadOnly="False" Text=""/>
|
|
||||||
<Label x:Class="DiscordBotGUI.MainWindow" x:Name="label4" Content="" Foreground="Red" Margin="10"/>
|
|
||||||
<Button x:Class="DiscordBotGUI.MainWindow" x:Name="button1" HorizontalAlignment="Center" VerticalAlignment="Bottom" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" Width="200" Content="Start Bot" Margin="0,75,0,0" />
|
|
||||||
<Label x:Class="DiscordBotGUI.MainWindow" x:Name="label5" Content="" VerticalAlignment="Bottom" HorizontalAlignment="Right" Margin="0,0,0,0"/>
|
|
||||||
</StackPanel>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</Window>
|
|
||||||
@@ -1,103 +0,0 @@
|
|||||||
using Avalonia.Controls;
|
|
||||||
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
using PluginManager.Others;
|
|
||||||
using System.IO;
|
|
||||||
using System;
|
|
||||||
using System.Diagnostics;
|
|
||||||
using DiscordBotGUI.Settings;
|
|
||||||
using Avalonia.Themes.Fluent;
|
|
||||||
|
|
||||||
namespace DiscordBotGUI
|
|
||||||
{
|
|
||||||
public partial class MainWindow : Window
|
|
||||||
{
|
|
||||||
public MainWindow()
|
|
||||||
{
|
|
||||||
InitializeComponent();
|
|
||||||
|
|
||||||
LoadElements();
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
private void LoadElements()
|
|
||||||
{
|
|
||||||
|
|
||||||
|
|
||||||
textBox3.Watermark = "Insert start arguments";
|
|
||||||
if (File.Exists("./Version.txt"))
|
|
||||||
label5.Content = Functions.readCodeFromFile("./Version.txt", "DiscordBotVersion", '=');
|
|
||||||
button1.Click += async (sender, e) =>
|
|
||||||
{
|
|
||||||
|
|
||||||
string token = textBox1.Text;
|
|
||||||
string prefix = textBox2.Text;
|
|
||||||
string args = "--nomessage " + textBox3.Text;
|
|
||||||
|
|
||||||
if (!((token.Length == 70 || token.Length == 59) && prefix.Length == 1))
|
|
||||||
{
|
|
||||||
label4.Content = "Invalid Token or Prefix.\n(Prefix must be 1 character long and token must be 59 or 79 characters long)";
|
|
||||||
await Task.Delay(5000);
|
|
||||||
label4.Content = "";
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
Functions.WriteToSettings(Functions.dataFolder + "DiscordBotCore.data", "BOT_TOKEN", token, '=');
|
|
||||||
Functions.WriteToSettings(Functions.dataFolder + "DiscordBotCore.data", "BOT_PREFIX", prefix, '=');
|
|
||||||
RunDiscordBot(args);
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
commandsSettingMenuItem.Click += (sender, e) => new Commands() /*{ Height = 200, Width = 550 }*/.ShowDialog(this);
|
|
||||||
eventsSettingMenuItem.Click += (sender, e) => new Events() /*{ Height = 200, Width = 550 }*/.ShowDialog(this);
|
|
||||||
|
|
||||||
|
|
||||||
string folder = $"{Functions.dataFolder}DiscordBotCore.data";
|
|
||||||
Directory.CreateDirectory(Functions.dataFolder);
|
|
||||||
try
|
|
||||||
{
|
|
||||||
string? botToken = Functions.readCodeFromFile(folder, "BOT_TOKEN", '=');
|
|
||||||
string? botPrefix = Functions.readCodeFromFile(folder, "BOT_PREFIX", '=');
|
|
||||||
if (botToken == null || botPrefix == null)
|
|
||||||
{
|
|
||||||
textBox1.IsReadOnly = false;
|
|
||||||
textBox2.IsReadOnly = false;
|
|
||||||
textBox1.Watermark = "Insert Bot Token Here";
|
|
||||||
textBox2.Watermark = "Insert Bot Prefix Here";
|
|
||||||
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
textBox1.Text = botToken;
|
|
||||||
textBox2.Text = botPrefix;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch
|
|
||||||
{
|
|
||||||
textBox1.IsReadOnly = false;
|
|
||||||
textBox2.IsReadOnly = false;
|
|
||||||
textBox1.Watermark = "Insert Bot Token Here";
|
|
||||||
textBox2.Watermark = "Insert Bot Prefix Here";
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
private void RunDiscordBot(string args)
|
|
||||||
{
|
|
||||||
var os = Functions.GetOperatingSystem();
|
|
||||||
if (os == PluginManager.Others.OperatingSystem.WINDOWS)
|
|
||||||
Process.Start("./DiscordBot.exe", args);
|
|
||||||
else if (os == PluginManager.Others.OperatingSystem.LINUX)
|
|
||||||
Process.Start("./DiscordBot", args);
|
|
||||||
else if (os == PluginManager.Others.OperatingSystem.MAC_OS)
|
|
||||||
Process.Start("./DiscordBot.app/Contents/MacOS/DiscordBot", args);
|
|
||||||
Close();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,29 +0,0 @@
|
|||||||
using Avalonia;
|
|
||||||
using Avalonia.Controls;
|
|
||||||
using Avalonia.Controls.ApplicationLifetimes;
|
|
||||||
|
|
||||||
using System;
|
|
||||||
using System.IO;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
namespace DiscordBotGUI
|
|
||||||
{
|
|
||||||
internal class Program
|
|
||||||
{
|
|
||||||
// Initialization code. Don't use any Avalonia, third-party APIs or any
|
|
||||||
// SynchronizationContext-reliant code before AppMain is called: things aren't initialized
|
|
||||||
// yet and stuff might break.
|
|
||||||
[STAThread]
|
|
||||||
public static void Main(string[] args)
|
|
||||||
{
|
|
||||||
BuildAvaloniaApp()
|
|
||||||
.StartWithClassicDesktopLifetime(args);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Avalonia configuration, don't remove; also used by visual designer.
|
|
||||||
public static AppBuilder BuildAvaloniaApp()
|
|
||||||
=> AppBuilder.Configure<App>()
|
|
||||||
.UsePlatformDetect()
|
|
||||||
.LogToTrace();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,21 +0,0 @@
|
|||||||
<Window xmlns="https://github.com/avaloniaui"
|
|
||||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
|
||||||
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
|
||||||
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
|
||||||
mc:Ignorable="d" d:DesignWidth="550" d:DesignHeight="200"
|
|
||||||
x:Class="DiscordBotGUI.Settings.Commands"
|
|
||||||
Title="Commands"
|
|
||||||
Background="Transparent"
|
|
||||||
TransparencyLevelHint="AcrylicBlur"
|
|
||||||
ExtendClientAreaToDecorationsHint="True">
|
|
||||||
<StackPanel x:Class="DiscordBotGUI.Settings.Commands" x:Name="stackpanel1" Margin="10">
|
|
||||||
<Label Content="Installed Commands" />
|
|
||||||
<TextBox x:Class="DiscordBotGUI.Settings.Commands" x:Name="textbox1" TextAlignment="Left" IsReadOnly="True" />
|
|
||||||
<Label Content="Install another command" />
|
|
||||||
<ComboBox x:Class="DiscordBotGUI.Settings.Commands" x:Name="comboBox1" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="0,10" Padding="200,0" />
|
|
||||||
<Button x:Class="DiscordBotGUI.Settings.Commands" x:Name="button1" HorizontalAlignment="Left" Content="Install" />
|
|
||||||
<ProgressBar x:Class="DiscordBotGUI.Settings.Commands" x:Name="progressBar1" HorizontalAlignment="Left" Margin="0,10" Foreground="Yellow" />
|
|
||||||
<Label x:Class="DiscordBotGUI.Settings.Commands" x:Name="label1" Content="" HorizontalAlignment="Left" Margin="0,10" />
|
|
||||||
</StackPanel>
|
|
||||||
|
|
||||||
</Window>
|
|
||||||
@@ -1,138 +0,0 @@
|
|||||||
using Avalonia;
|
|
||||||
using Avalonia.Controls;
|
|
||||||
using Avalonia.Markup.Xaml;
|
|
||||||
|
|
||||||
using PluginManager.Others;
|
|
||||||
|
|
||||||
using System.Linq;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using System;
|
|
||||||
using System.IO;
|
|
||||||
|
|
||||||
namespace DiscordBotGUI.Settings
|
|
||||||
{
|
|
||||||
public partial class Commands : Window
|
|
||||||
{
|
|
||||||
List<string> commands = new List<string>();
|
|
||||||
public Commands()
|
|
||||||
{
|
|
||||||
InitializeComponent();
|
|
||||||
LoadData();
|
|
||||||
LoadComboBox();
|
|
||||||
|
|
||||||
button1.Click += async (sender, e) =>
|
|
||||||
{
|
|
||||||
await Download();
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
private void LoadData()
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
textbox1.Text = "";
|
|
||||||
Directory.CreateDirectory("./Data/Plugins/Commands/");
|
|
||||||
var files = System.IO.Directory.EnumerateFiles("./Data/Plugins/Commands/");
|
|
||||||
if (files == null || files.Count() < 1) return;
|
|
||||||
foreach (var file in files)
|
|
||||||
textbox1.Text += file.Split('/')[file.Split('/').Length - 1] + "\n";
|
|
||||||
}
|
|
||||||
catch { }
|
|
||||||
}
|
|
||||||
|
|
||||||
private async void LoadComboBox()
|
|
||||||
{
|
|
||||||
comboBox1.Items = null;
|
|
||||||
commands = await PluginManager.Online.ServerCom.ReadTextFromFile("https://sethdiscordbot.000webhostapp.com/Storage/Discord%20Bot/Plugins");
|
|
||||||
if (commands == null) return;
|
|
||||||
string[] plugins = commands.ToArray();
|
|
||||||
string OS;
|
|
||||||
var OSG = Functions.GetOperatingSystem();
|
|
||||||
if (OSG == PluginManager.Others.OperatingSystem.WINDOWS) OS = "Windows";
|
|
||||||
else if (OSG == PluginManager.Others.OperatingSystem.LINUX) OS = "Linux";
|
|
||||||
else OS = "MAC_OS";
|
|
||||||
List<string> data = new List<string>();
|
|
||||||
for (int i = 0; i < plugins.Length; i++)
|
|
||||||
{
|
|
||||||
if (!plugins[i].Contains(OS) || !plugins[i].Contains("Commands"))
|
|
||||||
continue;
|
|
||||||
|
|
||||||
string[] info = plugins[i].Split(',');
|
|
||||||
try
|
|
||||||
{
|
|
||||||
|
|
||||||
if (System.IO.Directory.EnumerateFiles("./Data/Plugins/Commands/").Any(x => x.EndsWith(info[0] + ".dll")))
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
catch { }
|
|
||||||
|
|
||||||
data.Add($"{info[0]} - {info[1]} - {info[2]}");
|
|
||||||
}
|
|
||||||
|
|
||||||
comboBox1.Items = data;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
private async Task Download()
|
|
||||||
{
|
|
||||||
if (comboBox1 == null || comboBox1.SelectedIndex == -1 || comboBox1.SelectedItem == null)
|
|
||||||
return;
|
|
||||||
string? pluginName = comboBox1?.SelectedItem?.ToString()?.Split('-')[0].Trim();
|
|
||||||
|
|
||||||
if (pluginName == null) return;
|
|
||||||
string? URL = (from s in commands
|
|
||||||
where s.StartsWith(pluginName)
|
|
||||||
select s.Split(',')[3].Trim()).FirstOrDefault();
|
|
||||||
|
|
||||||
if (URL == null) return;
|
|
||||||
|
|
||||||
|
|
||||||
IProgress<float> progress = new Progress<float>(async value =>
|
|
||||||
{
|
|
||||||
label1.Content = $"Downloading {pluginName} {MathF.Round(value, 2)}%";
|
|
||||||
if (value == 1f)
|
|
||||||
{
|
|
||||||
label1.Content = "Successfully Downloaded " + pluginName;
|
|
||||||
LoadData();
|
|
||||||
LoadComboBox();
|
|
||||||
|
|
||||||
await Task.Delay(5000);
|
|
||||||
label1.Content = "";
|
|
||||||
}
|
|
||||||
progressBar1.Value = value;
|
|
||||||
});
|
|
||||||
|
|
||||||
await PluginManager.Online.ServerCom.DownloadFileAsync(URL, "./Data/Plugins/Commands/" + pluginName + ".dll", progress);
|
|
||||||
string? requirements = (from s in commands
|
|
||||||
where s.StartsWith(pluginName) && s.Split(',').Length == 6
|
|
||||||
select s.Split(',')[5].Trim()).FirstOrDefault();
|
|
||||||
|
|
||||||
if (requirements == null) return;
|
|
||||||
List<string> req = await PluginManager.Online.ServerCom.ReadTextFromFile(requirements);
|
|
||||||
if (req == null) return;
|
|
||||||
|
|
||||||
foreach (var requirement in req)
|
|
||||||
{
|
|
||||||
string[] info = requirement.Split(',');
|
|
||||||
pluginName = info[1];
|
|
||||||
progress.Report(0);
|
|
||||||
await PluginManager.Online.ServerCom.DownloadFileAsync(info[0], $"./{info[1]}", progress);
|
|
||||||
|
|
||||||
await Task.Delay(1000);
|
|
||||||
|
|
||||||
if (info[0].EndsWith(".zip"))
|
|
||||||
{
|
|
||||||
await Functions.ExtractArchive("./" + info[1], "./", progress);
|
|
||||||
await Task.Delay(1000);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
progress.Report(100f);
|
|
||||||
label1.Content = "Downloaded";
|
|
||||||
progressBar1.Value = 100;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,20 +0,0 @@
|
|||||||
<Window xmlns="https://github.com/avaloniaui"
|
|
||||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
|
||||||
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
|
||||||
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
|
||||||
mc:Ignorable="d" d:DesignWidth="550" d:DesignHeight="200"
|
|
||||||
x:Class="DiscordBotGUI.Settings.Events"
|
|
||||||
Title="Events"
|
|
||||||
Background="Transparent"
|
|
||||||
TransparencyLevelHint="AcrylicBlur"
|
|
||||||
ExtendClientAreaToDecorationsHint="True">
|
|
||||||
<StackPanel Margin="10">
|
|
||||||
<Label Content="Installed Events" />
|
|
||||||
<TextBox x:Class="DiscordBotGUI.Settings.Events" x:Name="textbox1" TextAlignment="Left" IsReadOnly="True" />
|
|
||||||
<Label Content="Install another Events" />
|
|
||||||
<ComboBox x:Class="DiscordBotGUI.Settings.Events" x:Name="comboBox1" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="0,10" Padding="200,0" />
|
|
||||||
<Button x:Class="DiscordBotGUI.Settings.Events" x:Name="button1" HorizontalAlignment="Left" Content="Install" />
|
|
||||||
<ProgressBar x:Class="DiscordBotGUI.Settings.Events" x:Name="progressBar1" HorizontalAlignment="Left" Margin="0,10" Foreground="Yellow" />
|
|
||||||
<Label x:Class="DiscordBotGUI.Settings.Events" x:Name="label1" Content="" HorizontalAlignment="Left" Margin="0,10" />
|
|
||||||
</StackPanel>
|
|
||||||
</Window>
|
|
||||||
@@ -1,139 +0,0 @@
|
|||||||
using Avalonia;
|
|
||||||
using Avalonia.Controls;
|
|
||||||
using Avalonia.Markup.Xaml;
|
|
||||||
|
|
||||||
using PluginManager.Others;
|
|
||||||
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Reflection.Emit;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
using static PluginManager.Others.Console_Utilities;
|
|
||||||
using System.IO;
|
|
||||||
|
|
||||||
namespace DiscordBotGUI.Settings
|
|
||||||
{
|
|
||||||
public partial class Events : Window
|
|
||||||
{
|
|
||||||
List<string> events = new List<string>();
|
|
||||||
public Events()
|
|
||||||
{
|
|
||||||
InitializeComponent();
|
|
||||||
LoadData();
|
|
||||||
LoadComboBox();
|
|
||||||
button1.Click += async (sender, e) =>
|
|
||||||
{
|
|
||||||
await Download();
|
|
||||||
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
private void LoadData()
|
|
||||||
{
|
|
||||||
//Read components from Commands Folder:
|
|
||||||
//textbox1 = new TextBox();
|
|
||||||
try
|
|
||||||
{
|
|
||||||
Directory.CreateDirectory("./Data/Plugins/Events/");
|
|
||||||
textbox1.IsReadOnly = false;
|
|
||||||
textbox1.Text = "";
|
|
||||||
var files = System.IO.Directory.EnumerateFiles("./Data/Plugins/Events/");
|
|
||||||
if (files == null || files.Count() < 1) return;
|
|
||||||
foreach (var file in files)
|
|
||||||
textbox1.Text += file.Split('/')[file.Split('/').Length - 1] + "\n";
|
|
||||||
}
|
|
||||||
catch { }
|
|
||||||
}
|
|
||||||
private async void LoadComboBox()
|
|
||||||
{
|
|
||||||
comboBox1.Items = null;
|
|
||||||
events = await PluginManager.Online.ServerCom.ReadTextFromFile("https://sethdiscordbot.000webhostapp.com/Storage/Discord%20Bot/Plugins");
|
|
||||||
if (events == null) return;
|
|
||||||
string[] plugins = events.ToArray();
|
|
||||||
string OS;
|
|
||||||
var OSG = Functions.GetOperatingSystem();
|
|
||||||
if (OSG == PluginManager.Others.OperatingSystem.WINDOWS) OS = "Windows";
|
|
||||||
else if (OSG == PluginManager.Others.OperatingSystem.LINUX) OS = "Linux";
|
|
||||||
else OS = "MAC_OS";
|
|
||||||
List<string> data = new List<string>();
|
|
||||||
for (int i = 0; i < plugins.Length; i++)
|
|
||||||
{
|
|
||||||
if (!plugins[i].Contains(OS) || !plugins[i].Contains("Event"))
|
|
||||||
continue;
|
|
||||||
|
|
||||||
string[] info = plugins[i].Split(',');
|
|
||||||
try
|
|
||||||
{
|
|
||||||
if (System.IO.Directory.EnumerateFiles("./Data/Plugins/Events/").Any(x => x.EndsWith(info[0] + ".dll")))
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
catch { }
|
|
||||||
|
|
||||||
|
|
||||||
data.Add($"{info[0]} - {info[1]} - {info[2]}");
|
|
||||||
}
|
|
||||||
|
|
||||||
comboBox1.Items = data;
|
|
||||||
}
|
|
||||||
private async Task Download()
|
|
||||||
{
|
|
||||||
if (comboBox1 == null || comboBox1.SelectedIndex == -1 || comboBox1.SelectedItem == null)
|
|
||||||
return;
|
|
||||||
string? pluginName = comboBox1?.SelectedItem?.ToString()?.Split('-')[0].Trim();
|
|
||||||
|
|
||||||
if (pluginName == null) return;
|
|
||||||
string? URL = (from s in events
|
|
||||||
where s.StartsWith(pluginName)
|
|
||||||
select s.Split(',')[3].Trim()).FirstOrDefault();
|
|
||||||
|
|
||||||
if (URL == null) return;
|
|
||||||
|
|
||||||
|
|
||||||
IProgress<float> progress = new Progress<float>(async value =>
|
|
||||||
{
|
|
||||||
label1.Content = $"Downloading {pluginName} {MathF.Round(value, 2)}%";
|
|
||||||
if (value == 1f)
|
|
||||||
{
|
|
||||||
label1.Content = "Successfully Downloaded " + pluginName;
|
|
||||||
LoadData();
|
|
||||||
LoadComboBox();
|
|
||||||
|
|
||||||
await Task.Delay(5000);
|
|
||||||
label1.Content = "";
|
|
||||||
}
|
|
||||||
progressBar1.Value = value;
|
|
||||||
});
|
|
||||||
|
|
||||||
await PluginManager.Online.ServerCom.DownloadFileAsync(URL, "./Data/Plugins/Events/" + pluginName + ".dll", progress);
|
|
||||||
string? requirements = (from s in events
|
|
||||||
where s.StartsWith(pluginName) && s.Split(',').Length == 6
|
|
||||||
select s.Split(',')[5].Trim()).FirstOrDefault();
|
|
||||||
|
|
||||||
if (requirements == null) return;
|
|
||||||
List<string> req = await PluginManager.Online.ServerCom.ReadTextFromFile(requirements);
|
|
||||||
if (req == null) return;
|
|
||||||
|
|
||||||
foreach (var requirement in req)
|
|
||||||
{
|
|
||||||
string[] info = requirement.Split(',');
|
|
||||||
pluginName = info[1];
|
|
||||||
progress.Report(0);
|
|
||||||
await PluginManager.Online.ServerCom.DownloadFileAsync(info[0], $"./{info[1]}", progress);
|
|
||||||
|
|
||||||
await Task.Delay(1000);
|
|
||||||
|
|
||||||
if (info[0].EndsWith(".zip"))
|
|
||||||
{
|
|
||||||
await Functions.ExtractArchive("./" + info[1], "./", progress);
|
|
||||||
await Task.Delay(1000);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
label1.Content = "";
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,62 +0,0 @@
|
|||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.IO;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
public class Core
|
|
||||||
{
|
|
||||||
|
|
||||||
public static Dictionary<ulong, string> playerMessages = new Dictionary<ulong, string>();
|
|
||||||
|
|
||||||
private static readonly string folder = @".\Data\Resources\LevelingSystem\";
|
|
||||||
|
|
||||||
public static int GetLevel(ulong id) => int.Parse(File.ReadAllText(Path.Combine(folder, id.ToString() + ".data")).Split(',')[0].Split('=')[1]);
|
|
||||||
|
|
||||||
|
|
||||||
public static Int64 GetExp(ulong id) => Int64.Parse(File.ReadAllText(Path.Combine(folder, id.ToString() + ".data")).Split(',')[1].Split('=')[1]);
|
|
||||||
|
|
||||||
|
|
||||||
public static Int64 GetReqEXP(ulong id) => Int64.Parse(File.ReadAllText(Path.Combine(folder, id.ToString() + ".data")).Split(',')[2].Split('=')[1]);
|
|
||||||
public static void SaveData(ulong id, int lv, Int64 cexp, Int64 rexp)
|
|
||||||
{
|
|
||||||
Directory.CreateDirectory(folder);
|
|
||||||
File.WriteAllText(Path.Combine(folder, id.ToString() + ".data"), $"Level={lv},EXP={cexp},REXP={rexp}");
|
|
||||||
}
|
|
||||||
private static Int64 NextLevelXP(int level)
|
|
||||||
{
|
|
||||||
return (level * level) + 2 * level + 75;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static (bool, int) MessageSent(ulong id, int messageLength)
|
|
||||||
{
|
|
||||||
WaitForTimeToRemoveFromList(id, 60);
|
|
||||||
|
|
||||||
if (!File.Exists(Path.Combine(folder, id.ToString() + ".data")))
|
|
||||||
{
|
|
||||||
SaveData(id, 0, 0, 0);
|
|
||||||
}
|
|
||||||
Int64 cEXp = GetExp(id);
|
|
||||||
Int64 rExp = GetReqEXP(id);
|
|
||||||
int random = new System.Random().Next(3, 6) + messageLength;
|
|
||||||
cEXp += random;
|
|
||||||
if (cEXp >= rExp)
|
|
||||||
{
|
|
||||||
cEXp = cEXp - rExp;
|
|
||||||
int lv = GetLevel(id);
|
|
||||||
rExp = NextLevelXP(lv);
|
|
||||||
lv++;
|
|
||||||
SaveData(id, lv, cEXp, rExp);
|
|
||||||
return (true, lv);
|
|
||||||
}
|
|
||||||
|
|
||||||
SaveData(id, GetLevel(id), cEXp, rExp);
|
|
||||||
return (false, -1);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static async void WaitForTimeToRemoveFromList(ulong id, int time_seconds)
|
|
||||||
{
|
|
||||||
await Task.Delay(time_seconds * 1000);
|
|
||||||
playerMessages.Remove(id);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,24 +0,0 @@
|
|||||||
using Discord.WebSocket;
|
|
||||||
|
|
||||||
using System;
|
|
||||||
using System.IO;
|
|
||||||
public static class Data
|
|
||||||
{
|
|
||||||
private static readonly string folder = @".\Data\Resources\LevelingSystem\";
|
|
||||||
public static void registerPlayer(SocketGuildUser user)
|
|
||||||
{
|
|
||||||
ulong id = user.Id;
|
|
||||||
Directory.CreateDirectory(folder);
|
|
||||||
File.WriteAllText(Path.Combine(folder, id.ToString() + ".data"), "Level=0,EXP=0,REXP=100");
|
|
||||||
}
|
|
||||||
|
|
||||||
public static int GetLevel(ulong id) => int.Parse(File.ReadAllText(Path.Combine(folder, id.ToString() + ".data")).Split(',')[0].Split('=')[1]);
|
|
||||||
|
|
||||||
|
|
||||||
public static Int64 GetExp(ulong id) => Int64.Parse(File.ReadAllText(Path.Combine(folder, id.ToString() + ".data")).Split(',')[1].Split('=')[1]);
|
|
||||||
|
|
||||||
|
|
||||||
public static Int64 GetReqEXP(ulong id) => Int64.Parse(File.ReadAllText(Path.Combine(folder, id.ToString() + ".data")).Split(',')[2].Split('=')[1]);
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,14 +1,17 @@
|
|||||||
<Project Sdk="Microsoft.NET.Sdk">
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<TargetFramework>net6.0</TargetFramework>
|
<TargetFramework>net6.0</TargetFramework>
|
||||||
|
<ImplicitUsings>enable</ImplicitUsings>
|
||||||
|
<Nullable>enable</Nullable>
|
||||||
|
<BaseOutputPath></BaseOutputPath>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
|
<ItemGroup>
|
||||||
<OutputPath>..\BUILDS\</OutputPath>
|
<Compile Remove="bin\**" />
|
||||||
<DebugType>none</DebugType>
|
<EmbeddedResource Remove="bin\**" />
|
||||||
<DebugSymbols>false</DebugSymbols>
|
<None Remove="bin\**" />
|
||||||
</PropertyGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ProjectReference Include="..\PluginManager\PluginManager.csproj" />
|
<ProjectReference Include="..\PluginManager\PluginManager.csproj" />
|
||||||
|
|||||||
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,56 +0,0 @@
|
|||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
using Discord.WebSocket;
|
|
||||||
|
|
||||||
using PluginManager.Others;
|
|
||||||
using PluginManager.Interfaces;
|
|
||||||
using PluginManager.LanguageSystem;
|
|
||||||
using PluginManager.Items;
|
|
||||||
using System;
|
|
||||||
|
|
||||||
public class LevelingSystem : DBEvent
|
|
||||||
{
|
|
||||||
public string name => "Leveling System";
|
|
||||||
|
|
||||||
public string description => "Leveling System Event";
|
|
||||||
|
|
||||||
public void Start(DiscordSocketClient client)
|
|
||||||
{
|
|
||||||
|
|
||||||
ConsoleCommandsHandler.AddCommand("lvl", "Test command", async (args) =>
|
|
||||||
{
|
|
||||||
Console.WriteLine("Leveling system command");
|
|
||||||
|
|
||||||
});
|
|
||||||
|
|
||||||
client.MessageReceived += Client_MessageReceived;
|
|
||||||
}
|
|
||||||
|
|
||||||
private async Task Client_MessageReceived(SocketMessage arg)
|
|
||||||
{
|
|
||||||
if (arg.Author.IsBot || arg.Attachments.Count > 0 ||
|
|
||||||
arg.Content.StartsWith
|
|
||||||
(
|
|
||||||
Functions.readCodeFromFile
|
|
||||||
(
|
|
||||||
fileName: System.IO.Path.Combine(Functions.dataFolder, "DiscordBotCore.data"),
|
|
||||||
Code: "BOT_PREFIX",
|
|
||||||
separator: '='
|
|
||||||
)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
return;
|
|
||||||
//Console_Utilities.WriteColorText("Message from : " + arg.Author.Username);
|
|
||||||
if (Core.playerMessages.ContainsKey(arg.Author.Id))
|
|
||||||
return;
|
|
||||||
|
|
||||||
(bool x, int lv) = Core.MessageSent(arg.Author.Id, arg.Content.Length);
|
|
||||||
Core.playerMessages.Add(arg.Author.Id, arg.Content);
|
|
||||||
if (x)
|
|
||||||
if (Language.ActiveLanguage != null)
|
|
||||||
await arg.Channel.SendMessageAsync(Language.ActiveLanguage.LanguageWords["DB_EVENT_LEVEL_SYSTEM_LEVEL_UP"].Replace("{0}", lv.ToString()));
|
|
||||||
else await arg.Channel.SendMessageAsync("You've successfully leveled up to level " + lv);
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
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; }
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,32 +0,0 @@
|
|||||||
using PluginManager.Interfaces;
|
|
||||||
using PluginManager.Items;
|
|
||||||
using Games.Objects;
|
|
||||||
using PluginManager.Others;
|
|
||||||
|
|
||||||
namespace Games;
|
|
||||||
|
|
||||||
public class Game : DBCommand
|
|
||||||
{
|
|
||||||
public string Command => "game";
|
|
||||||
public string Description => "Display info about the specified game";
|
|
||||||
public string Usage => "game <game>";
|
|
||||||
|
|
||||||
public bool canUseDM => false;
|
|
||||||
public bool canUseServer => true;
|
|
||||||
public bool requireAdmin => false;
|
|
||||||
|
|
||||||
public async void Execute(Discord.Commands.SocketCommandContext context, Discord.WebSocket.SocketMessage message,
|
|
||||||
Discord.WebSocket.DiscordSocketClient client, bool isDM)
|
|
||||||
{
|
|
||||||
|
|
||||||
string game_name = Functions.MergeStrings(message.Content.Split(' '), 1);
|
|
||||||
string game_url = await GameData.GetSteamLinkFromGame(game_name);
|
|
||||||
if (game_url is null || game_url == null)
|
|
||||||
{
|
|
||||||
await message.Channel.SendMessageAsync("Could not find the game. Try to be more specific or check for spelling errors.");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
await context.Channel.SendMessageAsync(game_url);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,24 +0,0 @@
|
|||||||
using PluginManager.Online;
|
|
||||||
namespace Games.Objects;
|
|
||||||
|
|
||||||
public class GameData
|
|
||||||
{
|
|
||||||
internal async static Task<string> GetSteamLinkFromGame(string GameName)
|
|
||||||
{
|
|
||||||
string URL = $"https://store.steampowered.com/search?term={GameName.Replace(" ", "+")}";
|
|
||||||
List<string> lines = await ServerCom.ReadTextFromFile(URL);
|
|
||||||
|
|
||||||
string? gameData = (
|
|
||||||
from s in lines
|
|
||||||
where s.Contains(GameName.Replace(" ", "_"), StringComparison.OrdinalIgnoreCase)
|
|
||||||
select s).FirstOrDefault();
|
|
||||||
if (gameData is null) return null;
|
|
||||||
string GameURL = gameData.Split('\"')[1].Split('?')[0];
|
|
||||||
|
|
||||||
if (GameURL == "menuitem")
|
|
||||||
return null;
|
|
||||||
|
|
||||||
return GameURL;
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
34
MusicCommands/AudioFile.cs
Normal file
34
MusicCommands/AudioFile.cs
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
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.exe";
|
||||||
|
proc.StartInfo.Arguments = $"{Url},{Name}";
|
||||||
|
proc.StartInfo.UseShellExecute = false;
|
||||||
|
proc.StartInfo.RedirectStandardOutput = true;
|
||||||
|
|
||||||
|
proc.Start();
|
||||||
|
await proc.WaitForExitAsync();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,15 +1,13 @@
|
|||||||
using Discord;
|
using Discord;
|
||||||
using Discord.Audio;
|
using Discord.Audio;
|
||||||
|
|
||||||
using MusicCommands;
|
namespace MusicCommands;
|
||||||
|
|
||||||
namespace CMD_Utils.Music
|
|
||||||
{
|
|
||||||
internal static class Data
|
internal static class Data
|
||||||
{
|
{
|
||||||
internal static IAudioClient audioClient = null;
|
internal static IAudioClient audioClient = null;
|
||||||
internal static IVoiceChannel voiceChannel = null;
|
internal static IVoiceChannel voiceChannel = null;
|
||||||
|
|
||||||
internal static MusicPlayer CurrentlyRunning = null;
|
internal static MusicPlayer MusicPlayer = null;
|
||||||
}
|
internal static MusicPlaylist Playlist = new();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,20 +1,16 @@
|
|||||||
using Discord.Commands;
|
using System.Collections.Generic;
|
||||||
|
using Discord.Commands;
|
||||||
using Discord.WebSocket;
|
using Discord.WebSocket;
|
||||||
|
|
||||||
using PluginManager.Interfaces;
|
using PluginManager.Interfaces;
|
||||||
|
|
||||||
using System;
|
namespace MusicCommands;
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
namespace CMD_Utils.Music
|
internal class Leave : DBCommand
|
||||||
{
|
|
||||||
class Leave : DBCommand
|
|
||||||
{
|
{
|
||||||
public string Command => "leave";
|
public string Command => "leave";
|
||||||
|
|
||||||
|
public List<string> Aliases => null;
|
||||||
|
|
||||||
public string Description => "Leave the voice channel";
|
public string Description => "Leave the voice channel";
|
||||||
|
|
||||||
public string Usage => "leave";
|
public string Usage => "leave";
|
||||||
@@ -29,11 +25,20 @@ namespace CMD_Utils.Music
|
|||||||
{
|
{
|
||||||
if (Data.audioClient is not null && Data.voiceChannel is not null)
|
if (Data.audioClient is not null && Data.voiceChannel is not null)
|
||||||
{
|
{
|
||||||
Data.CurrentlyRunning.Stop();
|
|
||||||
Data.CurrentlyRunning = null;
|
|
||||||
await Data.audioClient.StopAsync();
|
await Data.audioClient.StopAsync();
|
||||||
await Data.voiceChannel.DisconnectAsync();
|
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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,6 +3,8 @@
|
|||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<TargetFramework>net6.0</TargetFramework>
|
<TargetFramework>net6.0</TargetFramework>
|
||||||
<Nullable>warnings</Nullable>
|
<Nullable>warnings</Nullable>
|
||||||
|
<BaseOutputPath>bin\</BaseOutputPath>
|
||||||
|
<AssemblyName>Music Commands</AssemblyName>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
|
||||||
@@ -16,4 +18,8 @@
|
|||||||
<ProjectReference Include="..\PluginManager\PluginManager.csproj" />
|
<ProjectReference Include="..\PluginManager\PluginManager.csproj" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<PackageReference Include="YoutubeExplode" Version="6.2.0" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
</Project>
|
</Project>
|
||||||
|
|||||||
@@ -1,122 +1,53 @@
|
|||||||
using CMD_Utils.Music;
|
using System.IO;
|
||||||
|
|
||||||
using PluginManager.Others;
|
|
||||||
|
|
||||||
using System;
|
|
||||||
using System.IO;
|
|
||||||
using System.Net;
|
|
||||||
using System.Net.Http;
|
|
||||||
using System.Net.Http.Headers;
|
|
||||||
using System.Threading;
|
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
namespace MusicCommands
|
namespace MusicCommands;
|
||||||
|
|
||||||
|
internal class MusicPlayer
|
||||||
{
|
{
|
||||||
class MusicPlayer
|
private Stream outputStream { get; }
|
||||||
|
internal AudioFile NowPlaying = null;
|
||||||
|
|
||||||
|
internal bool isPlaying, isPaused;
|
||||||
|
|
||||||
|
public MusicPlayer(Stream outputChannel)
|
||||||
{
|
{
|
||||||
public Stream inputStream { get; private set; } // from FFMPEG
|
outputStream = outputChannel;
|
||||||
public Stream outputStream { get; private set; } // to Voice Channel
|
|
||||||
public MusicPlayer(Stream input, Stream output)
|
|
||||||
{
|
|
||||||
inputStream = input;
|
|
||||||
outputStream = output;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public MusicPlayer(Stream output)
|
public async Task Play(Stream source, int byteSize, AudioFile songPlaying)
|
||||||
{
|
{
|
||||||
inputStream = null;
|
isPlaying = true;
|
||||||
outputStream = output;
|
NowPlaying = songPlaying;
|
||||||
}
|
while (isPlaying)
|
||||||
|
{
|
||||||
|
if (isPaused)
|
||||||
|
continue;
|
||||||
|
|
||||||
public bool Paused { get; set; }
|
var bits = new byte[byteSize];
|
||||||
private bool _stop { get; set; }
|
var read = await source.ReadAsync(bits, 0, byteSize);
|
||||||
public void Stop()
|
if (read == 0)
|
||||||
{
|
|
||||||
_stop = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
public async Task StartSendAudioFromLink(string URL)
|
|
||||||
{
|
|
||||||
|
|
||||||
/* using (HttpClient client = new HttpClient())
|
|
||||||
using (HttpResponseMessage response = await client.GetAsync(URL))
|
|
||||||
using (var content = response.Content)
|
|
||||||
{
|
|
||||||
await (await content.ReadAsStreamAsync()).CopyToAsync(outputStream);
|
|
||||||
}*/
|
|
||||||
|
|
||||||
|
|
||||||
Stream ms = new MemoryStream();
|
|
||||||
int bsize = 512;
|
|
||||||
new Thread(async delegate (object o)
|
|
||||||
{
|
|
||||||
var response = await new HttpClient().GetAsync(URL);
|
|
||||||
using (var stream = await response.Content.ReadAsStreamAsync())
|
|
||||||
{
|
|
||||||
byte[] buffer = new byte[bsize];
|
|
||||||
int read;
|
|
||||||
while ((read = stream.Read(buffer, 0, buffer.Length)) > 0)
|
|
||||||
{
|
|
||||||
var pos = ms.Position;
|
|
||||||
ms.Position = ms.Length;
|
|
||||||
ms.Write(buffer, 0, read);
|
|
||||||
ms.Position = pos;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}).Start();
|
|
||||||
Console.Write("Reading data: ");
|
|
||||||
while (ms.Length < bsize * 10)
|
|
||||||
{
|
|
||||||
await Task.Delay(1000);
|
|
||||||
Console.Title = "Reading data: " + ms.Length + " bytes read of " + bsize * 10;
|
|
||||||
Console.Write(".");
|
|
||||||
}
|
|
||||||
Console.WriteLine("\nDone");
|
|
||||||
ms.Position = 0;
|
|
||||||
|
|
||||||
_stop = false;
|
|
||||||
Paused = false;
|
|
||||||
|
|
||||||
while (!_stop)
|
|
||||||
{
|
|
||||||
if (Paused) continue;
|
|
||||||
byte[] buffer = new byte[bsize];
|
|
||||||
int read = await ms.ReadAsync(buffer, 0, buffer.Length);
|
|
||||||
if (read > 0)
|
|
||||||
await outputStream.WriteAsync(buffer, 0, read);
|
|
||||||
else break;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public async Task StartSendAudio()
|
|
||||||
{
|
|
||||||
Paused = false;
|
|
||||||
_stop = false;
|
|
||||||
while (!_stop)
|
|
||||||
{
|
|
||||||
if (Paused) continue;
|
|
||||||
int bsize = 512;
|
|
||||||
byte[] buffer = new byte[bsize];
|
|
||||||
var bcount = await inputStream.ReadAsync(buffer, 0, bsize);
|
|
||||||
if (bcount <= 0)
|
|
||||||
{
|
|
||||||
Stop();
|
|
||||||
Data.CurrentlyRunning = null;
|
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
await outputStream.WriteAsync(buffer, 0, bcount);
|
await outputStream.WriteAsync(bits, 0, read);
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch
|
||||||
{
|
{
|
||||||
await outputStream.FlushAsync();
|
break;
|
||||||
Functions.WriteLogFile(ex.ToString());
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
|
||||||
}
|
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();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,15 +1,17 @@
|
|||||||
using Discord.Commands;
|
using System.Collections.Generic;
|
||||||
|
using Discord.Commands;
|
||||||
using Discord.WebSocket;
|
using Discord.WebSocket;
|
||||||
|
|
||||||
using PluginManager.Interfaces;
|
using PluginManager.Interfaces;
|
||||||
|
|
||||||
namespace CMD_Utils.Music
|
namespace MusicCommands;
|
||||||
{
|
|
||||||
class Pause : DBCommand
|
internal class Pause : DBCommand
|
||||||
{
|
{
|
||||||
public string Command => "pause";
|
public string Command => "pause";
|
||||||
|
|
||||||
public string Description => "Pause the music";
|
public List<string> Aliases => null;
|
||||||
|
|
||||||
|
public string Description => "Pause/Unpause the music that is currently running";
|
||||||
|
|
||||||
public string Usage => "pause";
|
public string Usage => "pause";
|
||||||
|
|
||||||
@@ -21,7 +23,6 @@ namespace CMD_Utils.Music
|
|||||||
|
|
||||||
public void Execute(SocketCommandContext context, SocketMessage message, DiscordSocketClient client, bool isDM)
|
public void Execute(SocketCommandContext context, SocketMessage message, DiscordSocketClient client, bool isDM)
|
||||||
{
|
{
|
||||||
Data.CurrentlyRunning.Paused = true;
|
Data.MusicPlayer.isPaused = !Data.MusicPlayer.isPaused;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,26 +1,25 @@
|
|||||||
using Discord;
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Diagnostics;
|
||||||
|
using System.IO;
|
||||||
|
using Discord;
|
||||||
using Discord.Audio;
|
using Discord.Audio;
|
||||||
using Discord.Commands;
|
using Discord.Commands;
|
||||||
using Discord.WebSocket;
|
using Discord.WebSocket;
|
||||||
|
|
||||||
using MusicCommands;
|
|
||||||
|
|
||||||
using PluginManager.Interfaces;
|
using PluginManager.Interfaces;
|
||||||
using PluginManager.Others;
|
using PluginManager.Others;
|
||||||
|
|
||||||
using System;
|
namespace MusicCommands;
|
||||||
using System.Diagnostics;
|
|
||||||
using System.IO;
|
|
||||||
|
|
||||||
namespace CMD_Utils.Music
|
internal class Play : DBCommand
|
||||||
{
|
{
|
||||||
class Play : DBCommand
|
public string Command => "play";
|
||||||
{
|
|
||||||
public string Command => "fplay";
|
public List<string> Aliases => new() { "p" };
|
||||||
|
|
||||||
public string Description => "Play music from a file";
|
public string Description => "Play music from a file";
|
||||||
|
|
||||||
public string Usage => "fplay [name]";
|
public string Usage => "play [name/url]";
|
||||||
|
|
||||||
public bool canUseDM => false;
|
public bool canUseDM => false;
|
||||||
|
|
||||||
@@ -30,41 +29,91 @@ namespace CMD_Utils.Music
|
|||||||
|
|
||||||
public async void Execute(SocketCommandContext context, SocketMessage message, DiscordSocketClient client, bool isDM)
|
public async void Execute(SocketCommandContext context, SocketMessage message, DiscordSocketClient client, bool isDM)
|
||||||
{
|
{
|
||||||
string path = "./Music";
|
Directory.CreateDirectory("Music");
|
||||||
string FileName = Functions.GetArguments(message).ToArray().MergeStrings(0);
|
var path = "./Music/";
|
||||||
path += "/" + FileName + ".mp3";
|
string[] splitted = message.Content.Split(' ');
|
||||||
if (!File.Exists(path))
|
if (splitted.Length < 2)
|
||||||
|
return;
|
||||||
|
do
|
||||||
{
|
{
|
||||||
Console.WriteLine("Unknown path " + path);
|
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;
|
return;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
while (false); // run only one time !
|
||||||
|
|
||||||
|
|
||||||
Data.voiceChannel = (context.User as IGuildUser)?.VoiceChannel;
|
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; }
|
|
||||||
|
|
||||||
Data.audioClient = await Data.voiceChannel.ConnectAsync();
|
if (Data.voiceChannel == null)
|
||||||
|
|
||||||
using (var ffmpeg = CreateStream(path))
|
|
||||||
using (var output = ffmpeg.StandardOutput.BaseStream)
|
|
||||||
using (var discord = Data.audioClient.CreatePCMStream(AudioApplication.Mixed))
|
|
||||||
{
|
{
|
||||||
if (Data.CurrentlyRunning != null)
|
await context.Channel.SendMessageAsync("User must be in a voice channel, or a voice channel must be passed as an argument.");
|
||||||
Data.CurrentlyRunning.Stop();
|
return;
|
||||||
Data.CurrentlyRunning = new MusicPlayer(output, discord);
|
}
|
||||||
await Data.CurrentlyRunning.StartSendAudio();
|
|
||||||
|
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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private Process CreateStream(string path)
|
Data.MusicPlayer = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static Process CreateStream(string path)
|
||||||
{
|
{
|
||||||
return Process.Start(new ProcessStartInfo
|
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 });
|
||||||
{
|
|
||||||
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}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,35 +0,0 @@
|
|||||||
using CMD_Utils.Music;
|
|
||||||
|
|
||||||
using Discord.Commands;
|
|
||||||
using Discord.WebSocket;
|
|
||||||
|
|
||||||
using PluginManager.Interfaces;
|
|
||||||
|
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
namespace MusicCommands
|
|
||||||
{
|
|
||||||
class Unpause : DBCommand
|
|
||||||
{
|
|
||||||
public string Command => "unpause";
|
|
||||||
|
|
||||||
public string Description => "Unpause the music";
|
|
||||||
|
|
||||||
public string Usage => "unpause";
|
|
||||||
|
|
||||||
public bool canUseDM => false;
|
|
||||||
|
|
||||||
public bool canUseServer => true;
|
|
||||||
|
|
||||||
public bool requireAdmin => false;
|
|
||||||
|
|
||||||
public void Execute(SocketCommandContext context, SocketMessage message, DiscordSocketClient client, bool isDM)
|
|
||||||
{
|
|
||||||
Data.CurrentlyRunning.Paused = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,52 +0,0 @@
|
|||||||
using CMD_Utils.Music;
|
|
||||||
using Discord.Audio;
|
|
||||||
using Discord.Commands;
|
|
||||||
using Discord.WebSocket;
|
|
||||||
using Discord;
|
|
||||||
|
|
||||||
using PluginManager.Interfaces;
|
|
||||||
|
|
||||||
namespace MusicCommands
|
|
||||||
{
|
|
||||||
class lplay : DBCommand
|
|
||||||
{
|
|
||||||
public string Command => "lplay";
|
|
||||||
|
|
||||||
public string Description => "Play music from a link";
|
|
||||||
|
|
||||||
public string Usage => "lplay [url]";
|
|
||||||
|
|
||||||
public bool canUseDM => false;
|
|
||||||
|
|
||||||
public bool canUseServer => false;
|
|
||||||
|
|
||||||
public bool requireAdmin => false;
|
|
||||||
|
|
||||||
public async void Execute(SocketCommandContext context, SocketMessage message, DiscordSocketClient client, bool isDM)
|
|
||||||
{
|
|
||||||
string URL = message.Content.Split(' ')[1];
|
|
||||||
if (!URL.EndsWith(".mp3") && !URL.EndsWith(".wav") && !URL.EndsWith(".flac") && !URL.EndsWith(".ogg"))
|
|
||||||
{
|
|
||||||
await message.Channel.SendMessageAsync("Invalid URL");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
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; }
|
|
||||||
|
|
||||||
Data.audioClient = await Data.voiceChannel.ConnectAsync();
|
|
||||||
|
|
||||||
using (var discord = Data.audioClient.CreatePCMStream(AudioApplication.Mixed))
|
|
||||||
{
|
|
||||||
|
|
||||||
|
|
||||||
await message.Channel.SendMessageAsync("Loading...");
|
|
||||||
|
|
||||||
Data.CurrentlyRunning = new MusicPlayer(discord);
|
|
||||||
await Data.CurrentlyRunning.StartSendAudioFromLink(URL);
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
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,13 +0,0 @@
|
|||||||
<Window
|
|
||||||
x:Class="PluginManager.BlankWindow1"
|
|
||||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
|
||||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
|
||||||
xmlns:local="using:PluginManager"
|
|
||||||
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
|
||||||
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
|
||||||
mc:Ignorable="d">
|
|
||||||
|
|
||||||
<Grid>
|
|
||||||
|
|
||||||
</Grid>
|
|
||||||
</Window>
|
|
||||||
209
PluginManager/Config.cs
Normal file
209
PluginManager/Config.cs
Normal file
@@ -0,0 +1,209 @@
|
|||||||
|
using System;
|
||||||
|
using PluginManager.Others;
|
||||||
|
using System.IO;
|
||||||
|
using System.Text.Json;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Collections.ObjectModel;
|
||||||
|
using System.Threading;
|
||||||
|
|
||||||
|
namespace PluginManager
|
||||||
|
{
|
||||||
|
internal class AppConfig
|
||||||
|
{
|
||||||
|
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 PluginConfig
|
||||||
|
{
|
||||||
|
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 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();
|
||||||
|
}
|
||||||
|
|
||||||
|
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;
|
||||||
|
if (int.TryParse(value, out var intValue))
|
||||||
|
Config.AddValueToVariables(key, intValue, isReadOnly);
|
||||||
|
else if (bool.TryParse(value, out var boolValue))
|
||||||
|
Config.AddValueToVariables(key, boolValue, isReadOnly);
|
||||||
|
else if (float.TryParse(value, out var floatValue))
|
||||||
|
Config.AddValueToVariables(key, floatValue, isReadOnly);
|
||||||
|
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 T? GetValue<T>(string key)
|
||||||
|
{
|
||||||
|
if (!appConfig!.ApplicationVariables!.ContainsKey(key)) return default;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
JsonElement element = (JsonElement)appConfig.ApplicationVariables[key];
|
||||||
|
return element.Deserialize<T>();
|
||||||
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
return (T)appConfig.ApplicationVariables[key];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void SetValue<T>(string key, T value)
|
||||||
|
{
|
||||||
|
if (value == null)
|
||||||
|
throw new Exception("Value is null");
|
||||||
|
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();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void RemoveKey(string key)
|
||||||
|
{
|
||||||
|
if (key == "Version" || key == "token" || key == "prefix")
|
||||||
|
throw new Exception("Key is protected");
|
||||||
|
appConfig!.ApplicationVariables!.Remove(key);
|
||||||
|
appConfig.ProtectedKeyWords!.Remove(key);
|
||||||
|
SaveConfig();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static async void SaveConfig()
|
||||||
|
{
|
||||||
|
string path = Functions.dataFolder + "config.json";
|
||||||
|
await Functions.SaveToJsonFile<AppConfig>(path, appConfig!);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static async Task LoadConfig()
|
||||||
|
{
|
||||||
|
string path = Functions.dataFolder + "config.json";
|
||||||
|
if (File.Exists(path))
|
||||||
|
{
|
||||||
|
appConfig = await Functions.ConvertFromJson<AppConfig>(path);
|
||||||
|
Functions.WriteLogFile($"Loaded {appConfig.ApplicationVariables!.Keys.Count} application variables.\nLoaded {appConfig.ProtectedKeyWords!.Count} readonly variables.");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
appConfig = new() { ApplicationVariables = new Dictionary<string, object>(), ProtectedKeyWords = new List<string>(), PluginVersions = new Dictionary<string, string>() };
|
||||||
|
}
|
||||||
|
|
||||||
|
public static bool ContainsValue<T>(T value) => appConfig!.ApplicationVariables!.ContainsValue(value!);
|
||||||
|
public static bool ContainsKey(string key) => appConfig!.ApplicationVariables!.ContainsKey(key);
|
||||||
|
|
||||||
|
public static ReadOnlyDictionary<string, object> GetAllVariables() => new(appConfig!.ApplicationVariables!);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,5 +1,9 @@
|
|||||||
namespace PluginManager.Interfaces
|
using System.Collections.Generic;
|
||||||
{
|
using Discord.Commands;
|
||||||
|
using Discord.WebSocket;
|
||||||
|
|
||||||
|
namespace PluginManager.Interfaces;
|
||||||
|
|
||||||
public interface DBCommand
|
public interface DBCommand
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -8,6 +12,11 @@
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
string Command { get; }
|
string Command { get; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Command aliases. Users may use this to execute the command
|
||||||
|
/// </summary>
|
||||||
|
List<string>? Aliases { get; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Command description
|
/// Command description
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -41,9 +50,5 @@
|
|||||||
/// <param name="message">The message that the user types</param>
|
/// <param name="message">The message that the user types</param>
|
||||||
/// <param name="client">The discord client of the bot</param>
|
/// <param name="client">The discord client of the bot</param>
|
||||||
/// <param name="isDM">true if the message was sent from DM, otherwise false. It is always false if canUseDM is false</param>
|
/// <param name="isDM">true if the message was sent from DM, otherwise false. It is always false if canUseDM is false</param>
|
||||||
void Execute(Discord.Commands.SocketCommandContext context,
|
void Execute(SocketCommandContext context, SocketMessage message, DiscordSocketClient client, bool isDM);
|
||||||
Discord.WebSocket.SocketMessage message,
|
|
||||||
Discord.WebSocket.DiscordSocketClient client,
|
|
||||||
bool isDM);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
using Discord.WebSocket;
|
using Discord.WebSocket;
|
||||||
|
|
||||||
namespace PluginManager.Interfaces
|
namespace PluginManager.Interfaces;
|
||||||
{
|
|
||||||
public interface DBEvent
|
public interface DBEvent
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -20,4 +20,3 @@ namespace PluginManager.Interfaces
|
|||||||
/// <param name="client">The discord bot client</param>
|
/// <param name="client">The discord bot client</param>
|
||||||
void Start(DiscordSocketClient client);
|
void Start(DiscordSocketClient client);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|||||||
@@ -1,51 +1,51 @@
|
|||||||
using Discord.WebSocket;
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
using PluginManager.Loaders;
|
using System.Threading.Tasks;
|
||||||
|
using Discord.WebSocket;
|
||||||
using PluginManager.Others;
|
using PluginManager.Others;
|
||||||
|
|
||||||
using System;
|
namespace PluginManager.Items;
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
namespace PluginManager.Items
|
public class Command
|
||||||
{
|
|
||||||
internal class Command
|
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The author of the command
|
/// The author of the command
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public SocketUser? Author;
|
public SocketUser? Author;
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// The list of arguments
|
|
||||||
/// </summary>
|
|
||||||
public List<string> Arguments { get; private set; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// The command that is executed
|
|
||||||
/// </summary>
|
|
||||||
public string CommandName { get; private set; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// The prefix that is used for the command
|
|
||||||
/// </summary>
|
|
||||||
public char PrefixUsed { get; private set; }
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The Command class contructor
|
/// The Command class contructor
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="message">The message that was sent</param>
|
/// <param name="message">The message that was sent</param>
|
||||||
public Command(SocketMessage message)
|
public Command(SocketMessage message)
|
||||||
{
|
{
|
||||||
this.Author = message.Author;
|
Author = message.Author;
|
||||||
string[] data = message.Content.Split(' ');
|
var data = message.Content.Split(' ');
|
||||||
if (data.Length > 1)
|
Arguments = data.Length > 1 ? new List<string>(data.MergeStrings(1).Split(' ')) : new List<string>();
|
||||||
this.Arguments = new List<string>(data.MergeStrings(1).Split(' '));
|
CommandName = data[0].Substring(1);
|
||||||
else this.Arguments = new List<string>();
|
PrefixUsed = data[0][0];
|
||||||
this.CommandName = data[0].Substring(1);
|
|
||||||
this.PrefixUsed = data[0][0];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// The list of arguments
|
||||||
|
/// </summary>
|
||||||
|
public List<string> Arguments { get; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// The command that is executed
|
||||||
|
/// </summary>
|
||||||
|
public string CommandName { get; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// The prefix that is used for the command
|
||||||
|
/// </summary>
|
||||||
|
public char PrefixUsed { get; }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public class ConsoleCommand
|
||||||
|
{
|
||||||
|
public string CommandName { get; init; }
|
||||||
|
public string Description { get; init; }
|
||||||
|
public string Usage { get; init; }
|
||||||
|
public Action<string[]> Action { get; init; }
|
||||||
}
|
}
|
||||||
@@ -1,86 +1,95 @@
|
|||||||
using Discord.WebSocket;
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.IO;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Net.Http;
|
||||||
|
using System.Reflection;
|
||||||
|
using System.Threading;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
using Discord.WebSocket;
|
||||||
|
|
||||||
|
using PluginManager.Interfaces;
|
||||||
using PluginManager.Loaders;
|
using PluginManager.Loaders;
|
||||||
using PluginManager.Online;
|
using PluginManager.Online;
|
||||||
|
using PluginManager.Online.Helpers;
|
||||||
|
using PluginManager.Online.Updates;
|
||||||
using PluginManager.Others;
|
using PluginManager.Others;
|
||||||
|
|
||||||
|
namespace PluginManager.Items;
|
||||||
|
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Diagnostics;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using System.Threading;
|
|
||||||
using PluginManager.LanguageSystem;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Reflection.Metadata.Ecma335;
|
|
||||||
|
|
||||||
namespace PluginManager.Items
|
|
||||||
{
|
|
||||||
public class ConsoleCommandsHandler
|
public class ConsoleCommandsHandler
|
||||||
{
|
{
|
||||||
|
private static readonly PluginsManager manager = new("https://raw.githubusercontent.com/Wizzy69/installer/discord-bot-files/Plugins.txt");
|
||||||
private static PluginsManager manager = new PluginsManager("https://sethdiscordbot.000webhostapp.com/Storage/Discord%20Bot/Plugins");
|
private static readonly List<ConsoleCommand> commandList = new();
|
||||||
private static LanguageManager languageManager = new LanguageManager("https://sethdiscordbot.000webhostapp.com/Storage/Discord%20Bot/Languages");
|
private readonly DiscordSocketClient? client;
|
||||||
|
|
||||||
|
|
||||||
public static List<Tuple<string, string, Action<string[]>>>? commandList = new List<Tuple<string, string, Action<string[]>>>();
|
private static bool isDownloading = false;
|
||||||
private DiscordSocketClient client;
|
private static bool pluginsLoaded = false;
|
||||||
|
|
||||||
public ConsoleCommandsHandler(DiscordSocketClient client)
|
public ConsoleCommandsHandler(DiscordSocketClient client)
|
||||||
{
|
{
|
||||||
this.client = client;
|
this.client = client;
|
||||||
InitializeBasicCommands();
|
InitializeBasicCommands();
|
||||||
Console.WriteLine("Initalized console command handeler !");
|
//Console.WriteLine("Initialized console command handler !");
|
||||||
}
|
}
|
||||||
|
|
||||||
private void InitializeBasicCommands()
|
private void InitializeBasicCommands()
|
||||||
{
|
{
|
||||||
|
|
||||||
bool pluginsLoaded = false;
|
|
||||||
commandList.Clear();
|
commandList.Clear();
|
||||||
|
|
||||||
AddCommand("help", "Show help", (args) =>
|
AddCommand("help", "Show help", "help <command>", args =>
|
||||||
{
|
{
|
||||||
if (args.Length <= 1)
|
if (args.Length <= 1)
|
||||||
{
|
{
|
||||||
Console.WriteLine("Available commands:");
|
Console.WriteLine("Available commands:");
|
||||||
|
List<string[]> items = new List<string[]>();
|
||||||
|
items.Add(new[] { "-", "-", "-" });
|
||||||
|
items.Add(new[] { "Command", "Description", "Usage" });
|
||||||
|
items.Add(new[] { " ", " ", "Argument type: <optional> [required]" });
|
||||||
|
items.Add(new[] { "-", "-", "-" });
|
||||||
|
|
||||||
foreach (var command in commandList)
|
foreach (var command in commandList)
|
||||||
{
|
{
|
||||||
Console.WriteLine("\t" + command.Item1 + " - " + command.Item2);
|
var pa = from p in command.Action.Method.GetParameters() where p.Name != null select p.ParameterType.FullName;
|
||||||
|
items.Add(new[] { command.CommandName, command.Description, command.Usage });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
items.Add(new[] { "-", "-", "-" });
|
||||||
|
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.Item1 == args[1])
|
Console.WriteLine("Command description: " + command.Description);
|
||||||
{
|
Console.WriteLine("Command execution format:" + command.Usage);
|
||||||
Console.WriteLine(command.Item2);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
Console.WriteLine("Command not found");
|
Console.WriteLine("Command not found");
|
||||||
}
|
}
|
||||||
});
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
AddCommand("lp", "Load plugins", () =>
|
AddCommand("lp", "Load plugins", () =>
|
||||||
{
|
{
|
||||||
if (pluginsLoaded) return;
|
if (pluginsLoaded)
|
||||||
var loader = new PluginLoader(client);
|
return;
|
||||||
|
var loader = new PluginLoader(client!);
|
||||||
loader.onCMDLoad += (name, typeName, success, exception) =>
|
loader.onCMDLoad += (name, typeName, success, exception) =>
|
||||||
{
|
{
|
||||||
Console.ForegroundColor = ConsoleColor.Green;
|
Console.ForegroundColor = ConsoleColor.Green;
|
||||||
if (name == null || name.Length < 2)
|
if (name == null || name.Length < 2)
|
||||||
name = typeName;
|
name = typeName;
|
||||||
if (success)
|
if (success)
|
||||||
if (LanguageSystem.Language.ActiveLanguage == null)
|
|
||||||
Console.WriteLine("[CMD] Successfully loaded command : " + name);
|
Console.WriteLine("[CMD] Successfully loaded command : " + name);
|
||||||
else Console.WriteLine(LanguageSystem.Language.ActiveLanguage.FormatText(LanguageSystem.Language.ActiveLanguage.LanguageWords["COMMAND_LOAD_SUCCESS"], name));
|
|
||||||
else
|
else
|
||||||
if (LanguageSystem.Language.ActiveLanguage == null)
|
Console.WriteLine("[CMD] Failed to load command : " + name + " because " + exception!.Message);
|
||||||
Console.WriteLine("[CMD] Failed to load command : " + name + " because " + exception.Message);
|
|
||||||
else
|
|
||||||
Console.WriteLine(LanguageSystem.Language.ActiveLanguage.FormatText(LanguageSystem.Language.ActiveLanguage.LanguageWords["COMMAND_LOAD_FAIL"], name, exception.Message));
|
|
||||||
Console.ForegroundColor = ConsoleColor.Red;
|
Console.ForegroundColor = ConsoleColor.Red;
|
||||||
};
|
};
|
||||||
loader.onEVELoad += (name, typeName, success, exception) =>
|
loader.onEVELoad += (name, typeName, success, exception) =>
|
||||||
@@ -89,56 +98,60 @@ namespace PluginManager.Items
|
|||||||
name = typeName;
|
name = typeName;
|
||||||
Console.ForegroundColor = ConsoleColor.Green;
|
Console.ForegroundColor = ConsoleColor.Green;
|
||||||
if (success)
|
if (success)
|
||||||
if (LanguageSystem.Language.ActiveLanguage == null)
|
|
||||||
Console.WriteLine("[EVENT] Successfully loaded event : " + name);
|
Console.WriteLine("[EVENT] Successfully loaded event : " + name);
|
||||||
else
|
else
|
||||||
Console.WriteLine(LanguageSystem.Language.ActiveLanguage.FormatText(LanguageSystem.Language.ActiveLanguage.LanguageWords["EVENT_LOAD_SUCCESS"], name));
|
Console.WriteLine("[EVENT] Failed to load event : " + name + " because " + exception!.Message);
|
||||||
else
|
|
||||||
if (LanguageSystem.Language.ActiveLanguage == null)
|
|
||||||
Console.WriteLine("[EVENT] Failed to load event : " + name + " because " + exception.Message);
|
|
||||||
else
|
|
||||||
Console.WriteLine(LanguageSystem.Language.ActiveLanguage.FormatText(LanguageSystem.Language.ActiveLanguage.LanguageWords["EVENT_LOAD_FAIL"], name, exception.Message));
|
|
||||||
Console.ForegroundColor = ConsoleColor.Red;
|
Console.ForegroundColor = ConsoleColor.Red;
|
||||||
};
|
};
|
||||||
loader.LoadPlugins();
|
loader.LoadPlugins();
|
||||||
pluginsLoaded = true;
|
pluginsLoaded = true;
|
||||||
});
|
}
|
||||||
|
);
|
||||||
|
|
||||||
AddCommand("listplugs", "list available plugins", async () =>
|
AddCommand("listplugs", "list available plugins", () => { manager.ListAvailablePlugins().Wait(); });
|
||||||
{
|
|
||||||
await manager.ListAvailablePlugins();
|
|
||||||
});
|
|
||||||
|
|
||||||
AddCommand("dwplug", "download plugin", async (args) =>
|
AddCommand("dwplug", "download plugin", "dwplug [name]", async args =>
|
||||||
{
|
{
|
||||||
|
isDownloading = true;
|
||||||
if (args.Length == 1)
|
if (args.Length == 1)
|
||||||
{
|
{
|
||||||
|
isDownloading = false;
|
||||||
Console.WriteLine("Please specify plugin name");
|
Console.WriteLine("Please specify plugin name");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
string name = args.MergeStrings(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
|
||||||
string[] info = await manager.GetPluginLinkByName(name);
|
var info = await manager.GetPluginLinkByName(name);
|
||||||
if (info[1] == null) // link is null
|
if (info[1] == null) // link is null
|
||||||
{
|
{
|
||||||
if (name == "")
|
if (name == "")
|
||||||
{
|
{
|
||||||
Console_Utilities.WriteColorText($"Name is invalid");
|
isDownloading = false;
|
||||||
|
Console_Utilities.WriteColorText("Name is invalid");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
Console_Utilities.WriteColorText($"Failed to find plugin &b{name} &c!" +
|
isDownloading = false;
|
||||||
$" Use &glistplugs &ccommand to display all available plugins !");
|
Console_Utilities.WriteColorText($"Failed to find plugin &b{name} &c!" + " Use &glistplugs &ccommand to display all available plugins !");
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
|
||||||
string path;
|
string path;
|
||||||
if (info[0] == "Command" || info[0] == "Event")
|
if (info[0] == "Command" || info[0] == "Event")
|
||||||
path = "./Data/Plugins/" + info[0] + "s/" + name + ".dll";
|
path = "./Data/Plugins/" + info[0] + "s/" + name + "." + (info[0] == "Command" ? PluginLoader.pluginCMDExtension : PluginLoader.pluginEVEExtension);
|
||||||
else path = $"./{info[1].Split('/')[info[1].Split('/').Length - 1]}";
|
else
|
||||||
|
path = $"./{info[1].Split('/')[info[1].Split('/').Length - 1]}";
|
||||||
|
//Console.WriteLine("Downloading: " + path + " [" + info[1] + "]");
|
||||||
await ServerCom.DownloadFileAsync(info[1], path);
|
await ServerCom.DownloadFileAsync(info[1], path);
|
||||||
|
if (info[0] == "Command" || info[0] == "Event")
|
||||||
|
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));
|
||||||
|
|
||||||
|
|
||||||
Console.WriteLine("\n");
|
Console.WriteLine("\n");
|
||||||
|
|
||||||
// check requirements if any
|
// check requirements if any
|
||||||
@@ -147,171 +160,207 @@ namespace PluginManager.Items
|
|||||||
{
|
{
|
||||||
Console.WriteLine($"Downloading requirements for plugin : {name}");
|
Console.WriteLine($"Downloading requirements for plugin : {name}");
|
||||||
|
|
||||||
List<string> lines = await ServerCom.ReadTextFromFile(info[2]);
|
var lines = await ServerCom.ReadTextFromURL(info[2]);
|
||||||
|
|
||||||
foreach (var line in lines)
|
foreach (var line in lines)
|
||||||
{
|
{
|
||||||
string[] split = line.Split(',');
|
if (!(line.Length > 0 && line.Contains(",")))
|
||||||
|
continue;
|
||||||
|
var split = line.Split(',');
|
||||||
Console.WriteLine($"\nDownloading item: {split[1]}");
|
Console.WriteLine($"\nDownloading item: {split[1]}");
|
||||||
await ServerCom.DownloadFileAsync(split[0], "./" + split[1]);
|
await ServerCom.DownloadFileAsync(split[0], "./" + split[1]);
|
||||||
Console.WriteLine();
|
Console.WriteLine();
|
||||||
|
|
||||||
if (split[0].EndsWith(".zip"))
|
if (split[0].EndsWith(".zip") || split[0].EndsWith(".pak") || split[0].EndsWith(".pkg"))
|
||||||
{
|
{
|
||||||
|
|
||||||
Console.WriteLine($"Extracting {split[1]}");
|
Console.WriteLine($"Extracting {split[1]}");
|
||||||
double proc = 0d;
|
var proc = 0f;
|
||||||
bool isExtracting = true;
|
var isExtracting = true;
|
||||||
Console_Utilities.ProgressBar bar = new Console_Utilities.ProgressBar(100, "");
|
var bar = new Console_Utilities.ProgressBar { Max = 100f, Color = ConsoleColor.Green };
|
||||||
|
|
||||||
IProgress<float> extractProgress = new Progress<float>(value =>
|
IProgress<float> extractProgress = new Progress<float>(value => { proc = value; });
|
||||||
{
|
|
||||||
proc = value;
|
|
||||||
});
|
|
||||||
new Thread(new Task(() =>
|
new Thread(new Task(() =>
|
||||||
{
|
{
|
||||||
while (isExtracting)
|
while (isExtracting)
|
||||||
{
|
{
|
||||||
bar.Update((int)proc);
|
bar.Update(proc);
|
||||||
if (proc >= 99.9f)
|
if (proc >= 99.9f)
|
||||||
break;
|
isExtracting = false;
|
||||||
Thread.Sleep(500);
|
Thread.Sleep(500);
|
||||||
}
|
}
|
||||||
}).Start).Start();
|
}
|
||||||
await Functions.ExtractArchive("./" + split[1], "./", extractProgress);
|
).Start
|
||||||
bar.Update(100);
|
).Start();
|
||||||
|
await Functions.ExtractArchive("./" + split[1], "./", extractProgress, UnzipProgressType.PercentageFromTotalSize);
|
||||||
|
bar.Update(100f);
|
||||||
isExtracting = false;
|
isExtracting = false;
|
||||||
await Task.Delay(1000);
|
await Task.Delay(1000);
|
||||||
bar.Update(100);
|
bar.Update(100);
|
||||||
Console.WriteLine("\n");
|
Console.WriteLine("\n");
|
||||||
System.IO.File.Delete("./" + split[1]);
|
File.Delete("./" + split[1]);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
if (name == "DBUI")
|
|
||||||
{
|
|
||||||
Console.WriteLine("Reload with GUI ?[y/n]");
|
|
||||||
if (Console.ReadKey().Key == ConsoleKey.Y)
|
|
||||||
{
|
|
||||||
Process.Start("./DiscordBotGUI.exe");
|
|
||||||
Environment.Exit(0);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Console.WriteLine();
|
Console.WriteLine();
|
||||||
}
|
}
|
||||||
|
VersionString? ver = await VersionString.GetVersionOfPackageFromWeb(name);
|
||||||
|
if (ver is null) throw new Exception("Incorrect version");
|
||||||
|
Config.SetPluginVersion(name, $"{ver.PackageID}.{ver.PackageMainVersion}.{ver.PackageCheckVersion}");
|
||||||
|
// Console.WriteLine();
|
||||||
|
|
||||||
});
|
isDownloading = false;
|
||||||
|
|
||||||
AddCommand("setlang", "set language", (args) =>
|
|
||||||
{
|
|
||||||
if (args.Length == 1)
|
|
||||||
{
|
|
||||||
Console.WriteLine("Please specify language");
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
Language.SetLanguage(args[0]);
|
);
|
||||||
});
|
|
||||||
|
|
||||||
AddCommand("listlang", "List all available languages", async () =>
|
|
||||||
{
|
|
||||||
await languageManager.ListAllLanguages();
|
|
||||||
});
|
|
||||||
|
|
||||||
AddCommand("dwlang", "Download language", async (args) =>
|
AddCommand("value", "read value from VariableStack", "value [key]", args =>
|
||||||
{
|
{
|
||||||
if (args.Length == 1)
|
if (args.Length != 2)
|
||||||
{
|
|
||||||
Console.WriteLine("Please specify language");
|
|
||||||
return;
|
return;
|
||||||
|
if (!Config.ContainsKey(args[1]))
|
||||||
|
return;
|
||||||
|
|
||||||
|
var data = Config.GetValue<string>(args[1]);
|
||||||
|
Console.WriteLine($"{args[1]} => {data}");
|
||||||
}
|
}
|
||||||
string Lname = args.MergeStrings(1);
|
);
|
||||||
string[] link = await languageManager!.GetDownloadLink(Lname);
|
|
||||||
|
AddCommand("add", "add variable to the system variables", "add [key] [value] [isReadOnly=true/false]", args =>
|
||||||
|
{
|
||||||
|
if (args.Length < 4)
|
||||||
|
return;
|
||||||
|
var key = args[1];
|
||||||
|
var value = args[2];
|
||||||
|
var isReadOnly = args[3].Equals("true", StringComparison.CurrentCultureIgnoreCase);
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
if (link[0] is null || link is null)
|
Config.GetAndAddValueToVariable(key, value, isReadOnly);
|
||||||
{
|
Console.WriteLine($"Updated config file with the following command: {args[1]} => {value}");
|
||||||
if (Lname == "")
|
|
||||||
{
|
|
||||||
Console_Utilities.WriteColorText($"Name is invalid");
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
Console_Utilities.WriteColorText("Failed to find language &b" + Lname + " &c! Use &glistlang &ccommand to display all available languages !");
|
catch (Exception ex)
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (link[1].Contains("CrossPlatform") || link[1].Contains("cp"))
|
|
||||||
{
|
{
|
||||||
|
Console.WriteLine(ex.ToString());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
string path2 = Functions.langFolder + Lname + ".lng";
|
AddCommand("remv", "remove variable from system variables", "remv [key]", args =>
|
||||||
|
{
|
||||||
|
if (args.Length < 2)
|
||||||
|
return;
|
||||||
|
Config.RemoveKey(args[1]);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
await ServerCom.DownloadFileAsync(link[0], path2);
|
AddCommand("sd", "Shuts down the discord bot", () =>
|
||||||
Console.WriteLine("\n");
|
|
||||||
}
|
|
||||||
else Console_Utilities.WriteColorText("The language you are trying to download (&b" + Lname + "&c) is not compatible with the version of this bot. User &glistlang &ccommand in order to see all available languages for your current version !\n" + link[1]);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
catch
|
|
||||||
{
|
{
|
||||||
if (Lname == "")
|
if (client is null)
|
||||||
|
return;
|
||||||
|
client.StopAsync();
|
||||||
|
client.DisposeAsync();
|
||||||
|
Config.SaveConfig();
|
||||||
|
Console.WriteLine("Bot is closing in 2 seconds ! Please wait to save data !");
|
||||||
|
Thread.Sleep(2000);
|
||||||
|
Environment.Exit(0);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
AddCommand("extern", "Load an external command", "extern [pluginName]", async (args) =>
|
||||||
{
|
{
|
||||||
Console_Utilities.WriteColorText($"Name is invalid");
|
if (args.Length <= 1) return;
|
||||||
|
string pName = Functions.MergeStrings(args, 1);
|
||||||
|
HttpClient client = new HttpClient();
|
||||||
|
string url = (await manager.GetPluginLinkByName(pName))[1];
|
||||||
|
Stream s = await client.GetStreamAsync(url);
|
||||||
|
MemoryStream str = new MemoryStream();
|
||||||
|
await s.CopyToAsync(str);
|
||||||
|
var asmb = Assembly.Load(str.ToArray());
|
||||||
|
|
||||||
|
var types = asmb.GetTypes();
|
||||||
|
foreach (var type in types)
|
||||||
|
{
|
||||||
|
if (type.IsClass && typeof(DBEvent).IsAssignableFrom(type))
|
||||||
|
{
|
||||||
|
DBEvent instance = (DBEvent)Activator.CreateInstance(type);
|
||||||
|
instance.Start(this.client);
|
||||||
|
Console.WriteLine($"Loaded external {type.FullName}!");
|
||||||
|
}
|
||||||
|
else if (type.IsClass && typeof(DBCommand).IsAssignableFrom(type))
|
||||||
|
{
|
||||||
|
Console.WriteLine("Only events can be loaded from external sources !");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
Console_Utilities.WriteColorText("Failed to find language &b" + Lname + " &c! Use &glistlang &ccommand to display all available languages !");
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
//Sort the commands by name
|
||||||
AddCommand("token", "Display the token used by the bot", () =>
|
commandList.Sort((x, y) => x.CommandName.CompareTo(y.CommandName));
|
||||||
{
|
|
||||||
if (System.IO.File.Exists("./Data/Resources/DiscordBotCore.data"))
|
|
||||||
Console.WriteLine("Token: " + Functions.readCodeFromFile("./Data/Resources/DiscordBotCore.data", "BOT_TOKEN", '='));
|
|
||||||
else Console.WriteLine("File could not be found. Please register token");
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void AddCommand(string command, string description, Action<string[]> action)
|
public static void AddCommand(string command, string description, string usage, Action<string[]> action)
|
||||||
{
|
{
|
||||||
commandList.Add(new Tuple<string, string, Action<string[]>>(command, description, action));
|
commandList.Add(new ConsoleCommand { CommandName = command, Description = description, Action = action, Usage = usage });
|
||||||
Console.ForegroundColor = ConsoleColor.White;
|
Console.ForegroundColor = ConsoleColor.White;
|
||||||
Console_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)
|
||||||
{
|
{
|
||||||
AddCommand(command, description, (args) => action());
|
AddCommand(command, description, command, args => action());
|
||||||
|
|
||||||
/* Console.WriteLine("Added command: " + command);*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void RemoveCommand(string command)
|
public static void RemoveCommand(string command)
|
||||||
{
|
{
|
||||||
commandList.RemoveAll(x => x.Item1 == command);
|
commandList.RemoveAll(x => x.CommandName == command);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Tuple<string, string, Action<string[]>>? SearchCommand(string command)
|
public static bool CommandExists(string command)
|
||||||
{
|
{
|
||||||
return commandList.FirstOrDefault(t => t.Item1 == command);
|
return GetCommand(command) is not null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void HandleCommand(string command)
|
public static ConsoleCommand? GetCommand(string command)
|
||||||
{
|
{
|
||||||
string[] args = command.Split(' ');
|
return commandList.FirstOrDefault(t => t.CommandName == command);
|
||||||
|
}
|
||||||
|
|
||||||
|
internal static async Task ExecuteCommad(string command)
|
||||||
|
{
|
||||||
|
var args = command.Split(' ');
|
||||||
foreach (var item in commandList.ToList())
|
foreach (var item in commandList.ToList())
|
||||||
|
if (item.CommandName == args[0])
|
||||||
{
|
{
|
||||||
if (item.Item1 == args[0])
|
item.Action.Invoke(args);
|
||||||
|
Console.WriteLine();
|
||||||
|
|
||||||
|
while (isDownloading) await Task.Delay(1000);
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool HandleCommand(string command, bool removeCommandExecution = true)
|
||||||
{
|
{
|
||||||
item.Item3(args);
|
Console.ForegroundColor = ConsoleColor.White;
|
||||||
|
var args = command.Split(' ');
|
||||||
|
foreach (var item in commandList.ToList())
|
||||||
|
if (item.CommandName == args[0])
|
||||||
|
{
|
||||||
|
if (removeCommandExecution)
|
||||||
|
{
|
||||||
|
Console.SetCursorPosition(0, Console.CursorTop - 1);
|
||||||
|
for (int i = 0; i < command.Length + 30; i++)
|
||||||
|
Console.Write(" ");
|
||||||
|
Console.SetCursorPosition(0, Console.CursorTop);
|
||||||
|
}
|
||||||
|
|
||||||
|
Console.WriteLine();
|
||||||
|
item.Action(args);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
//Console.WriteLine($"Executing: {args[0]} with the following parameters: {args.MergeStrings(1)}");
|
//Console.WriteLine($"Executing: {args[0]} with the following parameters: {args.MergeStrings(1)}");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -1,54 +0,0 @@
|
|||||||
using System;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
namespace PluginManager.Items
|
|
||||||
{
|
|
||||||
public class Spinner
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// True if active, false otherwise
|
|
||||||
/// </summary>
|
|
||||||
public bool isSpinning;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// The Spinner constructor
|
|
||||||
/// </summary>
|
|
||||||
public Spinner()
|
|
||||||
{
|
|
||||||
isSpinning = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// The method that is called to start spinning the spinner
|
|
||||||
/// </summary>
|
|
||||||
public async void Start()
|
|
||||||
{
|
|
||||||
isSpinning = true;
|
|
||||||
int cnt = 0;
|
|
||||||
|
|
||||||
while (isSpinning)
|
|
||||||
{
|
|
||||||
cnt++;
|
|
||||||
switch (cnt % 4)
|
|
||||||
{
|
|
||||||
case 0: Console.Write("/"); break;
|
|
||||||
case 1: Console.Write("-"); break;
|
|
||||||
case 2: Console.Write("\\"); break;
|
|
||||||
case 3: Console.Write("|"); break;
|
|
||||||
}
|
|
||||||
Console.SetCursorPosition(Console.CursorLeft - 1, Console.CursorTop);
|
|
||||||
await Task.Delay(250);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// The method that is called to stop the spinner from spinning
|
|
||||||
/// </summary>
|
|
||||||
public void Stop()
|
|
||||||
{
|
|
||||||
if (!isSpinning)
|
|
||||||
throw new Others.Exceptions.APIException("Spinner was not spinning", GetType());
|
|
||||||
isSpinning = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,161 +0,0 @@
|
|||||||
using PluginManager.Others;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
|
|
||||||
using System;
|
|
||||||
using System.IO;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
namespace PluginManager.LanguageSystem
|
|
||||||
{
|
|
||||||
public class Language
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// The active language
|
|
||||||
/// </summary>
|
|
||||||
public static Language? ActiveLanguage = null;
|
|
||||||
|
|
||||||
private static readonly string LanguageFileExtension = ".lng";
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// The name of the language
|
|
||||||
/// </summary>
|
|
||||||
public string LanguageName { get; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// The file where the language is imported from
|
|
||||||
/// </summary>
|
|
||||||
public string fileName { get; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// The dictionary of the language
|
|
||||||
/// </summary>
|
|
||||||
public Dictionary<string, string> LanguageWords { get; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// The Language constructor
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="fileName">The file to import the language from</param>
|
|
||||||
/// <param name="words">The dictionary of the language</param>
|
|
||||||
/// <param name="LanguageName">The name of the language</param>
|
|
||||||
private Language(string fileName, Dictionary<string, string> words, string LanguageName)
|
|
||||||
{
|
|
||||||
this.fileName = fileName;
|
|
||||||
this.LanguageName = LanguageName;
|
|
||||||
LanguageWords = words;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Load language from file
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="LanguageFileLocation">The file path</param>
|
|
||||||
/// <returns></returns>
|
|
||||||
public static Language? CreateLanguageFromFile(string LanguageFileLocation)
|
|
||||||
{
|
|
||||||
if (!LanguageFileLocation.EndsWith(LanguageFileExtension))
|
|
||||||
{
|
|
||||||
Console.WriteLine("Failed to load language from file: " + LanguageFileLocation +
|
|
||||||
"\nFile extension is not " + LanguageFileExtension);
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
string[] lines = File.ReadAllLines(LanguageFileLocation);
|
|
||||||
var languageName = "Unknown";
|
|
||||||
var words = new Dictionary<string, string>();
|
|
||||||
|
|
||||||
foreach (string line in lines)
|
|
||||||
{
|
|
||||||
if (line.StartsWith("#") || line.Length < 4)
|
|
||||||
continue;
|
|
||||||
string[] sLine = line.Split('=');
|
|
||||||
|
|
||||||
if (sLine[0] == "LANGUAGE_NAME")
|
|
||||||
{
|
|
||||||
languageName = sLine[1];
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
words.Add(sLine[0], sLine[1]);
|
|
||||||
}
|
|
||||||
|
|
||||||
Functions.WriteLogFile("Successfully loaded language: " + languageName + " from file : " +
|
|
||||||
LanguageFileLocation.Replace('\\', '/'));
|
|
||||||
return new Language(LanguageFileLocation, words, languageName);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Format text by inserting parameters
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="text">The raw text</param>
|
|
||||||
/// <param name="args">The arguments</param>
|
|
||||||
/// <returns></returns>
|
|
||||||
public string FormatText(string text, params string[] args)
|
|
||||||
{
|
|
||||||
if (ActiveLanguage == null) return text;
|
|
||||||
int l = args.Length;
|
|
||||||
for (var i = 0; i < l; i++) text = text.Replace($"{i}", args[i]);
|
|
||||||
return text;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public static bool LoadLanguage()
|
|
||||||
{
|
|
||||||
string folder = Functions.langFolder;
|
|
||||||
string langSettings = "./Data/Resources/Language.txt";
|
|
||||||
if (!File.Exists(langSettings))
|
|
||||||
File.WriteAllText(langSettings, "Language=English");
|
|
||||||
//Load language from the specified file ...
|
|
||||||
Language.ActiveLanguage = null;
|
|
||||||
|
|
||||||
string langname = Functions.readCodeFromFile(langSettings, "Language", '=');
|
|
||||||
if (langname == "English")
|
|
||||||
{
|
|
||||||
Language.ActiveLanguage = null;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
foreach (var file in Directory.GetFiles(folder))
|
|
||||||
{
|
|
||||||
if (Functions.readCodeFromFile(file, "LANGUAGE_NAME", '=') == langname)
|
|
||||||
{
|
|
||||||
Language.ActiveLanguage = Language.CreateLanguageFromFile(file);
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (Language.ActiveLanguage == null)
|
|
||||||
{
|
|
||||||
File.WriteAllText(langSettings, "Language=English");
|
|
||||||
Console_Utilities.WriteColorText($"Failed to find language &r{langname} &c! Check available languages using command: &glistlang");
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void SetLanguage(string LanguageName)
|
|
||||||
{
|
|
||||||
string langSettings = Functions.dataFolder + "Language.txt";
|
|
||||||
File.WriteAllText(langSettings, "Language=" + LanguageName);
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
bool success = LoadLanguage();
|
|
||||||
if (success)
|
|
||||||
{
|
|
||||||
Console_Utilities.WriteColorText($"Language has been setted to: &g{LanguageName}");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
Console_Utilities.WriteColorText($"Could not find language &r{LanguageName}.");
|
|
||||||
Functions.WriteErrFile(ex.ToString());
|
|
||||||
File.WriteAllText(langSettings, "Language=English");
|
|
||||||
LoadLanguage();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,99 +0,0 @@
|
|||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.IO;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Reflection;
|
|
||||||
|
|
||||||
using PluginManager.Interfaces;
|
|
||||||
|
|
||||||
namespace PluginManager.Loaders
|
|
||||||
{
|
|
||||||
internal class CommandsLoader
|
|
||||||
{
|
|
||||||
private readonly string CMDPath;
|
|
||||||
private readonly string CMDExtension;
|
|
||||||
|
|
||||||
|
|
||||||
internal delegate void onCommandLoaded(string name, bool success, DBCommand? command = null, Exception? exception = null);
|
|
||||||
internal delegate void onCommandFileLoaded(string path);
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Event fired when a command is loaded
|
|
||||||
/// </summary>
|
|
||||||
internal onCommandLoaded? OnCommandLoaded;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Event fired when the file is loaded
|
|
||||||
/// </summary>
|
|
||||||
internal onCommandFileLoaded? OnCommandFileLoaded;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Command Loader contructor
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="CommandPath">The path to the commands</param>
|
|
||||||
/// <param name="CommandExtension">The extension to search for in the <paramref name="CommandPath"/></param>
|
|
||||||
internal CommandsLoader(string CommandPath, string CommandExtension)
|
|
||||||
{
|
|
||||||
CMDPath = CommandPath;
|
|
||||||
CMDExtension = CommandExtension;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// The method that loads all commands
|
|
||||||
/// </summary>
|
|
||||||
/// <returns></returns>
|
|
||||||
internal List<DBCommand>? LoadCommands()
|
|
||||||
{
|
|
||||||
if (!Directory.Exists(CMDPath))
|
|
||||||
{
|
|
||||||
Directory.CreateDirectory(CMDPath);
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
string[] files = Directory.GetFiles(CMDPath, $"*{CMDExtension}", SearchOption.AllDirectories);
|
|
||||||
|
|
||||||
foreach (var file in files)
|
|
||||||
{
|
|
||||||
Assembly.LoadFile(Path.GetFullPath(file));
|
|
||||||
if (OnCommandFileLoaded != null)
|
|
||||||
OnCommandFileLoaded.Invoke(file);
|
|
||||||
}
|
|
||||||
|
|
||||||
List<DBCommand> plugins = new List<DBCommand>();
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
Type interfaceType = typeof(DBCommand);
|
|
||||||
Type[] types = AppDomain.CurrentDomain.GetAssemblies()
|
|
||||||
.SelectMany(a => a.GetTypes())
|
|
||||||
.Where(p => interfaceType.IsAssignableFrom(p) && p.IsClass)
|
|
||||||
.ToArray();
|
|
||||||
foreach (Type type in types)
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
DBCommand plugin = (DBCommand)Activator.CreateInstance(type)!;
|
|
||||||
plugins.Add(plugin);
|
|
||||||
|
|
||||||
if (OnCommandLoaded != null)
|
|
||||||
OnCommandLoaded.Invoke(type.FullName!, true, plugin);
|
|
||||||
}
|
|
||||||
catch (Exception e)
|
|
||||||
{
|
|
||||||
if (OnCommandLoaded != null)
|
|
||||||
OnCommandLoaded.Invoke(type.FullName!, false, null, e);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
Console.WriteLine(ex.Message);
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
return plugins;
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,100 +0,0 @@
|
|||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.IO;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Reflection;
|
|
||||||
|
|
||||||
using PluginManager.Interfaces;
|
|
||||||
|
|
||||||
namespace PluginManager.Loaders
|
|
||||||
{
|
|
||||||
internal class EventsLoader
|
|
||||||
{
|
|
||||||
|
|
||||||
private readonly string EVPath;
|
|
||||||
private readonly string EVExtension;
|
|
||||||
|
|
||||||
internal delegate void onEventLoad(string name, bool success, DBEvent? ev = null, Exception? e = null);
|
|
||||||
internal delegate void onEventFileLoaded(string path);
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// An event that is fired whenever a <see cref="DBEvent"/> event is loaded in memory
|
|
||||||
/// </summary>
|
|
||||||
internal onEventLoad? EventLoad;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// An event that is fired whenever a <see cref="DBEvent"/> event file is loaded
|
|
||||||
/// </summary>
|
|
||||||
internal onEventFileLoaded? EventFileLoaded;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// The Event Loader constructor
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="path">The path to all events</param>
|
|
||||||
/// <param name="ext">The extension for events</param>
|
|
||||||
internal EventsLoader(string path, string ext)
|
|
||||||
{
|
|
||||||
EVPath = path;
|
|
||||||
EVExtension = ext;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// The method that loads all events
|
|
||||||
/// </summary>
|
|
||||||
/// <returns></returns>
|
|
||||||
internal List<DBEvent>? LoadEvents()
|
|
||||||
{
|
|
||||||
|
|
||||||
if (!Directory.Exists(EVPath))
|
|
||||||
{
|
|
||||||
Directory.CreateDirectory(EVPath);
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
string[] files = Directory.GetFiles(EVPath, $"*{EVExtension}", SearchOption.AllDirectories);
|
|
||||||
|
|
||||||
foreach (var file in files)
|
|
||||||
{
|
|
||||||
Assembly.LoadFile(Path.GetFullPath(file));
|
|
||||||
if (EventFileLoaded != null)
|
|
||||||
EventFileLoaded.Invoke(file);
|
|
||||||
}
|
|
||||||
|
|
||||||
List<DBEvent> events = new List<DBEvent>();
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
Type interfaceType = typeof(DBEvent);
|
|
||||||
Type[] types = AppDomain.CurrentDomain.GetAssemblies()
|
|
||||||
.SelectMany(a => a.GetTypes())
|
|
||||||
.Where(p => interfaceType.IsAssignableFrom(p) && p.IsClass)
|
|
||||||
.ToArray();
|
|
||||||
foreach (Type type in types)
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
DBEvent ev = (DBEvent)Activator.CreateInstance(type)!;
|
|
||||||
events.Add(ev);
|
|
||||||
|
|
||||||
if (EventLoad != null)
|
|
||||||
EventLoad.Invoke(type.FullName!, true, ev, null);
|
|
||||||
}
|
|
||||||
catch (Exception e)
|
|
||||||
{
|
|
||||||
if (EventLoad != null)
|
|
||||||
EventLoad.Invoke(type.FullName!, false, null, e);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
Console.WriteLine(ex.Message);
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
return events;
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user