diff --git a/Handler/GoodByeCommand/GoodbyeHandler.cs b/Bot/Handler/GoodByeCommand/GoodbyeHandler.cs similarity index 100% rename from Handler/GoodByeCommand/GoodbyeHandler.cs rename to Bot/Handler/GoodByeCommand/GoodbyeHandler.cs diff --git a/Handler/HelloCommand/HelloHandler.cs b/Bot/Handler/HelloCommand/HelloHandler.cs similarity index 100% rename from Handler/HelloCommand/HelloHandler.cs rename to Bot/Handler/HelloCommand/HelloHandler.cs diff --git a/Handler/MessageReceivedHandler.cs b/Bot/Handler/MessageReceivedHandler.cs similarity index 100% rename from Handler/MessageReceivedHandler.cs rename to Bot/Handler/MessageReceivedHandler.cs diff --git a/Bot/Helpers/ClientReadyHandler.cs b/Bot/Helpers/ClientReadyHandler.cs new file mode 100644 index 0000000..b4627f9 --- /dev/null +++ b/Bot/Helpers/ClientReadyHandler.cs @@ -0,0 +1,15 @@ +using System.Threading.Tasks; +using Discord.WebSocket; +using Lunaris2.SlashCommand; + +namespace Lunaris2.Helpers +{ + public static class ClientReadyHandler + { + public static Task Client_Ready(this DiscordSocketClient client) + { + client.RegisterCommands(); + return Task.CompletedTask; + } + } +} \ No newline at end of file diff --git a/Bot/Helpers/CommandServiceSetup.cs b/Bot/Helpers/CommandServiceSetup.cs new file mode 100644 index 0000000..4ad019e --- /dev/null +++ b/Bot/Helpers/CommandServiceSetup.cs @@ -0,0 +1,12 @@ +using Discord.Commands; + +namespace Lunaris2.Helpers +{ + public static class CommandServiceSetup + { + public static CommandService Setup() + { + return new CommandService(); + } + } +} \ No newline at end of file diff --git a/Bot/Helpers/DiscordSocketClientSetup.cs b/Bot/Helpers/DiscordSocketClientSetup.cs new file mode 100644 index 0000000..c8e6d62 --- /dev/null +++ b/Bot/Helpers/DiscordSocketClientSetup.cs @@ -0,0 +1,17 @@ +using Discord; +using Discord.WebSocket; + +namespace Lunaris2.Helpers +{ + public static class DiscordSocketClientSetup + { + public static DiscordSocketClient Setup() + { + var config = new DiscordSocketConfig + { + GatewayIntents = GatewayIntents.All + }; + return new DiscordSocketClient(config); + } + } +} \ No newline at end of file diff --git a/Bot/Helpers/LogHandler.cs b/Bot/Helpers/LogHandler.cs new file mode 100644 index 0000000..b535c69 --- /dev/null +++ b/Bot/Helpers/LogHandler.cs @@ -0,0 +1,13 @@ +using Discord; + +namespace Lunaris2.Helpers +{ + public static class LogHandler + { + public static Task Log(LogMessage arg) + { + Console.WriteLine(arg); + return Task.CompletedTask; + } + } +} \ No newline at end of file diff --git a/Lunaris2.csproj b/Bot/Lunaris2.csproj similarity index 100% rename from Lunaris2.csproj rename to Bot/Lunaris2.csproj diff --git a/Notification/DiscordEventListener.cs b/Bot/Notification/DiscordEventListener.cs similarity index 100% rename from Notification/DiscordEventListener.cs rename to Bot/Notification/DiscordEventListener.cs diff --git a/Notification/MessageReceivedNotification.cs b/Bot/Notification/MessageReceivedNotification.cs similarity index 100% rename from Notification/MessageReceivedNotification.cs rename to Bot/Notification/MessageReceivedNotification.cs diff --git a/Program.cs b/Bot/Program.cs similarity index 100% rename from Program.cs rename to Bot/Program.cs diff --git a/README.md b/Bot/README.md similarity index 100% rename from README.md rename to Bot/README.md diff --git a/SlashCommand/Command.cs b/Bot/SlashCommand/Command.cs similarity index 100% rename from SlashCommand/Command.cs rename to Bot/SlashCommand/Command.cs diff --git a/SlashCommand/SlashCommandBuilder.cs b/Bot/SlashCommand/SlashCommandBuilder.cs similarity index 100% rename from SlashCommand/SlashCommandBuilder.cs rename to Bot/SlashCommand/SlashCommandBuilder.cs diff --git a/SlashCommand/SlashCommandRegistration.cs b/Bot/SlashCommand/SlashCommandRegistration.cs similarity index 100% rename from SlashCommand/SlashCommandRegistration.cs rename to Bot/SlashCommand/SlashCommandRegistration.cs diff --git a/Lunaris2.sln b/Lunaris2.sln index aa34267..7430cb1 100644 --- a/Lunaris2.sln +++ b/Lunaris2.sln @@ -3,7 +3,7 @@ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.9.34701.34 MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Lunaris2", "Lunaris2.csproj", "{3A16FD4C-EE50-4B05-9A75-0DDCD93AA615}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Lunaris2", "Bot/Lunaris2.csproj", "{3A16FD4C-EE50-4B05-9A75-0DDCD93AA615}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution diff --git a/application.yml b/application.yml new file mode 100644 index 0000000..40a77a0 --- /dev/null +++ b/application.yml @@ -0,0 +1,97 @@ +server: # REST and WS server + port: 2333 + address: 0.0.0.0 + http2: + enabled: false # Whether to enable HTTP/2 support +plugins: +# name: # Name of the plugin +# some_key: some_value # Some key-value pair for the plugin +# another_key: another_value +lavalink: + plugins: +# - dependency: "com.github.example:example-plugin:1.0.0" # required, the coordinates of your plugin +# repository: "https://maven.example.com/releases" # optional, defaults to the Lavalink releases repository by default +# snapshot: false # optional, defaults to false, used to tell Lavalink to use the snapshot repository instead of the release repository +# pluginsDir: "./plugins" # optional, defaults to "./plugins" +# defaultPluginRepository: "https://maven.lavalink.dev/releases" # optional, defaults to the Lavalink release repository +# defaultPluginSnapshotRepository: "https://maven.lavalink.dev/snapshots" # optional, defaults to the Lavalink snapshot repository + server: + password: "youshallnotpass" + sources: + youtube: true + bandcamp: true + soundcloud: true + twitch: true + vimeo: true + http: true + local: false + filters: # All filters are enabled by default + volume: true + equalizer: true + karaoke: true + timescale: true + tremolo: true + vibrato: true + distortion: true + rotation: true + channelMix: true + lowPass: true + bufferDurationMs: 400 # The duration of the NAS buffer. Higher values fare better against longer GC pauses. Duration <= 0 to disable JDA-NAS. Minimum of 40ms, lower values may introduce pauses. + frameBufferDurationMs: 5000 # How many milliseconds of audio to keep buffered + opusEncodingQuality: 10 # Opus encoder quality. Valid values range from 0 to 10, where 10 is best quality but is the most expensive on the CPU. + resamplingQuality: LOW # Quality of resampling operations. Valid values are LOW, MEDIUM and HIGH, where HIGH uses the most CPU. + trackStuckThresholdMs: 10000 # The threshold for how long a track can be stuck. A track is stuck if does not return any audio data. + useSeekGhosting: true # Seek ghosting is the effect where whilst a seek is in progress, the audio buffer is read from until empty, or until seek is ready. + youtubePlaylistLoadLimit: 6 # Number of pages at 100 each + playerUpdateInterval: 5 # How frequently to send player updates to clients, in seconds + youtubeSearchEnabled: true + soundcloudSearchEnabled: true + gc-warnings: true + #ratelimit: + #ipBlocks: ["1.0.0.0/8", "..."] # list of ip blocks + #excludedIps: ["...", "..."] # ips which should be explicit excluded from usage by lavalink + #strategy: "RotateOnBan" # RotateOnBan | LoadBalance | NanoSwitch | RotatingNanoSwitch + #searchTriggersFail: true # Whether a search 429 should trigger marking the ip as failing + #retryLimit: -1 # -1 = use default lavaplayer value | 0 = infinity | >0 = retry will happen this numbers times + #youtubeConfig: # Required for avoiding all age restrictions by YouTube, some restricted videos still can be played without. + #email: "" # Email of Google account + #password: "" # Password of Google account + #httpConfig: # Useful for blocking bad-actors from ip-grabbing your music node and attacking it, this way only the http proxy will be attacked + #proxyHost: "localhost" # Hostname of the proxy, (ip or domain) + #proxyPort: 3128 # Proxy port, 3128 is the default for squidProxy + #proxyUser: "" # Optional user for basic authentication fields, leave blank if you don't use basic auth + #proxyPassword: "" # Password for basic authentication + +metrics: + prometheus: + enabled: false + endpoint: /metrics + +sentry: + dsn: "" + environment: "" +# tags: +# some_key: some_value +# another_key: another_value + +logging: + file: + path: ./logs/ + + level: + root: INFO + lavalink: INFO + + request: + enabled: true + includeClientInfo: true + includeHeaders: false + includeQueryString: true + includePayload: true + maxPayloadLength: 10000 + + + logback: + rollingpolicy: + max-file-size: 1GB + max-history: 30 \ No newline at end of file diff --git a/appsettings.json b/appsettings.json deleted file mode 100644 index f0b8100..0000000 --- a/appsettings.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "Logging": { - "LogLevel": { - "Default": "Debug", - "System": "Information", - "Microsoft": "Information" - } - }, - "Token": "YOUR_BOT_TOKEN" -} \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..fb75e7e --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,30 @@ +services: + lavalink: + # pin the image version to Lavalink v4 + image: ghcr.io/lavalink-devs/lavalink:4 + container_name: lavalink + restart: unless-stopped + environment: + # set Java options here + - _JAVA_OPTIONS=-Xmx6G + # set lavalink server port + - SERVER_PORT=2333 + # set password for lavalink + - LAVALINK_SERVER_PASSWORD=youshallnotpass + volumes: + # mount application.yml from the same directory or use environment variables + - ./application.yml:/opt/Lavalink/application.yml + # persist plugins between restarts, make sure to set the correct permissions (user: 322, group: 322) + - ./plugins/:/opt/Lavalink/plugins/ + networks: + - lavalink + expose: + # lavalink exposes port 2333 to connect to for other containers (this is for documentation purposes only) + - 2333 + ports: + # you only need this if you want to make your lavalink accessible from outside of containers + - "2333:2333" +networks: + # create a lavalink network you can add other containers to, to give them access to Lavalink + lavalink: + name: lavalink \ No newline at end of file diff --git a/plugins/lavasearch-plugin-1.0.0.jar b/plugins/lavasearch-plugin-1.0.0.jar new file mode 100644 index 0000000..9ebbc3c Binary files /dev/null and b/plugins/lavasearch-plugin-1.0.0.jar differ diff --git a/plugins/skybot-lavalink-plugin-1.6.3.jar b/plugins/skybot-lavalink-plugin-1.6.3.jar new file mode 100644 index 0000000..d9a6410 Binary files /dev/null and b/plugins/skybot-lavalink-plugin-1.6.3.jar differ diff --git a/plugins/sponsorblock-plugin-3.0.0.jar b/plugins/sponsorblock-plugin-3.0.0.jar new file mode 100644 index 0000000..68c70c8 Binary files /dev/null and b/plugins/sponsorblock-plugin-3.0.0.jar differ diff --git a/start-services.sh b/start-services.sh new file mode 100644 index 0000000..e92332e --- /dev/null +++ b/start-services.sh @@ -0,0 +1 @@ +docker compose up -d \ No newline at end of file