Compare commits
6 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 208d7638c9 | |||
| 26a74a9269 | |||
| ffa6692e07 | |||
| 44690f8e9d | |||
| 9aa9d5ab03 | |||
|
|
88ff621f22 |
14
.gitignore
vendored
14
.gitignore
vendored
@@ -98,7 +98,6 @@ StyleCopReport.xml
|
|||||||
*.pidb
|
*.pidb
|
||||||
*.svclog
|
*.svclog
|
||||||
*.scc
|
*.scc
|
||||||
*.code-workspace
|
|
||||||
|
|
||||||
# Chutzpah Test files
|
# Chutzpah Test files
|
||||||
_Chutzpah*
|
_Chutzpah*
|
||||||
@@ -363,16 +362,3 @@ MigrationBackup/
|
|||||||
|
|
||||||
# Fody - auto-generated XML schema
|
# Fody - auto-generated XML schema
|
||||||
FodyWeavers.xsd
|
FodyWeavers.xsd
|
||||||
|
|
||||||
*.txt
|
|
||||||
|
|
||||||
#folders
|
|
||||||
/Plugins/
|
|
||||||
/DiscordBot.rar
|
|
||||||
/DiscordBot/Data/
|
|
||||||
/DiscordBot/Updater/
|
|
||||||
.idea/
|
|
||||||
DiscordBot/Launcher.exe
|
|
||||||
DiscordBotUI/bin
|
|
||||||
DiscordBotUI/obj
|
|
||||||
/.vscode
|
|
||||||
|
|||||||
4
.vscode/settings.json
vendored
Normal file
4
.vscode/settings.json
vendored
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
{
|
||||||
|
"rpc.enabled": true,
|
||||||
|
"discord.enabled": true
|
||||||
|
}
|
||||||
BIN
BUILDS/DLL/libopus.dll
Normal file
BIN
BUILDS/DLL/libopus.dll
Normal file
Binary file not shown.
BIN
BUILDS/DLL/libsodium.dll
Normal file
BIN
BUILDS/DLL/libsodium.dll
Normal file
Binary file not shown.
BIN
BUILDS/DLL/opus.dll
Normal file
BIN
BUILDS/DLL/opus.dll
Normal file
Binary file not shown.
268
BUILDS/net5.0/CMD_LevelingSystem.deps.json
Normal file
268
BUILDS/net5.0/CMD_LevelingSystem.deps.json
Normal file
@@ -0,0 +1,268 @@
|
|||||||
|
{
|
||||||
|
"runtimeTarget": {
|
||||||
|
"name": ".NETCoreApp,Version=v5.0",
|
||||||
|
"signature": ""
|
||||||
|
},
|
||||||
|
"compilationOptions": {},
|
||||||
|
"targets": {
|
||||||
|
".NETCoreApp,Version=v5.0": {
|
||||||
|
"CMD_LevelingSystem/1.0.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"PluginManager": "1.0.0"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"CMD_LevelingSystem.dll": {}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Discord.Net/3.5.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"Discord.Net.Commands": "3.5.0",
|
||||||
|
"Discord.Net.Core": "3.5.0",
|
||||||
|
"Discord.Net.Interactions": "3.5.0",
|
||||||
|
"Discord.Net.Rest": "3.5.0",
|
||||||
|
"Discord.Net.WebSocket": "3.5.0",
|
||||||
|
"Discord.Net.Webhook": "3.5.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Discord.Net.Commands/3.5.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"Discord.Net.Core": "3.5.0"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/net5.0/Discord.Net.Commands.dll": {
|
||||||
|
"assemblyVersion": "3.5.0.0",
|
||||||
|
"fileVersion": "3.5.0.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Discord.Net.Core/3.5.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"Newtonsoft.Json": "13.0.1",
|
||||||
|
"System.Collections.Immutable": "5.0.0",
|
||||||
|
"System.Interactive.Async": "5.0.0",
|
||||||
|
"System.ValueTuple": "4.5.0"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/net5.0/Discord.Net.Core.dll": {
|
||||||
|
"assemblyVersion": "3.5.0.0",
|
||||||
|
"fileVersion": "3.5.0.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Discord.Net.Interactions/3.5.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"Discord.Net.Core": "3.5.0",
|
||||||
|
"Discord.Net.Rest": "3.5.0",
|
||||||
|
"Discord.Net.WebSocket": "3.5.0",
|
||||||
|
"Microsoft.Extensions.DependencyInjection.Abstractions": "5.0.0",
|
||||||
|
"System.Collections.Immutable": "5.0.0",
|
||||||
|
"System.Reactive": "5.0.0"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/net5.0/Discord.Net.Interactions.dll": {
|
||||||
|
"assemblyVersion": "3.5.0.0",
|
||||||
|
"fileVersion": "3.5.0.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Discord.Net.Rest/3.5.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"Discord.Net.Core": "3.5.0"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/net5.0/Discord.Net.Rest.dll": {
|
||||||
|
"assemblyVersion": "3.5.0.0",
|
||||||
|
"fileVersion": "3.5.0.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Discord.Net.Webhook/3.5.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"Discord.Net.Core": "3.5.0",
|
||||||
|
"Discord.Net.Rest": "3.5.0"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/net5.0/Discord.Net.Webhook.dll": {
|
||||||
|
"assemblyVersion": "3.5.0.0",
|
||||||
|
"fileVersion": "3.5.0.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Discord.Net.WebSocket/3.5.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"Discord.Net.Core": "3.5.0",
|
||||||
|
"Discord.Net.Rest": "3.5.0"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/net5.0/Discord.Net.WebSocket.dll": {
|
||||||
|
"assemblyVersion": "3.5.0.0",
|
||||||
|
"fileVersion": "3.5.0.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Microsoft.Extensions.DependencyInjection.Abstractions/5.0.0": {
|
||||||
|
"runtime": {
|
||||||
|
"lib/netstandard2.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll": {
|
||||||
|
"assemblyVersion": "5.0.0.0",
|
||||||
|
"fileVersion": "5.0.20.51904"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Newtonsoft.Json/13.0.1": {
|
||||||
|
"runtime": {
|
||||||
|
"lib/netstandard2.0/Newtonsoft.Json.dll": {
|
||||||
|
"assemblyVersion": "13.0.0.0",
|
||||||
|
"fileVersion": "13.0.1.25517"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"System.Collections.Immutable/5.0.0": {},
|
||||||
|
"System.Interactive.Async/5.0.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"System.Linq.Async": "5.0.0"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/netcoreapp3.1/System.Interactive.Async.dll": {
|
||||||
|
"assemblyVersion": "5.0.0.0",
|
||||||
|
"fileVersion": "5.0.0.1"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"System.Linq.Async/5.0.0": {
|
||||||
|
"runtime": {
|
||||||
|
"lib/netcoreapp3.1/System.Linq.Async.dll": {
|
||||||
|
"assemblyVersion": "5.0.0.0",
|
||||||
|
"fileVersion": "5.0.0.1"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"System.Reactive/5.0.0": {
|
||||||
|
"runtime": {
|
||||||
|
"lib/net5.0/System.Reactive.dll": {
|
||||||
|
"assemblyVersion": "5.0.0.0",
|
||||||
|
"fileVersion": "5.0.0.1"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"System.ValueTuple/4.5.0": {},
|
||||||
|
"PluginManager/1.0.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"Discord.Net": "3.5.0"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"PluginManager.dll": {}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"libraries": {
|
||||||
|
"CMD_LevelingSystem/1.0.0": {
|
||||||
|
"type": "project",
|
||||||
|
"serviceable": false,
|
||||||
|
"sha512": ""
|
||||||
|
},
|
||||||
|
"Discord.Net/3.5.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-IUtexpvogudb1rllKBWkIEpBVQoToMjtVo81KPkt+gNMe7KtRDcZJgcn6+72viMtyw0e95OJPXFV5VEA/n2OQQ==",
|
||||||
|
"path": "discord.net/3.5.0",
|
||||||
|
"hashPath": "discord.net.3.5.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Discord.Net.Commands/3.5.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-ClTv8aiTlitvS48YatRiTLvgE2f2uKgmHNPVBIuvJBHZO2u4bZCzoN1fid+pZn2sbVOkt8uftlLGzz5DSZlFIA==",
|
||||||
|
"path": "discord.net.commands/3.5.0",
|
||||||
|
"hashPath": "discord.net.commands.3.5.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Discord.Net.Core/3.5.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-rCzzaznMVQ+bLMxOpYwTyqm9V22kMy6BxlQisSxemHZDe2Jedz3Clp/a0dToACLz+Dlp3u+jYUfCBnTz7L6f4g==",
|
||||||
|
"path": "discord.net.core/3.5.0",
|
||||||
|
"hashPath": "discord.net.core.3.5.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Discord.Net.Interactions/3.5.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-wE9+V9DJ7r+1s4euOi4sGPIAt4sD7r+Tk5s9mrlbLCHVQTK4KllAvcrL25bPFI38FuFceREEzFoRlTrekSyB2Q==",
|
||||||
|
"path": "discord.net.interactions/3.5.0",
|
||||||
|
"hashPath": "discord.net.interactions.3.5.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Discord.Net.Rest/3.5.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-BnTdLFuuQsKvCv08VQrD4X1Hw2Xp+MELIRQiDiKfG01IiQlRTN+1gc3LB1zXgn5xBvC0HXjHxwV22GrMD9uKHQ==",
|
||||||
|
"path": "discord.net.rest/3.5.0",
|
||||||
|
"hashPath": "discord.net.rest.3.5.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Discord.Net.Webhook/3.5.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-vCIGZS+m88sQDuFmdbUqg+2RIXS/NJWx8ei3MX+ZEYiAvOkDgQfkIlEnU1NKpds6ivTt5GFlv6UzcWubb5VJ1w==",
|
||||||
|
"path": "discord.net.webhook/3.5.0",
|
||||||
|
"hashPath": "discord.net.webhook.3.5.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Discord.Net.WebSocket/3.5.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-LjBOvcP40vJ+dhOtBDi8haEeblPAKpAIqR04NBzTM1/0RVavJZH89ovfSQIk42ygkiOaDV4E2x0Mmh6DRoIYcw==",
|
||||||
|
"path": "discord.net.websocket/3.5.0",
|
||||||
|
"hashPath": "discord.net.websocket.3.5.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Microsoft.Extensions.DependencyInjection.Abstractions/5.0.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-ORj7Zh81gC69TyvmcUm9tSzytcy8AVousi+IVRAI8nLieQjOFryRusSFh7+aLk16FN9pQNqJAiMd7BTKINK0kA==",
|
||||||
|
"path": "microsoft.extensions.dependencyinjection.abstractions/5.0.0",
|
||||||
|
"hashPath": "microsoft.extensions.dependencyinjection.abstractions.5.0.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Newtonsoft.Json/13.0.1": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-ppPFpBcvxdsfUonNcvITKqLl3bqxWbDCZIzDWHzjpdAHRFfZe0Dw9HmA0+za13IdyrgJwpkDTDA9fHaxOrt20A==",
|
||||||
|
"path": "newtonsoft.json/13.0.1",
|
||||||
|
"hashPath": "newtonsoft.json.13.0.1.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"System.Collections.Immutable/5.0.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-FXkLXiK0sVVewcso0imKQoOxjoPAj42R8HtjjbSjVPAzwDfzoyoznWxgA3c38LDbN9SJux1xXoXYAhz98j7r2g==",
|
||||||
|
"path": "system.collections.immutable/5.0.0",
|
||||||
|
"hashPath": "system.collections.immutable.5.0.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"System.Interactive.Async/5.0.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-QaqhQVDiULcu4vm6o89+iP329HcK44cETHOYgy/jfEjtzeFy0ZxmuM7nel9ocjnKxEM4yh1mli7hgh8Q9o+/Iw==",
|
||||||
|
"path": "system.interactive.async/5.0.0",
|
||||||
|
"hashPath": "system.interactive.async.5.0.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"System.Linq.Async/5.0.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-cPtIuuH8TIjVHSi2ewwReWGW1PfChPE0LxPIDlfwVcLuTM9GANFTXiMB7k3aC4sk3f0cQU25LNKzx+jZMxijqw==",
|
||||||
|
"path": "system.linq.async/5.0.0",
|
||||||
|
"hashPath": "system.linq.async.5.0.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"System.Reactive/5.0.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-erBZjkQHWL9jpasCE/0qKAryzVBJFxGHVBAvgRN1bzM0q2s1S4oYREEEL0Vb+1kA/6BKb5FjUZMp5VXmy+gzkQ==",
|
||||||
|
"path": "system.reactive/5.0.0",
|
||||||
|
"hashPath": "system.reactive.5.0.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"System.ValueTuple/4.5.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-okurQJO6NRE/apDIP23ajJ0hpiNmJ+f0BwOlB/cSqTLQlw5upkf+5+96+iG2Jw40G1fCVCyPz/FhIABUjMR+RQ==",
|
||||||
|
"path": "system.valuetuple/4.5.0",
|
||||||
|
"hashPath": "system.valuetuple.4.5.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"PluginManager/1.0.0": {
|
||||||
|
"type": "project",
|
||||||
|
"serviceable": false,
|
||||||
|
"sha512": ""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
BIN
BUILDS/net5.0/CMD_LevelingSystem.dll
Normal file
BIN
BUILDS/net5.0/CMD_LevelingSystem.dll
Normal file
Binary file not shown.
268
BUILDS/net5.0/CMD_Utils.deps.json
Normal file
268
BUILDS/net5.0/CMD_Utils.deps.json
Normal file
@@ -0,0 +1,268 @@
|
|||||||
|
{
|
||||||
|
"runtimeTarget": {
|
||||||
|
"name": ".NETCoreApp,Version=v5.0",
|
||||||
|
"signature": ""
|
||||||
|
},
|
||||||
|
"compilationOptions": {},
|
||||||
|
"targets": {
|
||||||
|
".NETCoreApp,Version=v5.0": {
|
||||||
|
"CMD_Utils/1.0.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"PluginManager": "1.0.0"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"CMD_Utils.dll": {}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Discord.Net/3.5.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"Discord.Net.Commands": "3.5.0",
|
||||||
|
"Discord.Net.Core": "3.5.0",
|
||||||
|
"Discord.Net.Interactions": "3.5.0",
|
||||||
|
"Discord.Net.Rest": "3.5.0",
|
||||||
|
"Discord.Net.WebSocket": "3.5.0",
|
||||||
|
"Discord.Net.Webhook": "3.5.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Discord.Net.Commands/3.5.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"Discord.Net.Core": "3.5.0"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/net5.0/Discord.Net.Commands.dll": {
|
||||||
|
"assemblyVersion": "3.5.0.0",
|
||||||
|
"fileVersion": "3.5.0.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Discord.Net.Core/3.5.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"Newtonsoft.Json": "13.0.1",
|
||||||
|
"System.Collections.Immutable": "5.0.0",
|
||||||
|
"System.Interactive.Async": "5.0.0",
|
||||||
|
"System.ValueTuple": "4.5.0"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/net5.0/Discord.Net.Core.dll": {
|
||||||
|
"assemblyVersion": "3.5.0.0",
|
||||||
|
"fileVersion": "3.5.0.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Discord.Net.Interactions/3.5.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"Discord.Net.Core": "3.5.0",
|
||||||
|
"Discord.Net.Rest": "3.5.0",
|
||||||
|
"Discord.Net.WebSocket": "3.5.0",
|
||||||
|
"Microsoft.Extensions.DependencyInjection.Abstractions": "5.0.0",
|
||||||
|
"System.Collections.Immutable": "5.0.0",
|
||||||
|
"System.Reactive": "5.0.0"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/net5.0/Discord.Net.Interactions.dll": {
|
||||||
|
"assemblyVersion": "3.5.0.0",
|
||||||
|
"fileVersion": "3.5.0.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Discord.Net.Rest/3.5.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"Discord.Net.Core": "3.5.0"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/net5.0/Discord.Net.Rest.dll": {
|
||||||
|
"assemblyVersion": "3.5.0.0",
|
||||||
|
"fileVersion": "3.5.0.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Discord.Net.Webhook/3.5.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"Discord.Net.Core": "3.5.0",
|
||||||
|
"Discord.Net.Rest": "3.5.0"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/net5.0/Discord.Net.Webhook.dll": {
|
||||||
|
"assemblyVersion": "3.5.0.0",
|
||||||
|
"fileVersion": "3.5.0.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Discord.Net.WebSocket/3.5.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"Discord.Net.Core": "3.5.0",
|
||||||
|
"Discord.Net.Rest": "3.5.0"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/net5.0/Discord.Net.WebSocket.dll": {
|
||||||
|
"assemblyVersion": "3.5.0.0",
|
||||||
|
"fileVersion": "3.5.0.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Microsoft.Extensions.DependencyInjection.Abstractions/5.0.0": {
|
||||||
|
"runtime": {
|
||||||
|
"lib/netstandard2.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll": {
|
||||||
|
"assemblyVersion": "5.0.0.0",
|
||||||
|
"fileVersion": "5.0.20.51904"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Newtonsoft.Json/13.0.1": {
|
||||||
|
"runtime": {
|
||||||
|
"lib/netstandard2.0/Newtonsoft.Json.dll": {
|
||||||
|
"assemblyVersion": "13.0.0.0",
|
||||||
|
"fileVersion": "13.0.1.25517"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"System.Collections.Immutable/5.0.0": {},
|
||||||
|
"System.Interactive.Async/5.0.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"System.Linq.Async": "5.0.0"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/netcoreapp3.1/System.Interactive.Async.dll": {
|
||||||
|
"assemblyVersion": "5.0.0.0",
|
||||||
|
"fileVersion": "5.0.0.1"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"System.Linq.Async/5.0.0": {
|
||||||
|
"runtime": {
|
||||||
|
"lib/netcoreapp3.1/System.Linq.Async.dll": {
|
||||||
|
"assemblyVersion": "5.0.0.0",
|
||||||
|
"fileVersion": "5.0.0.1"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"System.Reactive/5.0.0": {
|
||||||
|
"runtime": {
|
||||||
|
"lib/net5.0/System.Reactive.dll": {
|
||||||
|
"assemblyVersion": "5.0.0.0",
|
||||||
|
"fileVersion": "5.0.0.1"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"System.ValueTuple/4.5.0": {},
|
||||||
|
"PluginManager/1.0.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"Discord.Net": "3.5.0"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"PluginManager.dll": {}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"libraries": {
|
||||||
|
"CMD_Utils/1.0.0": {
|
||||||
|
"type": "project",
|
||||||
|
"serviceable": false,
|
||||||
|
"sha512": ""
|
||||||
|
},
|
||||||
|
"Discord.Net/3.5.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-IUtexpvogudb1rllKBWkIEpBVQoToMjtVo81KPkt+gNMe7KtRDcZJgcn6+72viMtyw0e95OJPXFV5VEA/n2OQQ==",
|
||||||
|
"path": "discord.net/3.5.0",
|
||||||
|
"hashPath": "discord.net.3.5.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Discord.Net.Commands/3.5.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-ClTv8aiTlitvS48YatRiTLvgE2f2uKgmHNPVBIuvJBHZO2u4bZCzoN1fid+pZn2sbVOkt8uftlLGzz5DSZlFIA==",
|
||||||
|
"path": "discord.net.commands/3.5.0",
|
||||||
|
"hashPath": "discord.net.commands.3.5.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Discord.Net.Core/3.5.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-rCzzaznMVQ+bLMxOpYwTyqm9V22kMy6BxlQisSxemHZDe2Jedz3Clp/a0dToACLz+Dlp3u+jYUfCBnTz7L6f4g==",
|
||||||
|
"path": "discord.net.core/3.5.0",
|
||||||
|
"hashPath": "discord.net.core.3.5.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Discord.Net.Interactions/3.5.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-wE9+V9DJ7r+1s4euOi4sGPIAt4sD7r+Tk5s9mrlbLCHVQTK4KllAvcrL25bPFI38FuFceREEzFoRlTrekSyB2Q==",
|
||||||
|
"path": "discord.net.interactions/3.5.0",
|
||||||
|
"hashPath": "discord.net.interactions.3.5.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Discord.Net.Rest/3.5.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-BnTdLFuuQsKvCv08VQrD4X1Hw2Xp+MELIRQiDiKfG01IiQlRTN+1gc3LB1zXgn5xBvC0HXjHxwV22GrMD9uKHQ==",
|
||||||
|
"path": "discord.net.rest/3.5.0",
|
||||||
|
"hashPath": "discord.net.rest.3.5.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Discord.Net.Webhook/3.5.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-vCIGZS+m88sQDuFmdbUqg+2RIXS/NJWx8ei3MX+ZEYiAvOkDgQfkIlEnU1NKpds6ivTt5GFlv6UzcWubb5VJ1w==",
|
||||||
|
"path": "discord.net.webhook/3.5.0",
|
||||||
|
"hashPath": "discord.net.webhook.3.5.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Discord.Net.WebSocket/3.5.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-LjBOvcP40vJ+dhOtBDi8haEeblPAKpAIqR04NBzTM1/0RVavJZH89ovfSQIk42ygkiOaDV4E2x0Mmh6DRoIYcw==",
|
||||||
|
"path": "discord.net.websocket/3.5.0",
|
||||||
|
"hashPath": "discord.net.websocket.3.5.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Microsoft.Extensions.DependencyInjection.Abstractions/5.0.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-ORj7Zh81gC69TyvmcUm9tSzytcy8AVousi+IVRAI8nLieQjOFryRusSFh7+aLk16FN9pQNqJAiMd7BTKINK0kA==",
|
||||||
|
"path": "microsoft.extensions.dependencyinjection.abstractions/5.0.0",
|
||||||
|
"hashPath": "microsoft.extensions.dependencyinjection.abstractions.5.0.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Newtonsoft.Json/13.0.1": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-ppPFpBcvxdsfUonNcvITKqLl3bqxWbDCZIzDWHzjpdAHRFfZe0Dw9HmA0+za13IdyrgJwpkDTDA9fHaxOrt20A==",
|
||||||
|
"path": "newtonsoft.json/13.0.1",
|
||||||
|
"hashPath": "newtonsoft.json.13.0.1.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"System.Collections.Immutable/5.0.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-FXkLXiK0sVVewcso0imKQoOxjoPAj42R8HtjjbSjVPAzwDfzoyoznWxgA3c38LDbN9SJux1xXoXYAhz98j7r2g==",
|
||||||
|
"path": "system.collections.immutable/5.0.0",
|
||||||
|
"hashPath": "system.collections.immutable.5.0.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"System.Interactive.Async/5.0.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-QaqhQVDiULcu4vm6o89+iP329HcK44cETHOYgy/jfEjtzeFy0ZxmuM7nel9ocjnKxEM4yh1mli7hgh8Q9o+/Iw==",
|
||||||
|
"path": "system.interactive.async/5.0.0",
|
||||||
|
"hashPath": "system.interactive.async.5.0.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"System.Linq.Async/5.0.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-cPtIuuH8TIjVHSi2ewwReWGW1PfChPE0LxPIDlfwVcLuTM9GANFTXiMB7k3aC4sk3f0cQU25LNKzx+jZMxijqw==",
|
||||||
|
"path": "system.linq.async/5.0.0",
|
||||||
|
"hashPath": "system.linq.async.5.0.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"System.Reactive/5.0.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-erBZjkQHWL9jpasCE/0qKAryzVBJFxGHVBAvgRN1bzM0q2s1S4oYREEEL0Vb+1kA/6BKb5FjUZMp5VXmy+gzkQ==",
|
||||||
|
"path": "system.reactive/5.0.0",
|
||||||
|
"hashPath": "system.reactive.5.0.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"System.ValueTuple/4.5.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-okurQJO6NRE/apDIP23ajJ0hpiNmJ+f0BwOlB/cSqTLQlw5upkf+5+96+iG2Jw40G1fCVCyPz/FhIABUjMR+RQ==",
|
||||||
|
"path": "system.valuetuple/4.5.0",
|
||||||
|
"hashPath": "system.valuetuple.4.5.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"PluginManager/1.0.0": {
|
||||||
|
"type": "project",
|
||||||
|
"serviceable": false,
|
||||||
|
"sha512": ""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
BIN
BUILDS/net5.0/CMD_Utils.dll
Normal file
BIN
BUILDS/net5.0/CMD_Utils.dll
Normal file
Binary file not shown.
268
BUILDS/net5.0/EVE_LevelingSystem.deps.json
Normal file
268
BUILDS/net5.0/EVE_LevelingSystem.deps.json
Normal file
@@ -0,0 +1,268 @@
|
|||||||
|
{
|
||||||
|
"runtimeTarget": {
|
||||||
|
"name": ".NETCoreApp,Version=v5.0",
|
||||||
|
"signature": ""
|
||||||
|
},
|
||||||
|
"compilationOptions": {},
|
||||||
|
"targets": {
|
||||||
|
".NETCoreApp,Version=v5.0": {
|
||||||
|
"EVE_LevelingSystem/1.0.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"PluginManager": "1.0.0"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"EVE_LevelingSystem.dll": {}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Discord.Net/3.5.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"Discord.Net.Commands": "3.5.0",
|
||||||
|
"Discord.Net.Core": "3.5.0",
|
||||||
|
"Discord.Net.Interactions": "3.5.0",
|
||||||
|
"Discord.Net.Rest": "3.5.0",
|
||||||
|
"Discord.Net.WebSocket": "3.5.0",
|
||||||
|
"Discord.Net.Webhook": "3.5.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Discord.Net.Commands/3.5.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"Discord.Net.Core": "3.5.0"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/net5.0/Discord.Net.Commands.dll": {
|
||||||
|
"assemblyVersion": "3.5.0.0",
|
||||||
|
"fileVersion": "3.5.0.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Discord.Net.Core/3.5.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"Newtonsoft.Json": "13.0.1",
|
||||||
|
"System.Collections.Immutable": "5.0.0",
|
||||||
|
"System.Interactive.Async": "5.0.0",
|
||||||
|
"System.ValueTuple": "4.5.0"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/net5.0/Discord.Net.Core.dll": {
|
||||||
|
"assemblyVersion": "3.5.0.0",
|
||||||
|
"fileVersion": "3.5.0.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Discord.Net.Interactions/3.5.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"Discord.Net.Core": "3.5.0",
|
||||||
|
"Discord.Net.Rest": "3.5.0",
|
||||||
|
"Discord.Net.WebSocket": "3.5.0",
|
||||||
|
"Microsoft.Extensions.DependencyInjection.Abstractions": "5.0.0",
|
||||||
|
"System.Collections.Immutable": "5.0.0",
|
||||||
|
"System.Reactive": "5.0.0"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/net5.0/Discord.Net.Interactions.dll": {
|
||||||
|
"assemblyVersion": "3.5.0.0",
|
||||||
|
"fileVersion": "3.5.0.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Discord.Net.Rest/3.5.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"Discord.Net.Core": "3.5.0"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/net5.0/Discord.Net.Rest.dll": {
|
||||||
|
"assemblyVersion": "3.5.0.0",
|
||||||
|
"fileVersion": "3.5.0.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Discord.Net.Webhook/3.5.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"Discord.Net.Core": "3.5.0",
|
||||||
|
"Discord.Net.Rest": "3.5.0"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/net5.0/Discord.Net.Webhook.dll": {
|
||||||
|
"assemblyVersion": "3.5.0.0",
|
||||||
|
"fileVersion": "3.5.0.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Discord.Net.WebSocket/3.5.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"Discord.Net.Core": "3.5.0",
|
||||||
|
"Discord.Net.Rest": "3.5.0"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/net5.0/Discord.Net.WebSocket.dll": {
|
||||||
|
"assemblyVersion": "3.5.0.0",
|
||||||
|
"fileVersion": "3.5.0.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Microsoft.Extensions.DependencyInjection.Abstractions/5.0.0": {
|
||||||
|
"runtime": {
|
||||||
|
"lib/netstandard2.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll": {
|
||||||
|
"assemblyVersion": "5.0.0.0",
|
||||||
|
"fileVersion": "5.0.20.51904"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Newtonsoft.Json/13.0.1": {
|
||||||
|
"runtime": {
|
||||||
|
"lib/netstandard2.0/Newtonsoft.Json.dll": {
|
||||||
|
"assemblyVersion": "13.0.0.0",
|
||||||
|
"fileVersion": "13.0.1.25517"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"System.Collections.Immutable/5.0.0": {},
|
||||||
|
"System.Interactive.Async/5.0.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"System.Linq.Async": "5.0.0"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/netcoreapp3.1/System.Interactive.Async.dll": {
|
||||||
|
"assemblyVersion": "5.0.0.0",
|
||||||
|
"fileVersion": "5.0.0.1"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"System.Linq.Async/5.0.0": {
|
||||||
|
"runtime": {
|
||||||
|
"lib/netcoreapp3.1/System.Linq.Async.dll": {
|
||||||
|
"assemblyVersion": "5.0.0.0",
|
||||||
|
"fileVersion": "5.0.0.1"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"System.Reactive/5.0.0": {
|
||||||
|
"runtime": {
|
||||||
|
"lib/net5.0/System.Reactive.dll": {
|
||||||
|
"assemblyVersion": "5.0.0.0",
|
||||||
|
"fileVersion": "5.0.0.1"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"System.ValueTuple/4.5.0": {},
|
||||||
|
"PluginManager/1.0.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"Discord.Net": "3.5.0"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"PluginManager.dll": {}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"libraries": {
|
||||||
|
"EVE_LevelingSystem/1.0.0": {
|
||||||
|
"type": "project",
|
||||||
|
"serviceable": false,
|
||||||
|
"sha512": ""
|
||||||
|
},
|
||||||
|
"Discord.Net/3.5.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-IUtexpvogudb1rllKBWkIEpBVQoToMjtVo81KPkt+gNMe7KtRDcZJgcn6+72viMtyw0e95OJPXFV5VEA/n2OQQ==",
|
||||||
|
"path": "discord.net/3.5.0",
|
||||||
|
"hashPath": "discord.net.3.5.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Discord.Net.Commands/3.5.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-ClTv8aiTlitvS48YatRiTLvgE2f2uKgmHNPVBIuvJBHZO2u4bZCzoN1fid+pZn2sbVOkt8uftlLGzz5DSZlFIA==",
|
||||||
|
"path": "discord.net.commands/3.5.0",
|
||||||
|
"hashPath": "discord.net.commands.3.5.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Discord.Net.Core/3.5.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-rCzzaznMVQ+bLMxOpYwTyqm9V22kMy6BxlQisSxemHZDe2Jedz3Clp/a0dToACLz+Dlp3u+jYUfCBnTz7L6f4g==",
|
||||||
|
"path": "discord.net.core/3.5.0",
|
||||||
|
"hashPath": "discord.net.core.3.5.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Discord.Net.Interactions/3.5.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-wE9+V9DJ7r+1s4euOi4sGPIAt4sD7r+Tk5s9mrlbLCHVQTK4KllAvcrL25bPFI38FuFceREEzFoRlTrekSyB2Q==",
|
||||||
|
"path": "discord.net.interactions/3.5.0",
|
||||||
|
"hashPath": "discord.net.interactions.3.5.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Discord.Net.Rest/3.5.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-BnTdLFuuQsKvCv08VQrD4X1Hw2Xp+MELIRQiDiKfG01IiQlRTN+1gc3LB1zXgn5xBvC0HXjHxwV22GrMD9uKHQ==",
|
||||||
|
"path": "discord.net.rest/3.5.0",
|
||||||
|
"hashPath": "discord.net.rest.3.5.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Discord.Net.Webhook/3.5.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-vCIGZS+m88sQDuFmdbUqg+2RIXS/NJWx8ei3MX+ZEYiAvOkDgQfkIlEnU1NKpds6ivTt5GFlv6UzcWubb5VJ1w==",
|
||||||
|
"path": "discord.net.webhook/3.5.0",
|
||||||
|
"hashPath": "discord.net.webhook.3.5.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Discord.Net.WebSocket/3.5.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-LjBOvcP40vJ+dhOtBDi8haEeblPAKpAIqR04NBzTM1/0RVavJZH89ovfSQIk42ygkiOaDV4E2x0Mmh6DRoIYcw==",
|
||||||
|
"path": "discord.net.websocket/3.5.0",
|
||||||
|
"hashPath": "discord.net.websocket.3.5.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Microsoft.Extensions.DependencyInjection.Abstractions/5.0.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-ORj7Zh81gC69TyvmcUm9tSzytcy8AVousi+IVRAI8nLieQjOFryRusSFh7+aLk16FN9pQNqJAiMd7BTKINK0kA==",
|
||||||
|
"path": "microsoft.extensions.dependencyinjection.abstractions/5.0.0",
|
||||||
|
"hashPath": "microsoft.extensions.dependencyinjection.abstractions.5.0.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Newtonsoft.Json/13.0.1": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-ppPFpBcvxdsfUonNcvITKqLl3bqxWbDCZIzDWHzjpdAHRFfZe0Dw9HmA0+za13IdyrgJwpkDTDA9fHaxOrt20A==",
|
||||||
|
"path": "newtonsoft.json/13.0.1",
|
||||||
|
"hashPath": "newtonsoft.json.13.0.1.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"System.Collections.Immutable/5.0.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-FXkLXiK0sVVewcso0imKQoOxjoPAj42R8HtjjbSjVPAzwDfzoyoznWxgA3c38LDbN9SJux1xXoXYAhz98j7r2g==",
|
||||||
|
"path": "system.collections.immutable/5.0.0",
|
||||||
|
"hashPath": "system.collections.immutable.5.0.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"System.Interactive.Async/5.0.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-QaqhQVDiULcu4vm6o89+iP329HcK44cETHOYgy/jfEjtzeFy0ZxmuM7nel9ocjnKxEM4yh1mli7hgh8Q9o+/Iw==",
|
||||||
|
"path": "system.interactive.async/5.0.0",
|
||||||
|
"hashPath": "system.interactive.async.5.0.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"System.Linq.Async/5.0.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-cPtIuuH8TIjVHSi2ewwReWGW1PfChPE0LxPIDlfwVcLuTM9GANFTXiMB7k3aC4sk3f0cQU25LNKzx+jZMxijqw==",
|
||||||
|
"path": "system.linq.async/5.0.0",
|
||||||
|
"hashPath": "system.linq.async.5.0.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"System.Reactive/5.0.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-erBZjkQHWL9jpasCE/0qKAryzVBJFxGHVBAvgRN1bzM0q2s1S4oYREEEL0Vb+1kA/6BKb5FjUZMp5VXmy+gzkQ==",
|
||||||
|
"path": "system.reactive/5.0.0",
|
||||||
|
"hashPath": "system.reactive.5.0.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"System.ValueTuple/4.5.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-okurQJO6NRE/apDIP23ajJ0hpiNmJ+f0BwOlB/cSqTLQlw5upkf+5+96+iG2Jw40G1fCVCyPz/FhIABUjMR+RQ==",
|
||||||
|
"path": "system.valuetuple/4.5.0",
|
||||||
|
"hashPath": "system.valuetuple.4.5.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"PluginManager/1.0.0": {
|
||||||
|
"type": "project",
|
||||||
|
"serviceable": false,
|
||||||
|
"sha512": ""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
BIN
BUILDS/net5.0/EVE_LevelingSystem.dll
Normal file
BIN
BUILDS/net5.0/EVE_LevelingSystem.dll
Normal file
Binary file not shown.
268
BUILDS/net5.0/MusicCommands.deps.json
Normal file
268
BUILDS/net5.0/MusicCommands.deps.json
Normal file
@@ -0,0 +1,268 @@
|
|||||||
|
{
|
||||||
|
"runtimeTarget": {
|
||||||
|
"name": ".NETCoreApp,Version=v5.0",
|
||||||
|
"signature": ""
|
||||||
|
},
|
||||||
|
"compilationOptions": {},
|
||||||
|
"targets": {
|
||||||
|
".NETCoreApp,Version=v5.0": {
|
||||||
|
"MusicCommands/1.0.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"PluginManager": "1.0.0"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"MusicCommands.dll": {}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Discord.Net/3.5.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"Discord.Net.Commands": "3.5.0",
|
||||||
|
"Discord.Net.Core": "3.5.0",
|
||||||
|
"Discord.Net.Interactions": "3.5.0",
|
||||||
|
"Discord.Net.Rest": "3.5.0",
|
||||||
|
"Discord.Net.WebSocket": "3.5.0",
|
||||||
|
"Discord.Net.Webhook": "3.5.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Discord.Net.Commands/3.5.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"Discord.Net.Core": "3.5.0"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/net5.0/Discord.Net.Commands.dll": {
|
||||||
|
"assemblyVersion": "3.5.0.0",
|
||||||
|
"fileVersion": "3.5.0.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Discord.Net.Core/3.5.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"Newtonsoft.Json": "13.0.1",
|
||||||
|
"System.Collections.Immutable": "5.0.0",
|
||||||
|
"System.Interactive.Async": "5.0.0",
|
||||||
|
"System.ValueTuple": "4.5.0"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/net5.0/Discord.Net.Core.dll": {
|
||||||
|
"assemblyVersion": "3.5.0.0",
|
||||||
|
"fileVersion": "3.5.0.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Discord.Net.Interactions/3.5.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"Discord.Net.Core": "3.5.0",
|
||||||
|
"Discord.Net.Rest": "3.5.0",
|
||||||
|
"Discord.Net.WebSocket": "3.5.0",
|
||||||
|
"Microsoft.Extensions.DependencyInjection.Abstractions": "5.0.0",
|
||||||
|
"System.Collections.Immutable": "5.0.0",
|
||||||
|
"System.Reactive": "5.0.0"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/net5.0/Discord.Net.Interactions.dll": {
|
||||||
|
"assemblyVersion": "3.5.0.0",
|
||||||
|
"fileVersion": "3.5.0.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Discord.Net.Rest/3.5.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"Discord.Net.Core": "3.5.0"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/net5.0/Discord.Net.Rest.dll": {
|
||||||
|
"assemblyVersion": "3.5.0.0",
|
||||||
|
"fileVersion": "3.5.0.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Discord.Net.Webhook/3.5.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"Discord.Net.Core": "3.5.0",
|
||||||
|
"Discord.Net.Rest": "3.5.0"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/net5.0/Discord.Net.Webhook.dll": {
|
||||||
|
"assemblyVersion": "3.5.0.0",
|
||||||
|
"fileVersion": "3.5.0.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Discord.Net.WebSocket/3.5.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"Discord.Net.Core": "3.5.0",
|
||||||
|
"Discord.Net.Rest": "3.5.0"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/net5.0/Discord.Net.WebSocket.dll": {
|
||||||
|
"assemblyVersion": "3.5.0.0",
|
||||||
|
"fileVersion": "3.5.0.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Microsoft.Extensions.DependencyInjection.Abstractions/5.0.0": {
|
||||||
|
"runtime": {
|
||||||
|
"lib/netstandard2.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll": {
|
||||||
|
"assemblyVersion": "5.0.0.0",
|
||||||
|
"fileVersion": "5.0.20.51904"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Newtonsoft.Json/13.0.1": {
|
||||||
|
"runtime": {
|
||||||
|
"lib/netstandard2.0/Newtonsoft.Json.dll": {
|
||||||
|
"assemblyVersion": "13.0.0.0",
|
||||||
|
"fileVersion": "13.0.1.25517"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"System.Collections.Immutable/5.0.0": {},
|
||||||
|
"System.Interactive.Async/5.0.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"System.Linq.Async": "5.0.0"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/netcoreapp3.1/System.Interactive.Async.dll": {
|
||||||
|
"assemblyVersion": "5.0.0.0",
|
||||||
|
"fileVersion": "5.0.0.1"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"System.Linq.Async/5.0.0": {
|
||||||
|
"runtime": {
|
||||||
|
"lib/netcoreapp3.1/System.Linq.Async.dll": {
|
||||||
|
"assemblyVersion": "5.0.0.0",
|
||||||
|
"fileVersion": "5.0.0.1"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"System.Reactive/5.0.0": {
|
||||||
|
"runtime": {
|
||||||
|
"lib/net5.0/System.Reactive.dll": {
|
||||||
|
"assemblyVersion": "5.0.0.0",
|
||||||
|
"fileVersion": "5.0.0.1"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"System.ValueTuple/4.5.0": {},
|
||||||
|
"PluginManager/1.0.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"Discord.Net": "3.5.0"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"PluginManager.dll": {}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"libraries": {
|
||||||
|
"MusicCommands/1.0.0": {
|
||||||
|
"type": "project",
|
||||||
|
"serviceable": false,
|
||||||
|
"sha512": ""
|
||||||
|
},
|
||||||
|
"Discord.Net/3.5.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-IUtexpvogudb1rllKBWkIEpBVQoToMjtVo81KPkt+gNMe7KtRDcZJgcn6+72viMtyw0e95OJPXFV5VEA/n2OQQ==",
|
||||||
|
"path": "discord.net/3.5.0",
|
||||||
|
"hashPath": "discord.net.3.5.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Discord.Net.Commands/3.5.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-ClTv8aiTlitvS48YatRiTLvgE2f2uKgmHNPVBIuvJBHZO2u4bZCzoN1fid+pZn2sbVOkt8uftlLGzz5DSZlFIA==",
|
||||||
|
"path": "discord.net.commands/3.5.0",
|
||||||
|
"hashPath": "discord.net.commands.3.5.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Discord.Net.Core/3.5.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-rCzzaznMVQ+bLMxOpYwTyqm9V22kMy6BxlQisSxemHZDe2Jedz3Clp/a0dToACLz+Dlp3u+jYUfCBnTz7L6f4g==",
|
||||||
|
"path": "discord.net.core/3.5.0",
|
||||||
|
"hashPath": "discord.net.core.3.5.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Discord.Net.Interactions/3.5.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-wE9+V9DJ7r+1s4euOi4sGPIAt4sD7r+Tk5s9mrlbLCHVQTK4KllAvcrL25bPFI38FuFceREEzFoRlTrekSyB2Q==",
|
||||||
|
"path": "discord.net.interactions/3.5.0",
|
||||||
|
"hashPath": "discord.net.interactions.3.5.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Discord.Net.Rest/3.5.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-BnTdLFuuQsKvCv08VQrD4X1Hw2Xp+MELIRQiDiKfG01IiQlRTN+1gc3LB1zXgn5xBvC0HXjHxwV22GrMD9uKHQ==",
|
||||||
|
"path": "discord.net.rest/3.5.0",
|
||||||
|
"hashPath": "discord.net.rest.3.5.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Discord.Net.Webhook/3.5.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-vCIGZS+m88sQDuFmdbUqg+2RIXS/NJWx8ei3MX+ZEYiAvOkDgQfkIlEnU1NKpds6ivTt5GFlv6UzcWubb5VJ1w==",
|
||||||
|
"path": "discord.net.webhook/3.5.0",
|
||||||
|
"hashPath": "discord.net.webhook.3.5.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Discord.Net.WebSocket/3.5.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-LjBOvcP40vJ+dhOtBDi8haEeblPAKpAIqR04NBzTM1/0RVavJZH89ovfSQIk42ygkiOaDV4E2x0Mmh6DRoIYcw==",
|
||||||
|
"path": "discord.net.websocket/3.5.0",
|
||||||
|
"hashPath": "discord.net.websocket.3.5.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Microsoft.Extensions.DependencyInjection.Abstractions/5.0.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-ORj7Zh81gC69TyvmcUm9tSzytcy8AVousi+IVRAI8nLieQjOFryRusSFh7+aLk16FN9pQNqJAiMd7BTKINK0kA==",
|
||||||
|
"path": "microsoft.extensions.dependencyinjection.abstractions/5.0.0",
|
||||||
|
"hashPath": "microsoft.extensions.dependencyinjection.abstractions.5.0.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Newtonsoft.Json/13.0.1": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-ppPFpBcvxdsfUonNcvITKqLl3bqxWbDCZIzDWHzjpdAHRFfZe0Dw9HmA0+za13IdyrgJwpkDTDA9fHaxOrt20A==",
|
||||||
|
"path": "newtonsoft.json/13.0.1",
|
||||||
|
"hashPath": "newtonsoft.json.13.0.1.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"System.Collections.Immutable/5.0.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-FXkLXiK0sVVewcso0imKQoOxjoPAj42R8HtjjbSjVPAzwDfzoyoznWxgA3c38LDbN9SJux1xXoXYAhz98j7r2g==",
|
||||||
|
"path": "system.collections.immutable/5.0.0",
|
||||||
|
"hashPath": "system.collections.immutable.5.0.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"System.Interactive.Async/5.0.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-QaqhQVDiULcu4vm6o89+iP329HcK44cETHOYgy/jfEjtzeFy0ZxmuM7nel9ocjnKxEM4yh1mli7hgh8Q9o+/Iw==",
|
||||||
|
"path": "system.interactive.async/5.0.0",
|
||||||
|
"hashPath": "system.interactive.async.5.0.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"System.Linq.Async/5.0.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-cPtIuuH8TIjVHSi2ewwReWGW1PfChPE0LxPIDlfwVcLuTM9GANFTXiMB7k3aC4sk3f0cQU25LNKzx+jZMxijqw==",
|
||||||
|
"path": "system.linq.async/5.0.0",
|
||||||
|
"hashPath": "system.linq.async.5.0.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"System.Reactive/5.0.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-erBZjkQHWL9jpasCE/0qKAryzVBJFxGHVBAvgRN1bzM0q2s1S4oYREEEL0Vb+1kA/6BKb5FjUZMp5VXmy+gzkQ==",
|
||||||
|
"path": "system.reactive/5.0.0",
|
||||||
|
"hashPath": "system.reactive.5.0.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"System.ValueTuple/4.5.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-okurQJO6NRE/apDIP23ajJ0hpiNmJ+f0BwOlB/cSqTLQlw5upkf+5+96+iG2Jw40G1fCVCyPz/FhIABUjMR+RQ==",
|
||||||
|
"path": "system.valuetuple/4.5.0",
|
||||||
|
"hashPath": "system.valuetuple.4.5.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"PluginManager/1.0.0": {
|
||||||
|
"type": "project",
|
||||||
|
"serviceable": false,
|
||||||
|
"sha512": ""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
BIN
BUILDS/net5.0/MusicCommands.dll
Normal file
BIN
BUILDS/net5.0/MusicCommands.dll
Normal file
Binary file not shown.
BIN
BUILDS/net5.0/PluginManager.dll
Normal file
BIN
BUILDS/net5.0/PluginManager.dll
Normal file
Binary file not shown.
268
BUILDS/net5.0/StartupEvents.deps.json
Normal file
268
BUILDS/net5.0/StartupEvents.deps.json
Normal file
@@ -0,0 +1,268 @@
|
|||||||
|
{
|
||||||
|
"runtimeTarget": {
|
||||||
|
"name": ".NETCoreApp,Version=v5.0",
|
||||||
|
"signature": ""
|
||||||
|
},
|
||||||
|
"compilationOptions": {},
|
||||||
|
"targets": {
|
||||||
|
".NETCoreApp,Version=v5.0": {
|
||||||
|
"StartupEvents/1.0.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"PluginManager": "1.0.0"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"StartupEvents.dll": {}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Discord.Net/3.5.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"Discord.Net.Commands": "3.5.0",
|
||||||
|
"Discord.Net.Core": "3.5.0",
|
||||||
|
"Discord.Net.Interactions": "3.5.0",
|
||||||
|
"Discord.Net.Rest": "3.5.0",
|
||||||
|
"Discord.Net.WebSocket": "3.5.0",
|
||||||
|
"Discord.Net.Webhook": "3.5.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Discord.Net.Commands/3.5.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"Discord.Net.Core": "3.5.0"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/net5.0/Discord.Net.Commands.dll": {
|
||||||
|
"assemblyVersion": "3.5.0.0",
|
||||||
|
"fileVersion": "3.5.0.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Discord.Net.Core/3.5.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"Newtonsoft.Json": "13.0.1",
|
||||||
|
"System.Collections.Immutable": "5.0.0",
|
||||||
|
"System.Interactive.Async": "5.0.0",
|
||||||
|
"System.ValueTuple": "4.5.0"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/net5.0/Discord.Net.Core.dll": {
|
||||||
|
"assemblyVersion": "3.5.0.0",
|
||||||
|
"fileVersion": "3.5.0.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Discord.Net.Interactions/3.5.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"Discord.Net.Core": "3.5.0",
|
||||||
|
"Discord.Net.Rest": "3.5.0",
|
||||||
|
"Discord.Net.WebSocket": "3.5.0",
|
||||||
|
"Microsoft.Extensions.DependencyInjection.Abstractions": "5.0.0",
|
||||||
|
"System.Collections.Immutable": "5.0.0",
|
||||||
|
"System.Reactive": "5.0.0"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/net5.0/Discord.Net.Interactions.dll": {
|
||||||
|
"assemblyVersion": "3.5.0.0",
|
||||||
|
"fileVersion": "3.5.0.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Discord.Net.Rest/3.5.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"Discord.Net.Core": "3.5.0"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/net5.0/Discord.Net.Rest.dll": {
|
||||||
|
"assemblyVersion": "3.5.0.0",
|
||||||
|
"fileVersion": "3.5.0.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Discord.Net.Webhook/3.5.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"Discord.Net.Core": "3.5.0",
|
||||||
|
"Discord.Net.Rest": "3.5.0"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/net5.0/Discord.Net.Webhook.dll": {
|
||||||
|
"assemblyVersion": "3.5.0.0",
|
||||||
|
"fileVersion": "3.5.0.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Discord.Net.WebSocket/3.5.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"Discord.Net.Core": "3.5.0",
|
||||||
|
"Discord.Net.Rest": "3.5.0"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/net5.0/Discord.Net.WebSocket.dll": {
|
||||||
|
"assemblyVersion": "3.5.0.0",
|
||||||
|
"fileVersion": "3.5.0.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Microsoft.Extensions.DependencyInjection.Abstractions/5.0.0": {
|
||||||
|
"runtime": {
|
||||||
|
"lib/netstandard2.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll": {
|
||||||
|
"assemblyVersion": "5.0.0.0",
|
||||||
|
"fileVersion": "5.0.20.51904"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Newtonsoft.Json/13.0.1": {
|
||||||
|
"runtime": {
|
||||||
|
"lib/netstandard2.0/Newtonsoft.Json.dll": {
|
||||||
|
"assemblyVersion": "13.0.0.0",
|
||||||
|
"fileVersion": "13.0.1.25517"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"System.Collections.Immutable/5.0.0": {},
|
||||||
|
"System.Interactive.Async/5.0.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"System.Linq.Async": "5.0.0"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/netcoreapp3.1/System.Interactive.Async.dll": {
|
||||||
|
"assemblyVersion": "5.0.0.0",
|
||||||
|
"fileVersion": "5.0.0.1"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"System.Linq.Async/5.0.0": {
|
||||||
|
"runtime": {
|
||||||
|
"lib/netcoreapp3.1/System.Linq.Async.dll": {
|
||||||
|
"assemblyVersion": "5.0.0.0",
|
||||||
|
"fileVersion": "5.0.0.1"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"System.Reactive/5.0.0": {
|
||||||
|
"runtime": {
|
||||||
|
"lib/net5.0/System.Reactive.dll": {
|
||||||
|
"assemblyVersion": "5.0.0.0",
|
||||||
|
"fileVersion": "5.0.0.1"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"System.ValueTuple/4.5.0": {},
|
||||||
|
"PluginManager/1.0.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"Discord.Net": "3.5.0"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"PluginManager.dll": {}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"libraries": {
|
||||||
|
"StartupEvents/1.0.0": {
|
||||||
|
"type": "project",
|
||||||
|
"serviceable": false,
|
||||||
|
"sha512": ""
|
||||||
|
},
|
||||||
|
"Discord.Net/3.5.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-IUtexpvogudb1rllKBWkIEpBVQoToMjtVo81KPkt+gNMe7KtRDcZJgcn6+72viMtyw0e95OJPXFV5VEA/n2OQQ==",
|
||||||
|
"path": "discord.net/3.5.0",
|
||||||
|
"hashPath": "discord.net.3.5.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Discord.Net.Commands/3.5.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-ClTv8aiTlitvS48YatRiTLvgE2f2uKgmHNPVBIuvJBHZO2u4bZCzoN1fid+pZn2sbVOkt8uftlLGzz5DSZlFIA==",
|
||||||
|
"path": "discord.net.commands/3.5.0",
|
||||||
|
"hashPath": "discord.net.commands.3.5.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Discord.Net.Core/3.5.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-rCzzaznMVQ+bLMxOpYwTyqm9V22kMy6BxlQisSxemHZDe2Jedz3Clp/a0dToACLz+Dlp3u+jYUfCBnTz7L6f4g==",
|
||||||
|
"path": "discord.net.core/3.5.0",
|
||||||
|
"hashPath": "discord.net.core.3.5.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Discord.Net.Interactions/3.5.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-wE9+V9DJ7r+1s4euOi4sGPIAt4sD7r+Tk5s9mrlbLCHVQTK4KllAvcrL25bPFI38FuFceREEzFoRlTrekSyB2Q==",
|
||||||
|
"path": "discord.net.interactions/3.5.0",
|
||||||
|
"hashPath": "discord.net.interactions.3.5.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Discord.Net.Rest/3.5.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-BnTdLFuuQsKvCv08VQrD4X1Hw2Xp+MELIRQiDiKfG01IiQlRTN+1gc3LB1zXgn5xBvC0HXjHxwV22GrMD9uKHQ==",
|
||||||
|
"path": "discord.net.rest/3.5.0",
|
||||||
|
"hashPath": "discord.net.rest.3.5.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Discord.Net.Webhook/3.5.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-vCIGZS+m88sQDuFmdbUqg+2RIXS/NJWx8ei3MX+ZEYiAvOkDgQfkIlEnU1NKpds6ivTt5GFlv6UzcWubb5VJ1w==",
|
||||||
|
"path": "discord.net.webhook/3.5.0",
|
||||||
|
"hashPath": "discord.net.webhook.3.5.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Discord.Net.WebSocket/3.5.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-LjBOvcP40vJ+dhOtBDi8haEeblPAKpAIqR04NBzTM1/0RVavJZH89ovfSQIk42ygkiOaDV4E2x0Mmh6DRoIYcw==",
|
||||||
|
"path": "discord.net.websocket/3.5.0",
|
||||||
|
"hashPath": "discord.net.websocket.3.5.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Microsoft.Extensions.DependencyInjection.Abstractions/5.0.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-ORj7Zh81gC69TyvmcUm9tSzytcy8AVousi+IVRAI8nLieQjOFryRusSFh7+aLk16FN9pQNqJAiMd7BTKINK0kA==",
|
||||||
|
"path": "microsoft.extensions.dependencyinjection.abstractions/5.0.0",
|
||||||
|
"hashPath": "microsoft.extensions.dependencyinjection.abstractions.5.0.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Newtonsoft.Json/13.0.1": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-ppPFpBcvxdsfUonNcvITKqLl3bqxWbDCZIzDWHzjpdAHRFfZe0Dw9HmA0+za13IdyrgJwpkDTDA9fHaxOrt20A==",
|
||||||
|
"path": "newtonsoft.json/13.0.1",
|
||||||
|
"hashPath": "newtonsoft.json.13.0.1.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"System.Collections.Immutable/5.0.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-FXkLXiK0sVVewcso0imKQoOxjoPAj42R8HtjjbSjVPAzwDfzoyoznWxgA3c38LDbN9SJux1xXoXYAhz98j7r2g==",
|
||||||
|
"path": "system.collections.immutable/5.0.0",
|
||||||
|
"hashPath": "system.collections.immutable.5.0.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"System.Interactive.Async/5.0.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-QaqhQVDiULcu4vm6o89+iP329HcK44cETHOYgy/jfEjtzeFy0ZxmuM7nel9ocjnKxEM4yh1mli7hgh8Q9o+/Iw==",
|
||||||
|
"path": "system.interactive.async/5.0.0",
|
||||||
|
"hashPath": "system.interactive.async.5.0.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"System.Linq.Async/5.0.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-cPtIuuH8TIjVHSi2ewwReWGW1PfChPE0LxPIDlfwVcLuTM9GANFTXiMB7k3aC4sk3f0cQU25LNKzx+jZMxijqw==",
|
||||||
|
"path": "system.linq.async/5.0.0",
|
||||||
|
"hashPath": "system.linq.async.5.0.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"System.Reactive/5.0.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-erBZjkQHWL9jpasCE/0qKAryzVBJFxGHVBAvgRN1bzM0q2s1S4oYREEEL0Vb+1kA/6BKb5FjUZMp5VXmy+gzkQ==",
|
||||||
|
"path": "system.reactive/5.0.0",
|
||||||
|
"hashPath": "system.reactive.5.0.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"System.ValueTuple/4.5.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-okurQJO6NRE/apDIP23ajJ0hpiNmJ+f0BwOlB/cSqTLQlw5upkf+5+96+iG2Jw40G1fCVCyPz/FhIABUjMR+RQ==",
|
||||||
|
"path": "system.valuetuple/4.5.0",
|
||||||
|
"hashPath": "system.valuetuple.4.5.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"PluginManager/1.0.0": {
|
||||||
|
"type": "project",
|
||||||
|
"serviceable": false,
|
||||||
|
"sha512": ""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
BIN
BUILDS/net5.0/StartupEvents.dll
Normal file
BIN
BUILDS/net5.0/StartupEvents.dll
Normal file
Binary file not shown.
BIN
BUILDS/net5.0/ref/CMD_LevelingSystem.dll
Normal file
BIN
BUILDS/net5.0/ref/CMD_LevelingSystem.dll
Normal file
Binary file not shown.
BIN
BUILDS/net5.0/ref/CMD_Utils.dll
Normal file
BIN
BUILDS/net5.0/ref/CMD_Utils.dll
Normal file
Binary file not shown.
BIN
BUILDS/net5.0/ref/EVE_LevelingSystem.dll
Normal file
BIN
BUILDS/net5.0/ref/EVE_LevelingSystem.dll
Normal file
Binary file not shown.
BIN
BUILDS/net5.0/ref/MusicCommands.dll
Normal file
BIN
BUILDS/net5.0/ref/MusicCommands.dll
Normal file
Binary file not shown.
BIN
BUILDS/net5.0/ref/StartupEvents.dll
Normal file
BIN
BUILDS/net5.0/ref/StartupEvents.dll
Normal file
Binary file not shown.
268
BUILDS/net6.0/CMD_Utils.deps.json
Normal file
268
BUILDS/net6.0/CMD_Utils.deps.json
Normal file
@@ -0,0 +1,268 @@
|
|||||||
|
{
|
||||||
|
"runtimeTarget": {
|
||||||
|
"name": ".NETCoreApp,Version=v6.0",
|
||||||
|
"signature": ""
|
||||||
|
},
|
||||||
|
"compilationOptions": {},
|
||||||
|
"targets": {
|
||||||
|
".NETCoreApp,Version=v6.0": {
|
||||||
|
"CMD_Utils/1.0.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"PluginManager": "1.0.0"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"CMD_Utils.dll": {}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Discord.Net/3.7.2": {
|
||||||
|
"dependencies": {
|
||||||
|
"Discord.Net.Commands": "3.7.2",
|
||||||
|
"Discord.Net.Core": "3.7.2",
|
||||||
|
"Discord.Net.Interactions": "3.7.2",
|
||||||
|
"Discord.Net.Rest": "3.7.2",
|
||||||
|
"Discord.Net.WebSocket": "3.7.2",
|
||||||
|
"Discord.Net.Webhook": "3.7.2"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Discord.Net.Commands/3.7.2": {
|
||||||
|
"dependencies": {
|
||||||
|
"Discord.Net.Core": "3.7.2"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/net6.0/Discord.Net.Commands.dll": {
|
||||||
|
"assemblyVersion": "3.7.2.0",
|
||||||
|
"fileVersion": "3.7.2.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Discord.Net.Core/3.7.2": {
|
||||||
|
"dependencies": {
|
||||||
|
"Newtonsoft.Json": "13.0.1",
|
||||||
|
"System.Collections.Immutable": "5.0.0",
|
||||||
|
"System.Interactive.Async": "5.0.0",
|
||||||
|
"System.ValueTuple": "4.5.0"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/net6.0/Discord.Net.Core.dll": {
|
||||||
|
"assemblyVersion": "3.7.2.0",
|
||||||
|
"fileVersion": "3.7.2.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Discord.Net.Interactions/3.7.2": {
|
||||||
|
"dependencies": {
|
||||||
|
"Discord.Net.Core": "3.7.2",
|
||||||
|
"Discord.Net.Rest": "3.7.2",
|
||||||
|
"Discord.Net.WebSocket": "3.7.2",
|
||||||
|
"Microsoft.Extensions.DependencyInjection.Abstractions": "5.0.0",
|
||||||
|
"System.Collections.Immutable": "5.0.0",
|
||||||
|
"System.Reactive": "5.0.0"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/net6.0/Discord.Net.Interactions.dll": {
|
||||||
|
"assemblyVersion": "3.7.2.0",
|
||||||
|
"fileVersion": "3.7.2.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Discord.Net.Rest/3.7.2": {
|
||||||
|
"dependencies": {
|
||||||
|
"Discord.Net.Core": "3.7.2"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/net6.0/Discord.Net.Rest.dll": {
|
||||||
|
"assemblyVersion": "3.7.2.0",
|
||||||
|
"fileVersion": "3.7.2.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Discord.Net.Webhook/3.7.2": {
|
||||||
|
"dependencies": {
|
||||||
|
"Discord.Net.Core": "3.7.2",
|
||||||
|
"Discord.Net.Rest": "3.7.2"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/net6.0/Discord.Net.Webhook.dll": {
|
||||||
|
"assemblyVersion": "3.7.2.0",
|
||||||
|
"fileVersion": "3.7.2.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Discord.Net.WebSocket/3.7.2": {
|
||||||
|
"dependencies": {
|
||||||
|
"Discord.Net.Core": "3.7.2",
|
||||||
|
"Discord.Net.Rest": "3.7.2"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/net6.0/Discord.Net.WebSocket.dll": {
|
||||||
|
"assemblyVersion": "3.7.2.0",
|
||||||
|
"fileVersion": "3.7.2.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Microsoft.Extensions.DependencyInjection.Abstractions/5.0.0": {
|
||||||
|
"runtime": {
|
||||||
|
"lib/netstandard2.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll": {
|
||||||
|
"assemblyVersion": "5.0.0.0",
|
||||||
|
"fileVersion": "5.0.20.51904"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Newtonsoft.Json/13.0.1": {
|
||||||
|
"runtime": {
|
||||||
|
"lib/netstandard2.0/Newtonsoft.Json.dll": {
|
||||||
|
"assemblyVersion": "13.0.0.0",
|
||||||
|
"fileVersion": "13.0.1.25517"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"System.Collections.Immutable/5.0.0": {},
|
||||||
|
"System.Interactive.Async/5.0.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"System.Linq.Async": "5.0.0"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/netcoreapp3.1/System.Interactive.Async.dll": {
|
||||||
|
"assemblyVersion": "5.0.0.0",
|
||||||
|
"fileVersion": "5.0.0.1"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"System.Linq.Async/5.0.0": {
|
||||||
|
"runtime": {
|
||||||
|
"lib/netcoreapp3.1/System.Linq.Async.dll": {
|
||||||
|
"assemblyVersion": "5.0.0.0",
|
||||||
|
"fileVersion": "5.0.0.1"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"System.Reactive/5.0.0": {
|
||||||
|
"runtime": {
|
||||||
|
"lib/net5.0/System.Reactive.dll": {
|
||||||
|
"assemblyVersion": "5.0.0.0",
|
||||||
|
"fileVersion": "5.0.0.1"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"System.ValueTuple/4.5.0": {},
|
||||||
|
"PluginManager/1.0.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"Discord.Net": "3.7.2"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"PluginManager.dll": {}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"libraries": {
|
||||||
|
"CMD_Utils/1.0.0": {
|
||||||
|
"type": "project",
|
||||||
|
"serviceable": false,
|
||||||
|
"sha512": ""
|
||||||
|
},
|
||||||
|
"Discord.Net/3.7.2": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-FAiCLGu5rp6+Z10FjKbbJ6LLpKjbMBGpozixkJlz5LZvuncPx8f4AWFAw7pBecKUuAh983qiZ8CZYZcNXsI4qg==",
|
||||||
|
"path": "discord.net/3.7.2",
|
||||||
|
"hashPath": "discord.net.3.7.2.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Discord.Net.Commands/3.7.2": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-aOEGP04X64htsTr7ozKj9qHpmvOfitSw5gfR8Tw9TX0+FdswD2LNL2KfOAIaxRKZmRTm34aXQEJrVq0K8AptmQ==",
|
||||||
|
"path": "discord.net.commands/3.7.2",
|
||||||
|
"hashPath": "discord.net.commands.3.7.2.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Discord.Net.Core/3.7.2": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-apwswc6LjN4dj3u27SO3Hr56Jzl91wzReahieoD7IQhV+BJQaRxhTRiEEWFTrBzHfeFHEOQ7r6vZnra3zeFhKA==",
|
||||||
|
"path": "discord.net.core/3.7.2",
|
||||||
|
"hashPath": "discord.net.core.3.7.2.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Discord.Net.Interactions/3.7.2": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-dwGhEdDB0yyo/lGtjwIDVZmsuD52di7lIZWu/sBtvvA05dMgYZq5S6ILdsBXjOyaHeXd+EV4YMlj2VS/rm619w==",
|
||||||
|
"path": "discord.net.interactions/3.7.2",
|
||||||
|
"hashPath": "discord.net.interactions.3.7.2.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Discord.Net.Rest/3.7.2": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-dyp8YaMBNJ837EH1KNz2PNGZqc2y71WFd1+pdldF+pLQJ3Gf/+V7685paAR7bQw7yFNyqEBR/QRBCNp+QIQ7Wg==",
|
||||||
|
"path": "discord.net.rest/3.7.2",
|
||||||
|
"hashPath": "discord.net.rest.3.7.2.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Discord.Net.Webhook/3.7.2": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-da3i/mTq2y7mfj3xlHH14S4PivHbflJCVr8OUikJtQrxBOxvPkqP7ZYk3Y9S28q0K8qik+TUjCcjL5gELKrh/A==",
|
||||||
|
"path": "discord.net.webhook/3.7.2",
|
||||||
|
"hashPath": "discord.net.webhook.3.7.2.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Discord.Net.WebSocket/3.7.2": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-pYCd6ET44ADaNiyEw82TaJnR7TKYHfrKCytWFWMPL5faJhoh260avZn3Hwunlf331lEQ0f4K1CujPkQbNuq7kQ==",
|
||||||
|
"path": "discord.net.websocket/3.7.2",
|
||||||
|
"hashPath": "discord.net.websocket.3.7.2.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Microsoft.Extensions.DependencyInjection.Abstractions/5.0.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-ORj7Zh81gC69TyvmcUm9tSzytcy8AVousi+IVRAI8nLieQjOFryRusSFh7+aLk16FN9pQNqJAiMd7BTKINK0kA==",
|
||||||
|
"path": "microsoft.extensions.dependencyinjection.abstractions/5.0.0",
|
||||||
|
"hashPath": "microsoft.extensions.dependencyinjection.abstractions.5.0.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Newtonsoft.Json/13.0.1": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-ppPFpBcvxdsfUonNcvITKqLl3bqxWbDCZIzDWHzjpdAHRFfZe0Dw9HmA0+za13IdyrgJwpkDTDA9fHaxOrt20A==",
|
||||||
|
"path": "newtonsoft.json/13.0.1",
|
||||||
|
"hashPath": "newtonsoft.json.13.0.1.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"System.Collections.Immutable/5.0.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-FXkLXiK0sVVewcso0imKQoOxjoPAj42R8HtjjbSjVPAzwDfzoyoznWxgA3c38LDbN9SJux1xXoXYAhz98j7r2g==",
|
||||||
|
"path": "system.collections.immutable/5.0.0",
|
||||||
|
"hashPath": "system.collections.immutable.5.0.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"System.Interactive.Async/5.0.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-QaqhQVDiULcu4vm6o89+iP329HcK44cETHOYgy/jfEjtzeFy0ZxmuM7nel9ocjnKxEM4yh1mli7hgh8Q9o+/Iw==",
|
||||||
|
"path": "system.interactive.async/5.0.0",
|
||||||
|
"hashPath": "system.interactive.async.5.0.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"System.Linq.Async/5.0.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-cPtIuuH8TIjVHSi2ewwReWGW1PfChPE0LxPIDlfwVcLuTM9GANFTXiMB7k3aC4sk3f0cQU25LNKzx+jZMxijqw==",
|
||||||
|
"path": "system.linq.async/5.0.0",
|
||||||
|
"hashPath": "system.linq.async.5.0.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"System.Reactive/5.0.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-erBZjkQHWL9jpasCE/0qKAryzVBJFxGHVBAvgRN1bzM0q2s1S4oYREEEL0Vb+1kA/6BKb5FjUZMp5VXmy+gzkQ==",
|
||||||
|
"path": "system.reactive/5.0.0",
|
||||||
|
"hashPath": "system.reactive.5.0.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"System.ValueTuple/4.5.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-okurQJO6NRE/apDIP23ajJ0hpiNmJ+f0BwOlB/cSqTLQlw5upkf+5+96+iG2Jw40G1fCVCyPz/FhIABUjMR+RQ==",
|
||||||
|
"path": "system.valuetuple/4.5.0",
|
||||||
|
"hashPath": "system.valuetuple.4.5.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"PluginManager/1.0.0": {
|
||||||
|
"type": "project",
|
||||||
|
"serviceable": false,
|
||||||
|
"sha512": ""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
BIN
BUILDS/net6.0/CMD_Utils.dll
Normal file
BIN
BUILDS/net6.0/CMD_Utils.dll
Normal file
Binary file not shown.
268
BUILDS/net6.0/MusicCommands.deps.json
Normal file
268
BUILDS/net6.0/MusicCommands.deps.json
Normal file
@@ -0,0 +1,268 @@
|
|||||||
|
{
|
||||||
|
"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.7.2": {
|
||||||
|
"dependencies": {
|
||||||
|
"Discord.Net.Commands": "3.7.2",
|
||||||
|
"Discord.Net.Core": "3.7.2",
|
||||||
|
"Discord.Net.Interactions": "3.7.2",
|
||||||
|
"Discord.Net.Rest": "3.7.2",
|
||||||
|
"Discord.Net.WebSocket": "3.7.2",
|
||||||
|
"Discord.Net.Webhook": "3.7.2"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Discord.Net.Commands/3.7.2": {
|
||||||
|
"dependencies": {
|
||||||
|
"Discord.Net.Core": "3.7.2"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/net6.0/Discord.Net.Commands.dll": {
|
||||||
|
"assemblyVersion": "3.7.2.0",
|
||||||
|
"fileVersion": "3.7.2.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Discord.Net.Core/3.7.2": {
|
||||||
|
"dependencies": {
|
||||||
|
"Newtonsoft.Json": "13.0.1",
|
||||||
|
"System.Collections.Immutable": "5.0.0",
|
||||||
|
"System.Interactive.Async": "5.0.0",
|
||||||
|
"System.ValueTuple": "4.5.0"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/net6.0/Discord.Net.Core.dll": {
|
||||||
|
"assemblyVersion": "3.7.2.0",
|
||||||
|
"fileVersion": "3.7.2.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Discord.Net.Interactions/3.7.2": {
|
||||||
|
"dependencies": {
|
||||||
|
"Discord.Net.Core": "3.7.2",
|
||||||
|
"Discord.Net.Rest": "3.7.2",
|
||||||
|
"Discord.Net.WebSocket": "3.7.2",
|
||||||
|
"Microsoft.Extensions.DependencyInjection.Abstractions": "5.0.0",
|
||||||
|
"System.Collections.Immutable": "5.0.0",
|
||||||
|
"System.Reactive": "5.0.0"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/net6.0/Discord.Net.Interactions.dll": {
|
||||||
|
"assemblyVersion": "3.7.2.0",
|
||||||
|
"fileVersion": "3.7.2.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Discord.Net.Rest/3.7.2": {
|
||||||
|
"dependencies": {
|
||||||
|
"Discord.Net.Core": "3.7.2"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/net6.0/Discord.Net.Rest.dll": {
|
||||||
|
"assemblyVersion": "3.7.2.0",
|
||||||
|
"fileVersion": "3.7.2.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Discord.Net.Webhook/3.7.2": {
|
||||||
|
"dependencies": {
|
||||||
|
"Discord.Net.Core": "3.7.2",
|
||||||
|
"Discord.Net.Rest": "3.7.2"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/net6.0/Discord.Net.Webhook.dll": {
|
||||||
|
"assemblyVersion": "3.7.2.0",
|
||||||
|
"fileVersion": "3.7.2.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Discord.Net.WebSocket/3.7.2": {
|
||||||
|
"dependencies": {
|
||||||
|
"Discord.Net.Core": "3.7.2",
|
||||||
|
"Discord.Net.Rest": "3.7.2"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/net6.0/Discord.Net.WebSocket.dll": {
|
||||||
|
"assemblyVersion": "3.7.2.0",
|
||||||
|
"fileVersion": "3.7.2.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Microsoft.Extensions.DependencyInjection.Abstractions/5.0.0": {
|
||||||
|
"runtime": {
|
||||||
|
"lib/netstandard2.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll": {
|
||||||
|
"assemblyVersion": "5.0.0.0",
|
||||||
|
"fileVersion": "5.0.20.51904"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Newtonsoft.Json/13.0.1": {
|
||||||
|
"runtime": {
|
||||||
|
"lib/netstandard2.0/Newtonsoft.Json.dll": {
|
||||||
|
"assemblyVersion": "13.0.0.0",
|
||||||
|
"fileVersion": "13.0.1.25517"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"System.Collections.Immutable/5.0.0": {},
|
||||||
|
"System.Interactive.Async/5.0.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"System.Linq.Async": "5.0.0"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/netcoreapp3.1/System.Interactive.Async.dll": {
|
||||||
|
"assemblyVersion": "5.0.0.0",
|
||||||
|
"fileVersion": "5.0.0.1"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"System.Linq.Async/5.0.0": {
|
||||||
|
"runtime": {
|
||||||
|
"lib/netcoreapp3.1/System.Linq.Async.dll": {
|
||||||
|
"assemblyVersion": "5.0.0.0",
|
||||||
|
"fileVersion": "5.0.0.1"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"System.Reactive/5.0.0": {
|
||||||
|
"runtime": {
|
||||||
|
"lib/net5.0/System.Reactive.dll": {
|
||||||
|
"assemblyVersion": "5.0.0.0",
|
||||||
|
"fileVersion": "5.0.0.1"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"System.ValueTuple/4.5.0": {},
|
||||||
|
"PluginManager/1.0.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"Discord.Net": "3.7.2"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"PluginManager.dll": {}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"libraries": {
|
||||||
|
"MusicCommands/1.0.0": {
|
||||||
|
"type": "project",
|
||||||
|
"serviceable": false,
|
||||||
|
"sha512": ""
|
||||||
|
},
|
||||||
|
"Discord.Net/3.7.2": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-FAiCLGu5rp6+Z10FjKbbJ6LLpKjbMBGpozixkJlz5LZvuncPx8f4AWFAw7pBecKUuAh983qiZ8CZYZcNXsI4qg==",
|
||||||
|
"path": "discord.net/3.7.2",
|
||||||
|
"hashPath": "discord.net.3.7.2.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Discord.Net.Commands/3.7.2": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-aOEGP04X64htsTr7ozKj9qHpmvOfitSw5gfR8Tw9TX0+FdswD2LNL2KfOAIaxRKZmRTm34aXQEJrVq0K8AptmQ==",
|
||||||
|
"path": "discord.net.commands/3.7.2",
|
||||||
|
"hashPath": "discord.net.commands.3.7.2.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Discord.Net.Core/3.7.2": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-apwswc6LjN4dj3u27SO3Hr56Jzl91wzReahieoD7IQhV+BJQaRxhTRiEEWFTrBzHfeFHEOQ7r6vZnra3zeFhKA==",
|
||||||
|
"path": "discord.net.core/3.7.2",
|
||||||
|
"hashPath": "discord.net.core.3.7.2.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Discord.Net.Interactions/3.7.2": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-dwGhEdDB0yyo/lGtjwIDVZmsuD52di7lIZWu/sBtvvA05dMgYZq5S6ILdsBXjOyaHeXd+EV4YMlj2VS/rm619w==",
|
||||||
|
"path": "discord.net.interactions/3.7.2",
|
||||||
|
"hashPath": "discord.net.interactions.3.7.2.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Discord.Net.Rest/3.7.2": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-dyp8YaMBNJ837EH1KNz2PNGZqc2y71WFd1+pdldF+pLQJ3Gf/+V7685paAR7bQw7yFNyqEBR/QRBCNp+QIQ7Wg==",
|
||||||
|
"path": "discord.net.rest/3.7.2",
|
||||||
|
"hashPath": "discord.net.rest.3.7.2.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Discord.Net.Webhook/3.7.2": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-da3i/mTq2y7mfj3xlHH14S4PivHbflJCVr8OUikJtQrxBOxvPkqP7ZYk3Y9S28q0K8qik+TUjCcjL5gELKrh/A==",
|
||||||
|
"path": "discord.net.webhook/3.7.2",
|
||||||
|
"hashPath": "discord.net.webhook.3.7.2.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Discord.Net.WebSocket/3.7.2": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-pYCd6ET44ADaNiyEw82TaJnR7TKYHfrKCytWFWMPL5faJhoh260avZn3Hwunlf331lEQ0f4K1CujPkQbNuq7kQ==",
|
||||||
|
"path": "discord.net.websocket/3.7.2",
|
||||||
|
"hashPath": "discord.net.websocket.3.7.2.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Microsoft.Extensions.DependencyInjection.Abstractions/5.0.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-ORj7Zh81gC69TyvmcUm9tSzytcy8AVousi+IVRAI8nLieQjOFryRusSFh7+aLk16FN9pQNqJAiMd7BTKINK0kA==",
|
||||||
|
"path": "microsoft.extensions.dependencyinjection.abstractions/5.0.0",
|
||||||
|
"hashPath": "microsoft.extensions.dependencyinjection.abstractions.5.0.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Newtonsoft.Json/13.0.1": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-ppPFpBcvxdsfUonNcvITKqLl3bqxWbDCZIzDWHzjpdAHRFfZe0Dw9HmA0+za13IdyrgJwpkDTDA9fHaxOrt20A==",
|
||||||
|
"path": "newtonsoft.json/13.0.1",
|
||||||
|
"hashPath": "newtonsoft.json.13.0.1.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"System.Collections.Immutable/5.0.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-FXkLXiK0sVVewcso0imKQoOxjoPAj42R8HtjjbSjVPAzwDfzoyoznWxgA3c38LDbN9SJux1xXoXYAhz98j7r2g==",
|
||||||
|
"path": "system.collections.immutable/5.0.0",
|
||||||
|
"hashPath": "system.collections.immutable.5.0.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"System.Interactive.Async/5.0.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-QaqhQVDiULcu4vm6o89+iP329HcK44cETHOYgy/jfEjtzeFy0ZxmuM7nel9ocjnKxEM4yh1mli7hgh8Q9o+/Iw==",
|
||||||
|
"path": "system.interactive.async/5.0.0",
|
||||||
|
"hashPath": "system.interactive.async.5.0.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"System.Linq.Async/5.0.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-cPtIuuH8TIjVHSi2ewwReWGW1PfChPE0LxPIDlfwVcLuTM9GANFTXiMB7k3aC4sk3f0cQU25LNKzx+jZMxijqw==",
|
||||||
|
"path": "system.linq.async/5.0.0",
|
||||||
|
"hashPath": "system.linq.async.5.0.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"System.Reactive/5.0.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-erBZjkQHWL9jpasCE/0qKAryzVBJFxGHVBAvgRN1bzM0q2s1S4oYREEEL0Vb+1kA/6BKb5FjUZMp5VXmy+gzkQ==",
|
||||||
|
"path": "system.reactive/5.0.0",
|
||||||
|
"hashPath": "system.reactive.5.0.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"System.ValueTuple/4.5.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-okurQJO6NRE/apDIP23ajJ0hpiNmJ+f0BwOlB/cSqTLQlw5upkf+5+96+iG2Jw40G1fCVCyPz/FhIABUjMR+RQ==",
|
||||||
|
"path": "system.valuetuple/4.5.0",
|
||||||
|
"hashPath": "system.valuetuple.4.5.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"PluginManager/1.0.0": {
|
||||||
|
"type": "project",
|
||||||
|
"serviceable": false,
|
||||||
|
"sha512": ""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
BIN
BUILDS/net6.0/MusicCommands.dll
Normal file
BIN
BUILDS/net6.0/MusicCommands.dll
Normal file
Binary file not shown.
BIN
BUILDS/net6.0/PluginManager.dll
Normal file
BIN
BUILDS/net6.0/PluginManager.dll
Normal file
Binary file not shown.
BIN
BUILDS/net6.0/Plugins/Commands/CMD_LevelingSystem.dll
Normal file
BIN
BUILDS/net6.0/Plugins/Commands/CMD_LevelingSystem.dll
Normal file
Binary file not shown.
BIN
BUILDS/net6.0/Plugins/Commands/CMD_Utils.dll
Normal file
BIN
BUILDS/net6.0/Plugins/Commands/CMD_Utils.dll
Normal file
Binary file not shown.
BIN
BUILDS/net6.0/Plugins/Commands/MusicCommands.dll
Normal file
BIN
BUILDS/net6.0/Plugins/Commands/MusicCommands.dll
Normal file
Binary file not shown.
BIN
BUILDS/net6.0/Plugins/Events/EVE_LevelingSystem.dll
Normal file
BIN
BUILDS/net6.0/Plugins/Events/EVE_LevelingSystem.dll
Normal file
Binary file not shown.
14
CMD_LevelingSystem/CMD_LevelingSystem.csproj
Normal file
14
CMD_LevelingSystem/CMD_LevelingSystem.csproj
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<TargetFramework>net6.0</TargetFramework>
|
||||||
|
<ImplicitUsings>enable</ImplicitUsings>
|
||||||
|
<Nullable>enable</Nullable>
|
||||||
|
<BaseOutputPath>..\DiscordBot\bin\Debug\net6.0\Data\Plugins\Commands\LevelingSystem</BaseOutputPath>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="..\PluginManager\PluginManager.csproj" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
</Project>
|
||||||
48
CMD_LevelingSystem/Level.cs
Normal file
48
CMD_LevelingSystem/Level.cs
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
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 string Description => "Display tour current level";
|
||||||
|
|
||||||
|
public string Usage => "level";
|
||||||
|
|
||||||
|
public bool canUseDM => false;
|
||||||
|
|
||||||
|
public bool canUseServer => true;
|
||||||
|
|
||||||
|
public bool requireAdmin => false;
|
||||||
|
|
||||||
|
public async void Execute(SocketCommandContext context, SocketMessage message, DiscordSocketClient client, bool isDM)
|
||||||
|
{
|
||||||
|
if (!File.Exists(Config.GetValue<string>("LevelingSystemPath") + $"/{message.Author.Id}.dat"))
|
||||||
|
{
|
||||||
|
await context.Channel.SendMessageAsync("You are now unranked !");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var user = await Functions.ConvertFromJson<User>(Config.GetValue<string>("LevelingSystemPath") + $"/{message.Author.Id}.dat");
|
||||||
|
if (user == null)
|
||||||
|
{
|
||||||
|
await context.Channel.SendMessageAsync("You are now unranked !");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var builder = new EmbedBuilder();
|
||||||
|
var r = new Random();
|
||||||
|
builder.WithColor(r.Next(256), r.Next(256), r.Next(256));
|
||||||
|
builder.AddField("Current Level", user.CurrentLevel, true)
|
||||||
|
.AddField("Current EXP", user.CurrentEXP, true)
|
||||||
|
.AddField("Required Exp", user.RequiredEXPToLevelUp, true);
|
||||||
|
builder.WithTimestamp(DateTimeOffset.Now);
|
||||||
|
await context.Channel.SendMessageAsync(embed: builder.Build());
|
||||||
|
}
|
||||||
|
}
|
||||||
18
CMD_LevelingSystem/User.cs
Normal file
18
CMD_LevelingSystem/User.cs
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
using Discord.WebSocket;
|
||||||
|
|
||||||
|
namespace CMD_LevelingSystem;
|
||||||
|
|
||||||
|
public class DiscordUser
|
||||||
|
{
|
||||||
|
public string Username { get; set; }
|
||||||
|
public ushort DiscordTag { get; set; }
|
||||||
|
public ulong userID { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public class User
|
||||||
|
{
|
||||||
|
public DiscordUser user { get; set; }
|
||||||
|
public int CurrentLevel { get; set; }
|
||||||
|
public long CurrentEXP { get; set; }
|
||||||
|
public long RequiredEXPToLevelUp { get; set; }
|
||||||
|
}
|
||||||
19
CMD_Utils/CMD_Utils.csproj
Normal file
19
CMD_Utils/CMD_Utils.csproj
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<TargetFramework>net6.0</TargetFramework>
|
||||||
|
<BaseOutputPath></BaseOutputPath>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
|
||||||
|
<OutputPath>..\BUILDS\</OutputPath>
|
||||||
|
<ErrorReport>prompt</ErrorReport>
|
||||||
|
<DebugType>none</DebugType>
|
||||||
|
<DebugSymbols>false</DebugSymbols>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="..\PluginManager\PluginManager.csproj" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
</Project>
|
||||||
23
CMD_Utils/Echo.cs
Normal file
23
CMD_Utils/Echo.cs
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
using Discord.Commands;
|
||||||
|
using Discord.WebSocket;
|
||||||
|
using PluginManager.Interfaces;
|
||||||
|
|
||||||
|
internal class Echo : DBCommand
|
||||||
|
{
|
||||||
|
public string Command => "echo";
|
||||||
|
|
||||||
|
public string Description => "Replay with the same message";
|
||||||
|
|
||||||
|
public string Usage => "echo [message]";
|
||||||
|
|
||||||
|
public bool canUseDM => true;
|
||||||
|
public bool canUseServer => true;
|
||||||
|
|
||||||
|
public bool requireAdmin => false;
|
||||||
|
|
||||||
|
public async void Execute(SocketCommandContext context, SocketMessage message, DiscordSocketClient client, bool isDM)
|
||||||
|
{
|
||||||
|
var m = message.Content.Substring(6);
|
||||||
|
await message.Channel.SendMessageAsync(m);
|
||||||
|
}
|
||||||
|
}
|
||||||
30
CMD_Utils/FlipCoin.cs
Normal file
30
CMD_Utils/FlipCoin.cs
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
using Discord.Commands;
|
||||||
|
using Discord.WebSocket;
|
||||||
|
using PluginManager.Interfaces;
|
||||||
|
|
||||||
|
namespace CMD_Utils;
|
||||||
|
|
||||||
|
internal class FlipCoin : DBCommand
|
||||||
|
{
|
||||||
|
public string Command => "flip";
|
||||||
|
|
||||||
|
public string Description => "Flip a coin";
|
||||||
|
|
||||||
|
public string Usage => "flip";
|
||||||
|
|
||||||
|
public bool canUseDM => true;
|
||||||
|
|
||||||
|
public bool canUseServer => true;
|
||||||
|
|
||||||
|
public bool requireAdmin => false;
|
||||||
|
|
||||||
|
public async void Execute(SocketCommandContext context, SocketMessage message, DiscordSocketClient client, bool isDM)
|
||||||
|
{
|
||||||
|
var random = new System.Random();
|
||||||
|
var r = random.Next(1, 3);
|
||||||
|
if (r == 1)
|
||||||
|
await message.Channel.SendMessageAsync("Heads");
|
||||||
|
else
|
||||||
|
await message.Channel.SendMessageAsync("Tails");
|
||||||
|
}
|
||||||
|
}
|
||||||
45
CMD_Utils/Poll.cs
Normal file
45
CMD_Utils/Poll.cs
Normal file
@@ -0,0 +1,45 @@
|
|||||||
|
using System.Collections.Generic;
|
||||||
|
using Discord;
|
||||||
|
using Discord.Commands;
|
||||||
|
using Discord.WebSocket;
|
||||||
|
using PluginManager.Interfaces;
|
||||||
|
using PluginManager.Others;
|
||||||
|
|
||||||
|
namespace CMD_Utils;
|
||||||
|
|
||||||
|
public class Poll : DBCommand
|
||||||
|
{
|
||||||
|
public string Command => "poll";
|
||||||
|
|
||||||
|
public string Description => "Create a poll with options";
|
||||||
|
|
||||||
|
public string Usage => "poll [This-is-question] [This-is-answer-1] [This-is-answer-2] ... ";
|
||||||
|
|
||||||
|
public bool canUseDM => false;
|
||||||
|
|
||||||
|
public bool canUseServer => true;
|
||||||
|
|
||||||
|
public bool requireAdmin => true;
|
||||||
|
|
||||||
|
public async void Execute(SocketCommandContext context, SocketMessage message, DiscordSocketClient client, bool isDM)
|
||||||
|
{
|
||||||
|
if (isDM) return;
|
||||||
|
var question = message.Content.Split(' ')[1].Replace('-', ' ');
|
||||||
|
var answers = Functions.MergeStrings(message.Content.Split(' '), 2).Split(' ');
|
||||||
|
var embedBuilder = new EmbedBuilder();
|
||||||
|
embedBuilder.Title = question;
|
||||||
|
var len = answers.Length;
|
||||||
|
for (var i = 0; i < len; i++) embedBuilder.AddField($"Answer {i + 1}", answers[i].Replace('-', ' '), true);
|
||||||
|
var msg = await context.Channel.SendMessageAsync(embed: embedBuilder.Build());
|
||||||
|
|
||||||
|
var emotes = new List<IEmote>();
|
||||||
|
emotes.Add(Emoji.Parse(":one:"));
|
||||||
|
emotes.Add(Emoji.Parse(":two:"));
|
||||||
|
emotes.Add(Emoji.Parse(":three:"));
|
||||||
|
emotes.Add(Emoji.Parse(":four:"));
|
||||||
|
emotes.Add(Emoji.Parse(":five:"));
|
||||||
|
emotes.Add(Emoji.Parse(":six:"));
|
||||||
|
|
||||||
|
for (var i = 0; i < len; i++) await msg.AddReactionAsync(emotes[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
39
CMD_Utils/Random.cs
Normal file
39
CMD_Utils/Random.cs
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
using Discord.Commands;
|
||||||
|
using Discord.WebSocket;
|
||||||
|
using PluginManager.Interfaces;
|
||||||
|
|
||||||
|
public class Random : DBCommand
|
||||||
|
{
|
||||||
|
public string Command => "random";
|
||||||
|
|
||||||
|
public string Description => "random number between number1 and number2";
|
||||||
|
|
||||||
|
public string Usage => "random [number1] [number2]";
|
||||||
|
|
||||||
|
public bool canUseDM => true;
|
||||||
|
public bool canUseServer => true;
|
||||||
|
public bool requireAdmin => false;
|
||||||
|
|
||||||
|
public async void Execute(SocketCommandContext context, SocketMessage message, DiscordSocketClient client, bool isDM)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var msg = message.Content;
|
||||||
|
var a = int.Parse(msg.Split(' ')[1]);
|
||||||
|
var b = int.Parse(msg.Split(' ')[2]);
|
||||||
|
|
||||||
|
if (a > b)
|
||||||
|
{
|
||||||
|
var temp = a;
|
||||||
|
a = b;
|
||||||
|
b = temp;
|
||||||
|
}
|
||||||
|
|
||||||
|
await message.Channel.SendMessageAsync("Your random generated number is " + new System.Random().Next(a, b));
|
||||||
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
await message.Channel.SendMessageAsync("Invalid numbers or no numbers:\nUsage: " + Usage);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
BIN
DiscordBot.dll
Normal file
BIN
DiscordBot.dll
Normal file
Binary file not shown.
4
DiscordBot/App.config
Normal file
4
DiscordBot/App.config
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
<dependentAssembly>
|
||||||
|
<assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
||||||
|
<bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="4.0.0.0" />
|
||||||
|
</dependentAssembly>
|
||||||
@@ -1,28 +0,0 @@
|
|||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using PluginManager.Interfaces;
|
|
||||||
using PluginManager.Others;
|
|
||||||
using PluginManager.Others.Actions;
|
|
||||||
|
|
||||||
namespace DiscordBot.Bot.Actions;
|
|
||||||
|
|
||||||
public class Clear: ICommandAction
|
|
||||||
{
|
|
||||||
public string ActionName => "clear";
|
|
||||||
public string Description => "Clears the console";
|
|
||||||
public string Usage => "clear";
|
|
||||||
public IEnumerable<InternalActionOption> ListOfOptions => [];
|
|
||||||
|
|
||||||
public InternalActionRunType RunType => InternalActionRunType.ON_CALL;
|
|
||||||
|
|
||||||
public Task Execute(string[] args)
|
|
||||||
{
|
|
||||||
Console.Clear();
|
|
||||||
Console.ForegroundColor = ConsoleColor.Yellow;
|
|
||||||
Console.WriteLine("===== Seth Discord Bot =====");
|
|
||||||
Console.ResetColor();
|
|
||||||
return Task.CompletedTask;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,53 +0,0 @@
|
|||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using PluginManager;
|
|
||||||
using PluginManager.Interfaces;
|
|
||||||
using PluginManager.Others;
|
|
||||||
using PluginManager.Others.Actions;
|
|
||||||
|
|
||||||
namespace DiscordBot.Bot.Actions;
|
|
||||||
|
|
||||||
public class Exit: ICommandAction
|
|
||||||
{
|
|
||||||
public string ActionName => "exit";
|
|
||||||
public string Description => "Exits the bot and saves the config. Use exit help for more info.";
|
|
||||||
public string Usage => "exit <option?>";
|
|
||||||
public IEnumerable<InternalActionOption> ListOfOptions => new List<InternalActionOption>
|
|
||||||
{
|
|
||||||
new InternalActionOption("help", "Displays this message"),
|
|
||||||
new InternalActionOption("force | -f", "Exits the bot without saving the config")
|
|
||||||
};
|
|
||||||
public InternalActionRunType RunType => InternalActionRunType.ON_CALL;
|
|
||||||
|
|
||||||
public async Task Execute(string[] args)
|
|
||||||
{
|
|
||||||
if (args is null || args.Length == 0)
|
|
||||||
{
|
|
||||||
Config.Logger.Log("Exiting...", typeof(ICommandAction), LogType.WARNING);
|
|
||||||
await Config.AppSettings.SaveToFile();
|
|
||||||
Environment.Exit(0);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
switch (args[0])
|
|
||||||
{
|
|
||||||
case "help":
|
|
||||||
Console.WriteLine("Usage : exit [help|force]");
|
|
||||||
Console.WriteLine("help : Displays this message");
|
|
||||||
Console.WriteLine("force | -f : Exits the bot without saving the config");
|
|
||||||
break;
|
|
||||||
|
|
||||||
case "-f":
|
|
||||||
case "force":
|
|
||||||
Config.Logger.Log("Exiting (FORCE)...", typeof(ICommandAction), LogType.WARNING);
|
|
||||||
Environment.Exit(0);
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
Console.WriteLine("Invalid argument !");
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,206 +0,0 @@
|
|||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Threading;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
using DiscordBot.Utilities;
|
|
||||||
|
|
||||||
using PluginManager;
|
|
||||||
using PluginManager.Interfaces;
|
|
||||||
using PluginManager.Loaders;
|
|
||||||
using PluginManager.Online;
|
|
||||||
using PluginManager.Others;
|
|
||||||
|
|
||||||
using Spectre.Console;
|
|
||||||
|
|
||||||
namespace DiscordBot.Bot.Actions.Extra;
|
|
||||||
|
|
||||||
internal static class PluginMethods
|
|
||||||
{
|
|
||||||
internal static async Task List(PluginsManager manager)
|
|
||||||
{
|
|
||||||
var data = await ConsoleUtilities.ExecuteWithProgressBar(manager.GetPluginsList(), "Reading remote database");
|
|
||||||
|
|
||||||
TableData tableData = new(["Name", "Description", "Version", "Is Installed"]);
|
|
||||||
|
|
||||||
var installedPlugins = await ConsoleUtilities.ExecuteWithProgressBar(manager.GetInstalledPlugins(), "Reading local database ");
|
|
||||||
|
|
||||||
foreach (var plugin in data)
|
|
||||||
{
|
|
||||||
bool isInstalled = installedPlugins.Any(p => p.PluginName == plugin.Name);
|
|
||||||
tableData.AddRow([plugin.Name, plugin.Description, plugin.Version.ToString(), isInstalled ? "Yes" : "No"]);
|
|
||||||
}
|
|
||||||
|
|
||||||
tableData.HasRoundBorders = false;
|
|
||||||
tableData.PrintTable();
|
|
||||||
}
|
|
||||||
|
|
||||||
internal static async Task RefreshPlugins(bool quiet)
|
|
||||||
{
|
|
||||||
await Program.internalActionManager.Execute("plugin", "load", quiet ? "-q" : string.Empty);
|
|
||||||
await Program.internalActionManager.Refresh();
|
|
||||||
}
|
|
||||||
|
|
||||||
internal static async Task DownloadPlugin(PluginsManager manager, string pluginName)
|
|
||||||
{
|
|
||||||
var pluginData = await manager.GetPluginDataByName(pluginName);
|
|
||||||
if (pluginData is null)
|
|
||||||
{
|
|
||||||
Console.WriteLine($"Plugin {pluginName} not found. Please check the spelling and try again.");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
var pluginLink = pluginData.DownLoadLink;
|
|
||||||
|
|
||||||
|
|
||||||
await AnsiConsole.Progress()
|
|
||||||
.Columns(new ProgressColumn[]
|
|
||||||
{
|
|
||||||
new TaskDescriptionColumn(), new ProgressBarColumn(), new PercentageColumn()
|
|
||||||
}
|
|
||||||
)
|
|
||||||
.StartAsync(async ctx =>
|
|
||||||
{
|
|
||||||
var downloadTask = ctx.AddTask("Downloading plugin...");
|
|
||||||
|
|
||||||
IProgress<float> progress = new Progress<float>(p => { downloadTask.Value = p; });
|
|
||||||
|
|
||||||
await ServerCom.DownloadFileAsync(pluginLink, $"{Config.AppSettings["PluginFolder"]}/{pluginName}.dll", progress);
|
|
||||||
|
|
||||||
downloadTask.Increment(100);
|
|
||||||
|
|
||||||
ctx.Refresh();
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
if (!pluginData.HasDependencies)
|
|
||||||
{
|
|
||||||
await manager.AppendPluginToDatabase(new PluginManager.Plugin.PluginInfo(pluginName, pluginData.Version, []));
|
|
||||||
Console.WriteLine("Finished installing " + pluginName + " successfully");
|
|
||||||
await RefreshPlugins(false);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
List<Tuple<ProgressTask, IProgress<float>, string, string>> downloadTasks = new();
|
|
||||||
await AnsiConsole.Progress()
|
|
||||||
.Columns(new ProgressColumn[]
|
|
||||||
{
|
|
||||||
new TaskDescriptionColumn(), new ProgressBarColumn(), new PercentageColumn()
|
|
||||||
}
|
|
||||||
)
|
|
||||||
.StartAsync(async ctx =>
|
|
||||||
{
|
|
||||||
|
|
||||||
|
|
||||||
foreach (var dependency in pluginData.Dependencies)
|
|
||||||
{
|
|
||||||
var task = ctx.AddTask($"Downloading {dependency.DownloadLocation}: ");
|
|
||||||
IProgress<float> progress = new Progress<float>(p =>
|
|
||||||
{
|
|
||||||
task.Value = p;
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
task.IsIndeterminate = true;
|
|
||||||
downloadTasks.Add(new Tuple<ProgressTask, IProgress<float>, string, string>(task, progress, dependency.DownloadLink, dependency.DownloadLocation));
|
|
||||||
}
|
|
||||||
|
|
||||||
int maxParallelDownloads = 5;
|
|
||||||
|
|
||||||
if (Config.AppSettings.ContainsKey("MaxParallelDownloads"))
|
|
||||||
maxParallelDownloads = int.Parse(Config.AppSettings["MaxParallelDownloads"]);
|
|
||||||
|
|
||||||
var options = new ParallelOptions()
|
|
||||||
{
|
|
||||||
MaxDegreeOfParallelism = maxParallelDownloads,
|
|
||||||
TaskScheduler = TaskScheduler.Default
|
|
||||||
};
|
|
||||||
|
|
||||||
await Parallel.ForEachAsync(downloadTasks, options, async (tuple, token) =>
|
|
||||||
{
|
|
||||||
tuple.Item1.IsIndeterminate = false;
|
|
||||||
await ServerCom.DownloadFileAsync(tuple.Item3, $"./{tuple.Item4}", tuple.Item2);
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
await manager.AppendPluginToDatabase(new PluginManager.Plugin.PluginInfo(pluginName, pluginData.Version, pluginData.Dependencies.Select(sep => sep.DownloadLocation).ToList()));
|
|
||||||
await RefreshPlugins(false);
|
|
||||||
}
|
|
||||||
|
|
||||||
internal static async Task<bool> LoadPlugins(string[] args)
|
|
||||||
{
|
|
||||||
var loader = new PluginLoader(Config.DiscordBot.Client);
|
|
||||||
if (args.Length == 2 && args[1] == "-q")
|
|
||||||
{
|
|
||||||
await loader.LoadPlugins();
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
var cc = Console.ForegroundColor;
|
|
||||||
loader.OnCommandLoaded += (data) =>
|
|
||||||
{
|
|
||||||
if (data.IsSuccess)
|
|
||||||
{
|
|
||||||
Config.Logger.Log("Successfully loaded command : " + data.PluginName, typeof(ICommandAction),
|
|
||||||
LogType.INFO
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
else
|
|
||||||
{
|
|
||||||
Config.Logger.Log("Failed to load command : " + data.PluginName + " because " + data.ErrorMessage,
|
|
||||||
typeof(ICommandAction), LogType.ERROR
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
Console.ForegroundColor = cc;
|
|
||||||
};
|
|
||||||
loader.OnEventLoaded += (data) =>
|
|
||||||
{
|
|
||||||
if (data.IsSuccess)
|
|
||||||
{
|
|
||||||
Config.Logger.Log("Successfully loaded event : " + data.PluginName, typeof(ICommandAction),
|
|
||||||
LogType.INFO
|
|
||||||
);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
Config.Logger.Log("Failed to load event : " + data.PluginName + " because " + data.ErrorMessage,
|
|
||||||
typeof(ICommandAction), LogType.ERROR
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
Console.ForegroundColor = cc;
|
|
||||||
};
|
|
||||||
|
|
||||||
loader.OnSlashCommandLoaded += (data) =>
|
|
||||||
{
|
|
||||||
if (data.IsSuccess)
|
|
||||||
{
|
|
||||||
Config.Logger.Log("Successfully loaded slash command : " + data.PluginName, typeof(ICommandAction),
|
|
||||||
LogType.INFO
|
|
||||||
);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
Config.Logger.Log("Failed to load slash command : " + data.PluginName + " because " + data.ErrorMessage,
|
|
||||||
typeof(ICommandAction), LogType.ERROR
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
Console.ForegroundColor = cc;
|
|
||||||
};
|
|
||||||
|
|
||||||
await loader.LoadPlugins();
|
|
||||||
Console.ForegroundColor = cc;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,45 +0,0 @@
|
|||||||
using System.Linq;
|
|
||||||
using PluginManager;
|
|
||||||
using PluginManager.Loaders;
|
|
||||||
|
|
||||||
namespace DiscordBot.Bot.Actions.Extra;
|
|
||||||
|
|
||||||
internal static class SettingsConfigExtra
|
|
||||||
{
|
|
||||||
|
|
||||||
internal static void SetSettings(string key, params string[] value)
|
|
||||||
{
|
|
||||||
if (key is null) return;
|
|
||||||
|
|
||||||
if (value is null) return;
|
|
||||||
|
|
||||||
if (!Config.AppSettings.ContainsKey(key))
|
|
||||||
return;
|
|
||||||
|
|
||||||
Config.AppSettings[key] = string.Join(' ', value);
|
|
||||||
// Config.AppSettings.SaveToFile().Wait();
|
|
||||||
}
|
|
||||||
|
|
||||||
internal static void RemoveSettings(string key)
|
|
||||||
{
|
|
||||||
if (key is null) return;
|
|
||||||
|
|
||||||
if (!Config.AppSettings.ContainsKey(key))
|
|
||||||
return;
|
|
||||||
|
|
||||||
Config.AppSettings.Remove(key);
|
|
||||||
}
|
|
||||||
|
|
||||||
internal static void AddSettings(string key, params string[] value)
|
|
||||||
{
|
|
||||||
if (key is null) return;
|
|
||||||
|
|
||||||
if (value is null) return;
|
|
||||||
|
|
||||||
if (Config.AppSettings.ContainsKey(key))
|
|
||||||
return;
|
|
||||||
|
|
||||||
Config.AppSettings.Add(key, string.Join(' ', value));
|
|
||||||
// Config.AppSettings.SaveToFile().Wait();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,84 +0,0 @@
|
|||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using DiscordBot.Utilities;
|
|
||||||
using PluginManager.Interfaces;
|
|
||||||
using PluginManager.Others;
|
|
||||||
using PluginManager.Others.Actions;
|
|
||||||
using Spectre.Console;
|
|
||||||
|
|
||||||
namespace DiscordBot.Bot.Actions;
|
|
||||||
|
|
||||||
public class Help: ICommandAction
|
|
||||||
{
|
|
||||||
public string ActionName => "help";
|
|
||||||
|
|
||||||
public string Description => "Shows the list of commands and their usage";
|
|
||||||
|
|
||||||
public string Usage => "help <command?>";
|
|
||||||
|
|
||||||
public IEnumerable<InternalActionOption> ListOfOptions => [];
|
|
||||||
|
|
||||||
public InternalActionRunType RunType => InternalActionRunType.ON_CALL;
|
|
||||||
|
|
||||||
public async Task Execute(string[] args)
|
|
||||||
{
|
|
||||||
TableData tableData = new TableData();
|
|
||||||
if (args == null || args.Length == 0)
|
|
||||||
{
|
|
||||||
|
|
||||||
tableData.Columns = ["Command", "Usage", "Description", "Options"];
|
|
||||||
|
|
||||||
foreach (var a in Program.internalActionManager.Actions)
|
|
||||||
{
|
|
||||||
Markup actionName = new Markup($"[bold]{a.Key}[/]");
|
|
||||||
Markup usage = new Markup($"[italic]{a.Value.Usage}[/]");
|
|
||||||
Markup description = new Markup($"[dim]{a.Value.Description}[/]");
|
|
||||||
|
|
||||||
if (a.Value.ListOfOptions.Any())
|
|
||||||
{
|
|
||||||
|
|
||||||
var optionsTable = new Table();
|
|
||||||
optionsTable.AddColumn("Option");
|
|
||||||
optionsTable.AddColumn("Description");
|
|
||||||
|
|
||||||
foreach (var option in a.Value.ListOfOptions)
|
|
||||||
{
|
|
||||||
|
|
||||||
optionsTable.AddRow(option.OptionName, option.OptionDescription);
|
|
||||||
}
|
|
||||||
|
|
||||||
tableData.AddRow([actionName, usage, description, optionsTable]);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
tableData.AddRow([actionName, usage, description]);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
// render the table
|
|
||||||
tableData.HasRoundBorders = true;
|
|
||||||
tableData.DisplayLinesBetweenRows = true;
|
|
||||||
tableData.PrintTable();
|
|
||||||
|
|
||||||
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!Program.internalActionManager.Actions.ContainsKey(args[0]))
|
|
||||||
{
|
|
||||||
Console.WriteLine("Command not found");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
var action = Program.internalActionManager.Actions[args[0]];
|
|
||||||
tableData.Columns = ["Command", "Usage", "Description"];
|
|
||||||
tableData.AddRow([action.ActionName, action.Usage, action.Description]);
|
|
||||||
|
|
||||||
|
|
||||||
tableData.PrintTable();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,95 +0,0 @@
|
|||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using DiscordBot.Bot.Actions.Extra;
|
|
||||||
using PluginManager;
|
|
||||||
using PluginManager.Interfaces;
|
|
||||||
using PluginManager.Others;
|
|
||||||
using PluginManager.Others.Actions;
|
|
||||||
|
|
||||||
namespace DiscordBot.Bot.Actions;
|
|
||||||
|
|
||||||
public class Plugin: ICommandAction
|
|
||||||
{
|
|
||||||
private bool pluginsLoaded;
|
|
||||||
public string ActionName => "plugin";
|
|
||||||
public string Description => "Manages plugins. Use plugin help for more info.";
|
|
||||||
public string Usage => "plugin <option!>";
|
|
||||||
|
|
||||||
public IEnumerable<InternalActionOption> ListOfOptions => new List<InternalActionOption>
|
|
||||||
{
|
|
||||||
new InternalActionOption("help", "Displays this message"),
|
|
||||||
new InternalActionOption("list", "Lists all plugins"),
|
|
||||||
new InternalActionOption("load", "Loads all plugins"),
|
|
||||||
new InternalActionOption("install", "Installs a plugin"),
|
|
||||||
new InternalActionOption("refresh", "Refreshes the plugin list"),
|
|
||||||
new InternalActionOption("uninstall", "Uninstalls a plugin")
|
|
||||||
};
|
|
||||||
|
|
||||||
public InternalActionRunType RunType => InternalActionRunType.ON_CALL;
|
|
||||||
|
|
||||||
public async Task Execute(string[] args)
|
|
||||||
{
|
|
||||||
if (args is null || args.Length == 0 || args[0] == "help")
|
|
||||||
{
|
|
||||||
Console.WriteLine("Usage : plugin [help|list|load|install]");
|
|
||||||
Console.WriteLine("help : Displays this message");
|
|
||||||
Console.WriteLine("list : Lists all plugins");
|
|
||||||
Console.WriteLine("load : Loads all plugins");
|
|
||||||
Console.WriteLine("install : Installs a plugin");
|
|
||||||
Console.WriteLine("refresh : Refreshes the plugin list");
|
|
||||||
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
switch (args[0])
|
|
||||||
{
|
|
||||||
case "refresh":
|
|
||||||
await PluginMethods.RefreshPlugins(true);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case "uninstall":
|
|
||||||
string plugName = string.Join(' ', args, 1, args.Length-1);
|
|
||||||
bool result = await Config.PluginsManager.MarkPluginToUninstall(plugName);
|
|
||||||
if(result)
|
|
||||||
Console.WriteLine($"Marked to uninstall plugin {plugName}. Please restart the bot");
|
|
||||||
break;
|
|
||||||
|
|
||||||
case "list":
|
|
||||||
await PluginMethods.List(Config.PluginsManager);
|
|
||||||
break;
|
|
||||||
case "load":
|
|
||||||
if (pluginsLoaded)
|
|
||||||
{
|
|
||||||
Config.Logger.Log("Plugins already loaded", typeof(ICommandAction), LogType.WARNING);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (Config.DiscordBot is null)
|
|
||||||
{
|
|
||||||
Config.Logger.Log("DiscordBot is null", typeof(ICommandAction), LogType.WARNING);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
pluginsLoaded = await PluginMethods.LoadPlugins(args);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case "install":
|
|
||||||
var pluginName = string.Join(' ', args, 1, args.Length - 1);
|
|
||||||
if (string.IsNullOrEmpty(pluginName) || pluginName.Length < 2)
|
|
||||||
{
|
|
||||||
Console.WriteLine("Please specify a plugin name");
|
|
||||||
Console.Write("Plugin name : ");
|
|
||||||
pluginName = Console.ReadLine();
|
|
||||||
if (string.IsNullOrEmpty(pluginName) || pluginName.Length < 2)
|
|
||||||
{
|
|
||||||
Console.WriteLine("Invalid plugin name");
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
await PluginMethods.DownloadPlugin(Config.PluginsManager, pluginName);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,76 +0,0 @@
|
|||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using DiscordBot.Bot.Actions.Extra;
|
|
||||||
using PluginManager;
|
|
||||||
using PluginManager.Interfaces;
|
|
||||||
using PluginManager.Others;
|
|
||||||
using PluginManager.Others.Actions;
|
|
||||||
|
|
||||||
namespace DiscordBot.Bot.Actions;
|
|
||||||
|
|
||||||
public class SettingsConfig: ICommandAction
|
|
||||||
{
|
|
||||||
public string ActionName => "config";
|
|
||||||
public string Description => "Change the settings of the bot";
|
|
||||||
public string Usage => "config <options!>";
|
|
||||||
public IEnumerable<InternalActionOption> ListOfOptions => new List<InternalActionOption>
|
|
||||||
{
|
|
||||||
new InternalActionOption("help", "Displays this message"),
|
|
||||||
new InternalActionOption("set", "Set a setting"),
|
|
||||||
new InternalActionOption("remove", "Remove a setting"),
|
|
||||||
new InternalActionOption("add", "Add a setting")
|
|
||||||
};
|
|
||||||
public InternalActionRunType RunType => InternalActionRunType.ON_CALL;
|
|
||||||
public Task Execute(string[] args)
|
|
||||||
{
|
|
||||||
if (args is null)
|
|
||||||
{
|
|
||||||
foreach (var settings in Config.AppSettings)
|
|
||||||
Console.WriteLine(settings.Key + ": " + settings.Value);
|
|
||||||
|
|
||||||
return Task.CompletedTask;
|
|
||||||
}
|
|
||||||
|
|
||||||
switch (args[0])
|
|
||||||
{
|
|
||||||
case "-s":
|
|
||||||
case "set":
|
|
||||||
if (args.Length < 3)
|
|
||||||
return Task.CompletedTask;
|
|
||||||
SettingsConfigExtra.SetSettings(args[1], args[2..]);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case "-r":
|
|
||||||
case "remove":
|
|
||||||
if (args.Length < 2)
|
|
||||||
return Task.CompletedTask;
|
|
||||||
SettingsConfigExtra.RemoveSettings(args[1]);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case "-a":
|
|
||||||
case "add":
|
|
||||||
if (args.Length < 3)
|
|
||||||
return Task.CompletedTask;
|
|
||||||
SettingsConfigExtra.AddSettings(args[1], args[2..]);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case "-h":
|
|
||||||
case "-help":
|
|
||||||
Console.WriteLine("Options:");
|
|
||||||
Console.WriteLine("-s <settingName> <newValue>: Set a setting");
|
|
||||||
Console.WriteLine("-r <settingName>: Remove a setting");
|
|
||||||
Console.WriteLine("-a <settingName> <newValue>: Add a setting");
|
|
||||||
Console.WriteLine("-h: Show this help message");
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
Console.WriteLine("Invalid option");
|
|
||||||
return Task.CompletedTask;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
return Task.CompletedTask;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,90 +0,0 @@
|
|||||||
using System.Collections.Generic;
|
|
||||||
using Discord;
|
|
||||||
using PluginManager;
|
|
||||||
using PluginManager.Interfaces;
|
|
||||||
using PluginManager.Loaders;
|
|
||||||
using PluginManager.Others;
|
|
||||||
|
|
||||||
namespace DiscordBot.Bot.Commands;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// The help command
|
|
||||||
/// </summary>
|
|
||||||
internal class Help: DBCommand
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Command name
|
|
||||||
/// </summary>
|
|
||||||
public string Command => "help";
|
|
||||||
|
|
||||||
public List<string> Aliases => null;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Command Description
|
|
||||||
/// </summary>
|
|
||||||
public string Description => "This command allows you to check all loaded commands";
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Command usage
|
|
||||||
/// </summary>
|
|
||||||
public string Usage => "help <command>";
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Check if the command require administrator to be executed
|
|
||||||
/// </summary>
|
|
||||||
public bool requireAdmin => false;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// The main body of the command
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="context">The command context</param>
|
|
||||||
public void ExecuteServer(DbCommandExecutingArguments args)
|
|
||||||
{
|
|
||||||
if (args.arguments is not null)
|
|
||||||
{
|
|
||||||
var e = GenerateHelpCommand(args.arguments[0]);
|
|
||||||
if (e is null)
|
|
||||||
args.context.Channel.SendMessageAsync("Unknown Command " + args.arguments[0]);
|
|
||||||
else
|
|
||||||
args.context.Channel.SendMessageAsync(embed: e.Build());
|
|
||||||
|
|
||||||
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
var embedBuilder = new EmbedBuilder();
|
|
||||||
|
|
||||||
var adminCommands = "";
|
|
||||||
var normalCommands = "";
|
|
||||||
|
|
||||||
foreach (var cmd in PluginLoader.Commands)
|
|
||||||
if (cmd.requireAdmin)
|
|
||||||
adminCommands += cmd.Command + " ";
|
|
||||||
else
|
|
||||||
normalCommands += cmd.Command + " ";
|
|
||||||
|
|
||||||
|
|
||||||
if (adminCommands.Length > 0)
|
|
||||||
embedBuilder.AddField("Admin Commands", adminCommands);
|
|
||||||
if (normalCommands.Length > 0)
|
|
||||||
embedBuilder.AddField("Normal Commands", normalCommands);
|
|
||||||
args.context.Channel.SendMessageAsync(embed: embedBuilder.Build());
|
|
||||||
}
|
|
||||||
|
|
||||||
private EmbedBuilder GenerateHelpCommand(string command)
|
|
||||||
{
|
|
||||||
var embedBuilder = new EmbedBuilder();
|
|
||||||
var cmd = PluginLoader.Commands.Find(p => p.Command == command ||
|
|
||||||
p.Aliases is not null && p.Aliases.Contains(command)
|
|
||||||
);
|
|
||||||
if (cmd == null) return null;
|
|
||||||
|
|
||||||
embedBuilder.AddField("Usage", Config.AppSettings["prefix"] + cmd.Usage);
|
|
||||||
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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,59 +0,0 @@
|
|||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using Discord;
|
|
||||||
using Discord.WebSocket;
|
|
||||||
using PluginManager.Interfaces;
|
|
||||||
using PluginManager.Loaders;
|
|
||||||
using PluginManager.Others;
|
|
||||||
|
|
||||||
namespace DiscordBot.Bot.Commands.SlashCommands;
|
|
||||||
|
|
||||||
public class Help: DBSlashCommand
|
|
||||||
{
|
|
||||||
public string Name => "help";
|
|
||||||
public string Description => "This command allows you to check all loaded commands";
|
|
||||||
public bool canUseDM => true;
|
|
||||||
|
|
||||||
public bool HasInteraction => false;
|
|
||||||
|
|
||||||
public List<SlashCommandOptionBuilder> Options =>
|
|
||||||
new()
|
|
||||||
{
|
|
||||||
new SlashCommandOptionBuilder()
|
|
||||||
.WithName("command")
|
|
||||||
.WithDescription("The command you want to get help for")
|
|
||||||
.WithRequired(false)
|
|
||||||
.WithType(ApplicationCommandOptionType.String)
|
|
||||||
};
|
|
||||||
|
|
||||||
public async void ExecuteServer(SocketSlashCommand context)
|
|
||||||
{
|
|
||||||
EmbedBuilder embedBuilder = new();
|
|
||||||
|
|
||||||
embedBuilder.WithTitle("Help Command");
|
|
||||||
embedBuilder.WithColor(Functions.RandomColor);
|
|
||||||
var slashCommands = PluginLoader.SlashCommands;
|
|
||||||
var options = context.Data.Options;
|
|
||||||
|
|
||||||
//Console.WriteLine("Options: " + options.Count);
|
|
||||||
if (options is null || options.Count == 0)
|
|
||||||
foreach (var slashCommand in slashCommands)
|
|
||||||
embedBuilder.AddField(slashCommand.Name, slashCommand.Description);
|
|
||||||
|
|
||||||
if (options.Count > 0)
|
|
||||||
{
|
|
||||||
var commandName = options.First().Value;
|
|
||||||
var slashCommand = slashCommands.FirstOrDefault(x => x.Name.TrimEnd() == commandName.ToString());
|
|
||||||
if (slashCommand is null)
|
|
||||||
{
|
|
||||||
await context.RespondAsync("Unknown Command " + commandName);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
embedBuilder.AddField("DM Usable:", slashCommand.canUseDM, true)
|
|
||||||
.WithDescription(slashCommand.Description);
|
|
||||||
}
|
|
||||||
|
|
||||||
await context.RespondAsync(embed: embedBuilder.Build());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
100
DiscordBot/Discord/Commands/Help.cs
Normal file
100
DiscordBot/Discord/Commands/Help.cs
Normal file
@@ -0,0 +1,100 @@
|
|||||||
|
using Discord;
|
||||||
|
using Discord.Commands;
|
||||||
|
using Discord.WebSocket;
|
||||||
|
using PluginManager.Interfaces;
|
||||||
|
using PluginManager.Loaders;
|
||||||
|
using PluginManager.Others;
|
||||||
|
|
||||||
|
namespace DiscordBot.Discord.Commands;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// The help command
|
||||||
|
/// </summary>
|
||||||
|
internal class Help : DBCommand
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Command name
|
||||||
|
/// </summary>
|
||||||
|
public string Command => "help";
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Command Description
|
||||||
|
/// </summary>
|
||||||
|
public string Description => "This command allows you to check all loadded commands";
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Command usage
|
||||||
|
/// </summary>
|
||||||
|
public string Usage => "help";
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Check if the command can be used <inheritdoca DM <see cref="IChannel" />/>
|
||||||
|
/// </summary>
|
||||||
|
public bool canUseDM => true;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Check if the command can be used in a server
|
||||||
|
/// </summary>
|
||||||
|
public bool canUseServer => true;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Check if the command require administrator to be executed
|
||||||
|
/// </summary>
|
||||||
|
public bool requireAdmin => false;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// The main body of the command
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="context">The command context</param>
|
||||||
|
/// <param name="message">The command message</param>
|
||||||
|
/// <param name="client">The discord bot client</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)
|
||||||
|
{
|
||||||
|
var args = Functions.GetArguments(message);
|
||||||
|
if (args.Count != 0)
|
||||||
|
{
|
||||||
|
foreach (var item in args)
|
||||||
|
{
|
||||||
|
var e = GenerateHelpCommand(item);
|
||||||
|
if (e != null)
|
||||||
|
context.Channel.SendMessageAsync(embed: e.Build());
|
||||||
|
else
|
||||||
|
context.Channel.SendMessageAsync("Unknown Command " + item);
|
||||||
|
}
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var embedBuilder = new EmbedBuilder();
|
||||||
|
|
||||||
|
var adminCommands = "";
|
||||||
|
var normalCommands = "";
|
||||||
|
var DMCommands = "";
|
||||||
|
|
||||||
|
foreach (var cmd in PluginLoader.Commands!)
|
||||||
|
{
|
||||||
|
if (cmd.canUseDM) DMCommands += cmd.Command + " ";
|
||||||
|
if (cmd.requireAdmin)
|
||||||
|
adminCommands += cmd.Command + " ";
|
||||||
|
else if (cmd.canUseServer) normalCommands += cmd.Command + " ";
|
||||||
|
}
|
||||||
|
|
||||||
|
embedBuilder.AddField("Admin Commands", adminCommands);
|
||||||
|
embedBuilder.AddField("Normal Commands", normalCommands);
|
||||||
|
embedBuilder.AddField("DM Commands", DMCommands);
|
||||||
|
context.Channel.SendMessageAsync(embed: embedBuilder.Build());
|
||||||
|
}
|
||||||
|
|
||||||
|
private EmbedBuilder GenerateHelpCommand(string command)
|
||||||
|
{
|
||||||
|
var embedBuilder = new EmbedBuilder();
|
||||||
|
var cmd = PluginLoader.Commands.Find(p => p.Command == command);
|
||||||
|
if (cmd == null) return null;
|
||||||
|
|
||||||
|
embedBuilder.AddField("Usage", cmd.Usage);
|
||||||
|
embedBuilder.AddField("Description", cmd.Description);
|
||||||
|
|
||||||
|
return embedBuilder;
|
||||||
|
}
|
||||||
|
}
|
||||||
113
DiscordBot/Discord/Commands/Restart.cs
Normal file
113
DiscordBot/Discord/Commands/Restart.cs
Normal file
@@ -0,0 +1,113 @@
|
|||||||
|
using System;
|
||||||
|
using System.Diagnostics;
|
||||||
|
using Discord.WebSocket;
|
||||||
|
using PluginManager.Interfaces;
|
||||||
|
using PluginManager.Others;
|
||||||
|
using PluginManager.Others.Permissions;
|
||||||
|
using DiscordLibCommands = Discord.Commands;
|
||||||
|
using DiscordLib = Discord;
|
||||||
|
using OperatingSystem = PluginManager.Others.OperatingSystem;
|
||||||
|
|
||||||
|
namespace DiscordBot.Discord.Commands;
|
||||||
|
|
||||||
|
internal class Restart : DBCommand
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Command name
|
||||||
|
/// </summary>
|
||||||
|
public string Command => "restart";
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Command Description
|
||||||
|
/// </summary>
|
||||||
|
public string Description => "Restart the bot";
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Command usage
|
||||||
|
/// </summary>
|
||||||
|
public string Usage => "restart [-p | -c | -args | -cmd] <args>";
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Check if the command can be used <inheritdoca DM <see cref="IChannel" />/>
|
||||||
|
/// </summary>
|
||||||
|
public bool canUseDM => false;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Check if the command can be used in a server
|
||||||
|
/// </summary>
|
||||||
|
public bool canUseServer => true;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Check if the command require administrator to be executed
|
||||||
|
/// </summary>
|
||||||
|
public bool requireAdmin => false;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// The main body of the command
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="context">The command context</param>
|
||||||
|
/// <param name="message">The command message</param>
|
||||||
|
/// <param name="client">The discord bot client</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)
|
||||||
|
{
|
||||||
|
if (!(message.Author as SocketGuildUser).hasPermission(DiscordLib.GuildPermission.Administrator)) return;
|
||||||
|
var args = Functions.GetArguments(message);
|
||||||
|
var OS = Functions.GetOperatingSystem();
|
||||||
|
if (args.Count == 0)
|
||||||
|
{
|
||||||
|
switch (OS)
|
||||||
|
{
|
||||||
|
case OperatingSystem.WINDOWS:
|
||||||
|
Process.Start("./DiscordBot.exe");
|
||||||
|
break;
|
||||||
|
case OperatingSystem.LINUX:
|
||||||
|
case OperatingSystem.MAC_OS:
|
||||||
|
Process.Start("./DiscordBot");
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (args[0])
|
||||||
|
{
|
||||||
|
case "-p":
|
||||||
|
case "-poweroff":
|
||||||
|
case "-c":
|
||||||
|
case "-close":
|
||||||
|
Environment.Exit(0);
|
||||||
|
break;
|
||||||
|
case "-cmd":
|
||||||
|
case "-args":
|
||||||
|
var cmd = "--args";
|
||||||
|
|
||||||
|
if (args.Count > 1)
|
||||||
|
for (var i = 1; i < args.Count; i++)
|
||||||
|
cmd += $" {args[i]}";
|
||||||
|
|
||||||
|
|
||||||
|
switch (OS)
|
||||||
|
{
|
||||||
|
case OperatingSystem.WINDOWS:
|
||||||
|
Functions.WriteLogFile("Restarting the bot with the following arguments: \"" + cmd + "\"");
|
||||||
|
Process.Start("./DiscordBot.exe", cmd);
|
||||||
|
break;
|
||||||
|
case OperatingSystem.LINUX:
|
||||||
|
//case PluginManager.Others.OperatingSystem.MAC_OS: ?? - not tested
|
||||||
|
Process.Start("./DiscordBot", cmd);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Environment.Exit(0);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
await context.Channel.SendMessageAsync("Invalid argument. Use `help restart` to see the usage.");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
97
DiscordBot/Discord/Commands/Settings.cs
Normal file
97
DiscordBot/Discord/Commands/Settings.cs
Normal file
@@ -0,0 +1,97 @@
|
|||||||
|
using System;
|
||||||
|
using Discord;
|
||||||
|
using Discord.Commands;
|
||||||
|
using Discord.WebSocket;
|
||||||
|
using PluginManager;
|
||||||
|
using PluginManager.Interfaces;
|
||||||
|
|
||||||
|
namespace DiscordBot.Discord.Commands;
|
||||||
|
|
||||||
|
internal class Settings : DBCommand
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Command name
|
||||||
|
/// </summary>
|
||||||
|
public string Command => "set";
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Command Description
|
||||||
|
/// </summary>
|
||||||
|
public string Description => "This command allows you change all settings. Use \"set help\" to show details";
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Command usage
|
||||||
|
/// </summary>
|
||||||
|
public string Usage => "set [keyword] [new Value]";
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Check if the command can be used <inheritdoca DM <see cref="IChannel" />/>
|
||||||
|
/// </summary>
|
||||||
|
public bool canUseDM => true;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Check if the command can be used in a server
|
||||||
|
/// </summary>
|
||||||
|
public bool canUseServer => true;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Check if the command require administrator to be executed
|
||||||
|
/// </summary>
|
||||||
|
public bool requireAdmin => true;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// The main body of the command
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="context">The command context</param>
|
||||||
|
/// <param name="message">The command message</param>
|
||||||
|
/// <param name="client">The discord bot client</param>
|
||||||
|
/// <param name="isDM">True if the message was sent from a DM channel, false otherwise</param>
|
||||||
|
public async void Execute(SocketCommandContext context, SocketMessage message, DiscordSocketClient client, bool isDM)
|
||||||
|
{
|
||||||
|
var channel = message.Channel;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var content = message.Content;
|
||||||
|
var data = content.Split(' ');
|
||||||
|
var keyword = data[1];
|
||||||
|
if (keyword.ToLower() == "help")
|
||||||
|
{
|
||||||
|
await channel.SendMessageAsync("set token [new value] -- set the value of the new token (require restart)");
|
||||||
|
await channel.SendMessageAsync("set prefix [new value] -- set the value of the new preifx (require restart)");
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (keyword.ToLower())
|
||||||
|
{
|
||||||
|
case "token":
|
||||||
|
if (data.Length != 3)
|
||||||
|
{
|
||||||
|
await channel.SendMessageAsync("Invalid token !");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Config.SetValue("token", data[2]);
|
||||||
|
break;
|
||||||
|
case "prefix":
|
||||||
|
if (data.Length != 3)
|
||||||
|
{
|
||||||
|
await channel.SendMessageAsync("Invalid token !");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Config.SetValue("token", data[2]);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
await channel.SendMessageAsync("Restart required ...");
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Console.WriteLine(ex.Message);
|
||||||
|
await channel.SendMessageAsync("Unknown usage to this command !\nUsage: " + Usage);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
149
DiscordBot/Discord/Core/Boot.cs
Normal file
149
DiscordBot/Discord/Core/Boot.cs
Normal file
@@ -0,0 +1,149 @@
|
|||||||
|
using System;
|
||||||
|
using System.Threading;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using Discord;
|
||||||
|
using Discord.Commands;
|
||||||
|
using Discord.WebSocket;
|
||||||
|
using PluginManager;
|
||||||
|
using static PluginManager.Others.Functions;
|
||||||
|
|
||||||
|
namespace DiscordBot.Discord.Core;
|
||||||
|
|
||||||
|
internal class Boot
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// The bot prefix
|
||||||
|
/// </summary>
|
||||||
|
public readonly string botPrefix;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// The bot token
|
||||||
|
/// </summary>
|
||||||
|
public readonly string botToken;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// The bot client
|
||||||
|
/// </summary>
|
||||||
|
public DiscordSocketClient client;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// The bot command handler
|
||||||
|
/// </summary>
|
||||||
|
private CommandHandler commandServiceHandler;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// The command service
|
||||||
|
/// </summary>
|
||||||
|
private CommandService service;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// The main Boot constructor
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="botToken">The bot token</param>
|
||||||
|
/// <param name="botPrefix">The bot prefix</param>
|
||||||
|
public Boot(string botToken, string botPrefix)
|
||||||
|
{
|
||||||
|
this.botPrefix = botPrefix;
|
||||||
|
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>
|
||||||
|
/// The start method for the bot. This method is used to load the bot
|
||||||
|
/// </summary>
|
||||||
|
/// <returns>Task</returns>
|
||||||
|
public async Task Awake()
|
||||||
|
{
|
||||||
|
client = new DiscordSocketClient();
|
||||||
|
service = new CommandService();
|
||||||
|
|
||||||
|
CommonTasks();
|
||||||
|
|
||||||
|
await client.LoginAsync(TokenType.Bot, botToken);
|
||||||
|
await client.StartAsync();
|
||||||
|
|
||||||
|
commandServiceHandler = new CommandHandler(client, service, botPrefix);
|
||||||
|
await commandServiceHandler.InstallCommandsAsync();
|
||||||
|
|
||||||
|
await Task.Delay(2000);
|
||||||
|
while (!isReady) ;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void CommonTasks()
|
||||||
|
{
|
||||||
|
if (client == null) return;
|
||||||
|
client.LoggedOut += Client_LoggedOut;
|
||||||
|
client.Log += Log;
|
||||||
|
client.LoggedIn += LoggedIn;
|
||||||
|
client.Ready += Ready;
|
||||||
|
}
|
||||||
|
|
||||||
|
private Task Client_LoggedOut()
|
||||||
|
{
|
||||||
|
WriteLogFile("Successfully Logged Out");
|
||||||
|
Log(new LogMessage(LogSeverity.Info, "Boot", "Successfully logged out from discord !"));
|
||||||
|
return Task.CompletedTask;
|
||||||
|
}
|
||||||
|
|
||||||
|
private Task Ready()
|
||||||
|
{
|
||||||
|
Console.Title = "ONLINE";
|
||||||
|
isReady = true;
|
||||||
|
|
||||||
|
new Thread(() =>
|
||||||
|
{
|
||||||
|
while (true)
|
||||||
|
{
|
||||||
|
Config.SaveConfig();
|
||||||
|
Thread.Sleep(10000);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
).Start();
|
||||||
|
|
||||||
|
return Task.CompletedTask;
|
||||||
|
}
|
||||||
|
|
||||||
|
private Task LoggedIn()
|
||||||
|
{
|
||||||
|
Console.Title = "CONNECTED";
|
||||||
|
WriteLogFile("The bot has been logged in at " + DateTime.Now.ToShortDateString() + " (" +
|
||||||
|
DateTime.Now.ToShortTimeString() + ")"
|
||||||
|
);
|
||||||
|
return Task.CompletedTask;
|
||||||
|
}
|
||||||
|
|
||||||
|
private Task Log(LogMessage message)
|
||||||
|
{
|
||||||
|
switch (message.Severity)
|
||||||
|
{
|
||||||
|
case LogSeverity.Error:
|
||||||
|
case LogSeverity.Critical:
|
||||||
|
WriteErrFile(message.Message);
|
||||||
|
|
||||||
|
Console.ForegroundColor = ConsoleColor.Red;
|
||||||
|
Console.WriteLine("[ERROR] " + message.Message);
|
||||||
|
Console.ForegroundColor = ConsoleColor.White;
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case LogSeverity.Info:
|
||||||
|
case LogSeverity.Debug:
|
||||||
|
WriteLogFile(message.Message);
|
||||||
|
|
||||||
|
Console.ForegroundColor = ConsoleColor.Cyan;
|
||||||
|
Console.WriteLine("[INFO] " + message.Message);
|
||||||
|
Console.ForegroundColor = ConsoleColor.White;
|
||||||
|
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return Task.CompletedTask;
|
||||||
|
}
|
||||||
|
}
|
||||||
131
DiscordBot/Discord/Core/CommandHandler.cs
Normal file
131
DiscordBot/Discord/Core/CommandHandler.cs
Normal file
@@ -0,0 +1,131 @@
|
|||||||
|
using System.Linq;
|
||||||
|
using System.Reflection;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using Discord.Commands;
|
||||||
|
using Discord.WebSocket;
|
||||||
|
using PluginManager.Loaders;
|
||||||
|
using PluginManager.Others;
|
||||||
|
using PluginManager.Others.Permissions;
|
||||||
|
|
||||||
|
namespace DiscordBot.Discord.Core;
|
||||||
|
|
||||||
|
internal class CommandHandler
|
||||||
|
{
|
||||||
|
private readonly string botPrefix;
|
||||||
|
private readonly DiscordSocketClient client;
|
||||||
|
private readonly CommandService commandService;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Command handler constructor
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="client">The discord bot client</param>
|
||||||
|
/// <param name="commandService">The discord bot command service</param>
|
||||||
|
/// <param name="botPrefix">The prefix to watch for</param>
|
||||||
|
public CommandHandler(DiscordSocketClient client, CommandService commandService, string botPrefix)
|
||||||
|
{
|
||||||
|
this.client = client;
|
||||||
|
this.commandService = commandService;
|
||||||
|
this.botPrefix = botPrefix;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// The method to initialize all commands
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
public async Task InstallCommandsAsync()
|
||||||
|
{
|
||||||
|
client.MessageReceived += MessageHandler;
|
||||||
|
await commandService.AddModulesAsync(Assembly.GetEntryAssembly(), null);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// The message handler for the bot
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="Message">The message got from the user in discord chat</param>
|
||||||
|
/// <returns></returns>
|
||||||
|
private async Task MessageHandler(SocketMessage Message)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
if (Message as SocketUserMessage == null) return;
|
||||||
|
|
||||||
|
var message = Message as SocketUserMessage;
|
||||||
|
|
||||||
|
if (message == null) return;
|
||||||
|
|
||||||
|
if (!message.Content.StartsWith(botPrefix)) return;
|
||||||
|
|
||||||
|
var argPos = 0;
|
||||||
|
|
||||||
|
if (message.HasMentionPrefix(client.CurrentUser, ref argPos))
|
||||||
|
{
|
||||||
|
await message.Channel.SendMessageAsync("Can not exec mentioned commands !");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (message.Author.IsBot) return;
|
||||||
|
|
||||||
|
var context = new SocketCommandContext(client, message);
|
||||||
|
|
||||||
|
await commandService.ExecuteAsync(
|
||||||
|
context,
|
||||||
|
argPos,
|
||||||
|
null
|
||||||
|
);
|
||||||
|
|
||||||
|
var plugin = PluginLoader.Commands!.Where(p => p.Command == message.Content.Split(' ')[0].Substring(botPrefix.Length)).FirstOrDefault();
|
||||||
|
|
||||||
|
|
||||||
|
if (plugin != null)
|
||||||
|
{
|
||||||
|
if (message.Channel == await message.Author.CreateDMChannelAsync())
|
||||||
|
{
|
||||||
|
if (plugin.canUseDM)
|
||||||
|
{
|
||||||
|
if (plugin.requireAdmin)
|
||||||
|
{
|
||||||
|
if (message.Author.isAdmin())
|
||||||
|
{
|
||||||
|
plugin.Execute(context, message, client, true);
|
||||||
|
Functions.WriteLogFile($"[{message.Author.Id}] Executed command (DM) : " + plugin.Command);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
await message.Channel.SendMessageAsync("This command is for administrators only !");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
plugin.Execute(context, message, client, true);
|
||||||
|
Functions.WriteLogFile($"[{message.Author.Id}] Executed command (DM) : " + plugin.Command);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
await message.Channel.SendMessageAsync("This command is not for DMs");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (plugin.canUseServer)
|
||||||
|
{
|
||||||
|
if (plugin.requireAdmin)
|
||||||
|
{
|
||||||
|
if (message.Author.isAdmin())
|
||||||
|
{
|
||||||
|
plugin.Execute(context, message, client, false);
|
||||||
|
Functions.WriteLogFile($"[{message.Author.Id}] Executed command : " + plugin.Command);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
await message.Channel.SendMessageAsync("This command is for administrators only !");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
plugin.Execute(context, message, client, false);
|
||||||
|
Functions.WriteLogFile($"[{message.Author.Id}] Executed command : " + plugin.Command);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,43 +1,48 @@
|
|||||||
<Project Sdk="Microsoft.NET.Sdk">
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
<PropertyGroup>
|
|
||||||
<OutputType>Exe</OutputType>
|
<PropertyGroup>
|
||||||
<TargetFramework>net8.0</TargetFramework>
|
<OutputType>Exe</OutputType>
|
||||||
<Nullable>disable</Nullable>
|
<TargetFramework>net6.0</TargetFramework>
|
||||||
<ApplicationIcon />
|
<Nullable>disable</Nullable>
|
||||||
<StartupObject />
|
<ApplicationIcon />
|
||||||
<SignAssembly>False</SignAssembly>
|
<StartupObject />
|
||||||
<IsPublishable>True</IsPublishable>
|
<SignAssembly>False</SignAssembly>
|
||||||
<AssemblyVersion>1.0.4.0</AssemblyVersion>
|
<IsPublishable>True</IsPublishable>
|
||||||
<PublishAot>False</PublishAot>
|
<AssemblyVersion>1.0.0.1</AssemblyVersion>
|
||||||
<FileVersion>1.0.4.0</FileVersion>
|
</PropertyGroup>
|
||||||
</PropertyGroup>
|
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
|
||||||
<DebugType>none</DebugType>
|
<DebugType>none</DebugType>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'">
|
|
||||||
<DebugType>none</DebugType>
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'">
|
||||||
</PropertyGroup>
|
<DebugType>none</DebugType>
|
||||||
<ItemGroup>
|
</PropertyGroup>
|
||||||
<Compile Remove="Data\**" />
|
|
||||||
<Compile Remove="obj\**" />
|
<ItemGroup>
|
||||||
<Compile Remove="Output\**" />
|
<Compile Remove="Data\**" />
|
||||||
</ItemGroup>
|
<Compile Remove="obj\**" />
|
||||||
<ItemGroup>
|
<Compile Remove="Output\**" />
|
||||||
<EmbeddedResource Remove="Data\**" />
|
</ItemGroup>
|
||||||
<EmbeddedResource Remove="obj\**" />
|
|
||||||
<EmbeddedResource Remove="Output\**" />
|
<ItemGroup>
|
||||||
</ItemGroup>
|
<EmbeddedResource Remove="Data\**" />
|
||||||
<ItemGroup>
|
<EmbeddedResource Remove="obj\**" />
|
||||||
<None Remove="Data\**" />
|
<EmbeddedResource Remove="Output\**" />
|
||||||
<None Remove="obj\**" />
|
</ItemGroup>
|
||||||
<None Remove="Output\**" />
|
|
||||||
<None Remove="builder.bat" />
|
<ItemGroup>
|
||||||
<None Remove="builder.sh" />
|
<None Remove="Data\**" />
|
||||||
</ItemGroup>
|
<None Remove="obj\**" />
|
||||||
<ItemGroup>
|
<None Remove="Output\**" />
|
||||||
<PackageReference Include="Spectre.Console" Version="0.49.1" />
|
</ItemGroup>
|
||||||
</ItemGroup>
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ProjectReference Include="..\PluginManager\PluginManager.csproj" />
|
<PackageReference Include="Discord.Net" Version="3.7.2" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
</Project>
|
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="..\PluginManager\PluginManager.csproj" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
</Project>
|
||||||
|
|||||||
@@ -1,53 +0,0 @@
|
|||||||
using System;
|
|
||||||
using System.IO;
|
|
||||||
using System.Reflection;
|
|
||||||
|
|
||||||
|
|
||||||
namespace DiscordBot;
|
|
||||||
|
|
||||||
public static class Entry
|
|
||||||
{
|
|
||||||
private static readonly string logo = @"
|
|
||||||
_____ _ _ _____ _ _ ____ _
|
|
||||||
/ ____| | | | | | __ \(_) | | | _ \ | |
|
|
||||||
| (___ ___| |_| |__ | | | |_ ___ ___ ___ _ __ __| | | |_) | ___ | |_
|
|
||||||
\___ \ / _ \ __| '_ \ | | | | / __|/ __/ _ \| '__/ _` | | _ < / _ \| __|
|
|
||||||
____) | __/ |_| | | | | |__| | \__ \ (_| (_) | | | (_| | | |_) | (_) | |_
|
|
||||||
|_____/ \___|\__|_| |_| |_____/|_|___/\___\___/|_| \__,_| |____/ \___/ \__|
|
|
||||||
|
|
||||||
|
|
||||||
";
|
|
||||||
public static void Main(string[] args)
|
|
||||||
{
|
|
||||||
#if DEBUG
|
|
||||||
if (args.Length == 1 && args[0] == "/purge_plugins" )
|
|
||||||
{
|
|
||||||
foreach (var plugin in Directory.GetFiles("./Data/Plugins", "*.dll", SearchOption.AllDirectories))
|
|
||||||
{
|
|
||||||
File.Delete(plugin);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
Console.ForegroundColor = ConsoleColor.DarkYellow;
|
|
||||||
Console.WriteLine(logo);
|
|
||||||
Console.ResetColor();
|
|
||||||
|
|
||||||
|
|
||||||
var currentDomain = AppDomain.CurrentDomain;
|
|
||||||
currentDomain.AssemblyResolve += LoadFromSameFolder;
|
|
||||||
|
|
||||||
static Assembly LoadFromSameFolder(object sender, ResolveEventArgs args)
|
|
||||||
{
|
|
||||||
var folderPath = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location)!, "./Libraries");
|
|
||||||
var assemblyPath = Path.Combine(folderPath, new AssemblyName(args.Name).Name + ".dll");
|
|
||||||
if (!File.Exists(assemblyPath)) return null;
|
|
||||||
var assembly = Assembly.LoadFrom(assemblyPath);
|
|
||||||
|
|
||||||
return assembly;
|
|
||||||
}
|
|
||||||
|
|
||||||
Program.Startup(args);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,39 +0,0 @@
|
|||||||
using System;
|
|
||||||
using PluginManager;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using Spectre.Console;
|
|
||||||
|
|
||||||
namespace DiscordBot;
|
|
||||||
|
|
||||||
public static class Installer
|
|
||||||
{
|
|
||||||
private static async Task AskForConfig(string key, string message)
|
|
||||||
{
|
|
||||||
var value = AnsiConsole.Ask<string>($"[green]{message}[/]");
|
|
||||||
|
|
||||||
if (string.IsNullOrWhiteSpace(value))
|
|
||||||
{
|
|
||||||
AnsiConsole.MarkupLine($"Invalid {key} !");
|
|
||||||
|
|
||||||
Environment.Exit(-20);
|
|
||||||
}
|
|
||||||
|
|
||||||
Config.AppSettings.Add(key, value);
|
|
||||||
}
|
|
||||||
public static async Task GenerateStartupConfig()
|
|
||||||
{
|
|
||||||
|
|
||||||
if(!Config.AppSettings.ContainsKey("token"))
|
|
||||||
await AskForConfig("token", "Token:");
|
|
||||||
|
|
||||||
if(!Config.AppSettings.ContainsKey("prefix"))
|
|
||||||
await AskForConfig("prefix", "Prefix:");
|
|
||||||
|
|
||||||
if(!Config.AppSettings.ContainsKey("ServerID"))
|
|
||||||
await AskForConfig("ServerID", "Server ID:");
|
|
||||||
|
|
||||||
await Config.AppSettings.SaveToFile();
|
|
||||||
|
|
||||||
Config.Logger.Log("Config Saved", typeof(Installer));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,144 +1,312 @@
|
|||||||
using System;
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Reflection;
|
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using DiscordBot.Utilities;
|
using DiscordBot.Discord.Core;
|
||||||
using PluginManager.Bot;
|
using PluginManager;
|
||||||
|
using PluginManager.Items;
|
||||||
|
using PluginManager.Online;
|
||||||
using PluginManager.Others;
|
using PluginManager.Others;
|
||||||
using PluginManager.Others.Actions;
|
|
||||||
using Spectre.Console;
|
|
||||||
using static PluginManager.Config;
|
|
||||||
|
|
||||||
namespace DiscordBot;
|
namespace DiscordBot;
|
||||||
|
|
||||||
public class Program
|
public class Program
|
||||||
{
|
{
|
||||||
public static InternalActionManager internalActionManager;
|
private static bool loadPluginsOnStartup;
|
||||||
|
private static bool listPluginsAtStartup;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The main entry point for the application.
|
/// The main entry point for the application.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static void Startup(string[] args)
|
[STAThread]
|
||||||
|
[Obsolete]
|
||||||
|
public static void Main(string[] args)
|
||||||
{
|
{
|
||||||
PreLoadComponents(args).Wait();
|
Directory.CreateDirectory("./Data/Resources");
|
||||||
|
Directory.CreateDirectory("./Data/Plugins/Commands");
|
||||||
|
Directory.CreateDirectory("./Data/Plugins/Events");
|
||||||
|
PreLoadComponents().Wait();
|
||||||
|
|
||||||
if (!AppSettings.ContainsKey("ServerID") || !AppSettings.ContainsKey("token") || !AppSettings.ContainsKey("prefix"))
|
if (!Config.ContainsKey("token") || Config.GetValue<string>("token") == null || Config.GetValue<string>("token")?.Length != 70)
|
||||||
Installer.GenerateStartupConfig().Wait();
|
{
|
||||||
|
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");
|
||||||
|
|
||||||
HandleInput().Wait();
|
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();
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The main loop for the discord bot
|
/// The main loop for the discord bot
|
||||||
/// </summary>
|
/// </summary>
|
||||||
private static void NoGUI()
|
/// <param name="discordbooter">The discord booter used to start the application</param>
|
||||||
|
private static Task NoGUI(Boot discordbooter)
|
||||||
{
|
{
|
||||||
internalActionManager.Initialize().Wait();
|
var consoleCommandsHandler = new ConsoleCommandsHandler(discordbooter.client);
|
||||||
internalActionManager.Execute("plugin", "load").Wait();
|
if (loadPluginsOnStartup) consoleCommandsHandler.HandleCommand("lp");
|
||||||
internalActionManager.Refresh().Wait();
|
if (listPluginsAtStartup) consoleCommandsHandler.HandleCommand("listplugs");
|
||||||
|
|
||||||
|
Config.SaveConfig();
|
||||||
|
|
||||||
|
|
||||||
while (true)
|
while (true)
|
||||||
{
|
{
|
||||||
var cmd = Console.ReadLine();
|
Console.ForegroundColor = ConsoleColor.White;
|
||||||
var args = cmd.Split(' ');
|
var cmd = Console.ReadLine();
|
||||||
var command = args[0];
|
if (!consoleCommandsHandler.HandleCommand(cmd))
|
||||||
args = args.Skip(1).ToArray();
|
Console.WriteLine("Failed to run command " + cmd);
|
||||||
if (args.Length == 0)
|
|
||||||
args = null;
|
|
||||||
|
|
||||||
internalActionManager.Execute(command, args).Wait(); // Execute the command
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Start the bot without user interface
|
/// Start the bot without user interface
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <returns>Returns the bootloader for the Discord Bot</returns>
|
/// <returns>Returns the boot loader for the Discord Bot</returns>
|
||||||
private static async Task StartNoGui()
|
private static async Task<Boot> StartNoGUI()
|
||||||
{
|
{
|
||||||
|
Console.Clear();
|
||||||
|
Console.ForegroundColor = ConsoleColor.DarkYellow;
|
||||||
|
|
||||||
AnsiConsole.MarkupLine($"[yellow]Running on version: {AppSettings["Version"]}[/]");
|
List<string> startupMessageList = await ServerCom.ReadTextFromFile("https://raw.githubusercontent.com/Wizzy69/installer/discord-bot-files/StartupMessage");
|
||||||
AnsiConsole.MarkupLine("[yellow]Git SethBot: https://github.com/andreitdr/SethDiscordBot [/]");
|
|
||||||
AnsiConsole.MarkupLine("[yellow]Git Plugins: https://github.com/andreitdr/SethPlugins [/]");
|
|
||||||
|
|
||||||
AnsiConsole.MarkupLine("[yellow]Remember to close the bot using the shutdown command ([/][red]exit[/][yellow]) or some settings won't be saved[/]");
|
foreach (var message in startupMessageList) Console.WriteLine(message);
|
||||||
AnsiConsole.MarkupLine($"[yellow]Running on [/][magenta]{(OperatingSystem.IsWindows() ? "Windows" : "Linux")}[/]");
|
|
||||||
|
|
||||||
AnsiConsole.MarkupLine("[yellow]===== Seth Discord Bot =====[/]");
|
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.ForegroundColor = ConsoleColor.White;
|
||||||
|
Console.WriteLine($"============================ LOG ============================");
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var token = AppSettings["token"];
|
var token = Config.GetValue<string>("token");
|
||||||
var prefix = AppSettings["prefix"];
|
var prefix = Config.GetValue<string>("prefix");
|
||||||
|
|
||||||
var discordbooter = new Boot(token, prefix);
|
var discordbooter = new Boot(token, prefix);
|
||||||
await discordbooter.Awake();
|
await discordbooter.Awake();
|
||||||
|
return discordbooter;
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
Logger.Log(ex.ToString(), typeof(Program), LogType.CRITICAL);
|
Console.WriteLine(ex);
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Clear folder
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="d">Directory path</param>
|
||||||
|
private static Task ClearFolder(string d)
|
||||||
|
{
|
||||||
|
var files = Directory.GetFiles(d);
|
||||||
|
var fileNumb = files.Length;
|
||||||
|
for (var i = 0; i < fileNumb; i++)
|
||||||
|
{
|
||||||
|
File.Delete(files[i]);
|
||||||
|
Console.WriteLine("Deleting : " + files[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
return Task.CompletedTask;
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Handle user input arguments from the startup of the application
|
/// Handle user input arguments from the startup of the application
|
||||||
/// </summary>
|
/// </summary>
|
||||||
private static async Task HandleInput()
|
/// <param name="args">The arguments</param>
|
||||||
|
private static async Task HandleInput(string[] args)
|
||||||
{
|
{
|
||||||
await StartNoGui();
|
var len = args.Length;
|
||||||
try
|
|
||||||
|
if (len == 3 && args[0] == "/download")
|
||||||
{
|
{
|
||||||
internalActionManager = new InternalActionManager(AppSettings["PluginFolder"], "*.dll");
|
var url = args[1];
|
||||||
NoGUI();
|
var location = args[2];
|
||||||
|
|
||||||
|
await ServerCom.DownloadFileAsync(url, location);
|
||||||
|
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
catch (IOException ex)
|
|
||||||
|
if (len > 0 && (args.Contains("--cmd") || args.Contains("--args") || args.Contains("--nomessage")))
|
||||||
{
|
{
|
||||||
if (ex.Message == "No process is on the other end of the pipe." || (uint)ex.HResult == 0x800700E9)
|
if (args.Contains("lp") || args.Contains("loadplugins")) loadPluginsOnStartup = true;
|
||||||
|
if (args.Contains("listplugs")) listPluginsAtStartup = true;
|
||||||
|
len = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (len == 0 || (args[0] != "--exec" && args[0] != "--execute"))
|
||||||
|
{
|
||||||
|
var b = await StartNoGUI();
|
||||||
|
await NoGUI(b);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Console.ForegroundColor = ConsoleColor.DarkYellow;
|
||||||
|
Console.WriteLine("Execute command interface noGUI\n\n");
|
||||||
|
Console.WriteLine(
|
||||||
|
"\tCommand name\t\t\t\tDescription\n" +
|
||||||
|
"-- help | -help\t\t ------ \tDisplay the help message\n" +
|
||||||
|
"--reset-full\t\t ------ \tReset all files (clear files)\n" +
|
||||||
|
"--reset-logs\t\t ------ \tClear up the output folder\n" +
|
||||||
|
"--start\t\t ------ \tStart the bot\n" +
|
||||||
|
"exit\t\t\t ------ \tClose the application"
|
||||||
|
);
|
||||||
|
while (true)
|
||||||
|
{
|
||||||
|
Console.ForegroundColor = ConsoleColor.White;
|
||||||
|
Console.Write("> ");
|
||||||
|
var message = Console.ReadLine().Split(' ');
|
||||||
|
|
||||||
|
switch (message[0])
|
||||||
{
|
{
|
||||||
Logger.Log("An error occured while closing the bot last time. Please consider closing the bot using the &rexit&c method !\n" +
|
case "--help":
|
||||||
"There is a risk of losing all data or corruption of the save file, which in some cases requires to reinstall the bot !",
|
case "-help":
|
||||||
typeof(Program), LogType.ERROR
|
Console.ForegroundColor = ConsoleColor.DarkYellow;
|
||||||
);
|
Console.WriteLine(
|
||||||
|
"\tCommand name\t\t\t\tDescription\n" +
|
||||||
|
"-- help | -help\t\t ------ \tDisplay the help message\n" +
|
||||||
|
"--reset-full\t\t ------ \tReset all files (clear files)\n" +
|
||||||
|
"--reset-settings\t ------ \tReset only bot settings\n" +
|
||||||
|
"--reset-logs\t\t ------ \tClear up the output folder\n" +
|
||||||
|
"--start\t\t ------ \tStart the bot\n" +
|
||||||
|
"exit\t\t\t ------ \tClose the application"
|
||||||
|
);
|
||||||
|
break;
|
||||||
|
case "--reset-full":
|
||||||
|
await ClearFolder("./Data/Resources/");
|
||||||
|
await ClearFolder("./Output/Logs/");
|
||||||
|
await ClearFolder("./Output/Errors");
|
||||||
|
await ClearFolder("./Data/Languages/");
|
||||||
|
await ClearFolder("./Data/Plugins/Commands");
|
||||||
|
await ClearFolder("./Data/Plugins/Events");
|
||||||
|
Console.WriteLine("Successfully cleared all folders");
|
||||||
|
break;
|
||||||
|
case "--reset-logs":
|
||||||
|
await ClearFolder("./Output/Logs");
|
||||||
|
await ClearFolder("./Output/Errors");
|
||||||
|
Console.WriteLine("Successfully cleard logs folder");
|
||||||
|
break;
|
||||||
|
case "--exit":
|
||||||
|
case "exit":
|
||||||
|
Environment.Exit(0);
|
||||||
|
break;
|
||||||
|
case "--start":
|
||||||
|
var booter = await StartNoGUI();
|
||||||
|
await NoGUI(booter);
|
||||||
|
return;
|
||||||
|
|
||||||
|
default:
|
||||||
|
Console.WriteLine("Failed to execute command " + message[0]);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static async Task PreLoadComponents(string[] args)
|
private static async Task PreLoadComponents()
|
||||||
{
|
{
|
||||||
await Initialize();
|
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.ReadTextFromFile("https://raw.githubusercontent.com/Wizzy69/installer/discord-bot-files/SetupKeys");
|
||||||
|
|
||||||
AppSettings["Version"] = Assembly.GetExecutingAssembly().GetName().Version.ToString();
|
Config.PluginConfig.Load();
|
||||||
|
|
||||||
PluginManager.Updater.Application.AppUpdater updater = new();
|
if (!Config.ContainsKey("Version"))
|
||||||
var update = await updater.CheckForUpdates();
|
Config.AddValueToVariables("Version", System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString(), false);
|
||||||
|
else
|
||||||
|
Config.SetValue("Version", System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString());
|
||||||
|
|
||||||
if (update != PluginManager.Updater.Application.Update.None)
|
foreach (var key in OnlineDefaultKeys)
|
||||||
{
|
{
|
||||||
Console.WriteLine($"New update available: {update.UpdateVersion}");
|
if (key.Length <= 3 || !key.Contains(' ')) continue;
|
||||||
Console.WriteLine($"Download link: {update.UpdateUrl}");
|
string[] s = key.Split(' ');
|
||||||
Console.WriteLine($"Update notes: {update.UpdateNotes}\n\n");
|
try
|
||||||
|
{
|
||||||
Environment.Exit(0);
|
Config.GetAndAddValueToVariable(s[0], s[1], s[2].Equals("true", StringComparison.CurrentCultureIgnoreCase));
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Functions.WriteErrFile(ex.Message);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Logger.OnLog += (sender, logMessage) =>
|
List<string> onlineSettingsList = await ServerCom.ReadTextFromFile("https://raw.githubusercontent.com/Wizzy69/installer/discord-bot-files/OnlineData");
|
||||||
|
foreach (var key in onlineSettingsList)
|
||||||
{
|
{
|
||||||
var messageColor = logMessage.Type switch
|
if (key.Length <= 3 || !key.Contains(' ')) continue;
|
||||||
{
|
|
||||||
LogType.INFO => "[green]",
|
|
||||||
LogType.WARNING => "[yellow]",
|
|
||||||
LogType.ERROR => "[red]",
|
|
||||||
LogType.CRITICAL => "[red]",
|
|
||||||
_ => "[white]"
|
|
||||||
};
|
|
||||||
|
|
||||||
if (logMessage.Message.Contains('['))
|
string[] s = key.Split(' ');
|
||||||
|
switch (s[0])
|
||||||
{
|
{
|
||||||
Console.WriteLine(logMessage.Message);
|
case "CurrentVersion":
|
||||||
return;
|
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 = 20; //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;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
AnsiConsole.MarkupLine($"{messageColor}{logMessage.ThrowTime} {logMessage.Message} [/]");
|
|
||||||
};
|
Config.SaveConfig();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,31 +0,0 @@
|
|||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Threading;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using Spectre.Console;
|
|
||||||
|
|
||||||
namespace DiscordBot.Utilities;
|
|
||||||
|
|
||||||
public static class ConsoleUtilities
|
|
||||||
{
|
|
||||||
public static async Task<T> ExecuteWithProgressBar<T>(Task<T> function, string message)
|
|
||||||
{
|
|
||||||
T result = default;
|
|
||||||
await AnsiConsole.Progress()
|
|
||||||
.AutoClear(true)
|
|
||||||
.Columns(new TaskDescriptionColumn(), new ProgressBarColumn(), new PercentageColumn())
|
|
||||||
.StartAsync(
|
|
||||||
async ctx =>
|
|
||||||
{
|
|
||||||
var task = ctx.AddTask(message);
|
|
||||||
task.IsIndeterminate = true;
|
|
||||||
result = await function;
|
|
||||||
task.Increment(100);
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,56 +0,0 @@
|
|||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Runtime.InteropServices.ComTypes;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using PluginManager.Others;
|
|
||||||
using Spectre.Console;
|
|
||||||
using Spectre.Console.Rendering;
|
|
||||||
|
|
||||||
namespace DiscordBot.Utilities
|
|
||||||
{
|
|
||||||
public class TableData
|
|
||||||
{
|
|
||||||
public List<string> Columns;
|
|
||||||
public List<OneOf<string, IRenderable>[]> Rows;
|
|
||||||
|
|
||||||
public TableData()
|
|
||||||
{
|
|
||||||
Columns = new List<string>();
|
|
||||||
Rows = new List<OneOf<string, IRenderable>[]>();
|
|
||||||
}
|
|
||||||
|
|
||||||
public TableData(List<string> columns)
|
|
||||||
{
|
|
||||||
Columns = columns;
|
|
||||||
Rows = new List<OneOf<string, IRenderable>[]>();
|
|
||||||
}
|
|
||||||
|
|
||||||
public bool IsEmpty => Rows.Count == 0;
|
|
||||||
public bool HasRoundBorders { get; set; } = true;
|
|
||||||
public bool DisplayLinesBetweenRows { get; set; } = false;
|
|
||||||
|
|
||||||
public void AddRow(OneOf<string, IRenderable>[] row)
|
|
||||||
{
|
|
||||||
Rows.Add(row);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void PrintTable()
|
|
||||||
{
|
|
||||||
var table = new Table();
|
|
||||||
table.Border(this.HasRoundBorders ? TableBorder.Rounded : TableBorder.Square);
|
|
||||||
table.AddColumns(this.Columns.ToArray());
|
|
||||||
table.ShowRowSeparators = DisplayLinesBetweenRows;
|
|
||||||
foreach (var row in this.Rows)
|
|
||||||
{
|
|
||||||
table.AddRow(row.Select(element => element.Match(
|
|
||||||
(data) => new Markup(data),
|
|
||||||
(data) => data
|
|
||||||
)));
|
|
||||||
}
|
|
||||||
|
|
||||||
AnsiConsole.Write(table);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,35 +0,0 @@
|
|||||||
@echo off
|
|
||||||
echo "Building..."
|
|
||||||
|
|
||||||
echo "Building linux-x64 not self-contained"
|
|
||||||
dotnet publish -r linux-x64 -p:PublishSingleFile=false --self-contained true -c Release -o ../publish/linux-x64
|
|
||||||
|
|
||||||
echo "Building win-x64 not self-contained"
|
|
||||||
dotnet publish -r win-x64 -p:PublishSingleFile=false --self-contained true -c Release -o ../publish/win-x64
|
|
||||||
|
|
||||||
echo "Building osx-x64 not self-contained"
|
|
||||||
dotnet publish -r osx-x64 -p:PublishSingleFile=false --self-contained true -c Release -o ../publish/osx-x64
|
|
||||||
|
|
||||||
|
|
||||||
echo "Building linux-x64 self-contained"
|
|
||||||
dotnet publish -r linux-x64 -p:PublishSingleFile=true --self-contained true -c Release -o ../publish/linux-x64-selfcontained
|
|
||||||
|
|
||||||
echo "Building win-x64 self-contained"
|
|
||||||
dotnet publish -r win-x64 -p:PublishSingleFile=true --self-contained true -c Release -o ../publish/win-x64-selfcontained
|
|
||||||
|
|
||||||
echo "Building osx-x64 self-contained"
|
|
||||||
dotnet publish -r osx-x64 -p:PublishSingleFile=true --self-contained true -c Release -o ../publish/osx-x64-selfcontained
|
|
||||||
|
|
||||||
echo "Zipping..."
|
|
||||||
mkdir ../publish/zip
|
|
||||||
|
|
||||||
|
|
||||||
zip -r ../publish/zip/linux-x64.zip ../publish/linux-x64
|
|
||||||
zip -r ../publish/zip/win-x64.zip ../publish/win-x64
|
|
||||||
zip -r ../publish/zip/osx-x64.zip ../publish/osx-x64
|
|
||||||
|
|
||||||
zip -r ../publish/zip/linux-x64-selfcontained.zip ../publish/linux-x64-selfcontained
|
|
||||||
zip -r ../publish/zip/win-x64-selfcontained.zip ../publish/win-x64-selfcontained
|
|
||||||
zip -r ../publish/zip/osx-x64-selfcontained.zip ../publish/osx-x64-selfcontained
|
|
||||||
|
|
||||||
echo "Done!"
|
|
||||||
@@ -1,36 +0,0 @@
|
|||||||
# All files in this directory will be copied to the root of the container
|
|
||||||
|
|
||||||
echo "Building..."
|
|
||||||
|
|
||||||
echo "Building linux-x64 not self-contained"
|
|
||||||
dotnet publish -r linux-x64 -p:PublishSingleFile=false --self-contained true -c Release -o ./publish/linux-x64
|
|
||||||
|
|
||||||
echo "Building win-x64 not self-contained"
|
|
||||||
dotnet publish -r win-x64 -p:PublishSingleFile=false --self-contained true -c Release -o ./publish/win-x64
|
|
||||||
|
|
||||||
echo "Building osx-x64 not self-contained"
|
|
||||||
dotnet publish -r osx-x64 -p:PublishSingleFile=false --self-contained true -c Release -o ./publish/osx-x64
|
|
||||||
|
|
||||||
#One file per platform
|
|
||||||
echo "Building linux-x64 self-contained"
|
|
||||||
dotnet publish -r linux-x64 -p:PublishSingleFile=true --self-contained true -c Release -o ./publish/linux-x64-selfcontained
|
|
||||||
|
|
||||||
echo "Building win-x64 self-contained"
|
|
||||||
dotnet publish -r win-x64 -p:PublishSingleFile=true --self-contained true -c Release -o ./publish/win-x64-selfcontained
|
|
||||||
|
|
||||||
echo "Building osx-x64 self-contained"
|
|
||||||
dotnet publish -r osx-x64 -p:PublishSingleFile=true --self-contained true -c Release -o ./publish/osx-x64-selfcontained
|
|
||||||
|
|
||||||
echo "Zipping..."
|
|
||||||
mkdir ./publish/zip
|
|
||||||
|
|
||||||
|
|
||||||
zip -r ./publish/zip/linux-x64.zip ./publish/linux-x64
|
|
||||||
zip -r ./publish/zip/win-x64.zip ./publish/win-x64
|
|
||||||
zip -r ./publish/zip/osx-x64.zip ./publish/osx-x64
|
|
||||||
|
|
||||||
zip -r ./publish/zip/linux-x64-selfcontained.zip ./publish/linux-x64-selfcontained
|
|
||||||
zip -r ./publish/zip/win-x64-selfcontained.zip ./publish/win-x64-selfcontained
|
|
||||||
zip -r ./publish/zip/osx-x64-selfcontained.zip ./publish/osx-x64-selfcontained
|
|
||||||
|
|
||||||
echo "Done!"
|
|
||||||
454
DiscordBotUI/.gitignore
vendored
454
DiscordBotUI/.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,24 +0,0 @@
|
|||||||
<Project Sdk="Microsoft.NET.Sdk">
|
|
||||||
<PropertyGroup>
|
|
||||||
<OutputType>WinExe</OutputType>
|
|
||||||
<!--If you are willing to use Windows/MacOS native APIs you will need to create 3 projects.
|
|
||||||
One for Windows with net8.0-windows TFM, one for MacOS with net8.0-macos and one with net8.0 TFM for Linux.-->
|
|
||||||
<TargetFramework>net8.0</TargetFramework>
|
|
||||||
<Nullable>enable</Nullable>
|
|
||||||
<BuiltInComInteropSupport>true</BuiltInComInteropSupport>
|
|
||||||
</PropertyGroup>
|
|
||||||
|
|
||||||
<PropertyGroup>
|
|
||||||
<ApplicationManifest>app.manifest</ApplicationManifest>
|
|
||||||
</PropertyGroup>
|
|
||||||
|
|
||||||
<ItemGroup>
|
|
||||||
<PackageReference Include="Avalonia.Desktop" Version="11.0.10" />
|
|
||||||
<!--Condition below is needed to remove Avalonia.Diagnostics package from build output in Release configuration.-->
|
|
||||||
<PackageReference Condition="'$(Configuration)' == 'Debug'" Include="Avalonia.Diagnostics" Version="11.0.10" />
|
|
||||||
</ItemGroup>
|
|
||||||
|
|
||||||
<ItemGroup>
|
|
||||||
<ProjectReference Include="..\DiscordBotUI\DiscordBotUI.csproj" />
|
|
||||||
</ItemGroup>
|
|
||||||
</Project>
|
|
||||||
@@ -1,25 +0,0 @@
|
|||||||
using System;
|
|
||||||
|
|
||||||
using Avalonia;
|
|
||||||
using Avalonia.ReactiveUI;
|
|
||||||
|
|
||||||
namespace DiscordBotUI.Desktop
|
|
||||||
{
|
|
||||||
internal sealed 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()
|
|
||||||
.WithInterFont()
|
|
||||||
.LogToTrace()
|
|
||||||
.UseReactiveUI();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,11 +0,0 @@
|
|||||||
{
|
|
||||||
"profiles": {
|
|
||||||
"DiscordBotUI.Desktop": {
|
|
||||||
"commandName": "Project"
|
|
||||||
},
|
|
||||||
"WSL": {
|
|
||||||
"commandName": "WSL2",
|
|
||||||
"distributionName": ""
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,18 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1">
|
|
||||||
<!-- This manifest is used on Windows only.
|
|
||||||
Don't remove it as it might cause problems with window transparency and embedded controls.
|
|
||||||
For more details visit https://learn.microsoft.com/en-us/windows/win32/sbscs/application-manifests -->
|
|
||||||
<assemblyIdentity version="1.0.0.0" name="DiscordBotUI.Desktop"/>
|
|
||||||
|
|
||||||
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
|
|
||||||
<application>
|
|
||||||
<!-- A list of the Windows versions that this application has been tested on
|
|
||||||
and is designed to work with. Uncomment the appropriate elements
|
|
||||||
and Windows will automatically select the most compatible environment. -->
|
|
||||||
|
|
||||||
<!-- Windows 10 -->
|
|
||||||
<supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}" />
|
|
||||||
</application>
|
|
||||||
</compatibility>
|
|
||||||
</assembly>
|
|
||||||
@@ -1,35 +0,0 @@
|
|||||||
@echo off
|
|
||||||
echo "Building..."
|
|
||||||
|
|
||||||
echo "Building linux-x64 not self-contained"
|
|
||||||
dotnet publish -r linux-x64 -p:PublishSingleFile=false --self-contained true -c Release -o ../publish/linux-x64
|
|
||||||
|
|
||||||
echo "Building win-x64 not self-contained"
|
|
||||||
dotnet publish -r win-x64 -p:PublishSingleFile=false --self-contained true -c Release -o ../publish/win-x64
|
|
||||||
|
|
||||||
echo "Building osx-x64 not self-contained"
|
|
||||||
dotnet publish -r osx-x64 -p:PublishSingleFile=false --self-contained true -c Release -o ../publish/osx-x64
|
|
||||||
|
|
||||||
|
|
||||||
echo "Building linux-x64 self-contained"
|
|
||||||
dotnet publish -r linux-x64 -p:PublishSingleFile=true --self-contained true -c Release -o ../publish/linux-x64-selfcontained
|
|
||||||
|
|
||||||
echo "Building win-x64 self-contained"
|
|
||||||
dotnet publish -r win-x64 -p:PublishSingleFile=true --self-contained true -c Release -o ../publish/win-x64-selfcontained
|
|
||||||
|
|
||||||
echo "Building osx-x64 self-contained"
|
|
||||||
dotnet publish -r osx-x64 -p:PublishSingleFile=true --self-contained true -c Release -o ../publish/osx-x64-selfcontained
|
|
||||||
|
|
||||||
echo "Zipping..."
|
|
||||||
mkdir ../publish/zip
|
|
||||||
|
|
||||||
|
|
||||||
zip -r ../publish/zip/linux-x64.zip ../publish/linux-x64
|
|
||||||
zip -r ../publish/zip/win-x64.zip ../publish/win-x64
|
|
||||||
zip -r ../publish/zip/osx-x64.zip ../publish/osx-x64
|
|
||||||
|
|
||||||
zip -r ../publish/zip/linux-x64-selfcontained.zip ../publish/linux-x64-selfcontained
|
|
||||||
zip -r ../publish/zip/win-x64-selfcontained.zip ../publish/win-x64-selfcontained
|
|
||||||
zip -r ../publish/zip/osx-x64-selfcontained.zip ../publish/osx-x64-selfcontained
|
|
||||||
|
|
||||||
echo "Done!"
|
|
||||||
@@ -1,17 +0,0 @@
|
|||||||
<Application xmlns="https://github.com/avaloniaui"
|
|
||||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
|
||||||
xmlns:local="using:DiscordBotUI"
|
|
||||||
x:Class="DiscordBotUI.App"
|
|
||||||
RequestedThemeVariant="Default">
|
|
||||||
<!-- "Default" ThemeVariant follows system theme variant. "Dark" or "Light" are other available options. -->
|
|
||||||
|
|
||||||
<Application.DataTemplates>
|
|
||||||
<local:ViewLocator/>
|
|
||||||
</Application.DataTemplates>
|
|
||||||
|
|
||||||
|
|
||||||
<Application.Styles>
|
|
||||||
<FluentTheme />
|
|
||||||
<StyleInclude Source="avares://Avalonia.Controls.DataGrid/Themes/Fluent.xaml"/>
|
|
||||||
</Application.Styles>
|
|
||||||
</Application>
|
|
||||||
@@ -1,31 +0,0 @@
|
|||||||
using Avalonia;
|
|
||||||
using Avalonia.Controls.ApplicationLifetimes;
|
|
||||||
using Avalonia.Markup.Xaml;
|
|
||||||
|
|
||||||
using DiscordBotUI.ViewModels;
|
|
||||||
using DiscordBotUI.Views;
|
|
||||||
|
|
||||||
namespace DiscordBotUI
|
|
||||||
{
|
|
||||||
public partial class App : Application
|
|
||||||
{
|
|
||||||
public override void Initialize()
|
|
||||||
{
|
|
||||||
AvaloniaXamlLoader.Load(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
public override void OnFrameworkInitializationCompleted()
|
|
||||||
{
|
|
||||||
if (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop)
|
|
||||||
{
|
|
||||||
desktop.MainWindow = new HomePage();
|
|
||||||
}
|
|
||||||
else if (ApplicationLifetime is ISingleViewApplicationLifetime singleViewPlatform)
|
|
||||||
{
|
|
||||||
singleViewPlatform.MainView = new HomePage();
|
|
||||||
}
|
|
||||||
|
|
||||||
base.OnFrameworkInitializationCompleted();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Binary file not shown.
|
Before Width: | Height: | Size: 172 KiB |
@@ -1,90 +0,0 @@
|
|||||||
using System.Collections.Generic;
|
|
||||||
using Discord;
|
|
||||||
using PluginManager;
|
|
||||||
using PluginManager.Interfaces;
|
|
||||||
using PluginManager.Loaders;
|
|
||||||
using PluginManager.Others;
|
|
||||||
|
|
||||||
namespace DiscordBotUI.Bot.Commands;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// The help command
|
|
||||||
/// </summary>
|
|
||||||
internal class Help: DBCommand
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Command name
|
|
||||||
/// </summary>
|
|
||||||
public string Command => "help";
|
|
||||||
|
|
||||||
public List<string> Aliases => null;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Command Description
|
|
||||||
/// </summary>
|
|
||||||
public string Description => "This command allows you to check all loaded commands";
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Command usage
|
|
||||||
/// </summary>
|
|
||||||
public string Usage => "help <command>";
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Check if the command require administrator to be executed
|
|
||||||
/// </summary>
|
|
||||||
public bool requireAdmin => false;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// The main body of the command
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="context">The command context</param>
|
|
||||||
public void ExecuteServer(DbCommandExecutingArguments args)
|
|
||||||
{
|
|
||||||
if (args.arguments is not null)
|
|
||||||
{
|
|
||||||
var e = GenerateHelpCommand(args.arguments[0]);
|
|
||||||
if (e is null)
|
|
||||||
args.context.Channel.SendMessageAsync("Unknown Command " + args.arguments[0]);
|
|
||||||
else
|
|
||||||
args.context.Channel.SendMessageAsync(embed: e.Build());
|
|
||||||
|
|
||||||
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
var embedBuilder = new EmbedBuilder();
|
|
||||||
|
|
||||||
var adminCommands = "";
|
|
||||||
var normalCommands = "";
|
|
||||||
|
|
||||||
foreach (var cmd in PluginLoader.Commands)
|
|
||||||
if (cmd.requireAdmin)
|
|
||||||
adminCommands += cmd.Command + " ";
|
|
||||||
else
|
|
||||||
normalCommands += cmd.Command + " ";
|
|
||||||
|
|
||||||
|
|
||||||
if (adminCommands.Length > 0)
|
|
||||||
embedBuilder.AddField("Admin Commands", adminCommands);
|
|
||||||
if (normalCommands.Length > 0)
|
|
||||||
embedBuilder.AddField("Normal Commands", normalCommands);
|
|
||||||
args.context.Channel.SendMessageAsync(embed: embedBuilder.Build());
|
|
||||||
}
|
|
||||||
|
|
||||||
private EmbedBuilder GenerateHelpCommand(string command)
|
|
||||||
{
|
|
||||||
var embedBuilder = new EmbedBuilder();
|
|
||||||
var cmd = PluginLoader.Commands.Find(p => p.Command == command ||
|
|
||||||
p.Aliases is not null && p.Aliases.Contains(command)
|
|
||||||
);
|
|
||||||
if (cmd == null) return null;
|
|
||||||
|
|
||||||
embedBuilder.AddField("Usage", Config.AppSettings["prefix"] + cmd.Usage);
|
|
||||||
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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,83 +0,0 @@
|
|||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
using PluginManager;
|
|
||||||
using PluginManager.Interfaces;
|
|
||||||
using PluginManager.Loaders;
|
|
||||||
using PluginManager.Others;
|
|
||||||
|
|
||||||
namespace DiscordBotUI.Bot
|
|
||||||
{
|
|
||||||
internal class DiscordBot
|
|
||||||
{
|
|
||||||
private readonly string[] _StartArguments;
|
|
||||||
|
|
||||||
public DiscordBot(string[] args)
|
|
||||||
{
|
|
||||||
this._StartArguments = args;
|
|
||||||
}
|
|
||||||
|
|
||||||
public async Task InitializeBot()
|
|
||||||
{
|
|
||||||
string token = Config.AppSettings["token"];
|
|
||||||
string prefix = Config.AppSettings["prefix"];
|
|
||||||
PluginManager.Bot.Boot discordBooter = new PluginManager.Bot.Boot(token, prefix);
|
|
||||||
await discordBooter.Awake();
|
|
||||||
}
|
|
||||||
|
|
||||||
public async Task LoadPlugins()
|
|
||||||
{
|
|
||||||
var loader = new PluginLoader(Config.DiscordBot.Client);
|
|
||||||
|
|
||||||
loader.OnCommandLoaded += (data) =>
|
|
||||||
{
|
|
||||||
if (data.IsSuccess)
|
|
||||||
{
|
|
||||||
Config.Logger.Log("Successfully loaded command : " + data.PluginName, typeof(ICommandAction),
|
|
||||||
LogType.INFO
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
else
|
|
||||||
{
|
|
||||||
Config.Logger.Log("Failed to load command : " + data.PluginName + " because " + data.ErrorMessage,
|
|
||||||
typeof(ICommandAction), LogType.ERROR
|
|
||||||
);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
loader.OnEventLoaded += (data) =>
|
|
||||||
{
|
|
||||||
if (data.IsSuccess)
|
|
||||||
{
|
|
||||||
Config.Logger.Log("Successfully loaded event : " + data.PluginName, typeof(ICommandAction),
|
|
||||||
LogType.INFO
|
|
||||||
);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
Config.Logger.Log("Failed to load event : " + data.PluginName + " because " + data.ErrorMessage,
|
|
||||||
typeof(ICommandAction), LogType.ERROR
|
|
||||||
);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
loader.OnSlashCommandLoaded += (data) =>
|
|
||||||
{
|
|
||||||
if (data.IsSuccess)
|
|
||||||
{
|
|
||||||
Config.Logger.Log("Successfully loaded slash command : " + data.PluginName, typeof(ICommandAction),
|
|
||||||
LogType.INFO
|
|
||||||
);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
Config.Logger.Log("Failed to load slash command : " + data.PluginName + " because " + data.ErrorMessage,
|
|
||||||
typeof(ICommandAction), LogType.ERROR
|
|
||||||
);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
await loader.LoadPlugins();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,25 +0,0 @@
|
|||||||
<Project Sdk="Microsoft.NET.Sdk">
|
|
||||||
<PropertyGroup>
|
|
||||||
<TargetFramework>net8.0</TargetFramework>
|
|
||||||
<Nullable>enable</Nullable>
|
|
||||||
<LangVersion>latest</LangVersion>
|
|
||||||
<AvaloniaUseCompiledBindingsByDefault>true</AvaloniaUseCompiledBindingsByDefault>
|
|
||||||
</PropertyGroup>
|
|
||||||
|
|
||||||
<ItemGroup>
|
|
||||||
<AvaloniaResource Include="Assets\**" />
|
|
||||||
</ItemGroup>
|
|
||||||
|
|
||||||
<ItemGroup>
|
|
||||||
<PackageReference Include="Avalonia" Version="11.0.10" />
|
|
||||||
<PackageReference Include="Avalonia.Themes.Fluent" Version="11.0.10" />
|
|
||||||
<PackageReference Include="Avalonia.Fonts.Inter" Version="11.0.10" />
|
|
||||||
<PackageReference Include="Avalonia.ReactiveUI" Version="11.0.10" />
|
|
||||||
<!--Condition below is needed to remove Avalonia.Diagnostics package from build output in Release configuration.-->
|
|
||||||
<PackageReference Condition="'$(Configuration)' == 'Debug'" Include="Avalonia.Diagnostics" Version="11.0.10" />
|
|
||||||
</ItemGroup>
|
|
||||||
|
|
||||||
<ItemGroup>
|
|
||||||
<ProjectReference Include="..\..\PluginManager\PluginManager.csproj" />
|
|
||||||
</ItemGroup>
|
|
||||||
</Project>
|
|
||||||
@@ -1,33 +0,0 @@
|
|||||||
using System;
|
|
||||||
|
|
||||||
using Avalonia.Controls;
|
|
||||||
using Avalonia.Controls.Templates;
|
|
||||||
|
|
||||||
using DiscordBotUI.ViewModels;
|
|
||||||
|
|
||||||
namespace DiscordBotUI
|
|
||||||
{
|
|
||||||
public class ViewLocator : IDataTemplate
|
|
||||||
{
|
|
||||||
public Control? Build(object? data)
|
|
||||||
{
|
|
||||||
if (data is null)
|
|
||||||
return null;
|
|
||||||
|
|
||||||
var name = data.GetType().FullName!.Replace("ViewModel", "View", StringComparison.Ordinal);
|
|
||||||
var type = Type.GetType(name);
|
|
||||||
|
|
||||||
if (type != null)
|
|
||||||
{
|
|
||||||
return (Control)Activator.CreateInstance(type)!;
|
|
||||||
}
|
|
||||||
|
|
||||||
return new TextBlock { Text = "Not Found: " + name };
|
|
||||||
}
|
|
||||||
|
|
||||||
public bool Match(object? data)
|
|
||||||
{
|
|
||||||
return data is ViewModelBase;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,22 +0,0 @@
|
|||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
namespace DiscordBotUI.ViewModels
|
|
||||||
{
|
|
||||||
public class OnlinePlugin
|
|
||||||
{
|
|
||||||
public string Name { get; set; }
|
|
||||||
public string Description { get; set; }
|
|
||||||
public string Version { get; set; }
|
|
||||||
|
|
||||||
public OnlinePlugin(string name, string description, string version) {
|
|
||||||
Name = name;
|
|
||||||
Description = description;
|
|
||||||
Version = version;
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,22 +0,0 @@
|
|||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
namespace DiscordBotUI.ViewModels
|
|
||||||
{
|
|
||||||
public class Plugin
|
|
||||||
{
|
|
||||||
public string Name { get; set; }
|
|
||||||
public string Version { get; set; }
|
|
||||||
public bool IsMarkedToUninstall { get; set; }
|
|
||||||
|
|
||||||
public Plugin(string Name, string Version, bool isMarkedToUninstall)
|
|
||||||
{
|
|
||||||
this.Name = Name;
|
|
||||||
this.Version = Version;
|
|
||||||
IsMarkedToUninstall = isMarkedToUninstall;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,11 +0,0 @@
|
|||||||
using System.ComponentModel;
|
|
||||||
using System.Runtime.CompilerServices;
|
|
||||||
|
|
||||||
using ReactiveUI;
|
|
||||||
|
|
||||||
namespace DiscordBotUI.ViewModels
|
|
||||||
{
|
|
||||||
public class ViewModelBase : ReactiveObject
|
|
||||||
{
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,41 +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="800" d:DesignHeight="450"
|
|
||||||
x:Class="DiscordBotUI.Views.HomePage"
|
|
||||||
Title="HomePage" MinWidth="900" MinHeight="500">
|
|
||||||
|
|
||||||
<DockPanel LastChildFill="True">
|
|
||||||
<Menu DockPanel.Dock="Top">
|
|
||||||
<MenuItem Header="Settings" Click="SettingsMenuClick"></MenuItem>
|
|
||||||
<MenuItem Header="Installed Plugins" Click="PluginsMenuClick"></MenuItem>
|
|
||||||
<MenuItem Header="New Plugins" Click="NewPluginsMenuClick"></MenuItem>
|
|
||||||
</Menu>
|
|
||||||
|
|
||||||
<Border Width="500" BorderBrush="Black" BorderThickness="1" DockPanel.Dock="Right">
|
|
||||||
<RelativePanel Margin="10">
|
|
||||||
<Label Content="Bot Token: " Name="labelToken" RelativePanel.AlignTopWithPanel="True"/>
|
|
||||||
<TextBox Name="textBoxToken" Text="" IsReadOnly="True" RelativePanel.AlignRightWithPanel="True" Width="350" />
|
|
||||||
|
|
||||||
<Label Content="Bot Prefix: " Name="labelPrefix" RelativePanel.Below="labelToken" Margin="0,20,0,0"/>
|
|
||||||
<TextBox Name="textBoxPrefix" Text="" RelativePanel.AlignRightWithPanel="True" RelativePanel.Below="textBoxToken"
|
|
||||||
IsReadOnly="True" Margin="0,10,0,0" Width="350" />
|
|
||||||
|
|
||||||
<Label Content="Server Id: " Name="labelServerId" RelativePanel.Below="labelPrefix" Margin="0,20,0,0"/>
|
|
||||||
<TextBox Name="textBoxServerId" Text="" RelativePanel.AlignRightWithPanel="True"
|
|
||||||
IsReadOnly="True" RelativePanel.Below="textBoxPrefix" Margin="0,10,0,0" Width="350" />
|
|
||||||
|
|
||||||
<Button Click="ButtonStartBotClick" Name="buttonStartBot" Content="Start" RelativePanel.AlignBottomWithPanel="True" Margin="0,-100,0,0"
|
|
||||||
Width="120" Height="40" Background="#FF008CFF" Foreground="White" BorderThickness="0" CornerRadius="5" FontWeight="Bold"
|
|
||||||
RelativePanel.AlignHorizontalCenterWithPanel="True" />
|
|
||||||
</RelativePanel>
|
|
||||||
|
|
||||||
</Border>
|
|
||||||
|
|
||||||
<Border Background="White" BorderBrush="Black" BorderThickness="1">
|
|
||||||
<TextBlock Name="logTextBlock" Foreground="Black" Text="" />
|
|
||||||
</Border>
|
|
||||||
</DockPanel>
|
|
||||||
|
|
||||||
</Window>
|
|
||||||
@@ -1,80 +0,0 @@
|
|||||||
using System;
|
|
||||||
|
|
||||||
using Avalonia;
|
|
||||||
using Avalonia.Controls;
|
|
||||||
using Avalonia.Markup.Xaml;
|
|
||||||
using Avalonia.Threading;
|
|
||||||
|
|
||||||
using DiscordBotUI.Bot;
|
|
||||||
|
|
||||||
using PluginManager;
|
|
||||||
using PluginManager.Others.Logger;
|
|
||||||
|
|
||||||
namespace DiscordBotUI.Views;
|
|
||||||
|
|
||||||
public partial class HomePage : Window
|
|
||||||
{
|
|
||||||
private readonly DiscordBot _DiscordBot;
|
|
||||||
|
|
||||||
public HomePage()
|
|
||||||
{
|
|
||||||
InitializeComponent();
|
|
||||||
_DiscordBot = new DiscordBot(null!);
|
|
||||||
|
|
||||||
Loaded += HomePage_Loaded;
|
|
||||||
}
|
|
||||||
|
|
||||||
private async void HomePage_Loaded(object? sender, Avalonia.Interactivity.RoutedEventArgs e)
|
|
||||||
{
|
|
||||||
await Config.Initialize();
|
|
||||||
|
|
||||||
if(!Config.AppSettings.ContainsAllKeys("token", "prefix"))
|
|
||||||
{
|
|
||||||
await new SettingsPage().ShowDialog(this);
|
|
||||||
|
|
||||||
if (string.IsNullOrWhiteSpace(Config.AppSettings["token"]) || string.IsNullOrWhiteSpace(Config.AppSettings["prefix"]))
|
|
||||||
Environment.Exit(-1);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
textBoxToken.Text = Config.AppSettings["token"];
|
|
||||||
textBoxPrefix.Text = Config.AppSettings["prefix"];
|
|
||||||
textBoxServerId.Text = Config.AppSettings["ServerID"];
|
|
||||||
}
|
|
||||||
|
|
||||||
private void SetTextToTB(Log logMessage)
|
|
||||||
{
|
|
||||||
logTextBlock.Text += $"[{logMessage.Type}] [{logMessage.ThrowTime.ToShortTimeString()}] {logMessage.Message}\n";
|
|
||||||
}
|
|
||||||
|
|
||||||
private async void ButtonStartBotClick(object? sender, Avalonia.Interactivity.RoutedEventArgs e)
|
|
||||||
{
|
|
||||||
|
|
||||||
Config.Logger.OnLog += async (sender, logMessage) =>
|
|
||||||
{
|
|
||||||
await Dispatcher.UIThread.InvokeAsync(() => SetTextToTB(logMessage), DispatcherPriority.Background);
|
|
||||||
};
|
|
||||||
|
|
||||||
await _DiscordBot.InitializeBot();
|
|
||||||
|
|
||||||
await _DiscordBot.LoadPlugins();
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
private async void SettingsMenuClick(object? sender, Avalonia.Interactivity.RoutedEventArgs e)
|
|
||||||
{
|
|
||||||
//await new SettingsPage().ShowDialog(this);
|
|
||||||
new SettingsPage().Show();
|
|
||||||
}
|
|
||||||
|
|
||||||
private async void PluginsMenuClick(object? sender, Avalonia.Interactivity.RoutedEventArgs e)
|
|
||||||
{
|
|
||||||
//await new PluginsPage().ShowDialog(this);
|
|
||||||
new PluginsPage().Show();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void NewPluginsMenuClick(object? sender, Avalonia.Interactivity.RoutedEventArgs e)
|
|
||||||
{
|
|
||||||
new PluginInstaller().Show();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,33 +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"
|
|
||||||
xmlns:views="clr-namespace:DiscordBotUI.Views;assembly=DiscordBotUI"
|
|
||||||
xmlns:viewmodels="using:DiscordBotUI.ViewModels"
|
|
||||||
mc:Ignorable="d" d:DesignWidth="600" d:DesignHeight="300"
|
|
||||||
x:Class="DiscordBotUI.Views.PluginInstaller"
|
|
||||||
x:DataType="views:PluginInstaller"
|
|
||||||
Title="PluginInstaller"
|
|
||||||
Name="PluginInstallerWindow"
|
|
||||||
>
|
|
||||||
|
|
||||||
<DataGrid Name="dataGridInstallablePlugins" ItemsSource="{Binding Plugins}">
|
|
||||||
<DataGrid.Columns>
|
|
||||||
<DataGridTextColumn Header="Plugin Name" Foreground="Aquamarine" Binding="{Binding Name}"/>
|
|
||||||
<DataGridTextColumn Header="Plugin Version" Binding="{Binding Version}"/>
|
|
||||||
<DataGridTextColumn Header="Plugin Description" Binding="{Binding Description}" Width="*"/>
|
|
||||||
|
|
||||||
<DataGridTemplateColumn Header="Download">
|
|
||||||
<DataGridTemplateColumn.CellTemplate>
|
|
||||||
<DataTemplate DataType="viewmodels:OnlinePlugin">
|
|
||||||
<Button Content="Download"
|
|
||||||
VerticalAlignment="Center"
|
|
||||||
HorizontalAlignment="Center"
|
|
||||||
Command="{Binding InstallPlugin, RelativeSource={RelativeSource AncestorType=views:PluginInstaller}}"
|
|
||||||
CommandParameter="{Binding Name}"/>
|
|
||||||
</DataTemplate>
|
|
||||||
</DataGridTemplateColumn.CellTemplate>
|
|
||||||
</DataGridTemplateColumn>
|
|
||||||
</DataGrid.Columns>
|
|
||||||
</DataGrid>
|
|
||||||
</Window>
|
|
||||||
@@ -1,62 +0,0 @@
|
|||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Collections.ObjectModel;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Windows.Input;
|
|
||||||
|
|
||||||
using Avalonia.Controls;
|
|
||||||
using Avalonia.Interactivity;
|
|
||||||
using Avalonia.Markup.Xaml.Templates;
|
|
||||||
using Avalonia.Media;
|
|
||||||
|
|
||||||
using DiscordBotUI.ViewModels;
|
|
||||||
|
|
||||||
using PluginManager;
|
|
||||||
using PluginManager.Plugin;
|
|
||||||
|
|
||||||
namespace DiscordBotUI.Views;
|
|
||||||
|
|
||||||
public partial class PluginInstaller : Window
|
|
||||||
{
|
|
||||||
|
|
||||||
public ObservableCollection<OnlinePlugin> Plugins { get; private set; }
|
|
||||||
|
|
||||||
public PluginInstaller()
|
|
||||||
{
|
|
||||||
InitializeComponent();
|
|
||||||
Loaded += OnPageLoaded;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
private async void OnPageLoaded(object? sender, RoutedEventArgs e)
|
|
||||||
{
|
|
||||||
if (Config.PluginsManager is null) return;
|
|
||||||
|
|
||||||
List<PluginOnlineInfo>? onlineInfos = await Config.PluginsManager.GetPluginsList();
|
|
||||||
|
|
||||||
if(onlineInfos is null) return;
|
|
||||||
|
|
||||||
List<OnlinePlugin> plugins = new List<OnlinePlugin>();
|
|
||||||
|
|
||||||
foreach(PluginOnlineInfo onlinePlugin in onlineInfos)
|
|
||||||
{
|
|
||||||
plugins.Add(new OnlinePlugin(onlinePlugin.Name, onlinePlugin.Description, onlinePlugin.Version.ToShortString()));
|
|
||||||
}
|
|
||||||
|
|
||||||
Plugins = new ObservableCollection<OnlinePlugin>(plugins);
|
|
||||||
|
|
||||||
dataGridInstallablePlugins.ItemsSource = Plugins;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public async void InstallPlugin(string name)
|
|
||||||
{
|
|
||||||
|
|
||||||
PluginOnlineInfo? info = await Config.PluginsManager.GetPluginDataByName(name);
|
|
||||||
if(info is null) return;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
await Config.PluginsManager.InstallPlugin(info, null);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,25 +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="800" d:DesignHeight="450"
|
|
||||||
xmlns:model ="clr-namespace:DiscordBotUI.Views;assembly=DiscordBotUI"
|
|
||||||
x:Class="DiscordBotUI.Views.PluginsPage"
|
|
||||||
Title="Plugins Page"
|
|
||||||
x:DataType="model:PluginsPage">
|
|
||||||
|
|
||||||
|
|
||||||
<DataGrid Name="dataGridPlugins" Margin="20" ItemsSource="{Binding Plugins}"
|
|
||||||
IsReadOnly="False"
|
|
||||||
CanUserSortColumns="False"
|
|
||||||
GridLinesVisibility="All"
|
|
||||||
AutoGenerateColumns="False"
|
|
||||||
BorderThickness="1" BorderBrush="Gray">
|
|
||||||
|
|
||||||
<DataGrid.Columns>
|
|
||||||
<DataGridTextColumn Header="Plugin Name" Foreground="Aquamarine" Binding="{Binding Name}"/>
|
|
||||||
<DataGridTextColumn Header="Plugin Version" Binding="{Binding Version}"/>
|
|
||||||
<DataGridCheckBoxColumn Header="Is Marked for Uninstall" Binding="{Binding IsMarkedToUninstall}"/>
|
|
||||||
</DataGrid.Columns>
|
|
||||||
</DataGrid>
|
|
||||||
</Window>
|
|
||||||
@@ -1,43 +0,0 @@
|
|||||||
using System.Collections.Generic;
|
|
||||||
using System.Collections.ObjectModel;
|
|
||||||
|
|
||||||
using Avalonia.Controls;
|
|
||||||
using Avalonia.Interactivity;
|
|
||||||
|
|
||||||
using DiscordBotUI.ViewModels;
|
|
||||||
|
|
||||||
using PluginManager;
|
|
||||||
|
|
||||||
namespace DiscordBotUI.Views;
|
|
||||||
|
|
||||||
|
|
||||||
public partial class PluginsPage: Window
|
|
||||||
{
|
|
||||||
|
|
||||||
public ObservableCollection<Plugin> Plugins { get; private set; }
|
|
||||||
|
|
||||||
public PluginsPage()
|
|
||||||
{
|
|
||||||
InitializeComponent();
|
|
||||||
Loaded += OnPageLoaded;
|
|
||||||
}
|
|
||||||
|
|
||||||
private async void OnPageLoaded(object? sender, RoutedEventArgs e)
|
|
||||||
{
|
|
||||||
if (Config.PluginsManager is null) return;
|
|
||||||
|
|
||||||
var plugins = await Config.PluginsManager.GetInstalledPlugins();
|
|
||||||
var localList = new List<Plugin>();
|
|
||||||
foreach (var plugin in plugins)
|
|
||||||
{
|
|
||||||
localList.Add(new Plugin(plugin.PluginName, plugin.PluginVersion.ToShortString(), plugin.IsMarkedToUninstall));
|
|
||||||
}
|
|
||||||
|
|
||||||
Plugins = new ObservableCollection<Plugin>(localList);
|
|
||||||
|
|
||||||
|
|
||||||
dataGridPlugins.ItemsSource = Plugins;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,26 +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="200"
|
|
||||||
x:Class="DiscordBotUI.Views.SettingsPage"
|
|
||||||
Title="SettingsPage" Width="500" Height="200" MinWidth="500" MaxWidth="500" MinHeight="200" MaxHeight="200">
|
|
||||||
<RelativePanel Margin="10,10,10,0">
|
|
||||||
<Label Content="Bot Token: " Name="labelToken" RelativePanel.AlignTopWithPanel="True"/>
|
|
||||||
<TextBox Name="textBoxToken" Text="" IsReadOnly="False" RelativePanel.AlignRightWithPanel="True" Width="350" />
|
|
||||||
|
|
||||||
<Label Content="Bot Prefix: " Name="labelPrefix" RelativePanel.Below="labelToken" Margin="0,20,0,0"/>
|
|
||||||
<TextBox Name="textBoxPrefix" Text="" RelativePanel.AlignRightWithPanel="True" RelativePanel.Below="textBoxToken"
|
|
||||||
IsReadOnly="False" Margin="0,10,0,0" Width="350" />
|
|
||||||
|
|
||||||
<Label Content="Server Id: " Name="labelServerId" RelativePanel.Below="labelPrefix" Margin="0,20,0,0"/>
|
|
||||||
<TextBox Name="textBoxServerId" Text="" RelativePanel.AlignRightWithPanel="True"
|
|
||||||
IsReadOnly="False" RelativePanel.Below="textBoxPrefix" Margin="0,10,0,0" Width="350" />
|
|
||||||
|
|
||||||
<Label Name="labelErrorMessage" Foreground="Red" RelativePanel.Below="textBoxServerId" />
|
|
||||||
|
|
||||||
<Button Name="buttonSaveSettings" Click="ButtonSaveSettingsClick" Content="Save" RelativePanel.AlignBottomWithPanel="True" Margin="0,-50,0,0"
|
|
||||||
Width="120" Height="40" Background="#FF008CFF" Foreground="White" BorderThickness="0" CornerRadius="5" FontWeight="Bold"
|
|
||||||
RelativePanel.AlignHorizontalCenterWithPanel="True" />
|
|
||||||
</RelativePanel>
|
|
||||||
</Window>
|
|
||||||
@@ -1,44 +0,0 @@
|
|||||||
using Avalonia.Controls;
|
|
||||||
|
|
||||||
using PluginManager;
|
|
||||||
|
|
||||||
namespace DiscordBotUI.Views;
|
|
||||||
|
|
||||||
public partial class SettingsPage : Window
|
|
||||||
{
|
|
||||||
public SettingsPage()
|
|
||||||
{
|
|
||||||
InitializeComponent();
|
|
||||||
}
|
|
||||||
|
|
||||||
private async void ButtonSaveSettingsClick(object? sender, Avalonia.Interactivity.RoutedEventArgs e)
|
|
||||||
{
|
|
||||||
string token = textBoxToken.Text;
|
|
||||||
string botPrefix = textBoxPrefix.Text;
|
|
||||||
string serverId = textBoxServerId.Text;
|
|
||||||
|
|
||||||
if (string.IsNullOrWhiteSpace(serverId)) serverId = string.Empty;
|
|
||||||
if (string.IsNullOrWhiteSpace(token))
|
|
||||||
{
|
|
||||||
labelErrorMessage.Content = "The token is invalid";
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(string.IsNullOrWhiteSpace(botPrefix) || botPrefix.Length > 1 || botPrefix.Length < 1)
|
|
||||||
{
|
|
||||||
labelErrorMessage.Content = "The prefix is invalid";
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
Config.AppSettings.Add("token", token);
|
|
||||||
Config.AppSettings.Add("prefix", botPrefix);
|
|
||||||
Config.AppSettings.Add("ServerID", serverId);
|
|
||||||
|
|
||||||
await Config.AppSettings.SaveToFile();
|
|
||||||
|
|
||||||
Config.Logger.Log("Config Saved");
|
|
||||||
|
|
||||||
Close();
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
69
DiscordBotWithAPI.sln
Normal file
69
DiscordBotWithAPI.sln
Normal file
@@ -0,0 +1,69 @@
|
|||||||
|
|
||||||
|
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||||
|
# Visual Studio Version 17
|
||||||
|
VisualStudioVersion = 17.1.32421.90
|
||||||
|
MinimumVisualStudioVersion = 10.0.40219.1
|
||||||
|
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DiscordBot", "DiscordBot\DiscordBot.csproj", "{087E64F4-1E1C-4899-8223-295356C9894A}"
|
||||||
|
EndProject
|
||||||
|
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PluginManager", "PluginManager\PluginManager.csproj", "{EDD4D9B3-98DD-4367-A09F-D1C5ACB61132}"
|
||||||
|
EndProject
|
||||||
|
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Plugins", "Plugins", "{1862ABD5-7C30-4F15-A561-45AC8A9CA10E}"
|
||||||
|
EndProject
|
||||||
|
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Events", "Events", "{A290C028-77C4-4D1D-AB43-DDFE6ABD9012}"
|
||||||
|
EndProject
|
||||||
|
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Commands", "Commands", "{449FA364-0B72-43FF-B3A3-806E2916200E}"
|
||||||
|
EndProject
|
||||||
|
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CMD_Utils", "CMD_Utils\CMD_Utils.csproj", "{E26C87A4-3DD6-4B58-B14B-C8E086B852F9}"
|
||||||
|
EndProject
|
||||||
|
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MusicCommands", "MusicCommands\MusicCommands.csproj", "{B1B4976E-5112-4217-B57B-3A03C5207B6E}"
|
||||||
|
EndProject
|
||||||
|
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EVE_LevelingSystem", "EVE_LevelingSystem\EVE_LevelingSystem.csproj", "{EEC445DC-0C4B-43EA-8694-606BA0390B77}"
|
||||||
|
EndProject
|
||||||
|
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CMD_LevelingSystem", "CMD_LevelingSystem\CMD_LevelingSystem.csproj", "{1A4E49FF-9A0A-4C54-AF35-CFFBA64353D9}"
|
||||||
|
EndProject
|
||||||
|
Global
|
||||||
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
|
Debug|Any CPU = Debug|Any CPU
|
||||||
|
Release|Any CPU = Release|Any CPU
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||||
|
{087E64F4-1E1C-4899-8223-295356C9894A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{087E64F4-1E1C-4899-8223-295356C9894A}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{087E64F4-1E1C-4899-8223-295356C9894A}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{087E64F4-1E1C-4899-8223-295356C9894A}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{EDD4D9B3-98DD-4367-A09F-D1C5ACB61132}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{EDD4D9B3-98DD-4367-A09F-D1C5ACB61132}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{EDD4D9B3-98DD-4367-A09F-D1C5ACB61132}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{EDD4D9B3-98DD-4367-A09F-D1C5ACB61132}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{E26C87A4-3DD6-4B58-B14B-C8E086B852F9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{E26C87A4-3DD6-4B58-B14B-C8E086B852F9}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{E26C87A4-3DD6-4B58-B14B-C8E086B852F9}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{E26C87A4-3DD6-4B58-B14B-C8E086B852F9}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{B1B4976E-5112-4217-B57B-3A03C5207B6E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{B1B4976E-5112-4217-B57B-3A03C5207B6E}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{B1B4976E-5112-4217-B57B-3A03C5207B6E}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{B1B4976E-5112-4217-B57B-3A03C5207B6E}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{EEC445DC-0C4B-43EA-8694-606BA0390B77}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{EEC445DC-0C4B-43EA-8694-606BA0390B77}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{EEC445DC-0C4B-43EA-8694-606BA0390B77}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{EEC445DC-0C4B-43EA-8694-606BA0390B77}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{1A4E49FF-9A0A-4C54-AF35-CFFBA64353D9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{1A4E49FF-9A0A-4C54-AF35-CFFBA64353D9}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{1A4E49FF-9A0A-4C54-AF35-CFFBA64353D9}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{1A4E49FF-9A0A-4C54-AF35-CFFBA64353D9}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
|
HideSolutionNode = FALSE
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(NestedProjects) = preSolution
|
||||||
|
{A290C028-77C4-4D1D-AB43-DDFE6ABD9012} = {1862ABD5-7C30-4F15-A561-45AC8A9CA10E}
|
||||||
|
{449FA364-0B72-43FF-B3A3-806E2916200E} = {1862ABD5-7C30-4F15-A561-45AC8A9CA10E}
|
||||||
|
{E26C87A4-3DD6-4B58-B14B-C8E086B852F9} = {449FA364-0B72-43FF-B3A3-806E2916200E}
|
||||||
|
{B1B4976E-5112-4217-B57B-3A03C5207B6E} = {449FA364-0B72-43FF-B3A3-806E2916200E}
|
||||||
|
{EEC445DC-0C4B-43EA-8694-606BA0390B77} = {A290C028-77C4-4D1D-AB43-DDFE6ABD9012}
|
||||||
|
{1A4E49FF-9A0A-4C54-AF35-CFFBA64353D9} = {449FA364-0B72-43FF-B3A3-806E2916200E}
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||||
|
SolutionGuid = {3FB3C5DE-ED21-4D2E-ABDD-3A00EE4A2FFF}
|
||||||
|
EndGlobalSection
|
||||||
|
EndGlobal
|
||||||
20
EVE_LevelingSystem/EVE_LevelingSystem.csproj
Normal file
20
EVE_LevelingSystem/EVE_LevelingSystem.csproj
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<TargetFramework>net6.0</TargetFramework>
|
||||||
|
<ImplicitUsings>enable</ImplicitUsings>
|
||||||
|
<Nullable>enable</Nullable>
|
||||||
|
<BaseOutputPath>..\DiscordBot\bin\Debug\net6.0\Data\Plugins\Events\LevelingSystem</BaseOutputPath>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<Compile Remove="bin\**" />
|
||||||
|
<EmbeddedResource Remove="bin\**" />
|
||||||
|
<None Remove="bin\**" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="..\PluginManager\PluginManager.csproj" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
</Project>
|
||||||
54
EVE_LevelingSystem/Level.cs
Normal file
54
EVE_LevelingSystem/Level.cs
Normal file
@@ -0,0 +1,54 @@
|
|||||||
|
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");
|
||||||
|
Config.AddValueToVariables("LevelingSystemPath", "./Data/Resources/LevelingSystem", true);
|
||||||
|
Config.AddValueToVariables("LevelingSystemSettingsFile", "./Data/Resources/LevelingSystemSettings.txt", true);
|
||||||
|
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
57
EVE_LevelingSystem/LevelingSystemCore/LevelCalculator.cs
Normal file
57
EVE_LevelingSystem/LevelingSystemCore/LevelCalculator.cs
Normal file
@@ -0,0 +1,57 @@
|
|||||||
|
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(2, 12);
|
||||||
|
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());
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
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; }
|
||||||
|
}
|
||||||
|
}
|
||||||
13
EVE_LevelingSystem/Settings.cs
Normal file
13
EVE_LevelingSystem/Settings.cs
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
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; }
|
||||||
|
}
|
||||||
|
}
|
||||||
12
MusicCommands/Data.cs
Normal file
12
MusicCommands/Data.cs
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
using Discord;
|
||||||
|
using Discord.Audio;
|
||||||
|
|
||||||
|
namespace MusicCommands;
|
||||||
|
|
||||||
|
internal static class Data
|
||||||
|
{
|
||||||
|
internal static IAudioClient audioClient = null;
|
||||||
|
internal static IVoiceChannel voiceChannel = null;
|
||||||
|
|
||||||
|
internal static MusicPlayer CurrentlyRunning = null;
|
||||||
|
}
|
||||||
31
MusicCommands/Leave.cs
Normal file
31
MusicCommands/Leave.cs
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
using Discord.Commands;
|
||||||
|
using Discord.WebSocket;
|
||||||
|
using PluginManager.Interfaces;
|
||||||
|
|
||||||
|
namespace MusicCommands;
|
||||||
|
|
||||||
|
internal class Leave : DBCommand
|
||||||
|
{
|
||||||
|
public string Command => "leave";
|
||||||
|
|
||||||
|
public string Description => "Leave the voice channel";
|
||||||
|
|
||||||
|
public string Usage => "leave";
|
||||||
|
|
||||||
|
public bool canUseDM => false;
|
||||||
|
|
||||||
|
public bool canUseServer => true;
|
||||||
|
|
||||||
|
public bool requireAdmin => false;
|
||||||
|
|
||||||
|
public async void Execute(SocketCommandContext context, SocketMessage message, DiscordSocketClient client, bool isDM)
|
||||||
|
{
|
||||||
|
if (Data.audioClient is not null && Data.voiceChannel is not null)
|
||||||
|
{
|
||||||
|
Data.CurrentlyRunning.Stop();
|
||||||
|
Data.CurrentlyRunning = null;
|
||||||
|
await Data.audioClient.StopAsync();
|
||||||
|
await Data.voiceChannel.DisconnectAsync();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
20
MusicCommands/MusicCommands.csproj
Normal file
20
MusicCommands/MusicCommands.csproj
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<TargetFramework>net6.0</TargetFramework>
|
||||||
|
<Nullable>warnings</Nullable>
|
||||||
|
<BaseOutputPath>..\DiscordBot\bin\Debug\net6.0\Data\Plugins\Commands\MusicCommands</BaseOutputPath>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
|
||||||
|
<OutputPath>../BUILDS/</OutputPath>
|
||||||
|
<ErrorReport>none</ErrorReport>
|
||||||
|
<DebugType>none</DebugType>
|
||||||
|
<DebugSymbols>false</DebugSymbols>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="..\PluginManager\PluginManager.csproj" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
</Project>
|
||||||
118
MusicCommands/MusicPlayer.cs
Normal file
118
MusicCommands/MusicPlayer.cs
Normal file
@@ -0,0 +1,118 @@
|
|||||||
|
using System;
|
||||||
|
using System.IO;
|
||||||
|
using System.Net.Http;
|
||||||
|
using System.Threading;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using PluginManager.Others;
|
||||||
|
|
||||||
|
namespace MusicCommands;
|
||||||
|
|
||||||
|
internal class MusicPlayer
|
||||||
|
{
|
||||||
|
public MusicPlayer(Stream input, Stream output)
|
||||||
|
{
|
||||||
|
inputStream = input;
|
||||||
|
outputStream = output;
|
||||||
|
}
|
||||||
|
|
||||||
|
public MusicPlayer(Stream output)
|
||||||
|
{
|
||||||
|
inputStream = null;
|
||||||
|
outputStream = output;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Stream inputStream { get; } // from FFMPEG
|
||||||
|
public Stream outputStream { get; } // to Voice Channel
|
||||||
|
|
||||||
|
public bool Paused { get; set; }
|
||||||
|
private bool _stop { get; set; }
|
||||||
|
|
||||||
|
public void Stop()
|
||||||
|
{
|
||||||
|
_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();
|
||||||
|
var bsize = 512;
|
||||||
|
new Thread(async delegate(object o)
|
||||||
|
{
|
||||||
|
var response = await new HttpClient().GetAsync(URL);
|
||||||
|
using (var stream = await response.Content.ReadAsStreamAsync())
|
||||||
|
{
|
||||||
|
var 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;
|
||||||
|
var buffer = new byte[bsize];
|
||||||
|
var 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;
|
||||||
|
var bsize = 512;
|
||||||
|
var buffer = new byte[bsize];
|
||||||
|
var bcount = await inputStream.ReadAsync(buffer, 0, bsize);
|
||||||
|
if (bcount <= 0)
|
||||||
|
{
|
||||||
|
Stop();
|
||||||
|
Data.CurrentlyRunning = null;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
await outputStream.WriteAsync(buffer, 0, bcount);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
await outputStream.FlushAsync();
|
||||||
|
Functions.WriteLogFile(ex.ToString());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
25
MusicCommands/Pause.cs
Normal file
25
MusicCommands/Pause.cs
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
using Discord.Commands;
|
||||||
|
using Discord.WebSocket;
|
||||||
|
using PluginManager.Interfaces;
|
||||||
|
|
||||||
|
namespace MusicCommands;
|
||||||
|
|
||||||
|
internal class Pause : DBCommand
|
||||||
|
{
|
||||||
|
public string Command => "pause";
|
||||||
|
|
||||||
|
public string Description => "Pause the music";
|
||||||
|
|
||||||
|
public string Usage => "pause";
|
||||||
|
|
||||||
|
public bool canUseDM => false;
|
||||||
|
|
||||||
|
public bool canUseServer => true;
|
||||||
|
|
||||||
|
public bool requireAdmin => false;
|
||||||
|
|
||||||
|
public void Execute(SocketCommandContext context, SocketMessage message, DiscordSocketClient client, bool isDM)
|
||||||
|
{
|
||||||
|
Data.CurrentlyRunning.Paused = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
62
MusicCommands/Play.cs
Normal file
62
MusicCommands/Play.cs
Normal file
@@ -0,0 +1,62 @@
|
|||||||
|
using System;
|
||||||
|
using System.Diagnostics;
|
||||||
|
using System.IO;
|
||||||
|
using Discord;
|
||||||
|
using Discord.Audio;
|
||||||
|
using Discord.Commands;
|
||||||
|
using Discord.WebSocket;
|
||||||
|
using PluginManager.Interfaces;
|
||||||
|
using PluginManager.Others;
|
||||||
|
|
||||||
|
namespace MusicCommands;
|
||||||
|
|
||||||
|
internal class Play : DBCommand
|
||||||
|
{
|
||||||
|
public string Command => "fplay";
|
||||||
|
|
||||||
|
public string Description => "Play music from a file";
|
||||||
|
|
||||||
|
public string Usage => "fplay [name]";
|
||||||
|
|
||||||
|
public bool canUseDM => false;
|
||||||
|
|
||||||
|
public bool canUseServer => true;
|
||||||
|
|
||||||
|
public bool requireAdmin => false;
|
||||||
|
|
||||||
|
public async void Execute(SocketCommandContext context, SocketMessage message, DiscordSocketClient client, bool isDM)
|
||||||
|
{
|
||||||
|
var path = "./Music";
|
||||||
|
var FileName = Functions.GetArguments(message).ToArray().MergeStrings(0);
|
||||||
|
path += "/" + FileName + ".ogg";
|
||||||
|
if (!File.Exists(path))
|
||||||
|
{
|
||||||
|
Console.WriteLine("Unknown path " + path);
|
||||||
|
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 ffmpeg = CreateStream(path))
|
||||||
|
using (var output = ffmpeg.StandardOutput.BaseStream)
|
||||||
|
using (var discord = Data.audioClient.CreatePCMStream(AudioApplication.Mixed))
|
||||||
|
{
|
||||||
|
if (Data.CurrentlyRunning != null) Data.CurrentlyRunning.Stop();
|
||||||
|
Data.CurrentlyRunning = new MusicPlayer(output, discord);
|
||||||
|
await Data.CurrentlyRunning.StartSendAudio();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private Process CreateStream(string path)
|
||||||
|
{
|
||||||
|
return Process.Start(new ProcessStartInfo { FileName = "ffmpeg", Arguments = $"-hide_banner -loglevel panic -i \"{path}\" -ac 2 -f s16le -ar 48000 pipe:1", UseShellExecute = false, RedirectStandardOutput = true });
|
||||||
|
}
|
||||||
|
}
|
||||||
25
MusicCommands/Unpause.cs
Normal file
25
MusicCommands/Unpause.cs
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
using Discord.Commands;
|
||||||
|
using Discord.WebSocket;
|
||||||
|
using PluginManager.Interfaces;
|
||||||
|
|
||||||
|
namespace MusicCommands;
|
||||||
|
|
||||||
|
internal 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;
|
||||||
|
}
|
||||||
|
}
|
||||||
49
MusicCommands/lplay.cs
Normal file
49
MusicCommands/lplay.cs
Normal file
@@ -0,0 +1,49 @@
|
|||||||
|
using Discord;
|
||||||
|
using Discord.Audio;
|
||||||
|
using Discord.Commands;
|
||||||
|
using Discord.WebSocket;
|
||||||
|
using PluginManager.Interfaces;
|
||||||
|
|
||||||
|
namespace MusicCommands;
|
||||||
|
|
||||||
|
internal 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)
|
||||||
|
{
|
||||||
|
var 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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user