Creazione di un bot Discord su .NET Core con distribuzione su un server VPS

Creazione di un bot Discord su .NET Core con distribuzione su un server VPS

Ciao Khabroviti!

Oggi vedrai un articolo che ti mostrerà come creare un bot usando C# su .NET Core e come eseguirlo su un server remoto.

L'articolo consisterà in un background, una fase preparatoria, la scrittura della logica e il trasferimento del bot su un server remoto.

Spero che questo articolo possa aiutare molti principianti.

Sfondo

Tutto è iniziato in una notte d'autunno insonne che ho trascorso sul server Discord. Da quando l'ho raggiunto di recente, ho iniziato a studiarlo su e giù. Dopo aver trovato il canale testuale "Posti vacanti", mi sono interessato, l'ho aperto e ho trovato tra le offerte che non mi interessavano, queste sono:

"Programmatore (sviluppatore di bot)
requisiti:

  • conoscenza dei linguaggi di programmazione;
  • capacità di autoapprendimento.

Пожелания:

  • capacità di comprendere il codice di altre persone;
  • conoscenza della funzionalità DISCORD.

obiettivi:

  • sviluppo di bot;
  • supporto e manutenzione del bot.

Il tuo vantaggio:

  • Opportunità di supportare e influenzare il progetto che ti piace;
  • Acquisire esperienza di lavoro in team;
  • Opportunità di dimostrare e migliorare le competenze esistenti.


Questo mi ha subito interessato. Sì, non hanno pagato per questo lavoro, ma non ti hanno richiesto alcun obbligo e non sarà superfluo nel portafoglio. Pertanto, ho scritto all'amministratore del server e mi ha chiesto di scrivere un bot che mostrerà le statistiche del giocatore in World of Tanks.

La fase preparatoria

Creazione di un bot Discord su .NET Core con distribuzione su un server VPS
Discrode
Prima di iniziare a scrivere il nostro bot, dobbiamo crearlo per Discord. Hai bisogno:

  1. Accedi all'account Discord collegamento
  2. Nella scheda "Applicazioni", fai clic sul pulsante "Nuova applicazione" e assegna un nome al bot
  3. Ottieni un token bot accedendo al tuo bot e trovando la scheda "Bot" nell'elenco "Impostazioni"
  4. Salva il token da qualche parte

Wargaming

Inoltre, è necessario creare un'applicazione in Wargaming per ottenere l'accesso all'API di Wargaming. Anche qui tutto è semplice:

  1. Accedi al tuo account Wargaming a questo link
  2. Andiamo su "Le mie applicazioni" e facciamo clic sul pulsante "Aggiungi una nuova applicazione", dando il nome dell'applicazione e selezionandone il tipo
  3. Salvataggio dell'ID dell'applicazione

Software

C'è già libertà di scelta. Qualcuno usa Visual Studio, qualcuno Rider, qualcuno è generalmente potente e scrive codice in Vim (dopotutto, i veri programmatori usano solo la tastiera, giusto?). Tuttavia, per non implementare l'API Discord, puoi utilizzare la libreria C# non ufficiale "DSharpPlus". Puoi installarlo da NuGet o compilando tu stesso i sorgenti dal repository.

Per coloro che non sanno o hanno dimenticato come installare applicazioni da NuGet.Istruzioni per Visual Studio

  1. Vai alla scheda Progetto - Gestisci pacchetti NuGet;
  2. Clicca sulla recensione e nel campo di ricerca inserisci “DSharpPlus”;
  3. Seleziona e installa il framework;
  4. UTILE!

La fase preparatoria è terminata, puoi procedere alla scrittura del bot.

Logica di scrittura

Creazione di un bot Discord su .NET Core con distribuzione su un server VPS

Non considereremo l'intera logica dell'applicazione, mostrerò solo come lavorare con l'intercettazione dei messaggi da parte del bot e come lavorare con l'API Wargaming.

Il lavoro con il bot Discord avviene tramite il task asincrono statico MainTask(string[] args);
Per chiamare questa funzione, in Main è necessario registrarsi

MainTask(args).ConfigureAwait(false).GetAwaiter().GetResult();

Successivamente, devi inizializzare il tuo bot:

discord = new DiscordClient(new DiscordConfiguration
{
    Token = token,
    TokenType = TokenType.Bot,
    UseInternalLogHandler = true,
    LogLevel = LogLevel.Debug
});

Dove token è il token del tuo bot.
Quindi, attraverso il lambda, scriviamo i comandi necessari che il bot dovrebbe eseguire:

discord.MessageCreated += async e =>
{
    string message = e.Message.Content;
    if (message.StartsWith("&"))
    {
        await e.Message.RespondAsync(“Hello, ” + e.Author.Username);
    }
};

Dove e.Author.Username ottiene il soprannome dell'utente.

In questo modo, quando invii un messaggio che inizia con &, il bot ti saluterà.

Alla fine di questa funzione, devi scrivere await discord.ConnectAsync(); e attendere Task.Delay(-1);

Ciò ti consentirà di eseguire comandi in background senza occupare il thread principale.

Ora dobbiamo occuparci dell'API di Wargaming. Qui è tutto semplice: scrivi richieste CURL, ottieni una risposta sotto forma di una stringa JSON, estrai i dati necessari da lì ed esegui manipolazioni su di essi.

Un esempio di utilizzo di WargamingAPI

public Player FindPlayer(string searchNickname)
        {
            //https://api.worldoftanks.ru/wot/account/list/?application_id=y0ur_a@@_id_h3r3search=nickname
            urlRequest = resourceMan.GetString("url_find_player") + appID + "&search=" + searchNickname;
            Player player = null;
            string resultResponse = GetResponse(urlRequest);
            dynamic parsed = JsonConvert.DeserializeObject(resultResponse);

            string status = parsed.status;
            if (status == "ok")
            {
                int count = parsed.meta.count;
                if (count > 0)
                {
                    player = new Player
                    {
                        Nickname = parsed.data[0].nickname,
                        Id = parsed.data[0].account_id
                    };
                }
                else
                {
                    throw new PlayerNotFound("Игрок не найден");
                }
            }
            else
            {
                string error = parsed.error.message;
                if (error == "NOT_ENOUGH_SEARCH_LENGTH")
                {
                    throw new PlayerNotFound("Минимум три символа требуется");
                }
                else if (error == "INVALID_SEARCH")
                {
                    throw new PlayerNotFound("Неверный поиск");
                }
                else if (error == "SEARCH_NOT_SPECIFIED")
                {
                    throw new PlayerNotFound("Пустой никнейм");
                }
                else
                {
                    throw new Exception("Something went wrong.");
                }
            }

            return player;
        }

Attenzione! È severamente sconsigliato archiviare tutti i token e gli ID applicazione in testo non crittografato! Come minimo, Discord vieta tali token quando entrano nella rete mondiale e, al massimo, il bot inizia a essere utilizzato dagli aggressori.

Distribuisci su VPS - server

Creazione di un bot Discord su .NET Core con distribuzione su un server VPS

Una volta terminato con il bot, deve essere ospitato su un server costantemente in esecuzione 24 ore su 7, XNUMX giorni su XNUMX. Ciò è dovuto al fatto che quando l'applicazione è in esecuzione, anche il bot è in esecuzione. Non appena spegni l'applicazione, anche il tuo bot si addormenta.

Esistono molti server VPS in questo mondo, sia su Windows che su Linux, tuttavia, nella maggior parte dei casi, è molto più economico ospitare su Linux.

Sul server Discord, mi è stato consigliato vscale.io e ho immediatamente creato un server virtuale su Ubuntu su di esso e ho caricato il bot. Non descriverò come funziona questo sito, ma andrò direttamente alle impostazioni del bot.

Prima di tutto, devi installare il software necessario che eseguirà il nostro bot scritto in .NET Core. Come farlo è descritto qui.

Successivamente, devi caricare il bot su un servizio Git, come GitHub e simili, e clonarlo su un server VPS o scaricare il tuo bot in altri modi. Tieni presente che avrai solo una console, nessuna GUI. Affatto.

Dopo aver scaricato il tuo bot, devi eseguirlo. Per questo, hai bisogno di:

  • Ripristina tutte le dipendenze: dotnet restore
  • Compilare l'applicazione: dotnet build name_project.sln -c Release
  • Vai alla DLL creata;
  • dotnet nome_del_file.dll

Congratulazioni! Il tuo bot è in esecuzione. Tuttavia, il bot, purtroppo, occupa la console e non è facile uscire dal server VPS. Inoltre, in caso di riavvio del server, dovrai avviare il bot in un modo nuovo. Ci sono un paio di modi per uscire dalla situazione. Tutti sono correlati all'avvio all'avvio del server:

  • Aggiungi lo script di esecuzione a /etc/init.d
  • Creare un servizio che verrà eseguito all'avvio.

Non vedo il motivo di soffermarsi su di essi in dettaglio, tutto è descritto in modo sufficientemente dettagliato su Internet.

risultati

Sono contento di aver accettato questo compito. Questa è stata la mia prima esperienza di sviluppo di bot e sono contento di aver acquisito nuove conoscenze in C # e di aver lavorato con Linux.

Collegamento al server Discord. Per coloro che giocano ai giochi Wargaming.
Collegamento al repository in cui si trova il bot Discord.
Collegamento al repository DSharpPlus.
Grazie!

Fonte: habr.com

Aggiungi un commento