diff --git a/BUILDS/net6.0/CMD_LevelingSystem.deps.json b/BUILDS/net6.0/CMD_LevelingSystem.deps.json deleted file mode 100644 index ab0049d..0000000 --- a/BUILDS/net6.0/CMD_LevelingSystem.deps.json +++ /dev/null @@ -1,268 +0,0 @@ -{ - "runtimeTarget": { - "name": ".NETCoreApp,Version=v6.0", - "signature": "" - }, - "compilationOptions": {}, - "targets": { - ".NETCoreApp,Version=v6.0": { - "CMD_LevelingSystem/1.0.0": { - "dependencies": { - "PluginManager": "1.0.0" - }, - "runtime": { - "CMD_LevelingSystem.dll": {} - } - }, - "Discord.Net/3.6.1": { - "dependencies": { - "Discord.Net.Commands": "3.6.1", - "Discord.Net.Core": "3.6.1", - "Discord.Net.Interactions": "3.6.1", - "Discord.Net.Rest": "3.6.1", - "Discord.Net.WebSocket": "3.6.1", - "Discord.Net.Webhook": "3.6.1" - } - }, - "Discord.Net.Commands/3.6.1": { - "dependencies": { - "Discord.Net.Core": "3.6.1" - }, - "runtime": { - "lib/net6.0/Discord.Net.Commands.dll": { - "assemblyVersion": "3.6.1.0", - "fileVersion": "3.6.1.0" - } - } - }, - "Discord.Net.Core/3.6.1": { - "dependencies": { - "Newtonsoft.Json": "13.0.1", - "System.Collections.Immutable": "5.0.0", - "System.Interactive.Async": "5.0.0", - "System.ValueTuple": "4.5.0" - }, - "runtime": { - "lib/net6.0/Discord.Net.Core.dll": { - "assemblyVersion": "3.6.1.0", - "fileVersion": "3.6.1.0" - } - } - }, - "Discord.Net.Interactions/3.6.1": { - "dependencies": { - "Discord.Net.Core": "3.6.1", - "Discord.Net.Rest": "3.6.1", - "Discord.Net.WebSocket": "3.6.1", - "Microsoft.Extensions.DependencyInjection.Abstractions": "5.0.0", - "System.Collections.Immutable": "5.0.0", - "System.Reactive": "5.0.0" - }, - "runtime": { - "lib/net6.0/Discord.Net.Interactions.dll": { - "assemblyVersion": "3.6.1.0", - "fileVersion": "3.6.1.0" - } - } - }, - "Discord.Net.Rest/3.6.1": { - "dependencies": { - "Discord.Net.Core": "3.6.1" - }, - "runtime": { - "lib/net6.0/Discord.Net.Rest.dll": { - "assemblyVersion": "3.6.1.0", - "fileVersion": "3.6.1.0" - } - } - }, - "Discord.Net.Webhook/3.6.1": { - "dependencies": { - "Discord.Net.Core": "3.6.1", - "Discord.Net.Rest": "3.6.1" - }, - "runtime": { - "lib/net6.0/Discord.Net.Webhook.dll": { - "assemblyVersion": "3.6.1.0", - "fileVersion": "3.6.1.0" - } - } - }, - "Discord.Net.WebSocket/3.6.1": { - "dependencies": { - "Discord.Net.Core": "3.6.1", - "Discord.Net.Rest": "3.6.1" - }, - "runtime": { - "lib/net6.0/Discord.Net.WebSocket.dll": { - "assemblyVersion": "3.6.1.0", - "fileVersion": "3.6.1.0" - } - } - }, - "Microsoft.Extensions.DependencyInjection.Abstractions/5.0.0": { - "runtime": { - "lib/netstandard2.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll": { - "assemblyVersion": "5.0.0.0", - "fileVersion": "5.0.20.51904" - } - } - }, - "Newtonsoft.Json/13.0.1": { - "runtime": { - "lib/netstandard2.0/Newtonsoft.Json.dll": { - "assemblyVersion": "13.0.0.0", - "fileVersion": "13.0.1.25517" - } - } - }, - "System.Collections.Immutable/5.0.0": {}, - "System.Interactive.Async/5.0.0": { - "dependencies": { - "System.Linq.Async": "5.0.0" - }, - "runtime": { - "lib/netcoreapp3.1/System.Interactive.Async.dll": { - "assemblyVersion": "5.0.0.0", - "fileVersion": "5.0.0.1" - } - } - }, - "System.Linq.Async/5.0.0": { - "runtime": { - "lib/netcoreapp3.1/System.Linq.Async.dll": { - "assemblyVersion": "5.0.0.0", - "fileVersion": "5.0.0.1" - } - } - }, - "System.Reactive/5.0.0": { - "runtime": { - "lib/net5.0/System.Reactive.dll": { - "assemblyVersion": "5.0.0.0", - "fileVersion": "5.0.0.1" - } - } - }, - "System.ValueTuple/4.5.0": {}, - "PluginManager/1.0.0": { - "dependencies": { - "Discord.Net": "3.6.1" - }, - "runtime": { - "PluginManager.dll": {} - } - } - } - }, - "libraries": { - "CMD_LevelingSystem/1.0.0": { - "type": "project", - "serviceable": false, - "sha512": "" - }, - "Discord.Net/3.6.1": { - "type": "package", - "serviceable": true, - "sha512": "sha512-TfcL/HG57fVt//WVJ2XyF2PlytY9IYkkwwkPLIhvu5FW4wf9rm7+N8RPh4qtELLfsa5ES0FK2RbgYjABRR9AjA==", - "path": "discord.net/3.6.1", - "hashPath": "discord.net.3.6.1.nupkg.sha512" - }, - "Discord.Net.Commands/3.6.1": { - "type": "package", - "serviceable": true, - "sha512": "sha512-kK7m571yzSzPd93o+n8Z+TfvX62BT1HtOEZIWXKwXWO8itP/sgqBNExjWK/6DOpkbD6+khc2f3rp+TA0rJD88g==", - "path": "discord.net.commands/3.6.1", - "hashPath": "discord.net.commands.3.6.1.nupkg.sha512" - }, - "Discord.Net.Core/3.6.1": { - "type": "package", - "serviceable": true, - "sha512": "sha512-ibVjQiWzgqh0GyP/GXE2kv3TA/9ysmmNFG/WmRE7GepQQAXXGxVUO9IMJ8h14EvIXMQ0m0DktMe5DkUnilo3Ag==", - "path": "discord.net.core/3.6.1", - "hashPath": "discord.net.core.3.6.1.nupkg.sha512" - }, - "Discord.Net.Interactions/3.6.1": { - "type": "package", - "serviceable": true, - "sha512": "sha512-WGOxz6SMUu4WS5b/JdrhlwQletcplBIYqvjFBBDfnqE+uNJqcNGtAdyjLqIILfXGx8aSSSSYZSCeAUa7FZ8Yew==", - "path": "discord.net.interactions/3.6.1", - "hashPath": "discord.net.interactions.3.6.1.nupkg.sha512" - }, - "Discord.Net.Rest/3.6.1": { - "type": "package", - "serviceable": true, - "sha512": "sha512-T7RRThIS23roFEJwTL1l7aawjVyn7ZB5yH3tMge0d6TiCzzp4V4FAZ+ArTt19LHRFhPly90v8V3sWqmTMN+5Zg==", - "path": "discord.net.rest/3.6.1", - "hashPath": "discord.net.rest.3.6.1.nupkg.sha512" - }, - "Discord.Net.Webhook/3.6.1": { - "type": "package", - "serviceable": true, - "sha512": "sha512-xikKHIGAIMz0BzHkaTKb48DNpFjKW8mvJjLJSezJ1xQOu+laHNk/hav4qxVtyZz7HSI/vGTkmlq9hKVhWzpaUA==", - "path": "discord.net.webhook/3.6.1", - "hashPath": "discord.net.webhook.3.6.1.nupkg.sha512" - }, - "Discord.Net.WebSocket/3.6.1": { - "type": "package", - "serviceable": true, - "sha512": "sha512-hF22Xy7URlVEDQZ69INOgzPvFUsIDfd+r6U+1yF9HWdBn3d4THnvAAhkv1TraSx/T/MKS7g+jvk/HZ3mh5S3aw==", - "path": "discord.net.websocket/3.6.1", - "hashPath": "discord.net.websocket.3.6.1.nupkg.sha512" - }, - "Microsoft.Extensions.DependencyInjection.Abstractions/5.0.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-ORj7Zh81gC69TyvmcUm9tSzytcy8AVousi+IVRAI8nLieQjOFryRusSFh7+aLk16FN9pQNqJAiMd7BTKINK0kA==", - "path": "microsoft.extensions.dependencyinjection.abstractions/5.0.0", - "hashPath": "microsoft.extensions.dependencyinjection.abstractions.5.0.0.nupkg.sha512" - }, - "Newtonsoft.Json/13.0.1": { - "type": "package", - "serviceable": true, - "sha512": "sha512-ppPFpBcvxdsfUonNcvITKqLl3bqxWbDCZIzDWHzjpdAHRFfZe0Dw9HmA0+za13IdyrgJwpkDTDA9fHaxOrt20A==", - "path": "newtonsoft.json/13.0.1", - "hashPath": "newtonsoft.json.13.0.1.nupkg.sha512" - }, - "System.Collections.Immutable/5.0.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-FXkLXiK0sVVewcso0imKQoOxjoPAj42R8HtjjbSjVPAzwDfzoyoznWxgA3c38LDbN9SJux1xXoXYAhz98j7r2g==", - "path": "system.collections.immutable/5.0.0", - "hashPath": "system.collections.immutable.5.0.0.nupkg.sha512" - }, - "System.Interactive.Async/5.0.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-QaqhQVDiULcu4vm6o89+iP329HcK44cETHOYgy/jfEjtzeFy0ZxmuM7nel9ocjnKxEM4yh1mli7hgh8Q9o+/Iw==", - "path": "system.interactive.async/5.0.0", - "hashPath": "system.interactive.async.5.0.0.nupkg.sha512" - }, - "System.Linq.Async/5.0.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-cPtIuuH8TIjVHSi2ewwReWGW1PfChPE0LxPIDlfwVcLuTM9GANFTXiMB7k3aC4sk3f0cQU25LNKzx+jZMxijqw==", - "path": "system.linq.async/5.0.0", - "hashPath": "system.linq.async.5.0.0.nupkg.sha512" - }, - "System.Reactive/5.0.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-erBZjkQHWL9jpasCE/0qKAryzVBJFxGHVBAvgRN1bzM0q2s1S4oYREEEL0Vb+1kA/6BKb5FjUZMp5VXmy+gzkQ==", - "path": "system.reactive/5.0.0", - "hashPath": "system.reactive.5.0.0.nupkg.sha512" - }, - "System.ValueTuple/4.5.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-okurQJO6NRE/apDIP23ajJ0hpiNmJ+f0BwOlB/cSqTLQlw5upkf+5+96+iG2Jw40G1fCVCyPz/FhIABUjMR+RQ==", - "path": "system.valuetuple/4.5.0", - "hashPath": "system.valuetuple.4.5.0.nupkg.sha512" - }, - "PluginManager/1.0.0": { - "type": "project", - "serviceable": false, - "sha512": "" - } - } -} \ No newline at end of file diff --git a/BUILDS/net6.0/CMD_LevelingSystem.dll b/BUILDS/net6.0/CMD_LevelingSystem.dll deleted file mode 100644 index c69f2b3..0000000 Binary files a/BUILDS/net6.0/CMD_LevelingSystem.dll and /dev/null differ diff --git a/BUILDS/net6.0/EVE_LevelingSystem.deps.json b/BUILDS/net6.0/EVE_LevelingSystem.deps.json deleted file mode 100644 index 1b99176..0000000 --- a/BUILDS/net6.0/EVE_LevelingSystem.deps.json +++ /dev/null @@ -1,268 +0,0 @@ -{ - "runtimeTarget": { - "name": ".NETCoreApp,Version=v6.0", - "signature": "" - }, - "compilationOptions": {}, - "targets": { - ".NETCoreApp,Version=v6.0": { - "EVE_LevelingSystem/1.0.0": { - "dependencies": { - "PluginManager": "1.0.0" - }, - "runtime": { - "EVE_LevelingSystem.dll": {} - } - }, - "Discord.Net/3.6.1": { - "dependencies": { - "Discord.Net.Commands": "3.6.1", - "Discord.Net.Core": "3.6.1", - "Discord.Net.Interactions": "3.6.1", - "Discord.Net.Rest": "3.6.1", - "Discord.Net.WebSocket": "3.6.1", - "Discord.Net.Webhook": "3.6.1" - } - }, - "Discord.Net.Commands/3.6.1": { - "dependencies": { - "Discord.Net.Core": "3.6.1" - }, - "runtime": { - "lib/net6.0/Discord.Net.Commands.dll": { - "assemblyVersion": "3.6.1.0", - "fileVersion": "3.6.1.0" - } - } - }, - "Discord.Net.Core/3.6.1": { - "dependencies": { - "Newtonsoft.Json": "13.0.1", - "System.Collections.Immutable": "5.0.0", - "System.Interactive.Async": "5.0.0", - "System.ValueTuple": "4.5.0" - }, - "runtime": { - "lib/net6.0/Discord.Net.Core.dll": { - "assemblyVersion": "3.6.1.0", - "fileVersion": "3.6.1.0" - } - } - }, - "Discord.Net.Interactions/3.6.1": { - "dependencies": { - "Discord.Net.Core": "3.6.1", - "Discord.Net.Rest": "3.6.1", - "Discord.Net.WebSocket": "3.6.1", - "Microsoft.Extensions.DependencyInjection.Abstractions": "5.0.0", - "System.Collections.Immutable": "5.0.0", - "System.Reactive": "5.0.0" - }, - "runtime": { - "lib/net6.0/Discord.Net.Interactions.dll": { - "assemblyVersion": "3.6.1.0", - "fileVersion": "3.6.1.0" - } - } - }, - "Discord.Net.Rest/3.6.1": { - "dependencies": { - "Discord.Net.Core": "3.6.1" - }, - "runtime": { - "lib/net6.0/Discord.Net.Rest.dll": { - "assemblyVersion": "3.6.1.0", - "fileVersion": "3.6.1.0" - } - } - }, - "Discord.Net.Webhook/3.6.1": { - "dependencies": { - "Discord.Net.Core": "3.6.1", - "Discord.Net.Rest": "3.6.1" - }, - "runtime": { - "lib/net6.0/Discord.Net.Webhook.dll": { - "assemblyVersion": "3.6.1.0", - "fileVersion": "3.6.1.0" - } - } - }, - "Discord.Net.WebSocket/3.6.1": { - "dependencies": { - "Discord.Net.Core": "3.6.1", - "Discord.Net.Rest": "3.6.1" - }, - "runtime": { - "lib/net6.0/Discord.Net.WebSocket.dll": { - "assemblyVersion": "3.6.1.0", - "fileVersion": "3.6.1.0" - } - } - }, - "Microsoft.Extensions.DependencyInjection.Abstractions/5.0.0": { - "runtime": { - "lib/netstandard2.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll": { - "assemblyVersion": "5.0.0.0", - "fileVersion": "5.0.20.51904" - } - } - }, - "Newtonsoft.Json/13.0.1": { - "runtime": { - "lib/netstandard2.0/Newtonsoft.Json.dll": { - "assemblyVersion": "13.0.0.0", - "fileVersion": "13.0.1.25517" - } - } - }, - "System.Collections.Immutable/5.0.0": {}, - "System.Interactive.Async/5.0.0": { - "dependencies": { - "System.Linq.Async": "5.0.0" - }, - "runtime": { - "lib/netcoreapp3.1/System.Interactive.Async.dll": { - "assemblyVersion": "5.0.0.0", - "fileVersion": "5.0.0.1" - } - } - }, - "System.Linq.Async/5.0.0": { - "runtime": { - "lib/netcoreapp3.1/System.Linq.Async.dll": { - "assemblyVersion": "5.0.0.0", - "fileVersion": "5.0.0.1" - } - } - }, - "System.Reactive/5.0.0": { - "runtime": { - "lib/net5.0/System.Reactive.dll": { - "assemblyVersion": "5.0.0.0", - "fileVersion": "5.0.0.1" - } - } - }, - "System.ValueTuple/4.5.0": {}, - "PluginManager/1.0.0": { - "dependencies": { - "Discord.Net": "3.6.1" - }, - "runtime": { - "PluginManager.dll": {} - } - } - } - }, - "libraries": { - "EVE_LevelingSystem/1.0.0": { - "type": "project", - "serviceable": false, - "sha512": "" - }, - "Discord.Net/3.6.1": { - "type": "package", - "serviceable": true, - "sha512": "sha512-TfcL/HG57fVt//WVJ2XyF2PlytY9IYkkwwkPLIhvu5FW4wf9rm7+N8RPh4qtELLfsa5ES0FK2RbgYjABRR9AjA==", - "path": "discord.net/3.6.1", - "hashPath": "discord.net.3.6.1.nupkg.sha512" - }, - "Discord.Net.Commands/3.6.1": { - "type": "package", - "serviceable": true, - "sha512": "sha512-kK7m571yzSzPd93o+n8Z+TfvX62BT1HtOEZIWXKwXWO8itP/sgqBNExjWK/6DOpkbD6+khc2f3rp+TA0rJD88g==", - "path": "discord.net.commands/3.6.1", - "hashPath": "discord.net.commands.3.6.1.nupkg.sha512" - }, - "Discord.Net.Core/3.6.1": { - "type": "package", - "serviceable": true, - "sha512": "sha512-ibVjQiWzgqh0GyP/GXE2kv3TA/9ysmmNFG/WmRE7GepQQAXXGxVUO9IMJ8h14EvIXMQ0m0DktMe5DkUnilo3Ag==", - "path": "discord.net.core/3.6.1", - "hashPath": "discord.net.core.3.6.1.nupkg.sha512" - }, - "Discord.Net.Interactions/3.6.1": { - "type": "package", - "serviceable": true, - "sha512": "sha512-WGOxz6SMUu4WS5b/JdrhlwQletcplBIYqvjFBBDfnqE+uNJqcNGtAdyjLqIILfXGx8aSSSSYZSCeAUa7FZ8Yew==", - "path": "discord.net.interactions/3.6.1", - "hashPath": "discord.net.interactions.3.6.1.nupkg.sha512" - }, - "Discord.Net.Rest/3.6.1": { - "type": "package", - "serviceable": true, - "sha512": "sha512-T7RRThIS23roFEJwTL1l7aawjVyn7ZB5yH3tMge0d6TiCzzp4V4FAZ+ArTt19LHRFhPly90v8V3sWqmTMN+5Zg==", - "path": "discord.net.rest/3.6.1", - "hashPath": "discord.net.rest.3.6.1.nupkg.sha512" - }, - "Discord.Net.Webhook/3.6.1": { - "type": "package", - "serviceable": true, - "sha512": "sha512-xikKHIGAIMz0BzHkaTKb48DNpFjKW8mvJjLJSezJ1xQOu+laHNk/hav4qxVtyZz7HSI/vGTkmlq9hKVhWzpaUA==", - "path": "discord.net.webhook/3.6.1", - "hashPath": "discord.net.webhook.3.6.1.nupkg.sha512" - }, - "Discord.Net.WebSocket/3.6.1": { - "type": "package", - "serviceable": true, - "sha512": "sha512-hF22Xy7URlVEDQZ69INOgzPvFUsIDfd+r6U+1yF9HWdBn3d4THnvAAhkv1TraSx/T/MKS7g+jvk/HZ3mh5S3aw==", - "path": "discord.net.websocket/3.6.1", - "hashPath": "discord.net.websocket.3.6.1.nupkg.sha512" - }, - "Microsoft.Extensions.DependencyInjection.Abstractions/5.0.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-ORj7Zh81gC69TyvmcUm9tSzytcy8AVousi+IVRAI8nLieQjOFryRusSFh7+aLk16FN9pQNqJAiMd7BTKINK0kA==", - "path": "microsoft.extensions.dependencyinjection.abstractions/5.0.0", - "hashPath": "microsoft.extensions.dependencyinjection.abstractions.5.0.0.nupkg.sha512" - }, - "Newtonsoft.Json/13.0.1": { - "type": "package", - "serviceable": true, - "sha512": "sha512-ppPFpBcvxdsfUonNcvITKqLl3bqxWbDCZIzDWHzjpdAHRFfZe0Dw9HmA0+za13IdyrgJwpkDTDA9fHaxOrt20A==", - "path": "newtonsoft.json/13.0.1", - "hashPath": "newtonsoft.json.13.0.1.nupkg.sha512" - }, - "System.Collections.Immutable/5.0.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-FXkLXiK0sVVewcso0imKQoOxjoPAj42R8HtjjbSjVPAzwDfzoyoznWxgA3c38LDbN9SJux1xXoXYAhz98j7r2g==", - "path": "system.collections.immutable/5.0.0", - "hashPath": "system.collections.immutable.5.0.0.nupkg.sha512" - }, - "System.Interactive.Async/5.0.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-QaqhQVDiULcu4vm6o89+iP329HcK44cETHOYgy/jfEjtzeFy0ZxmuM7nel9ocjnKxEM4yh1mli7hgh8Q9o+/Iw==", - "path": "system.interactive.async/5.0.0", - "hashPath": "system.interactive.async.5.0.0.nupkg.sha512" - }, - "System.Linq.Async/5.0.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-cPtIuuH8TIjVHSi2ewwReWGW1PfChPE0LxPIDlfwVcLuTM9GANFTXiMB7k3aC4sk3f0cQU25LNKzx+jZMxijqw==", - "path": "system.linq.async/5.0.0", - "hashPath": "system.linq.async.5.0.0.nupkg.sha512" - }, - "System.Reactive/5.0.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-erBZjkQHWL9jpasCE/0qKAryzVBJFxGHVBAvgRN1bzM0q2s1S4oYREEEL0Vb+1kA/6BKb5FjUZMp5VXmy+gzkQ==", - "path": "system.reactive/5.0.0", - "hashPath": "system.reactive.5.0.0.nupkg.sha512" - }, - "System.ValueTuple/4.5.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-okurQJO6NRE/apDIP23ajJ0hpiNmJ+f0BwOlB/cSqTLQlw5upkf+5+96+iG2Jw40G1fCVCyPz/FhIABUjMR+RQ==", - "path": "system.valuetuple/4.5.0", - "hashPath": "system.valuetuple.4.5.0.nupkg.sha512" - }, - "PluginManager/1.0.0": { - "type": "project", - "serviceable": false, - "sha512": "" - } - } -} \ No newline at end of file diff --git a/BUILDS/net6.0/EVE_LevelingSystem.dll b/BUILDS/net6.0/EVE_LevelingSystem.dll deleted file mode 100644 index e443461..0000000 Binary files a/BUILDS/net6.0/EVE_LevelingSystem.dll and /dev/null differ diff --git a/BUILDS/net6.0/MusicCommands.dll b/BUILDS/net6.0/MusicCommands.dll index c9f7661..dac55eb 100644 Binary files a/BUILDS/net6.0/MusicCommands.dll and b/BUILDS/net6.0/MusicCommands.dll differ diff --git a/BUILDS/net6.0/PluginManager.dll b/BUILDS/net6.0/PluginManager.dll index 856115d..6be9c72 100644 Binary files a/BUILDS/net6.0/PluginManager.dll and b/BUILDS/net6.0/PluginManager.dll differ diff --git a/BUILDS/net6.0/StartupEvents.deps.json b/BUILDS/net6.0/StartupEvents.deps.json deleted file mode 100644 index 429d030..0000000 --- a/BUILDS/net6.0/StartupEvents.deps.json +++ /dev/null @@ -1,268 +0,0 @@ -{ - "runtimeTarget": { - "name": ".NETCoreApp,Version=v6.0", - "signature": "" - }, - "compilationOptions": {}, - "targets": { - ".NETCoreApp,Version=v6.0": { - "StartupEvents/1.0.0": { - "dependencies": { - "PluginManager": "1.0.0" - }, - "runtime": { - "StartupEvents.dll": {} - } - }, - "Discord.Net/3.6.1": { - "dependencies": { - "Discord.Net.Commands": "3.6.1", - "Discord.Net.Core": "3.6.1", - "Discord.Net.Interactions": "3.6.1", - "Discord.Net.Rest": "3.6.1", - "Discord.Net.WebSocket": "3.6.1", - "Discord.Net.Webhook": "3.6.1" - } - }, - "Discord.Net.Commands/3.6.1": { - "dependencies": { - "Discord.Net.Core": "3.6.1" - }, - "runtime": { - "lib/net6.0/Discord.Net.Commands.dll": { - "assemblyVersion": "3.6.1.0", - "fileVersion": "3.6.1.0" - } - } - }, - "Discord.Net.Core/3.6.1": { - "dependencies": { - "Newtonsoft.Json": "13.0.1", - "System.Collections.Immutable": "5.0.0", - "System.Interactive.Async": "5.0.0", - "System.ValueTuple": "4.5.0" - }, - "runtime": { - "lib/net6.0/Discord.Net.Core.dll": { - "assemblyVersion": "3.6.1.0", - "fileVersion": "3.6.1.0" - } - } - }, - "Discord.Net.Interactions/3.6.1": { - "dependencies": { - "Discord.Net.Core": "3.6.1", - "Discord.Net.Rest": "3.6.1", - "Discord.Net.WebSocket": "3.6.1", - "Microsoft.Extensions.DependencyInjection.Abstractions": "5.0.0", - "System.Collections.Immutable": "5.0.0", - "System.Reactive": "5.0.0" - }, - "runtime": { - "lib/net6.0/Discord.Net.Interactions.dll": { - "assemblyVersion": "3.6.1.0", - "fileVersion": "3.6.1.0" - } - } - }, - "Discord.Net.Rest/3.6.1": { - "dependencies": { - "Discord.Net.Core": "3.6.1" - }, - "runtime": { - "lib/net6.0/Discord.Net.Rest.dll": { - "assemblyVersion": "3.6.1.0", - "fileVersion": "3.6.1.0" - } - } - }, - "Discord.Net.Webhook/3.6.1": { - "dependencies": { - "Discord.Net.Core": "3.6.1", - "Discord.Net.Rest": "3.6.1" - }, - "runtime": { - "lib/net6.0/Discord.Net.Webhook.dll": { - "assemblyVersion": "3.6.1.0", - "fileVersion": "3.6.1.0" - } - } - }, - "Discord.Net.WebSocket/3.6.1": { - "dependencies": { - "Discord.Net.Core": "3.6.1", - "Discord.Net.Rest": "3.6.1" - }, - "runtime": { - "lib/net6.0/Discord.Net.WebSocket.dll": { - "assemblyVersion": "3.6.1.0", - "fileVersion": "3.6.1.0" - } - } - }, - "Microsoft.Extensions.DependencyInjection.Abstractions/5.0.0": { - "runtime": { - "lib/netstandard2.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll": { - "assemblyVersion": "5.0.0.0", - "fileVersion": "5.0.20.51904" - } - } - }, - "Newtonsoft.Json/13.0.1": { - "runtime": { - "lib/netstandard2.0/Newtonsoft.Json.dll": { - "assemblyVersion": "13.0.0.0", - "fileVersion": "13.0.1.25517" - } - } - }, - "System.Collections.Immutable/5.0.0": {}, - "System.Interactive.Async/5.0.0": { - "dependencies": { - "System.Linq.Async": "5.0.0" - }, - "runtime": { - "lib/netcoreapp3.1/System.Interactive.Async.dll": { - "assemblyVersion": "5.0.0.0", - "fileVersion": "5.0.0.1" - } - } - }, - "System.Linq.Async/5.0.0": { - "runtime": { - "lib/netcoreapp3.1/System.Linq.Async.dll": { - "assemblyVersion": "5.0.0.0", - "fileVersion": "5.0.0.1" - } - } - }, - "System.Reactive/5.0.0": { - "runtime": { - "lib/net5.0/System.Reactive.dll": { - "assemblyVersion": "5.0.0.0", - "fileVersion": "5.0.0.1" - } - } - }, - "System.ValueTuple/4.5.0": {}, - "PluginManager/1.0.0": { - "dependencies": { - "Discord.Net": "3.6.1" - }, - "runtime": { - "PluginManager.dll": {} - } - } - } - }, - "libraries": { - "StartupEvents/1.0.0": { - "type": "project", - "serviceable": false, - "sha512": "" - }, - "Discord.Net/3.6.1": { - "type": "package", - "serviceable": true, - "sha512": "sha512-TfcL/HG57fVt//WVJ2XyF2PlytY9IYkkwwkPLIhvu5FW4wf9rm7+N8RPh4qtELLfsa5ES0FK2RbgYjABRR9AjA==", - "path": "discord.net/3.6.1", - "hashPath": "discord.net.3.6.1.nupkg.sha512" - }, - "Discord.Net.Commands/3.6.1": { - "type": "package", - "serviceable": true, - "sha512": "sha512-kK7m571yzSzPd93o+n8Z+TfvX62BT1HtOEZIWXKwXWO8itP/sgqBNExjWK/6DOpkbD6+khc2f3rp+TA0rJD88g==", - "path": "discord.net.commands/3.6.1", - "hashPath": "discord.net.commands.3.6.1.nupkg.sha512" - }, - "Discord.Net.Core/3.6.1": { - "type": "package", - "serviceable": true, - "sha512": "sha512-ibVjQiWzgqh0GyP/GXE2kv3TA/9ysmmNFG/WmRE7GepQQAXXGxVUO9IMJ8h14EvIXMQ0m0DktMe5DkUnilo3Ag==", - "path": "discord.net.core/3.6.1", - "hashPath": "discord.net.core.3.6.1.nupkg.sha512" - }, - "Discord.Net.Interactions/3.6.1": { - "type": "package", - "serviceable": true, - "sha512": "sha512-WGOxz6SMUu4WS5b/JdrhlwQletcplBIYqvjFBBDfnqE+uNJqcNGtAdyjLqIILfXGx8aSSSSYZSCeAUa7FZ8Yew==", - "path": "discord.net.interactions/3.6.1", - "hashPath": "discord.net.interactions.3.6.1.nupkg.sha512" - }, - "Discord.Net.Rest/3.6.1": { - "type": "package", - "serviceable": true, - "sha512": "sha512-T7RRThIS23roFEJwTL1l7aawjVyn7ZB5yH3tMge0d6TiCzzp4V4FAZ+ArTt19LHRFhPly90v8V3sWqmTMN+5Zg==", - "path": "discord.net.rest/3.6.1", - "hashPath": "discord.net.rest.3.6.1.nupkg.sha512" - }, - "Discord.Net.Webhook/3.6.1": { - "type": "package", - "serviceable": true, - "sha512": "sha512-xikKHIGAIMz0BzHkaTKb48DNpFjKW8mvJjLJSezJ1xQOu+laHNk/hav4qxVtyZz7HSI/vGTkmlq9hKVhWzpaUA==", - "path": "discord.net.webhook/3.6.1", - "hashPath": "discord.net.webhook.3.6.1.nupkg.sha512" - }, - "Discord.Net.WebSocket/3.6.1": { - "type": "package", - "serviceable": true, - "sha512": "sha512-hF22Xy7URlVEDQZ69INOgzPvFUsIDfd+r6U+1yF9HWdBn3d4THnvAAhkv1TraSx/T/MKS7g+jvk/HZ3mh5S3aw==", - "path": "discord.net.websocket/3.6.1", - "hashPath": "discord.net.websocket.3.6.1.nupkg.sha512" - }, - "Microsoft.Extensions.DependencyInjection.Abstractions/5.0.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-ORj7Zh81gC69TyvmcUm9tSzytcy8AVousi+IVRAI8nLieQjOFryRusSFh7+aLk16FN9pQNqJAiMd7BTKINK0kA==", - "path": "microsoft.extensions.dependencyinjection.abstractions/5.0.0", - "hashPath": "microsoft.extensions.dependencyinjection.abstractions.5.0.0.nupkg.sha512" - }, - "Newtonsoft.Json/13.0.1": { - "type": "package", - "serviceable": true, - "sha512": "sha512-ppPFpBcvxdsfUonNcvITKqLl3bqxWbDCZIzDWHzjpdAHRFfZe0Dw9HmA0+za13IdyrgJwpkDTDA9fHaxOrt20A==", - "path": "newtonsoft.json/13.0.1", - "hashPath": "newtonsoft.json.13.0.1.nupkg.sha512" - }, - "System.Collections.Immutable/5.0.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-FXkLXiK0sVVewcso0imKQoOxjoPAj42R8HtjjbSjVPAzwDfzoyoznWxgA3c38LDbN9SJux1xXoXYAhz98j7r2g==", - "path": "system.collections.immutable/5.0.0", - "hashPath": "system.collections.immutable.5.0.0.nupkg.sha512" - }, - "System.Interactive.Async/5.0.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-QaqhQVDiULcu4vm6o89+iP329HcK44cETHOYgy/jfEjtzeFy0ZxmuM7nel9ocjnKxEM4yh1mli7hgh8Q9o+/Iw==", - "path": "system.interactive.async/5.0.0", - "hashPath": "system.interactive.async.5.0.0.nupkg.sha512" - }, - "System.Linq.Async/5.0.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-cPtIuuH8TIjVHSi2ewwReWGW1PfChPE0LxPIDlfwVcLuTM9GANFTXiMB7k3aC4sk3f0cQU25LNKzx+jZMxijqw==", - "path": "system.linq.async/5.0.0", - "hashPath": "system.linq.async.5.0.0.nupkg.sha512" - }, - "System.Reactive/5.0.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-erBZjkQHWL9jpasCE/0qKAryzVBJFxGHVBAvgRN1bzM0q2s1S4oYREEEL0Vb+1kA/6BKb5FjUZMp5VXmy+gzkQ==", - "path": "system.reactive/5.0.0", - "hashPath": "system.reactive.5.0.0.nupkg.sha512" - }, - "System.ValueTuple/4.5.0": { - "type": "package", - "serviceable": true, - "sha512": "sha512-okurQJO6NRE/apDIP23ajJ0hpiNmJ+f0BwOlB/cSqTLQlw5upkf+5+96+iG2Jw40G1fCVCyPz/FhIABUjMR+RQ==", - "path": "system.valuetuple/4.5.0", - "hashPath": "system.valuetuple.4.5.0.nupkg.sha512" - }, - "PluginManager/1.0.0": { - "type": "project", - "serviceable": false, - "sha512": "" - } - } -} \ No newline at end of file diff --git a/BUILDS/net6.0/StartupEvents.dll b/BUILDS/net6.0/StartupEvents.dll deleted file mode 100644 index c289609..0000000 Binary files a/BUILDS/net6.0/StartupEvents.dll and /dev/null differ diff --git a/CMD_LevelingSystem/CMD_LevelingSystem.csproj b/CMD_LevelingSystem/CMD_LevelingSystem.csproj index 61313a8..5058233 100644 --- a/CMD_LevelingSystem/CMD_LevelingSystem.csproj +++ b/CMD_LevelingSystem/CMD_LevelingSystem.csproj @@ -2,16 +2,9 @@ net6.0 - - - - ..\BUILDS\ - DEBUG;TRACE - prompt - none - false - false - + enable + enable + ..\DiscordBot\bin\Debug\net6.0\Data\Plugins\Commands\LevelingSystem diff --git a/CMD_LevelingSystem/Commands/level.cs b/CMD_LevelingSystem/Commands/level.cs deleted file mode 100644 index d709e67..0000000 --- a/CMD_LevelingSystem/Commands/level.cs +++ /dev/null @@ -1,61 +0,0 @@ -using Discord; -using Discord.Commands; -using Discord.WebSocket; - -using PluginManager.Interfaces; -using PluginManager.LanguageSystem; - -using System; - - -public class level : DBCommand -{ - public string Command => "rank"; - - public string Description => "Display your current level"; - - public string Usage => "rank"; - - public bool canUseDM => false; - - public bool canUseServer => true; - - public bool requireAdmin => false; - - public async void Execute(SocketCommandContext context, SocketMessage message, DiscordSocketClient client, bool isDM) - { - - try - { - int cLv = Data.GetLevel(message.Author.Id); - Int64 cEXP = Data.GetExp(message.Author.Id); - Int64 rEXP = Data.GetReqEXP(message.Author.Id); - - var embed = new EmbedBuilder() - { - Title = "Leveling System", - Description = message.Author.Mention - }; - Random r = new Random(); - int _r = r.Next(0, 256); - int _g = r.Next(0, 256); - int _b = r.Next(0, 256); - embed.WithColor(new Color(_r, _g, _b)); - embed.AddField("Level", cLv); - embed.AddField("Current EXP", cEXP); - embed.AddField("Required Exp to Level up", rEXP); - embed.WithCurrentTimestamp(); - await message.Channel.SendMessageAsync(embed: embed.Build()); - } - catch - { - if (Language.ActiveLanguage != null) - await message.Channel.SendMessageAsync(Language.ActiveLanguage.LanguageWords["DB_COMMAND_RANK_NO_RANK"]); - else await message.Channel.SendMessageAsync("You are unranked now. Please type a message in chat that is not a command and try again this command"); - return; - } - - - } -} - diff --git a/CMD_LevelingSystem/Items/Leveling System/Core.cs b/CMD_LevelingSystem/Items/Leveling System/Core.cs deleted file mode 100644 index 10314f4..0000000 --- a/CMD_LevelingSystem/Items/Leveling System/Core.cs +++ /dev/null @@ -1,62 +0,0 @@ -using System; -using System.Collections.Generic; -using System.IO; -using System.Threading.Tasks; - -public class Core -{ - - public static Dictionary playerMessages = new Dictionary(); - - private static readonly string folder = @".\Data\Resources\LevelingSystem\"; - - public static int GetLevel(ulong id) => int.Parse(File.ReadAllText(Path.Combine(folder, id.ToString() + ".data")).Split(',')[0].Split('=')[1]); - - - public static Int64 GetExp(ulong id) => Int64.Parse(File.ReadAllText(Path.Combine(folder, id.ToString() + ".data")).Split(',')[1].Split('=')[1]); - - - public static Int64 GetReqEXP(ulong id) => Int64.Parse(File.ReadAllText(Path.Combine(folder, id.ToString() + ".data")).Split(',')[2].Split('=')[1]); - public static void SaveData(ulong id, int lv, Int64 cexp, Int64 rexp) - { - Directory.CreateDirectory(folder); - File.WriteAllText(Path.Combine(folder, id.ToString() + ".data"), $"Level={lv},EXP={cexp},REXP={rexp}"); - } - private static Int64 NextLevelXP(int level) - { - return (level * level) + 2 * level + 75; - } - - public static (bool, int) MessageSent(ulong id, int messageLength) - { - WaitForTimeToRemoveFromList(id, 60); - - if (!File.Exists(Path.Combine(folder, id.ToString() + ".data"))) - { - SaveData(id, 0, 0, 0); - } - Int64 cEXp = GetExp(id); - Int64 rExp = GetReqEXP(id); - int random = new System.Random().Next(3, 6) + messageLength; - cEXp += random; - if (cEXp >= rExp) - { - cEXp = cEXp - rExp; - int lv = GetLevel(id); - rExp = NextLevelXP(lv); - lv++; - SaveData(id, lv, cEXp, rExp); - return (true, lv); - } - - SaveData(id, GetLevel(id), cEXp, rExp); - return (false, -1); - } - - public static async void WaitForTimeToRemoveFromList(ulong id, int time_seconds) - { - await Task.Delay(time_seconds * 1000); - playerMessages.Remove(id); - } - -} \ No newline at end of file diff --git a/CMD_LevelingSystem/Items/Leveling System/Data.cs b/CMD_LevelingSystem/Items/Leveling System/Data.cs deleted file mode 100644 index 44ffb76..0000000 --- a/CMD_LevelingSystem/Items/Leveling System/Data.cs +++ /dev/null @@ -1,24 +0,0 @@ -using Discord.WebSocket; - -using System; -using System.IO; -public static class Data -{ - private static readonly string folder = @".\Data\Resources\LevelingSystem\"; - public static void registerPlayer(SocketGuildUser user) - { - ulong id = user.Id; - Directory.CreateDirectory(folder); - File.WriteAllText(Path.Combine(folder, id.ToString() + ".data"), "Level=0,EXP=0,REXP=100"); - } - - public static int GetLevel(ulong id) => int.Parse(File.ReadAllText(Path.Combine(folder, id.ToString() + ".data")).Split(',')[0].Split('=')[1]); - - - public static Int64 GetExp(ulong id) => Int64.Parse(File.ReadAllText(Path.Combine(folder, id.ToString() + ".data")).Split(',')[1].Split('=')[1]); - - - public static Int64 GetReqEXP(ulong id) => Int64.Parse(File.ReadAllText(Path.Combine(folder, id.ToString() + ".data")).Split(',')[2].Split('=')[1]); - - -} diff --git a/CMD_LevelingSystem/Level.cs b/CMD_LevelingSystem/Level.cs new file mode 100644 index 0000000..e11fd3f --- /dev/null +++ b/CMD_LevelingSystem/Level.cs @@ -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("LevelingSystemPath") + $"/{message.Author.Id}.dat")) + { + await context.Channel.SendMessageAsync("You are now unranked !"); + return; + } + + var user = await Functions.ConvertFromJson(Config.GetValue("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()); + } +} diff --git a/CMD_LevelingSystem/User.cs b/CMD_LevelingSystem/User.cs new file mode 100644 index 0000000..bf26b87 --- /dev/null +++ b/CMD_LevelingSystem/User.cs @@ -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; } +} diff --git a/CMD_Utils/Echo.cs b/CMD_Utils/Echo.cs index fdf7fe1..83ec899 100644 --- a/CMD_Utils/Echo.cs +++ b/CMD_Utils/Echo.cs @@ -1,6 +1,5 @@ using Discord.Commands; using Discord.WebSocket; - using PluginManager.Interfaces; internal class Echo : DBCommand @@ -11,14 +10,14 @@ internal class Echo : DBCommand public string Usage => "echo [message]"; - public bool canUseDM => true; + public bool canUseDM => true; public bool canUseServer => true; public bool requireAdmin => false; public async void Execute(SocketCommandContext context, SocketMessage message, DiscordSocketClient client, bool isDM) { - string m = message.Content.Substring(6); + var m = message.Content.Substring(6); await message.Channel.SendMessageAsync(m); } } diff --git a/CMD_Utils/FlipCoin.cs b/CMD_Utils/FlipCoin.cs index e84f83b..0057f33 100644 --- a/CMD_Utils/FlipCoin.cs +++ b/CMD_Utils/FlipCoin.cs @@ -1,37 +1,30 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -using Discord.Commands; +using Discord.Commands; using Discord.WebSocket; - using PluginManager.Interfaces; -namespace CMD_Utils +namespace CMD_Utils; + +internal class FlipCoin : DBCommand { - 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) { - 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) - { - System.Random random = new System.Random(); - int r = random.Next(1, 3); - if (r == 1) - await message.Channel.SendMessageAsync("Heads"); - else await message.Channel.SendMessageAsync("Tails"); - } + 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"); } } diff --git a/CMD_Utils/Poll.cs b/CMD_Utils/Poll.cs index bf81df5..c3624c6 100644 --- a/CMD_Utils/Poll.cs +++ b/CMD_Utils/Poll.cs @@ -1,53 +1,45 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - +using System.Collections.Generic; using Discord; using Discord.Commands; using Discord.WebSocket; - using PluginManager.Interfaces; +using PluginManager.Others; -namespace CMD_Utils +namespace CMD_Utils; + +public class Poll : DBCommand { - public class Poll : DBCommand + public string Command => "poll"; + + public string 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) { - public string Command => "poll"; + 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()); - public string Description => "Create a poll with options"; + var emotes = new List(); + 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:")); - 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; - string question = message.Content.Split(' ')[1].Replace('-', ' '); - string[] answers = PluginManager.Others.Functions.MergeStrings(message.Content.Split(' '), 2).Split(' '); - EmbedBuilder embedBuilder = new EmbedBuilder(); - embedBuilder.Title = question; - int len = answers.Length; - for (int i = 0; i < len; i++) - embedBuilder.AddField($"Answer {i + 1}", answers[i].Replace('-', ' '), true); - var msg = await context.Channel.SendMessageAsync(embed: embedBuilder.Build()); - - List emotes = new List(); - 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 (int i = 0; i < len; i++) - await msg.AddReactionAsync(emotes[i]); - } + for (var i = 0; i < len; i++) await msg.AddReactionAsync(emotes[i]); } } diff --git a/CMD_Utils/Random.cs b/CMD_Utils/Random.cs index 4075588..2cbc564 100644 --- a/CMD_Utils/Random.cs +++ b/CMD_Utils/Random.cs @@ -1,6 +1,5 @@ using Discord.Commands; using Discord.WebSocket; - using PluginManager.Interfaces; public class Random : DBCommand @@ -11,7 +10,7 @@ public class Random : DBCommand public string Usage => "random [number1] [number2]"; - public bool canUseDM => true; + public bool canUseDM => true; public bool canUseServer => true; public bool requireAdmin => false; @@ -19,19 +18,18 @@ public class Random : DBCommand { try { - string msg = message.Content; - int a = int.Parse(msg.Split(' ')[1]); - int b = int.Parse(msg.Split(' ')[2]); + var msg = message.Content; + var a = int.Parse(msg.Split(' ')[1]); + var b = int.Parse(msg.Split(' ')[2]); if (a > b) { - int x = a; + var x = a; a = b; b = x; } await message.Channel.SendMessageAsync("Your random generated number is " + new System.Random().Next(a, b)); - } catch { diff --git a/DiscordBot/App.config b/DiscordBot/App.config index 2a5ff10..d78bbbb 100644 --- a/DiscordBot/App.config +++ b/DiscordBot/App.config @@ -1,4 +1,4 @@ - - + + \ No newline at end of file diff --git a/DiscordBot/Discord/Commands/Help.cs b/DiscordBot/Discord/Commands/Help.cs index 67840a5..11fb0f9 100644 --- a/DiscordBot/Discord/Commands/Help.cs +++ b/DiscordBot/Discord/Commands/Help.cs @@ -1,107 +1,100 @@ using Discord; using Discord.Commands; using Discord.WebSocket; - -using PluginManager.Loaders; using PluginManager.Interfaces; -using PluginManager.Others.Permissions; +using PluginManager.Loaders; using PluginManager.Others; -using System.Collections.Generic; +namespace DiscordBot.Discord.Commands; -namespace DiscordBot.Discord.Commands +/// +/// The help command +/// +internal class Help : DBCommand { /// - /// The help command + /// Command name /// - internal class Help : DBCommand + public string Command => "help"; + + /// + /// Command Description + /// + public string Description => "This command allows you to check all loadded commands"; + + /// + /// Command usage + /// + public string Usage => "help"; + + /// + /// Check if the command can be used /> + /// + public bool canUseDM => true; + + /// + /// Check if the command can be used in a server + /// + public bool canUseServer => true; + + /// + /// Check if the command require administrator to be executed + /// + public bool requireAdmin => false; + + /// + /// The main body of the command + /// + /// The command context + /// The command message + /// The discord bot client + /// True if the message was sent from a DM channel, false otherwise + public void Execute(SocketCommandContext context, SocketMessage message, DiscordSocketClient client, bool isDM) { - /// - /// Command name - /// - public string Command => "help"; - - /// - /// Command Description - /// - public string Description => "This command allows you to check all loadded commands"; - - /// - /// Command usage - /// - public string Usage => "help"; - - /// - /// Check if the command can be used /> - /// - public bool canUseDM => true; - - /// - /// Check if the command can be used in a server - /// - public bool canUseServer => true; - - /// - /// Check if the command require administrator to be executed - /// - public bool requireAdmin => false; - - /// - /// The main body of the command - /// - /// The command context - /// The command message - /// The discord bot client - /// True if the message was sent from a DM channel, false otherwise - public void Execute(SocketCommandContext context, SocketMessage message, DiscordSocketClient client, bool isDM) + var args = Functions.GetArguments(message); + if (args.Count != 0) { - List args = Functions.GetArguments(message); - if (args.Count != 0) + foreach (var item in args) { - - 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; - } - EmbedBuilder embedBuilder = new EmbedBuilder(); - - string adminCommands = ""; - string normalCommands = ""; - string DMCommands = ""; - - foreach (var cmd in PluginLoader.Plugins!) - { - if (cmd.canUseDM) - DMCommands += cmd.Command + " "; - if (cmd.requireAdmin) - adminCommands += cmd.Command + " "; - else if (cmd.canUseServer) normalCommands += cmd.Command + " "; + var e = GenerateHelpCommand(item); + if (e != null) + context.Channel.SendMessageAsync(embed: e.Build()); + else + context.Channel.SendMessageAsync("Unknown Command " + item); } - embedBuilder.AddField("Admin Commands", adminCommands); - embedBuilder.AddField("Normal Commands", normalCommands); - embedBuilder.AddField("DM Commands", DMCommands); - context.Channel.SendMessageAsync(embed: embedBuilder.Build()); - + return; } - private EmbedBuilder GenerateHelpCommand(string command) + var embedBuilder = new EmbedBuilder(); + + var adminCommands = ""; + var normalCommands = ""; + var DMCommands = ""; + + foreach (var cmd in PluginLoader.Commands!) { - EmbedBuilder embedBuilder = new EmbedBuilder(); - DBCommand cmd = PluginLoader.Plugins.Find(p => p.Command == command); - if (cmd == null) - return null; - - embedBuilder.AddField("Usage", cmd.Usage); - embedBuilder.AddField("Description", cmd.Description); - - return embedBuilder; + 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()); } -} \ No newline at end of file + + 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; + } +} diff --git a/DiscordBot/Discord/Commands/Restart.cs b/DiscordBot/Discord/Commands/Restart.cs index 3808118..a567783 100644 --- a/DiscordBot/Discord/Commands/Restart.cs +++ b/DiscordBot/Discord/Commands/Restart.cs @@ -1,114 +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; -using PluginManager.Interfaces; -using PluginManager.Others.Permissions; -using PluginManager.Others; +namespace DiscordBot.Discord.Commands; -namespace DiscordBot.Discord.Commands +internal class Restart : DBCommand { - internal class Restart : DBCommand + /// + /// Command name + /// + public string Command => "restart"; + + /// + /// Command Description + /// + public string Description => "Restart the bot"; + + /// + /// Command usage + /// + public string Usage => "restart [-p | -c | -args | -cmd] "; + + /// + /// Check if the command can be used /> + /// + public bool canUseDM => false; + + /// + /// Check if the command can be used in a server + /// + public bool canUseServer => true; + + /// + /// Check if the command require administrator to be executed + /// + public bool requireAdmin => false; + + /// + /// The main body of the command + /// + /// The command context + /// The command message + /// The discord bot client + /// True if the message was sent from a DM channel, false otherwise + public async void Execute(DiscordLibCommands.SocketCommandContext context, SocketMessage message, DiscordSocketClient client, bool isDM) { - /// - /// Command name - /// - public string Command => "restart"; - - /// - /// Command Description - /// - public string Description => "Restart the bot"; - - /// - /// Command usage - /// - public string Usage => "restart [-p | -c | -args | -cmd] "; - - /// - /// Check if the command can be used /> - /// - public bool canUseDM => false; - - /// - /// Check if the command can be used in a server - /// - public bool canUseServer => true; - - /// - /// Check if the command require administrator to be executed - /// - public bool requireAdmin => false; - /// - /// The main body of the command - /// - /// The command context - /// The command message - /// The discord bot client - /// True if the message was sent from a DM channel, false otherwise - 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) { - if (!DiscordPermissions.hasPermission(message.Author as SocketGuildUser, 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 PluginManager.Others.OperatingSystem.WINDOWS: - Process.Start("./DiscordBot.exe"); + case OperatingSystem.WINDOWS: + Functions.WriteLogFile("Restarting the bot with the following arguments: \"" + cmd + "\""); + Process.Start("./DiscordBot.exe", cmd); break; - case PluginManager.Others.OperatingSystem.LINUX: - case PluginManager.Others.OperatingSystem.MAC_OS: - Process.Start("./DiscordBot"); + case OperatingSystem.LINUX: + //case PluginManager.Others.OperatingSystem.MAC_OS: ?? - not tested + Process.Start("./DiscordBot", cmd); break; default: return; } - return; - } - switch (args[0]) - { - case "-p": - case "-poweroff": - case "-c": - case "-close": - Environment.Exit(0); - break; - case "-cmd": - case "-args": - string cmd = "--args"; - - if (args.Count > 1) - for (int i = 1; i < args.Count; i++) - cmd += $" {args[i]}"; - - - switch (OS) - { - case PluginManager.Others.OperatingSystem.WINDOWS: - Functions.WriteLogFile("Restarting the bot with the following arguments: \"" + cmd + "\""); - Process.Start("./DiscordBot.exe", cmd); - break; - case PluginManager.Others.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; - - - } + Environment.Exit(0); + break; + default: + await context.Channel.SendMessageAsync("Invalid argument. Use `help restart` to see the usage."); + break; } } } diff --git a/DiscordBot/Discord/Commands/Settings.cs b/DiscordBot/Discord/Commands/Settings.cs index 4b867f3..044a2fd 100644 --- a/DiscordBot/Discord/Commands/Settings.cs +++ b/DiscordBot/Discord/Commands/Settings.cs @@ -1,106 +1,97 @@ using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - using Discord; using Discord.Commands; using Discord.WebSocket; - -using PluginManager.Core; +using PluginManager; using PluginManager.Interfaces; -using PluginManager.Others; -using PluginManager.Others.Permissions; -namespace DiscordBot.Discord.Commands +namespace DiscordBot.Discord.Commands; + +internal class Settings : DBCommand { - class Settings : DBCommand + /// + /// Command name + /// + public string Command => "set"; + + /// + /// Command Description + /// + public string Description => "This command allows you change all settings. Use \"set help\" to show details"; + + /// + /// Command usage + /// + public string Usage => "set [keyword] [new Value]"; + + /// + /// Check if the command can be used /> + /// + public bool canUseDM => true; + + /// + /// Check if the command can be used in a server + /// + public bool canUseServer => true; + + /// + /// Check if the command require administrator to be executed + /// + public bool requireAdmin => true; + + /// + /// The main body of the command + /// + /// The command context + /// The command message + /// The discord bot client + /// True if the message was sent from a DM channel, false otherwise + public async void Execute(SocketCommandContext context, SocketMessage message, DiscordSocketClient client, bool isDM) { - - /// - /// Command name - /// - public string Command => "set"; - - /// - /// Command Description - /// - public string Description => "This command allows you change all settings. Use \"set help\" to show details"; - - /// - /// Command usage - /// - public string Usage => "set [keyword] [new Value]"; - - /// - /// Check if the command can be used /> - /// - public bool canUseDM => true; - - /// - /// Check if the command can be used in a server - /// - public bool canUseServer => true; - - /// - /// Check if the command require administrator to be executed - /// - public bool requireAdmin => true; - - /// - /// The main body of the command - /// - /// The command context - /// The command message - /// The discord bot client - /// True if the message was sent from a DM channel, false otherwise - public async void Execute(SocketCommandContext context, SocketMessage message, DiscordSocketClient client, bool isDM) + var channel = message.Channel; + try { - 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)"); - string content = message.Content; - string[] data = content.Split(' '); - string 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; + } - return; - } - - switch (keyword.ToLower()) - { - case "token": - if (data.Length != 3) - { - await channel.SendMessageAsync("Invalid token !"); - return; - } - Functions.WriteToSettings("./Data/Resources/DiscordBotCore.data", "BOT_TOKEN", data[2], '\t'); - break; - case "prefix": - if (data.Length != 3) - { - await channel.SendMessageAsync("Invalid token !"); - return; - } - Functions.WriteToSettings("./Data/Resources/DiscordBotCore.data", "BOT_PREFIX", data[2], '\t'); - break; - default: + switch (keyword.ToLower()) + { + case "token": + if (data.Length != 3) + { + await channel.SendMessageAsync("Invalid token !"); return; - } + } - await channel.SendMessageAsync("Restart required ..."); - } - catch - { - await channel.SendMessageAsync("Unknown usage to this command !\nUsage: " + Usage); + 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); } } } diff --git a/DiscordBot/Discord/Core/Boot.cs b/DiscordBot/Discord/Core/Boot.cs index af12058..ce2ad4c 100644 --- a/DiscordBot/Discord/Core/Boot.cs +++ b/DiscordBot/Discord/Core/Boot.cs @@ -1,150 +1,149 @@ -using Discord; +using System; +using System.Threading; +using System.Threading.Tasks; +using Discord; using Discord.Commands; using Discord.WebSocket; - -using System; -using System.Threading.Tasks; - +using PluginManager; using static PluginManager.Others.Functions; -namespace PluginManager.Core +namespace DiscordBot.Discord.Core; + +internal class Boot { - internal class Boot + /// + /// The bot prefix + /// + public readonly string botPrefix; + + /// + /// The bot token + /// + public readonly string botToken; + + /// + /// The bot client + /// + public DiscordSocketClient client; + + /// + /// The bot command handler + /// + private CommandHandler commandServiceHandler; + + /// + /// The command service + /// + private CommandService service; + + /// + /// The main Boot constructor + /// + /// The bot token + /// The bot prefix + public Boot(string botToken, string botPrefix) { - /// - /// The bot prefix - /// - public readonly string botPrefix; - - /// - /// The bot token - /// - public readonly string botToken; + this.botPrefix = botPrefix; + this.botToken = botToken; + } - /// - /// Checks if the bot is ready - /// - /// true if the bot is ready, othwerwise false - public bool isReady { get; private set; } = false; + /// + /// Checks if the bot is ready + /// + /// true if the bot is ready, othwerwise false + public bool isReady { get; private set; } - /// - /// The bot client - /// - public DiscordSocketClient client; + /// + /// The start method for the bot. This method is used to load the bot + /// + /// Task + public async Task Awake() + { + client = new DiscordSocketClient(); + service = new CommandService(); - /// - /// The bot command handler - /// - private CommandHandler commandServiceHandler; + CommonTasks(); - /// - /// The command service - /// - private CommandService service; + await client.LoginAsync(TokenType.Bot, botToken); + await client.StartAsync(); - /// - /// The main Boot constructor - /// - /// The bot token - /// The bot prefix - public Boot(string botToken, string botPrefix) - { - this.botPrefix = botPrefix; - this.botToken = botToken; - } + commandServiceHandler = new CommandHandler(client, service, botPrefix); + await commandServiceHandler.InstallCommandsAsync(); - /// - /// The start method for the bot. This method is used to load the bot - /// - /// Task - public async Task Awake() - { - client = new DiscordSocketClient(); - service = new CommandService(); + await Task.Delay(2000); + while (!isReady) ; + } - CommonTasks(); + private void CommonTasks() + { + if (client == null) return; + client.LoggedOut += Client_LoggedOut; + client.Log += Log; + client.LoggedIn += LoggedIn; + client.Ready += Ready; + } - await client.LoginAsync(TokenType.Bot, botToken); - await client.StartAsync(); + private Task Client_LoggedOut() + { + WriteLogFile("Successfully Logged Out"); + Log(new LogMessage(LogSeverity.Info, "Boot", "Successfully logged out from discord !")); + return Task.CompletedTask; + } - commandServiceHandler = new CommandHandler(client, service, botPrefix); - await commandServiceHandler.InstallCommandsAsync(); + private Task Ready() + { + Console.Title = "ONLINE"; + isReady = true; - await Task.Delay(2000); - while (!isReady) ; - - } - - /// - /// The method that stops the bot from running - /// - /// - public async Task ShutDown() - { - if (client == null) return; - await client.LogoutAsync(); - await client.StopAsync(); - } - - 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; - 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) + new Thread(() => { - 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; + while (true) + { + Config.SaveConfig(); + Thread.Sleep(10000); + } } + ).Start(); - return Task.CompletedTask; + 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; } } diff --git a/DiscordBot/Discord/Core/CommandHandler.cs b/DiscordBot/Discord/Core/CommandHandler.cs index 5ed266b..b876858 100644 --- a/DiscordBot/Discord/Core/CommandHandler.cs +++ b/DiscordBot/Discord/Core/CommandHandler.cs @@ -1,136 +1,132 @@ -using Discord.Commands; -using Discord.WebSocket; - -using PluginManager.Interfaces; - +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; -using PluginManager.Loaders; -using System.Threading.Tasks; -using System.Linq; -using Discord; -using System; +namespace DiscordBot.Discord.Core; -namespace PluginManager.Core +internal class CommandHandler { - internal class CommandHandler + private readonly string botPrefix; + private readonly DiscordSocketClient client; + private readonly CommandService commandService; + + /// + /// Command handler constructor + /// + /// The discord bot client + /// The discord bot command service + /// The prefix to watch for + public CommandHandler(DiscordSocketClient client, CommandService commandService, string botPrefix) { - private readonly DiscordSocketClient client; - private readonly CommandService commandService; - private readonly string botPrefix; + this.client = client; + this.commandService = commandService; + this.botPrefix = botPrefix; + } - /// - /// Command handler constructor - /// - /// The discord bot client - /// The discord bot command service - /// The prefix to watch for - public CommandHandler(DiscordSocketClient client, CommandService commandService, string botPrefix) - { - this.client = client; - this.commandService = commandService; - this.botPrefix = botPrefix; - } + /// + /// The method to initialize all commands + /// + /// + public async Task InstallCommandsAsync() + { + client.MessageReceived += MessageHandler; + await commandService.AddModulesAsync(Assembly.GetEntryAssembly(), null); + } - /// - /// The method to initialize all commands - /// - /// - public async Task InstallCommandsAsync() + /// + /// The message handler for the bot + /// + /// The message got from the user in discord chat + /// + private async Task MessageHandler(SocketMessage Message) + { + try { - client.MessageReceived += MessageHandler; - await commandService.AddModulesAsync(assembly: Assembly.GetEntryAssembly(), services: null); - } + if (Message as SocketUserMessage == null) return; - /// - /// The message handler for the bot - /// - /// The message got from the user in discord chat - /// - private async Task MessageHandler(SocketMessage Message) - { - try + 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)) { - if (Message as SocketUserMessage == null) - return; + await message.Channel.SendMessageAsync("Can not exec mentioned commands !"); + return; + } - var message = Message as SocketUserMessage; + if (message.Author.IsBot) return; - if (message == null) return; + var context = new SocketCommandContext(client, message); - if (!message.Content.StartsWith(botPrefix)) return; + await commandService.ExecuteAsync( + context, + argPos, + null + ); - int argPos = 0; + var plugin = PluginLoader.Commands!.Where(p => p.Command == message.Content.Split(' ')[0].Substring(botPrefix.Length)).FirstOrDefault(); - if (message.HasMentionPrefix(client.CurrentUser, ref argPos)) + + if (plugin != null) + { + if (message.Channel == await message.Author.CreateDMChannelAsync()) { - 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: context, - argPos: argPos, - services: null - ); - - DBCommand plugin = PluginLoader.Plugins!.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.canUseDM) { if (plugin.requireAdmin) { if (message.Author.isAdmin()) { - plugin.Execute(context, message, client, false); - Functions.WriteLogFile($"[{message.Author.Id}] Executed command : " + plugin.Command); + 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, false); - Functions.WriteLogFile($"[{message.Author.Id}] Executed command : " + plugin.Command); + + plugin.Execute(context, message, client, true); + Functions.WriteLogFile($"[{message.Author.Id}] Executed command (DM) : " + plugin.Command); return; } - 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); + return; } } - catch { } - + } + catch + { } } -} \ No newline at end of file +} diff --git a/DiscordBot/DiscordBot.csproj b/DiscordBot/DiscordBot.csproj index 37fb607..f83d305 100644 --- a/DiscordBot/DiscordBot.csproj +++ b/DiscordBot/DiscordBot.csproj @@ -6,6 +6,16 @@ disable + False + True + + + + none + + + + none diff --git a/DiscordBot/Program.cs b/DiscordBot/Program.cs index 9c1a719..7a9f374 100644 --- a/DiscordBot/Program.cs +++ b/DiscordBot/Program.cs @@ -1,89 +1,82 @@ -using Discord; - +using DiscordBot.Discord.Core; +using PluginManager; +using PluginManager.Items; +using PluginManager.Others; using System; using System.IO; -using System.Threading.Tasks; - -using PluginManager.Core; -using PluginManager.Others; -using PluginManager.LanguageSystem; -using PluginManager.Online; - -using System.Collections.Generic; using System.Linq; -using PluginManager.Items; +using System.Threading.Tasks; +using PluginManager.Online; namespace DiscordBot { public class Program { - private static bool loadPluginsOnStartup = false; - private static bool listPluginsAtStartup = false; - private static bool listLanguagAtStartup = false; - - private static bool ShowStartupMessage = true; + private static bool loadPluginsOnStartup = false; + private static bool listPluginsAtStartup = false; /// /// The main entry point for the application. /// [STAThread] [Obsolete] - public static void Main(string[] args) { Directory.CreateDirectory("./Data/Resources"); - Directory.CreateDirectory("./Data/Languages"); Directory.CreateDirectory("./Data/Plugins/Commands"); Directory.CreateDirectory("./Data/Plugins/Events"); - if (!File.Exists("./Data/Resources/DiscordBotCore.data") || (Functions.readCodeFromFile("./Data/Resources/DiscordBotCore.data", "BOT_TOKEN", '=').Length != 59 && Functions.readCodeFromFile("./Data/Resources/DiscordBotCore.data", "BOT_TOKEN", '=').Length != 70)) + PreLoadComponents().Wait(); + + if (!Config.ContainsKey("token") || Config.GetValue("token") == null || Config.GetValue("token")?.Length != 70) { - File.WriteAllText("./Data/Resources/DiscordBotCore.data", "BOT_TOKEN=token\nBOT_PREFIX=!\n"); while (true) { - Console.WriteLine("Please insert your token: "); - Console.Write("TOKEN: "); - string botToken = Console.ReadLine(); - if (botToken.Length == 59 || botToken.Length == 70) + Console.WriteLine("Please insert your token"); + Console.Write("Token = "); + string token = Console.ReadLine(); + if (token?.Length == 59 || token?.Length == 70) + Config.AddValueToVariables("token", token, true); + else { - string prefix = Functions.readCodeFromFile("./Data/Resources/DiscordBotCore.data", "BOT_PREFIX", '='); - if (prefix == string.Empty || prefix == null) - prefix = "!"; - File.WriteAllText("./Data/Resources/DiscordBotCore.data", $"BOT_TOKEN={botToken}\nBOT_PREFIX={prefix}\n"); - break; + Console.WriteLine("Invalid token"); + continue; } - else Console.WriteLine("Invalid Token !"); + + Console.WriteLine("Please insert your prefix (max. 1 character long):"); + Console.WriteLine("For a prefix longer then one character, the first character will be saved and the others will be ignored.\n No spaces or numbers allowed"); + Console.Write("Prefix = "); + char prefix = Console.ReadLine()![0]; + + if (prefix == ' ' || char.IsDigit(prefix)) continue; + Config.AddValueToVariables("prefix", prefix.ToString(), false); + break; } } + if (!Config.ContainsKey("prefix")) + { + 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 = "); + char prefix = Console.ReadLine()![0]; + + if (prefix == ' ' || char.IsDigit(prefix)) return; + Config.AddValueToVariables("prefix", prefix.ToString(), false); + } + HandleInput(args).Wait(); } - /// - /// Reset all settings for the bot - /// - private static Task ResetSettings() - { - string[] files = Directory.GetFiles(@"./Data/Resources"); - foreach (string file in files) File.Delete(file); - return Task.CompletedTask; - } - /// /// The main loop for the discord bot /// /// The discord booter used to start the application - private static async Task NoGUI(Boot discordbooter) + private static Task NoGUI(Boot discordbooter) { - Language.LoadLanguage(); - ConsoleCommandsHandler consoleCommandsHandler = new ConsoleCommandsHandler(discordbooter.client); - if (loadPluginsOnStartup) - consoleCommandsHandler.HandleCommand("lp"); - if (listPluginsAtStartup) - consoleCommandsHandler.HandleCommand("listplugs"); - if (listLanguagAtStartup) - consoleCommandsHandler.HandleCommand("listlang"); - + if (loadPluginsOnStartup) consoleCommandsHandler.HandleCommand("lp"); + if (listPluginsAtStartup) consoleCommandsHandler.HandleCommand("listplugs"); + Config.SaveConfig(); while (true) { Console.ForegroundColor = ConsoleColor.White; @@ -98,28 +91,28 @@ namespace DiscordBot /// Returns the boot loader for the Discord Bot private static async Task StartNoGUI() { - Console.Clear(); Console.ForegroundColor = ConsoleColor.DarkYellow; Console.WriteLine("Discord BOT for Cross Platform"); Console.WriteLine("Created by: Wizzy\nDiscord: Wizzy#9181"); - if (ShowStartupMessage) - try - { - Console.WriteLine("Connecting to server ..."); - List text = await ServerCom.ReadTextFromFile("https://sethdiscordbot.000webhostapp.com/Storage/Discord%20Bot/StartupMessage"); - foreach (var t in text) Console_Utilities.WriteColorText(t); - } - catch { Console.WriteLine("Failed to connect to server."); } Console.ForegroundColor = ConsoleColor.White; Console.WriteLine("============================ Discord BOT - Cross Platform ============================"); - string token = Functions.readCodeFromFile(Functions.dataFolder + "DiscordBotCore.data", "BOT_TOKEN", '='); - string prefix = Functions.readCodeFromFile(Functions.dataFolder + "DiscordBotCore.data", "BOT_PREFIX", '='); - var discordbooter = new Boot(token, prefix); - await discordbooter.Awake(); - return discordbooter; + try + { + string token = Config.GetValue("token"); + string prefix = Config.GetValue("prefix"); + + var discordbooter = new Boot(token, prefix); + await discordbooter.Awake(); + return discordbooter; + } + catch (Exception ex) + { + Console.WriteLine(ex); + return null; + } } /// @@ -128,8 +121,8 @@ namespace DiscordBot /// Directory path private static Task ClearFolder(string d) { - string[] files = Directory.GetFiles(d); - int fileNumb = files.Length; + string[] files = Directory.GetFiles(d); + int fileNumb = files.Length; for (var i = 0; i < fileNumb; i++) { File.Delete(files[i]); @@ -145,16 +138,6 @@ namespace DiscordBot /// The arguments private static async Task HandleInput(string[] args) { - - if (args.Length == 0) - { - if (File.Exists("./ref/startupArguments.txt")) - { - var lines = await File.ReadAllLinesAsync("./ref/startupArguments.txt"); - args = lines; - } - } - int len = args.Length; if (len == 1 && args[0] == "--help") { @@ -164,8 +147,13 @@ namespace DiscordBot if (len == 1 && args[0] == "--logout") { - File.Delete(Functions.dataFolder + "Login.dat"); - Console.WriteLine("Logged out. Please restart the application !"); + File.Delete(Functions.dataFolder + "config.json"); + await Task.Run(async () => + { + await Task.Delay(1000); + Environment.Exit(0x08); + } + ); return; } @@ -177,20 +165,22 @@ namespace DiscordBot return; } - if (len > 0 && (args.Contains("--cmd") || args.Contains("--args") || args.Contains("--nomessage"))) + if (len == 3 && args[0] == "/download") { - if (args.Contains("lp") || args.Contains("loadplugins")) - loadPluginsOnStartup = true; - if (args.Contains("listplugs")) - listPluginsAtStartup = true; - if (args.Contains("listlang")) - listLanguagAtStartup = true; - if (args.Contains("--nomessage")) - ShowStartupMessage = false; - len = 0; + string url = args[1]; + string location = args[2]; + + await ServerCom.DownloadFileAsync(url, location); + + return; } - + if (len > 0 && (args.Contains("--cmd") || args.Contains("--args") || args.Contains("--nomessage"))) + { + if (args.Contains("lp") || args.Contains("loadplugins")) loadPluginsOnStartup = true; + if (args.Contains("listplugs")) listPluginsAtStartup = true; + len = 0; + } if (len == 0 || args[0] != "--exec" && args[0] != "--execute") @@ -200,13 +190,13 @@ namespace DiscordBot 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-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" @@ -219,10 +209,6 @@ namespace DiscordBot switch (message[0]) { - case "--reset-settings": - await ResetSettings(); - Console.WriteLine("Successfully reseted all settings !"); - break; case "--help": case "-help": Console.ForegroundColor = ConsoleColor.DarkYellow; @@ -241,7 +227,6 @@ namespace DiscordBot await ClearFolder("./Output/Logs/"); await ClearFolder("./Output/Errors"); await ClearFolder("./Data/Languages/"); - await ClearFolder("./Data/Plugins/Addons"); await ClearFolder("./Data/Plugins/Commands"); await ClearFolder("./Data/Plugins/Events"); Console.WriteLine("Successfully cleared all folders"); @@ -259,11 +244,21 @@ namespace DiscordBot Boot booter = await StartNoGUI(); await NoGUI(booter); return; + default: Console.WriteLine("Failed to execute command " + message[0]); break; } } } + + private static async Task PreLoadComponents() + { + await Config.LoadConfig(); + if (Config.ContainsKey("DeleteLogsAtStartup")) + if (Config.GetValue("DeleteLogsAtStartup")) + foreach (string file in Directory.GetFiles("./Output/Logs/")) + File.Delete(file); + } } } diff --git a/DiscordBotGUI/App.axaml b/DiscordBotGUI/App.axaml index 7d4aeba..49aa2e5 100644 --- a/DiscordBotGUI/App.axaml +++ b/DiscordBotGUI/App.axaml @@ -1,7 +1,7 @@ - - - - + + + + \ No newline at end of file diff --git a/DiscordBotGUI/App.axaml.cs b/DiscordBotGUI/App.axaml.cs index a3b2c89..983b886 100644 --- a/DiscordBotGUI/App.axaml.cs +++ b/DiscordBotGUI/App.axaml.cs @@ -1,27 +1,21 @@ using Avalonia; +using Avalonia.Controls; using Avalonia.Controls.ApplicationLifetimes; using Avalonia.Markup.Xaml; -namespace DiscordBotGUI +namespace DiscordBotGUI; + +public class App : Application { - public partial class App : Application + public override void Initialize() { - public override void Initialize() - { - AvaloniaXamlLoader.Load(this); - } + AvaloniaXamlLoader.Load(this); + } - public override void OnFrameworkInitializationCompleted() - { - if (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop) - { + public override void OnFrameworkInitializationCompleted() + { + if (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop) desktop.MainWindow = new AppUpdater { Width = 300, Height = 50, WindowStartupLocation = WindowStartupLocation.CenterScreen }; - - desktop.MainWindow = new AppUpdater() { Width = 300, Height = 50, WindowStartupLocation = Avalonia.Controls.WindowStartupLocation.CenterScreen }; - - } - - base.OnFrameworkInitializationCompleted(); - } + base.OnFrameworkInitializationCompleted(); } } diff --git a/DiscordBotGUI/AppUpdater.axaml b/DiscordBotGUI/AppUpdater.axaml index c20c2e5..939c0d6 100644 --- a/DiscordBotGUI/AppUpdater.axaml +++ b/DiscordBotGUI/AppUpdater.axaml @@ -5,12 +5,13 @@ mc:Ignorable="d" d:DesignWidth="250" d:DesignHeight="50" x:Class="DiscordBotGUI.AppUpdater" Title="AppUpdater" - Background="Transparent" - TransparencyLevelHint="AcrylicBlur" - HasSystemDecorations="False"> + Background="Transparent" + TransparencyLevelHint="AcrylicBlur" + SystemDecorations="BorderOnly"> - - - - - + + + + + \ No newline at end of file diff --git a/DiscordBotGUI/AppUpdater.axaml.cs b/DiscordBotGUI/AppUpdater.axaml.cs index ecc5405..fcf519f 100644 --- a/DiscordBotGUI/AppUpdater.axaml.cs +++ b/DiscordBotGUI/AppUpdater.axaml.cs @@ -1,62 +1,65 @@ -using Avalonia; using Avalonia.Controls; -using Avalonia.Markup.Xaml; - using PluginManager.Online; using PluginManager.Others; using System.Threading.Tasks; using System; using System.IO; using System.Threading; -using System.Drawing; -using Avalonia.Media; +using PluginManager; namespace DiscordBotGUI { public partial class AppUpdater : Window { - private string _version; + private string _version = ""; + public AppUpdater() { InitializeComponent(); + Config.LoadConfig().Wait(); if (!File.Exists("./Version.txt")) { - textBox1.Text = "Checking ..."; File.WriteAllText("./Version.txt", "DiscordBotVersion=0"); - //DownloadDiscordBotClientNoGUIAsDLL(); + DownloadDiscordBotClientNoGUIAsDLL(); } + if (!File.Exists("./DiscordBot.exe")) DownloadDiscordBotClientNoGUIAsDLL(); Updates(); - } - /* private async void DownloadDiscordBotClientNoGUIAsDLL() - { + private async void DownloadDiscordBotClientNoGUIAsDLL() + { + //await Task.Delay(5000); + string url_bot_dll = "https://sethdiscordbot.000webhostapp.com/Storage/Discord%20Bot/Updates/DiscordBot.zip"; + int actiontype = 0; //0 - downolad, 1- extract + IProgress progress = new Progress((percent) => + { + if (actiontype == 0) + textBox1.Text = "Downloading DiscordBot ... " + MathF.Round(percent, 2) + "%"; + else + textBox1.Text = "Extracting package ..." + MathF.Round(percent, 2) + "%"; + this.progressBar1.Value = percent; + }); - //await Task.Delay(5000); - string url_bot_dll = "https://sethdiscordbot.000webhostapp.com/Storage/Discord%20Bot/Updates/DiscordBot.dll"; - IProgress progress = new Progress((percent) => - { - textBox1.Text = "Downloading DiscordBot.dll ... " + (percent * 100).ToString() + "%"; - this.progressBar1.Value = percent * 100; - }); + this.progressBar1.IsIndeterminate = false; + try + { + await ServerCom.DownloadFileAsync(url_bot_dll, "./DiscordBot.zip", progress); - this.progressBar1.IsIndeterminate = false; - try - { - await ServerCom.DownloadFileAsync(url_bot_dll, "./DiscordBot.dll", progress); - } - catch - { - textBox1.Text = "Error downloading DiscordBot.dll. Server is not responding."; + actiontype++; - await Task.Delay(1000); - return; - } + await Functions.ExtractArchive("./DiscordBot.zip", "./", progress); + } + catch + { + textBox1.Text = "Error downloading DiscordBot.dll. Server is not responding."; - //new MainWindow() { Height = 425, Width = 500 }.Show(); - //Close(); - }*/ + await Task.Delay(1000); + + new MainWindow() { Height = 425, Width = 500 }.Show(); + Close(); + } + } private async void Updates() { @@ -82,31 +85,27 @@ namespace DiscordBotGUI return; } - IProgress progress = new Progress((percent) => - { - this.progressBar1.Value = percent; - }); + IProgress progress = new Progress((percent) => { this.progressBar1.Value = percent; }); textBox1.Text = "Extracting update files ..."; await Functions.ExtractArchive(file, "./", progress); progressBar1.IsIndeterminate = true; - textBox1.Text = "Setting up the new version ..."; + textBox1.Text = "Setting up the new version ..."; File.Delete(file); File.WriteAllText("./Version.txt", "DiscordBotVersion=" + _version); await Task.Delay(5000); new MainWindow() { Height = 425, Width = 650 }.Show(); this.Close(); - } private async Task DownloadNewUpdate() { string urlNewUpdateZip = (await ServerCom.ReadTextFromFile("https://sethdiscordbot.000webhostapp.com/Storage/Discord%20Bot/Updates/Version"))[1]; - int secondsPast = 0; + int secondsPast = 0; bool isDownloading = true; this.progressBar1.IsIndeterminate = true; - textBox1.Text = "Downloading update ..."; + textBox1.Text = "Downloading update ..."; IProgress downloaded = new Progress((bytes) => @@ -117,14 +116,13 @@ namespace DiscordBotGUI IProgress progress = new Progress((percent) => { progressBar1.IsIndeterminate = false; - this.progressBar1.Value = percent; + this.progressBar1.Value = percent; }); string FileName = $"{urlNewUpdateZip.Split('/')[urlNewUpdateZip.Split('/').Length - 1]}"; try { - new Thread(new Task(() => { while (isDownloading) @@ -142,6 +140,7 @@ namespace DiscordBotGUI await Task.Delay(1000); return null; } + isDownloading = false; return FileName; } @@ -150,20 +149,20 @@ namespace DiscordBotGUI { try { - - string current_version = Functions.readCodeFromFile("Version.txt", "DiscordBotVersion", '=') ?? "0"; - string latest_version = (await ServerCom.ReadTextFromFile("https://sethdiscordbot.000webhostapp.com/Storage/Discord%20Bot/Updates/Version"))[0]; + string current_version = Config.GetValue("Version"); + if (current_version == null) + if (!Config.SetValue("Version", "0")) + Config.AddValueToVariables("Version", "0", false); + string latest_version = (await ServerCom.ReadTextFromFile("https://sethdiscordbot.000webhostapp.com/Storage/Discord%20Bot/Updates/Version"))[0]; _version = latest_version; - if (current_version != latest_version) - { - return true; - } + if (current_version != latest_version) { return true; } return false; } catch (Exception ex) { textBox1.Text = "Error while checking for updates. Server is not responding."; + Functions.WriteErrFile(ex.Message); return false; } } diff --git a/DiscordBotGUI/MainWindow.axaml b/DiscordBotGUI/MainWindow.axaml index 43854e9..c011ce7 100644 --- a/DiscordBotGUI/MainWindow.axaml +++ b/DiscordBotGUI/MainWindow.axaml @@ -5,31 +5,35 @@ mc:Ignorable="d" d:DesignWidth="500" d:DesignHeight="425" x:Class="DiscordBotGUI.MainWindow" Title="DiscordBotGUI" - Background="Transparent" - TransparencyLevelHint="AcrylicBlur" - ExtendClientAreaToDecorationsHint="True" > + Background="Transparent" + TransparencyLevelHint="AcrylicBlur" + ExtendClientAreaToDecorationsHint="True"> - - - - - - - - public class ProgressBar { - public int Progress { get; set; } - public int Max { get; set; } - public string Message { get; set; } + public int Max { get; init; } + public ConsoleColor Color { get; init; } + public bool NoColor { get; init; } - public ProgressBar(int max, string message) + + public void Update(int progress, double speed = -1, string? unit = null) { - Max = max; - Message = message; - } - - public async void Update(int progress, double speed = -1, string? unit = null) - { - - //progress bar Console.CursorLeft = 0; Console.Write("["); Console.CursorLeft = 32; @@ -39,15 +28,21 @@ namespace PluginManager.Others for (int i = 0; i < onechunk * progress; i++) { - Console.BackgroundColor = ConsoleColor.Green; - Console.CursorLeft = position++; - Console.Write(" "); + if (NoColor) + Console.BackgroundColor = ConsoleColor.Black; //this.Color + else + Console.BackgroundColor = this.Color; + Console.CursorLeft = position++; + Console.Write("#"); } for (int i = position; i <= 31; i++) { - Console.BackgroundColor = ConsoleColor.Gray; - Console.CursorLeft = position++; + if (NoColor) + Console.BackgroundColor = ConsoleColor.Black; // background of empty bar + else + Console.BackgroundColor = ConsoleColor.DarkGray; + Console.CursorLeft = position++; Console.Write(" "); } @@ -72,9 +67,9 @@ namespace PluginManager.Others /// The List of arrays of strings that represent the rows. public static void FormatAndAlignTable(List data) { - char tableLine = '-'; + char tableLine = '-'; char tableCross = '+'; - char tableWall = '|'; + char tableWall = '|'; int[] len = new int[data[0].Length]; foreach (var line in data) @@ -130,11 +125,12 @@ namespace PluginManager.Others ConsoleColor fg = Console.ForegroundColor; Dictionary colors = new Dictionary() { - {"&g", ConsoleColor.Green }, - {"&b", ConsoleColor.Blue }, - {"&r", ConsoleColor.Red }, - {"&m", ConsoleColor.Magenta }, - {"&c", fg } + { "&g", ConsoleColor.Green }, + { "&b", ConsoleColor.Blue }, + { "&r", ConsoleColor.Red }, + { "&m", ConsoleColor.Magenta }, + { "&y", ConsoleColor.Yellow }, + { "&c", fg } }; foreach (string word in words) { @@ -145,7 +141,9 @@ namespace PluginManager.Others Console.ForegroundColor = colors[prefix]; } - string m = word.Replace("&g", "").Replace("&b", "").Replace("&r", "").Replace("&c", "").Replace("&m", ""); + string m = word; + foreach (var key in colors.Keys) { m = m.Replace(key, ""); } + Console.Write(m + " "); } if (appendNewLine) diff --git a/PluginManager/Others/Cryptography.cs b/PluginManager/Others/Cryptography.cs index e2c13de..04864ae 100644 --- a/PluginManager/Others/Cryptography.cs +++ b/PluginManager/Others/Cryptography.cs @@ -1,91 +1,88 @@ using System; +using System.IO; +using System.Security.Cryptography; +using System.Text; +using System.Threading.Tasks; -namespace PluginManager.Others +namespace PluginManager.Others; + +public class Cryptography { - public class Cryptography + /// + /// Translate hex to string + /// + /// The encrypted string + /// + public static string FromHexToString(string hexString) { + var bytes = new byte[hexString.Length / 2]; + for (var i = 0; i < bytes.Length; i++) bytes[i] = Convert.ToByte(hexString.Substring(i * 2, 2), 16); - /// - /// Translate hex to string - /// - /// The encrypted string - /// - public static string FromHexToString(string hexString) - { - var bytes = new byte[hexString.Length / 2]; - for (var i = 0; i < bytes.Length; i++) - { - bytes[i] = Convert.ToByte(hexString.Substring(i * 2, 2), 16); - } - - return System.Text.Encoding.Unicode.GetString(bytes); - } - - /// - /// Translate string to hex - /// - /// The string to encrypt - /// - public static string ToHexString(string str) - { - var sb = new System.Text.StringBuilder(); - - var bytes = System.Text.Encoding.Unicode.GetBytes(str); - foreach (var t in bytes) - { - sb.Append(t.ToString("X2")); - } - - return sb.ToString(); - } - - /// - /// Create MD5 hash - /// - /// The text to encrypt - /// - public static async System.Threading.Tasks.Task CreateMD5(string text) - { - string output = ""; - using (System.Security.Cryptography.MD5 md5 = System.Security.Cryptography.MD5.Create()) - { - using (var s = GenerateStreamFromString(text)) - { - byte[] t = await md5.ComputeHashAsync(s); - output = System.Convert.ToBase64String(t); - } - } - - return output; - } - - /// - /// Create SHA256 hash - /// - /// The text to encrypt - /// - public static async System.Threading.Tasks.Task CreateSHA256(string text) - { - string output = ""; - using (System.Security.Cryptography.SHA256 sha = System.Security.Cryptography.SHA256.Create()) - { - using (var s = GenerateStreamFromString(text)) - { - byte[] t = await sha.ComputeHashAsync(s); - output = System.Convert.ToBase64String(t); - } - } - return output; - } - - private static System.IO.Stream GenerateStreamFromString(string s) - { - var stream = new System.IO.MemoryStream(); - var writer = new System.IO.StreamWriter(stream); - writer.Write(s); - writer.Flush(); - stream.Position = 0; - return stream; - } + return Encoding.Unicode.GetString(bytes); } -} \ No newline at end of file + + /// + /// Translate string to hex + /// + /// The string to encrypt + /// + public static string ToHexString(string str) + { + var sb = new StringBuilder(); + + var bytes = Encoding.Unicode.GetBytes(str); + foreach (var t in bytes) sb.Append(t.ToString("X2")); + + return sb.ToString(); + } + + /// + /// Create MD5 hash + /// + /// The text to encrypt + /// + public static async Task CreateMD5(string text) + { + var output = ""; + using (var md5 = MD5.Create()) + { + using (var s = GenerateStreamFromString(text)) + { + var t = await md5.ComputeHashAsync(s); + output = Convert.ToBase64String(t); + } + } + + return output; + } + + /// + /// Create SHA256 hash + /// + /// The text to encrypt + /// + public static async Task CreateSHA256(string text) + { + var output = ""; + using (var sha = SHA256.Create()) + { + using (var s = GenerateStreamFromString(text)) + { + var t = await sha.ComputeHashAsync(s); + output = Convert.ToBase64String(t); + } + } + + return output; + } + + private static Stream GenerateStreamFromString(string s) + { + var stream = new MemoryStream(); + var writer = new StreamWriter(stream); + writer.Write(s); + writer.Flush(); + stream.Position = 0; + return stream; + } +} diff --git a/PluginManager/Others/Enums.cs b/PluginManager/Others/Enums.cs index 222e169..d8b22fb 100644 --- a/PluginManager/Others/Enums.cs +++ b/PluginManager/Others/Enums.cs @@ -1,20 +1,22 @@ -namespace PluginManager.Others +namespace PluginManager.Others; + +/// +/// A list of operating systems +/// +public enum OperatingSystem { + WINDOWS, LINUX, MAC_OS, UNKNOWN +} - /// - /// A list of operating systems - /// - public enum OperatingSystem - { WINDOWS, LINUX, MAC_OS, UNKNOWN } +/// +/// A list with all errors +/// +public enum Error +{ + UNKNOWN_ERROR, GUILD_NOT_FOUND, STREAM_NOT_FOUND, INVALID_USER, INVALID_CHANNEL, INVALID_PERMISSIONS +} - /// - /// A list with all errors - /// - public enum Error - { UNKNOWN_ERROR, GUILD_NOT_FOUND, STREAM_NOT_FOUND, INVALID_USER, INVALID_CHANNEL, INVALID_PERMISSIONS } - - /// - /// The output log type - /// - public enum OutputLogLevel { NONE, INFO, WARNING, ERROR, CRITICAL } -} \ No newline at end of file +/// +/// The output log type +/// +public enum OutputLogLevel { NONE, INFO, WARNING, ERROR, CRITICAL } diff --git a/PluginManager/Others/Exceptions/APIException.cs b/PluginManager/Others/Exceptions/APIException.cs index 990704f..37264c1 100644 --- a/PluginManager/Others/Exceptions/APIException.cs +++ b/PluginManager/Others/Exceptions/APIException.cs @@ -1,94 +1,91 @@ using System; -namespace PluginManager.Others.Exceptions +namespace PluginManager.Others.Exceptions; + +/// +/// Custom Exception for PluginManager +/// +[Serializable] +public class APIException : Exception { /// - /// Custom Exception for PluginManager + /// The APIException contructor /// - [Serializable] - - public class APIException : Exception + /// The error message + /// The function where the message was triggered + /// The possible cause of the error + /// The error code + public APIException(string message, string? function, string possible_cause, Error error) : base(message) { - /// - /// The function where the error occurred - /// - public string? Function { get; } = "not specified"; - - /// - /// The error code - /// - public Error? ErrorCode { get; } = Error.UNKNOWN_ERROR; - - /// - /// The possible cause that determined the error - /// - public string? PossibleCause { get; } = "not specified"; - - /// - /// The APIException contructor - /// - /// The error message - /// The function where the message was triggered - /// The possible cause of the error - /// The error code - public APIException(string message, string? function, string possible_cause, Error error) : base(message) - { - ErrorCode = error; - Function = function; - PossibleCause = possible_cause; - } - - /// - /// The APIException contructor - /// - /// The error message - /// The function where the message was triggered - /// The error code - public APIException(string message, string? function, Error? errorCode) : base(message) - { - ErrorCode = errorCode; - Function = function; - } - /// - /// The APIException contructor - /// - /// The error message - /// The function where the message was triggered - public APIException(string message, string? function) : base(message) - { - Function = function; - } - /// - /// The APIException contructor - /// - /// The error message - public APIException(string message) : base(message) - { - - } - - /// - /// The APIException constructor - /// - /// The error message - /// The class where the error was thrown - public APIException(string message, Type errorLocation) : base(message) - { - Function = errorLocation.FullName; - } - - /// - /// Method to print the error to - /// - public void Print() - { - Console.WriteLine("Message Content: " + Message); - Console.WriteLine("Function: " + Function); - Console.WriteLine("Error Code: " + ErrorCode.ToString()); - Console.WriteLine("Possible cause: " + PossibleCause); - if (this.StackTrace != null) - Functions.WriteErrFile(this.StackTrace); - } + ErrorCode = error; + Function = function; + PossibleCause = possible_cause; } -} \ No newline at end of file + /// + /// The APIException contructor + /// + /// The error message + /// The function where the message was triggered + /// The error code + public APIException(string message, string? function, Error? errorCode) : base(message) + { + ErrorCode = errorCode; + Function = function; + } + + /// + /// The APIException contructor + /// + /// The error message + /// The function where the message was triggered + public APIException(string message, string? function) : base(message) + { + Function = function; + } + + /// + /// The APIException contructor + /// + /// The error message + public APIException(string message) : base(message) + { + } + + /// + /// The APIException constructor + /// + /// The error message + /// The class where the error was thrown + public APIException(string message, Type errorLocation) : base(message) + { + Function = errorLocation.FullName; + } + + /// + /// The function where the error occurred + /// + public string? Function { get; } = "not specified"; + + /// + /// The error code + /// + public Error? ErrorCode { get; } = Error.UNKNOWN_ERROR; + + /// + /// The possible cause that determined the error + /// + public string? PossibleCause { get; } = "not specified"; + + /// + /// Method to print the error to + /// + public void Print() + { + Console.WriteLine("Message Content: " + Message); + Console.WriteLine("Function: " + Function); + Console.WriteLine("Error Code: " + ErrorCode); + Console.WriteLine("Possible cause: " + PossibleCause); + if (StackTrace != null) Functions.WriteErrFile(StackTrace); + } +} diff --git a/PluginManager/Others/Functions.cs b/PluginManager/Others/Functions.cs index 9e8091b..0857eb1 100644 --- a/PluginManager/Others/Functions.cs +++ b/PluginManager/Others/Functions.cs @@ -7,6 +7,8 @@ using System.Collections.Generic; using Discord.WebSocket; using PluginManager.Items; using System.Threading; +using System.Text.Json; +using System.Text; namespace PluginManager.Others { @@ -40,22 +42,6 @@ namespace PluginManager.Others /// public static readonly string pakFolder = @"./Data/Resources/PAKS/"; - /// - /// The mark that the line is a comment - /// - private static readonly char commentMark = '#'; - - /// - /// Read data from file - /// - /// File name - /// Setting name - /// Separator between setting key code and its value - /// The value of the specified setting key code in the specified file () - public static string? readCodeFromFile(string fileName, string Code, char separator) - => File.ReadAllLines(fileName) - .Where(p => p.StartsWith(Code) && !p.StartsWith(commentMark.ToString())) - .First().Split(separator)[1] ?? null; /// /// Read data from a file that is inside an archive (ZIP format) @@ -67,17 +53,16 @@ namespace PluginManager.Others { archFile = pakFolder + archFile; Directory.CreateDirectory(pakFolder); - if (!File.Exists(archFile)) - throw new FileNotFoundException("Failed to load file !"); + if (!File.Exists(archFile)) throw new FileNotFoundException("Failed to load file !"); string? textValue = null; - var fs = new FileStream(archFile, FileMode.Open); - var zip = new ZipArchive(fs, ZipArchiveMode.Read); + var fs = new FileStream(archFile, FileMode.Open); + var zip = new ZipArchive(fs, ZipArchiveMode.Read); foreach (var entry in zip.Entries) { if (entry.Name == FileName || entry.FullName == FileName) { - Stream s = entry.Open(); + Stream s = entry.Open(); StreamReader reader = new StreamReader(s); textValue = await reader.ReadToEndAsync(); reader.Close(); @@ -86,6 +71,7 @@ namespace PluginManager.Others break; } } + return textValue; } @@ -96,8 +82,7 @@ namespace PluginManager.Others public static void WriteLogFile(string LogMessage) { string logsPath = logFolder + "Log.txt"; - if (!Directory.Exists(logFolder)) - Directory.CreateDirectory(logFolder); + if (!Directory.Exists(logFolder)) Directory.CreateDirectory(logFolder); File.AppendAllText(logsPath, LogMessage + " \n"); } @@ -108,36 +93,10 @@ namespace PluginManager.Others public static void WriteErrFile(string ErrMessage) { string errPath = errFolder + "Error.txt"; - if (!Directory.Exists(errFolder)) - Directory.CreateDirectory(errFolder); + if (!Directory.Exists(errFolder)) Directory.CreateDirectory(errFolder); File.AppendAllText(errPath, ErrMessage + " \n"); } - /// - /// Write to settings file - /// - /// The settings file path - /// The Key value of the setting - /// The new value of the settings - /// The separator between the key and the value - public static void WriteToSettings(string file, string Code, string newValue, char separator) - { - - string[] lines = File.ReadAllLines(file); - File.Delete(file); - bool ok = false; - foreach (var line in lines) - if (line.StartsWith(Code)) - { - File.AppendAllText(file, Code + separator + newValue + "\n"); - ok = true; - } - else File.AppendAllText(file, line + "\n"); - - if (!ok) - File.AppendAllText(file, Code + separator + newValue + "\n"); - } - /// /// Merge one array of strings into one string /// @@ -146,8 +105,8 @@ namespace PluginManager.Others /// A string built based on the array public static string MergeStrings(this string[] s, int indexToStart) { - string r = ""; - int len = s.Length; + string r = ""; + int len = s.Length; if (len <= indexToStart) return ""; for (int i = indexToStart; i < len - 1; ++i) { @@ -177,30 +136,6 @@ namespace PluginManager.Others return command.Arguments; } - - /// - /// Write setting - /// - /// The full path to the setting - /// The new Value - public static void WriteToSettingsFast(string SettingName, string NewValue) - { - - string path = dataFolder; // Resources/ - - string[] args = SettingName.Split('.'); - - int len = args.Length; - if (len < 2) return; - for (int i = 0; i < len - 2; i++) - path += args[i] + "/"; - path += args[len - 2] + ".txt"; - - - WriteToSettings(path, args[len - 1].Replace('_', ' '), NewValue, '='); - - } - /// /// Copy one Stream to another /// @@ -215,20 +150,15 @@ namespace PluginManager.Others /// Triggered in is not writable public static async Task CopyToOtherStreamAsync(this Stream stream, Stream destination, int bufferSize, IProgress? progress = null, CancellationToken cancellationToken = default) { - if (stream == null) - throw new ArgumentNullException(nameof(stream)); - if (destination == null) - throw new ArgumentNullException(nameof(destination)); - if (bufferSize <= 0) - throw new ArgumentOutOfRangeException(nameof(bufferSize)); - if (!stream.CanRead) - throw new InvalidOperationException("The stream is not readable."); - if (!destination.CanWrite) - throw new ArgumentException("Destination stream is not writable", nameof(destination)); + if (stream == null) throw new ArgumentNullException(nameof(stream)); + if (destination == null) throw new ArgumentNullException(nameof(destination)); + if (bufferSize <= 0) throw new ArgumentOutOfRangeException(nameof(bufferSize)); + if (!stream.CanRead) throw new InvalidOperationException("The stream is not readable."); + if (!destination.CanWrite) throw new ArgumentException("Destination stream is not writable", nameof(destination)); - byte[] buffer = new byte[bufferSize]; - long totalBytesRead = 0; - int bytesRead; + byte[] buffer = new byte[bufferSize]; + long totalBytesRead = 0; + int bytesRead; while ((bytesRead = await stream.ReadAsync(buffer, 0, buffer.Length, cancellationToken).ConfigureAwait(false)) != 0) { await destination.WriteAsync(buffer, 0, bytesRead, cancellationToken).ConfigureAwait(false); @@ -246,29 +176,28 @@ namespace PluginManager.Others /// public static async Task ExtractArchive(string zip, string folder, IProgress progress) { - if (!Directory.Exists(folder)) - Directory.CreateDirectory(folder); - - + if (!Directory.Exists(folder)) Directory.CreateDirectory(folder); using (ZipArchive archive = ZipFile.OpenRead(zip)) { - int totalZIPFiles = archive.Entries.Count(); + int totalZIPFiles = archive.Entries.Count(); int currentZIPFile = 0; foreach (ZipArchiveEntry entry in archive.Entries) { if (entry.FullName.EndsWith("/")) - { - currentZIPFile++; Directory.CreateDirectory(Path.Combine(folder, entry.FullName)); - } - else - { - entry.ExtractToFile(Path.Combine(folder, entry.FullName), true); - currentZIPFile++; - } + else + try + { + entry.ExtractToFile(Path.Combine(folder, entry.FullName), true); + } + catch + { + } + + currentZIPFile++; await Task.Delay(10); progress.Report((float)currentZIPFile / totalZIPFiles * 100); } @@ -276,13 +205,76 @@ namespace PluginManager.Others } + /// + /// Convert Bytes to highest measurement unit possible + /// + /// The amount of bytes + /// public static (double, string) ConvertBytes(long bytes) { - if (bytes < 1024) return (bytes, "B"); - if (bytes < 1024 * 1024) return (bytes / 1024.0, "KB"); - if (bytes < 1024 * 1024 * 1024) return (bytes / 1024.0 / 1024.0, "MB"); - return (bytes / 1024.0 / 1024.0 / 1024.0, "GB"); + List units = new List() + { + "B", + "KB", + "MB", + "GB", + "TB" + }; + int i = 0; + while (bytes >= 1024) + { + i++; + bytes /= 1024; + } + return (bytes, units[i]); + } + + /// + /// Save to JSON file + /// + /// The class type + /// The file path + /// The values + /// + public static async Task SaveToJsonFile(string file, T Data) + { + using (var s = File.OpenWrite(file)) await JsonSerializer.SerializeAsync(s, Data, typeof(T), new JsonSerializerOptions { WriteIndented = true }); + } + + /// + /// Convert json text or file to some kind of data + /// + /// The data type + /// The file or json text + /// + public static async Task ConvertFromJson(string input) + { + Stream text; + if (File.Exists(input)) + text = File.Open(input, FileMode.OpenOrCreate); + + else + text = new MemoryStream(Encoding.ASCII.GetBytes(input)); + text.Position = 0; + var obj = await JsonSerializer.DeserializeAsync(text); + text.Close(); + return obj; + } + + public static bool TryReadValueFromJson(string input, string codeName, out JsonElement element) + { + Stream text; + if (File.Exists(input)) + text = File.OpenRead(input); + + else + text = new MemoryStream(Encoding.ASCII.GetBytes(input)); + + var jsonObject = JsonDocument.Parse(text); + + var data = jsonObject.RootElement.TryGetProperty(codeName, out element); + return data; } } } diff --git a/PluginManager/Others/Permissions/DiscordPermissions.cs b/PluginManager/Others/Permissions/DiscordPermissions.cs index be55780..e8fae3b 100644 --- a/PluginManager/Others/Permissions/DiscordPermissions.cs +++ b/PluginManager/Others/Permissions/DiscordPermissions.cs @@ -1,55 +1,64 @@ -using Discord; +using System.Linq; +using Discord; using Discord.WebSocket; -using System.Linq; +namespace PluginManager.Others.Permissions; -namespace PluginManager.Others.Permissions +/// +/// A class whith all discord permissions +/// +public static class DiscordPermissions { /// - /// A class whith all discord permissions + /// Checks if the role has the specified permission /// - public static class DiscordPermissions + /// The role + /// The permission + /// + public static bool hasPermission(this IRole role, GuildPermission permission) { - /// - /// Checks if the role has the specified permission - /// - /// The role - /// The permission - /// - public static bool hasPermission(this IRole role, GuildPermission permission) => role.Permissions.Has(permission); - - /// - /// Check if user has the specified role - /// - /// The user - /// The role - /// - public static bool hasRole(this SocketGuildUser user, IRole role) => user.Roles.Contains(role); - - /// - /// Check if user has the specified permission - /// - /// The user - /// The permission - /// - public static bool hasPermission(this SocketGuildUser user, GuildPermission permission) - => user.Roles.Where(role => role.hasPermission(permission)).Any() || user.Guild.Owner == user; - /// - /// Check if user is administrator of server - /// - /// The user - /// - public static bool isAdmin(this SocketGuildUser user) => user.hasPermission(GuildPermission.Administrator); - - /// - /// Check if user is administrator of server - /// - /// The user - /// - public static bool isAdmin(this SocketUser user) => isAdmin((SocketGuildUser)user); + return role.Permissions.Has(permission); } + /// + /// Check if user has the specified role + /// + /// The user + /// The role + /// + public static bool hasRole(this SocketGuildUser user, IRole role) + { + return user.Roles.Contains(role); + } + /// + /// Check if user has the specified permission + /// + /// The user + /// The permission + /// + public static bool hasPermission(this SocketGuildUser user, GuildPermission permission) + { + return user.Roles.Where(role => role.hasPermission(permission)).Any() || user.Guild.Owner == user; + } + /// + /// Check if user is administrator of server + /// + /// The user + /// + public static bool isAdmin(this SocketGuildUser user) + { + return user.hasPermission(GuildPermission.Administrator); + } -} \ No newline at end of file + /// + /// Check if user is administrator of server + /// + /// The user + /// + public static bool isAdmin(this SocketUser user) + { + return isAdmin((SocketGuildUser)user); + } +} diff --git a/PluginManager/PluginManager.csproj b/PluginManager/PluginManager.csproj index 7d2d32a..7eafd1b 100644 --- a/PluginManager/PluginManager.csproj +++ b/PluginManager/PluginManager.csproj @@ -19,10 +19,4 @@ - - - MSBuild:Compile - - - diff --git a/README.md b/README.md index 1c1fd58..5aee53e 100644 --- a/README.md +++ b/README.md @@ -17,6 +17,9 @@ Plugin Types: 1. Commands 2. Events +Project Structure + +![Image](../../blob/gh-pages/Pictures/architecture2.png) ### How to create a plugin diff --git a/StartupEvents/OnUserJoin.cs b/StartupEvents/OnUserJoin.cs deleted file mode 100644 index bb4ff5f..0000000 --- a/StartupEvents/OnUserJoin.cs +++ /dev/null @@ -1,57 +0,0 @@ -using PluginManager.Others; -using PluginManager.Interfaces; -using Discord; - -public class OnUserJoin : DBEvent -{ - public string name => "OnPlayerJoin"; - - public string description => "An event that is triggered when an user joins the server"; - - private string UtilsPath = Functions.dataFolder + "/StartupEvents"; - private string ConfigFile = Functions.dataFolder + "/StartupEvents/" + "UserJoinEvent.txt"; - - public async void Start(Discord.WebSocket.DiscordSocketClient client) - { - - System.IO.Directory.CreateDirectory(UtilsPath); - - if (!System.IO.File.Exists(ConfigFile)) - { - await System.IO.File.WriteAllTextAsync(ConfigFile, - "Enabled=True\nEmbed=True\n" + - "#Available placeholders:\n" + - "#{user.Name} => Username of the user\n" + - "#{time.date} => Current Date\n" + - "#{time.time} => Current time (hh:mm::ss)\n" + - "MessageTitle = Welcome {user.Name}\n" + - "MessageDescription=Embed description\n" + - "MessageField1Title=Custom Title\n" + - "MessageFiled1Text=Custom Filed 1 text\n" + - "MessageField2Title=Custom Title\n" + - "MessageFiled2Text=Custom Filed 2 text\n" + - "MessageFooter=Today: {time.date} at {time.time}\n"); - } - - if (Functions.readCodeFromFile(ConfigFile, "Enabled", '=') != "True") return; - //System.Console.WriteLine("Awaiting user join event ..."); - - client.UserJoined += Client_UserJoined; - - } - - private async System.Threading.Tasks.Task Client_UserJoined(Discord.WebSocket.SocketGuildUser user) - { - Console_Utilities.WriteColorText("A new user joins: " + user.Username); - EmbedBuilder embed = new EmbedBuilder - { - Title = Functions.readCodeFromFile(ConfigFile, "MessageTitle", '='), - Description = Functions.readCodeFromFile(ConfigFile, "MessageDescription", '=') - }; - embed - .AddField(Functions.readCodeFromFile(ConfigFile, "MessageField1Title", '=').Replace("{user.Name}", user.Username).Replace("{time.date}", System.DateTime.Now.ToShortDateString()).Replace("{time.time}", System.DateTime.Now.ToShortTimeString()), Functions.readCodeFromFile(ConfigFile, "MessageField1Text", '=').Replace("{user.Name}", user.Username).Replace("{time.date}", System.DateTime.Now.ToShortDateString()).Replace("{time.time}", System.DateTime.Now.ToShortTimeString())) - .AddField(Functions.readCodeFromFile(ConfigFile, "MessageField2Title", '=').Replace("{user.Name}", user.Username).Replace("{time.date}", System.DateTime.Now.ToShortDateString()).Replace("{time.time}", System.DateTime.Now.ToShortTimeString()), Functions.readCodeFromFile(ConfigFile, "MessageField2Text", '=').Replace("{user.Name}", user.Username).Replace("{time.date}", System.DateTime.Now.ToShortDateString()).Replace("{time.time}", System.DateTime.Now.ToShortTimeString())) - .WithFooter(Functions.readCodeFromFile(ConfigFile, "MessageFooter", '=').Replace("{user.Name}", user.Username).Replace("{time.date}", System.DateTime.Now.ToShortDateString()).Replace("{time.time}", System.DateTime.Now.ToShortTimeString())); - await user.Guild.DefaultChannel.SendMessageAsync(embed: embed.Build()); - } -} \ No newline at end of file diff --git a/StartupEvents/SetGameOnLogin.cs b/StartupEvents/SetGameOnLogin.cs deleted file mode 100644 index 4a2d2d9..0000000 --- a/StartupEvents/SetGameOnLogin.cs +++ /dev/null @@ -1,48 +0,0 @@ -public class SetGameOnLogin : PluginManager.Interfaces.DBEvent -{ - public string name => "Set Game on Startup"; - public string description => "Set Custom Game to the bot at initialization"; - public async void Start(Discord.WebSocket.DiscordSocketClient client) - { - string UtilsPath = PluginManager.Others.Functions.dataFolder + "StartupEvents/"; - string ConfigFile = UtilsPath + "LoginEvent.txt"; - - System.IO.Directory.CreateDirectory(UtilsPath); - if (!System.IO.File.Exists(ConfigFile)) - { - System.Console.WriteLine($"First time setup. Open file: {ConfigFile} to change settings or use the following commands\nNote: For space ( ) use underline (_). Example: 'Hello_World' will output 'Hello World'"); - System.Console.WriteLine($"set-setting StartupEvents.LoginEvent.Title [Custom_Title(s)]"); - System.Console.WriteLine($"set-setting StartupEvents.LoginEvent.Dynamic_Title [True/False]"); - System.Console.WriteLine($"set-setting StartupEvents.LoginEvent.Dynamic_Title_Change_Rate [interval in milliseconds]"); - await System.IO.File.WriteAllTextAsync(ConfigFile, "Enabled=True\n\nDynamic Title=False\n#For dynamic title add titles like this:\n#Title=Hello,World,Test,Test2\nTitle=!help\nDynamic Title Change Rate=3500\n"); - } - - if (PluginManager.Others.Functions.readCodeFromFile(ConfigFile, "Enabled", '=') != "True") - return; - - bool isDynamic = PluginManager.Others.Functions.readCodeFromFile(ConfigFile, "Dynamic Title", '=') == "True"; - string Title = PluginManager.Others.Functions.readCodeFromFile(ConfigFile, "Title", '='); - if (Title == null || Title.Length < 2) return; - if (!isDynamic) - await client.SetGameAsync(Title, null, Discord.ActivityType.Playing); - else - { - string[] Titles = Title.Split(','); - int delayMS = 3500; - try - { - delayMS = int.Parse(PluginManager.Others.Functions.readCodeFromFile(ConfigFile, "Dynamic Title Change Rate", '=')); - } - catch { } - while (true) - { - foreach (var title in Titles) - { - await client.SetGameAsync(title, null, Discord.ActivityType.Playing); - await System.Threading.Tasks.Task.Delay(delayMS); - } - } - } - - } -} \ No newline at end of file diff --git a/StartupEvents/StartupEvents.csproj b/StartupEvents/StartupEvents.csproj deleted file mode 100644 index aaabc01..0000000 --- a/StartupEvents/StartupEvents.csproj +++ /dev/null @@ -1,17 +0,0 @@ - - - - net6.0 - - - - ..\BUILDS\ - none - false - - - - - - -