Compare commits

..

9 Commits

Author SHA1 Message Date
3362c6bf8c Update README.md 2024-10-25 23:28:55 +02:00
a864944318 Update README.md 2024-10-25 22:08:25 +02:00
146455c1bd Add logotype 2024-10-25 22:07:06 +02:00
56eee11fc9 Update README.md 2024-10-25 21:56:21 +02:00
e01746a343 Update README.md 2024-10-25 21:54:44 +02:00
e847c1579a Update readme.md 2024-10-25 21:51:44 +02:00
1ccc31d3d2 Update readme.md 2024-10-25 21:50:41 +02:00
7c4d8c246d Update README.md 2024-10-25 21:49:24 +02:00
43f0191752 Update readme.md 2024-10-25 21:47:54 +02:00
4 changed files with 154 additions and 73 deletions

View File

@@ -8,6 +8,29 @@ flowchart TD
PlayTrack --> NowPlayingEmbed PlayTrack --> NowPlayingEmbed
``` ```
```mermaid
sequenceDiagram
participant User
participant Bot
participant DiscordSocketClient
participant IAudioService
participant SocketSlashCommand
participant LavalinkPlayer
User->>Bot: /play [song]
Bot->>DiscordSocketClient: Get user voice channel
DiscordSocketClient-->>Bot: Voice channel info
Bot->>IAudioService: Get or create player
IAudioService-->>Bot: Player instance
Bot->>SocketSlashCommand: Get search query
SocketSlashCommand-->>Bot: Search query
Bot->>IAudioService: Load tracks
IAudioService-->>Bot: Track collection
Bot->>LavalinkPlayer: Play track
LavalinkPlayer-->>Bot: Track started
Bot->>User: Now playing embed
```
## Steps in the code ## Steps in the code
| Name | Description | | Name | Description |

View File

@@ -67,73 +67,23 @@ public class MessageReceivedHandler : INotificationHandler<MessageReceivedNotifi
### Class Diagram ### Class Diagram
```mermaid ```mermaid
classDiagram sequenceDiagram
class ClearQueueHandler { participant User as User
+Task Handle(ClearQueueCommand command, CancellationToken cancellationToken) participant DiscordSocketClient as DiscordSocketClient
} participant MessageReceivedHandler as MessageReceivedHandler
class DisconnectHandler { participant MessageReceivedNotification as MessageReceivedNotification
+Task Handle(DisconnectCommand command, CancellationToken cancellationToken) participant EmbedBuilder as EmbedBuilder
} participant Channel as Channel
class PauseHandler {
+Task Handle(PauseCommand command, CancellationToken cancellationToken)
}
class PlayHandler {
+Task Handle(PlayCommand command, CancellationToken cancellationToken)
}
class ResumeHandler {
+Task Handle(ResumeCommand command, CancellationToken cancellationToken)
}
class SkipHandler {
+Task Handle(SkipCommand command, CancellationToken cancellationToken)
}
class MessageReceivedHandler {
+Task Handle(MessageReceivedNotification notification, CancellationToken cancellationToken)
}
class IAudioService
class DiscordSocketClient
class SocketSlashCommand
class CancellationToken
class Task
class IRequestHandler
class INotificationHandler
ClearQueueHandler ..|> IRequestHandler User->>DiscordSocketClient: Send message "!LunarisStats"
DisconnectHandler ..|> IRequestHandler DiscordSocketClient->>MessageReceivedHandler: MessageReceivedNotification
PauseHandler ..|> IRequestHandler MessageReceivedHandler->>MessageReceivedNotification: Handle(notification, cancellationToken)
PlayHandler ..|> IRequestHandler MessageReceivedNotification->>MessageReceivedHandler: BotMentioned(notification, cancellationToken)
ResumeHandler ..|> IRequestHandler MessageReceivedHandler->>DiscordSocketClient: Get guilds and voice channels
SkipHandler ..|> IRequestHandler DiscordSocketClient-->>MessageReceivedHandler: List of guilds and voice channels
MessageReceivedHandler ..|> INotificationHandler MessageReceivedHandler->>EmbedBuilder: Create embed with statistics
ClearQueueHandler --> IAudioService EmbedBuilder-->>MessageReceivedHandler: Embed
DisconnectHandler --> IAudioService MessageReceivedHandler->>Channel: Send embed message
PauseHandler --> IAudioService
PlayHandler --> IAudioService
ResumeHandler --> IAudioService
SkipHandler --> IAudioService
ClearQueueHandler --> DiscordSocketClient
DisconnectHandler --> DiscordSocketClient
PauseHandler --> DiscordSocketClient
PlayHandler --> DiscordSocketClient
ResumeHandler --> DiscordSocketClient
SkipHandler --> DiscordSocketClient
ClearQueueHandler --> SocketSlashCommand
DisconnectHandler --> SocketSlashCommand
PauseHandler --> SocketSlashCommand
PlayHandler --> SocketSlashCommand
ResumeHandler --> SocketSlashCommand
SkipHandler --> SocketSlashCommand
ClearQueueHandler --> CancellationToken
DisconnectHandler --> CancellationToken
PauseHandler --> CancellationToken
PlayHandler --> CancellationToken
ResumeHandler --> CancellationToken
SkipHandler --> CancellationToken
ClearQueueHandler --> Task
DisconnectHandler --> Task
PauseHandler --> Task
PlayHandler --> Task
ResumeHandler --> Task
SkipHandler --> Task
``` ```
### Sequence Diagram for PlayHandler ### Sequence Diagram for PlayHandler
@@ -186,4 +136,104 @@ sequenceDiagram
end end
``` ```
This README provides an overview of the handlers and their responsibilities, along with class and sequence diagrams to illustrate the interactions and relationships between the components. ## Extensions.cs
#### Namespaces
- **Discord**: Provides classes for interacting with Discord.
- **Discord.WebSocket**: Provides WebSocket-specific classes for Discord.
- **Lavalink4NET**: Provides classes for interacting with Lavalink.
- **Lavalink4NET.Players**: Provides player-related classes for Lavalink.
- **Lavalink4NET.Players.Queued**: Provides queued player-related classes for Lavalink.
- **Microsoft.Extensions.Options**: Provides classes for handling options and configurations.
#### Class: `Extensions`
This static class contains extension methods for various Discord and Lavalink operations.
##### Method: `GetPlayerAsync`
- **Parameters**:
- `IAudioService audioService`: The audio service to retrieve the player from.
- `DiscordSocketClient client`: The Discord client.
- `SocketSlashCommand context`: The context of the slash command.
- `bool connectToVoiceChannel`: Whether to connect to the voice channel (default is true).
- **Returns**: `ValueTask<QueuedLavalinkPlayer?>`
- **Description**: Retrieves a `QueuedLavalinkPlayer` for the given context. If the retrieval fails, it returns null and sends an appropriate error message.
##### Method: `GetGuild`
- **Parameters**:
- `SocketSlashCommand message`: The slash command message.
- `DiscordSocketClient client`: The Discord client.
- **Returns**: `SocketGuild`
- **Description**: Retrieves the guild associated with the given slash command message. Throws an exception if the guild ID is null.
##### Method: `GetVoiceState`
- **Parameters**:
- `SocketSlashCommand message`: The slash command message.
- **Returns**: `IVoiceState`
- **Description**: Retrieves the voice state of the user who issued the slash command. Throws an exception if the user is not connected to a voice channel.
##### Method: `RespondAsync`
- **Parameters**:
- `SocketSlashCommand message`: The slash command message.
- `string content`: The content of the response.
- **Returns**: `Task`
- **Description**: Sends an ephemeral response to the slash command.
##### Method: `GetOptionValueByName`
- **Parameters**:
- `SocketSlashCommand command`: The slash command.
- `string optionName`: The name of the option to retrieve the value for.
- **Returns**: `string`
- **Description**: Retrieves the value of the specified option from the slash command. Returns an empty string if the option is not found.
# MessageModule
The `MessageModule` class provides utility methods for sending and removing messages in a Discord guild using the Discord.Net library. It maintains a dictionary to keep track of message IDs for each guild, allowing for easy removal of messages when needed.
## Methods
### `SendMessageAsync(SocketSlashCommand context, string message, DiscordSocketClient client)`
Sends a follow-up message with the specified text content in response to a slash command.
- **Parameters:**
- `context`: The `SocketSlashCommand` context in which the command was executed.
- `message`: The text content of the message to be sent.
- `client`: The `DiscordSocketClient` instance.
### `SendMessageAsync(SocketSlashCommand context, Embed message, DiscordSocketClient client)`
Sends a follow-up message with the specified embed content in response to a slash command.
- **Parameters:**
- `context`: The `SocketSlashCommand` context in which the command was executed.
- `message`: The `Embed` content of the message to be sent.
- `client`: The `DiscordSocketClient` instance.
### `RemoveMessages(SocketSlashCommand context, DiscordSocketClient client)`
Removes all tracked messages for the guild in which the command was executed.
- **Parameters:**
- `context`: The `SocketSlashCommand` context in which the command was executed.
- `client`: The `DiscordSocketClient` instance.
### `StoreForRemoval(SocketSlashCommand context, DiscordSocketClient client)`
Stores the message ID for removal and deletes any previously tracked messages for the guild.
- **Parameters:**
- `context`: The `SocketSlashCommand` context in which the command was executed.
- `client`: The `DiscordSocketClient` instance.
- **Returns:**
- The guild ID as a `ulong`.
## Usage
To use the `MessageModule` class, simply call the appropriate method from your command handling logic. For example:
```csharp
await context.SendMessageAsync("Hello, world!", client);
```
This will send a follow-up message with the text "Hello, world!" in response to the slash command.

BIN
LOGOTYPE.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 230 KiB

View File

@@ -1,15 +1,17 @@
# Lunaris2 - Discord Music Bot ![Lunaris Logotype](https://github.com/Myxelium/Lunaris2.0/blob/master/LOGOTYPE.png?raw=true)
# Lunaris - Discord BOT
Lunaris2 is a Discord bot designed to play music in your server's voice channels. It's built using C# and the Discord.Net library, and it uses the LavaLink music client for audio streaming. Lunaris2 is a Discord bot designed to play music in your server's voice channels. It's built using C# and the Discord.Net library, and it uses the LavaLink music client for audio streaming.
## Features ## 🎮Features
- Play music from YouTube directly in your Discord server. - Play music from YouTube directly in your Discord server.
- Skip tracks, pause, and resume playback. - Skip tracks, pause, resume playback and more music related commands.
- Queue system to line up your favorite tracks. - Queue system to line up your favorite tracks.
- Local LLM (AI chatbot) that answers on @mentions in Discord chat. See more about it below. - Local LLM (AI chatbot) that answers on @mentions in Discord chat. See more about it below.
## Setup ## 🤖 Setup
1. Clone the repo. 1. Clone the repo.
2. Extract. 2. Extract.
@@ -27,7 +29,8 @@ The LLM is run using Ollama see more about Ollama [here](https://ollama.com/). R
## PM2 Setup ## PM2 Setup
- Install PM2 and configure it following their setup guide - Install PM2 and configure it following their setup guide
#### Lavalink
#### 🐦‍🔥 Lavalink
* Download Lavalink 4.X.X (.jar) * Download Lavalink 4.X.X (.jar)
* Install Java 17 * Install Java 17
@@ -46,6 +49,11 @@ Register the Lunaris bot with PM2:
- `/play <song>`: Plays the specified song in the voice channel you're currently in. - `/play <song>`: Plays the specified song in the voice channel you're currently in.
- `/skip`: Skips the currently playing song. - `/skip`: Skips the currently playing song.
## Technical Documentations
- [Application Layout](https://github.com/Myxelium/Lunaris2.0/blob/master/Bot/README.md)
* 🤖 [AI CHAT](https://github.com/Myxelium/Lunaris2.0/blob/master/Bot/Handler/ChatCommand/readme.md)
* 🎵 [Music Player](https://github.com/Myxelium/Lunaris2.0/tree/master/Bot/Handler/MusicPlayer)
## Contributing ## Contributing
Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change. Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.