|
| 1 | +# Disc.NET 🌌 |
| 2 | + |
| 3 | +**Disc.NET** é um projeto experimental para a construção de uma biblioteca de interação com a API do Discord, utilizando .NET 8+. O objetivo é criar uma alternativa modular, focada em performance e facilidade de uso através de padrões modernos de desenvolvimento. |
| 4 | + |
| 5 | +O projeto ainda está em **fase ativa de desenvolvimento** e explora arquiteturas desacopladas para lidar com a complexidade da Gateway e das interações do Discord. |
| 6 | + |
| 7 | +--- |
| 8 | + |
| 9 | +## 🏗️ Como o projeto funciona? |
| 10 | + |
| 11 | +A arquitetura do Disc.NET gira em torno de três pilares principais: |
| 12 | + |
| 13 | +### 📡 Event Dispatcher & Handlers |
| 14 | +O coração do sistema é o `EventDispatcher`. Ele recebe os payloads brutos da Gateway e os roteia para **Handlers** específicos. |
| 15 | +- Cada Handler é responsável por um tipo de evento (ex: `InteractionCreate`, `MessageCreate`). |
| 16 | +- Isso permite que a lógica de processamento seja isolada e fácil de estender sem sujar o código principal da conexão. |
| 17 | + |
| 18 | +### 🏷️ Comandos via Attributes |
| 19 | +Chega de `if/else` gigantes para validar comandos. O Disc.NET utiliza **Attributes** para mapear classes de comando automaticamente: |
| 20 | +- Basta decorar sua classe com `[SlashCommand]` ou `[PrefixCommand]`. |
| 21 | +- O sistema de registro faz o *scan* das classes e vincula a execução ao trigger correto via Reflection. |
| 22 | + |
| 23 | +### 💉 Service Container (DI) |
| 24 | +Utilizamos um `DiscNetContainer` interno para gerenciar dependências. Isso garante que seus comandos tenham acesso fácil a serviços de configuração, clientes de API e bancos de dados de forma nativa. |
| 25 | + |
| 26 | +--- |
| 27 | + |
| 28 | +## ⚡ Exemplo de Uso (Experimental) |
| 29 | + |
| 30 | +```csharp |
| 31 | +// 1. Defina o comando usando atributos |
| 32 | +[SlashCommand("ping", InteractionType.ApplicationCommand, "Testa a latência")] |
| 33 | +public class PingCommand : ISlashCommand |
| 34 | +{ |
| 35 | + public async Task RunAsync(InteractionContext context, CancellationToken ct = default) |
| 36 | + { |
| 37 | + await context.RespondAsync("🏓 Pong!"); |
| 38 | + } |
| 39 | +} |
| 40 | + |
| 41 | +// 2. Inicialize o AppBuilder |
| 42 | +var app = new AppBuilder() |
| 43 | + .AddConfiguration(new AppConfiguration("TOKEN") { ApplicationId = 123 }) |
| 44 | + .Build(); |
| 45 | + |
| 46 | +await app.RunAsync(); |
| 47 | +``` |
| 48 | + |
| 49 | +--- |
| 50 | + |
| 51 | +## 📦 Módulos Atuais |
| 52 | +- **Disc.NET.Client.SDK**: Abstração da API REST. |
| 53 | +- **Disc.NET.Commands**: Motor de execução de comandos e contextos. |
| 54 | +- **Disc.NET.Shared**: Utilitários de serialização e extensões de sistema. |
| 55 | +- **Disc.NET.Components**: Builders para botões, selects e embeds. |
| 56 | + |
| 57 | +--- |
| 58 | + |
| 59 | +> ⚠️ **Aviso:** Por ser um projeto experimental, mudanças drásticas na API podem ocorrer a qualquer momento. |
0 commit comments