Creazione di un bot Discord in .NET Core cù implementazione à un servitore VPS

Creazione di un bot Discord in .NET Core cù implementazione à un servitore VPS

Ciao Khabrovites!

Oghje vi vede un articulu chì vi mustrarà cumu creà un bot utilizendu C# in .NET Core è cumu per eseguisce in un servitore remotu.

L'articulu serà cumpostu di un fondo, una tappa preparatoria, scrittura di logica è trasfiriu u bot à un servitore remotu.

Spergu chì questu articulu aiuterà parechji principianti.

Pristoria

Tuttu hà cuminciatu in una notte di vaghjimu senza dorme chì aghju passatu nantu à u servitore Discord. Dapoi l'aghju unitu à ellu, aghju cuminciatu à studià ellu è falà. Dopu avè truvatu u canali di testu "Vacanti", aghju avutu interessatu, l'aghju apertu, è truvaru trà l'offerte chì ùn m'interessanu micca, questi sò:

"Programmatore (sviluppatore di bot)
Rèducts:

  • cunniscenza di linguaggi di prugrammazione;
  • capacità per l'autoapprendimentu.

Auguri:

  • capacità di capisce u codice di l'altri;
  • cunniscenza di a funziunalità DISCORD.

Scopi:

  • sviluppu di u bot;
  • supportu è mantenimentu di u bot.

U vostru benefiziu:

  • Opportunità di sustene è influenzà u prughjettu chì ti piace;
  • Avè sperienza di travaglià in una squadra;
  • Opportunità di dimustrà è migliurà e cumpetenze esistenti.


Questu m'hà interessatu immediatamente. Iè, ùn anu micca pagatu per questu travagliu, ma ùn anu micca dumandatu alcuna obligazione da voi, è ùn serà micca superfluu in a cartera. Dunque, aghju scrittu à l'amministratore di u servitore, è m'hà dumandatu di scrive un bot chì mostrarà e statistiche di u ghjucatore in World of Tanks.

Stage preparatoriu

Creazione di un bot Discord in .NET Core cù implementazione à un servitore VPS
Discrodu
Prima di cumincià à scrive u nostru bot, avemu bisognu di creà per Discord. Avete bisognu:

  1. Accedi à u contu Discord Member
  2. In a tabulazione "Applicazioni", cliccate nantu à u buttone "Nova Applicazione" è nome u bot
  3. Ottene un token di bot accedendu à u vostru bot è truvendu a tabulazione "Bot" in a lista "Settings"
  4. Salvà u token in un locu

Wargaming

Inoltre, avete bisognu di creà una applicazione in Wargaming per accede à l'API Wargaming. Quì ancu tuttu hè simplice:

  1. Accedi à u vostru contu Wargaming da stu ligame
  2. Andemu à "I mo applicazioni" è cliccate nantu à u buttone "Aggiungi una nova applicazione", dendu u nome di l'applicazione è selezziunate u so tipu.
  3. Salvà l'ID di l'applicazione

Software

Ci hè digià a libertà di scelta. Qualchissia usa Visual Studio, qualcunu Rider, qualcunu hè in generale putente, è scrive codice in Vim (dopu à tuttu, i veri programatori utilizanu solu u teclatu, nò?). Tuttavia, per ùn implementà l'API Discord, pudete aduprà a libreria C# non ufficiale "DSharpPlus". Pudete installà sia da NuGet, sia custruendu e fonti stessu da u repository.

Per quelli chì ùn sanu micca o anu scurdatu cumu installà applicazioni da NuGet.Istruzzioni per Visual Studio

  1. Andà à a tabulazione Prughjettu - Manage NuGet Packages;
  2. Cliccate nantu à a rivista è in u campu di ricerca entre in "DSharpPlus";
  3. Selezziunà è stallà framework;
  4. Prufittu!

U stadiu preparatoriu hè finitu, pudete passà à scrive u bot.

A logica di scrittura

Creazione di un bot Discord in .NET Core cù implementazione à un servitore VPS

Ùn cunsideremu micca tutta a logica di l'applicazione, vi mustrarà solu cumu travaglià cù l'intercepzione di i missaghji da u bot, è cumu travaglià cù l'API Wargaming.

U travagliu cù u bot Discord si faci per mezu di u static Async Task MainTask (string[] args);
Per chjamà sta funzione, in Main avete bisognu di registrà

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

Dopu, avete bisognu di inizializà u vostru bot:

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

Induve u token hè u token di u vostru bot.
Allora, attraversu u lambda, scrivimu i cumandamenti necessarii chì u bot deve eseguisce:

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

Induve e.Author.Username riceve u nickname di l'utilizatore.

In sta manera, quandu vi mandate ogni missaghju chì principia cù &, u bot vi salutarà.

À a fine di sta funzione, deve scrive await discord.ConnectAsync (); è aspittà Task.Delay (-1);

Questu permetterà di eseguisce cumandamenti in u fondu senza piglià u filu principale.

Avà avemu bisognu di trattà cù l'API Wargaming. Tuttu hè simplice quì - scrivite e dumande CURL, uttene una risposta in forma di una stringa JSON, caccià e dati necessarii da quì è eseguite manipulazioni nantu à elli.

Un esempiu di travaglià cù 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 ! Ùn hè strettamente cunsigliatu di almacenà tutti i tokens è l'ID di l'applicazione in testu chjaru! À u minimu, Discord pruibisce tali tokens quandu entranu in a reta mundiale, è à u massimu, u bot principia à esse utilizatu da l'attaccanti.

Implementa à VPS - server

Creazione di un bot Discord in .NET Core cù implementazione à un servitore VPS

Una volta chì avete finitu cù u bot, deve esse allughjatu in un servitore chì hè sempre in esecuzione 24/7. Questu hè duvuta à u fattu chì quandu a vostra applicazione hè in esecuzione, u bot hè ancu in esecuzione. Appena spegne l'applicazione, u vostru bot si addormenta ancu.

Parechji servitori VPS esistenu in questu mondu, sia in Windows sia in Linux, in ogni modu, in a maiò parte di i casi, hè assai più prezzu per ospitu in Linux.

Nant'à u servitore di Discord, mi sò cunsigliatu vscale.io, è aghju subitu creatu un servitore virtuale nantu à Ubuntu nantu à ellu è hà caricatu u bot. Ùn scriveraghju micca cumu funziona stu situ, ma andaraghju direttamente à i paràmetri di u bot.

Prima di tuttu, avete bisognu di stallà u software necessariu chì eseguirà u nostru bot scrittu in .NET Core. Cumu fà hè descrittu quì.

In seguitu, avete bisognu di cullà u bot à un serviziu Git, cum'è GitHub è simili, è clone à un servitore VPS, o scaricate u vostru bot in altri modi. Per piacè nutate chì avete solu una cunsola, senza GUI. Per nunda.

Dopu avè scaricatu u vostru bot, avete bisognu di eseguisce. Per questu, avete bisognu:

  • Ripristina tutte e dipendenze: restaurazione dotnet
  • Custruisce l'applicazione: dotnet build name_project.sln -c Release
  • Andà à DLL custruitu;
  • dotnet name_of_file.dll

Felicitazioni ! U vostru bot hè in esecuzione. In ogni casu, u bot, sfurtunatamenti, occupa a cunsola, è ùn hè micca faciule per esce da u servitore VPS. Inoltre, in casu di riavvia di u servitore, avete da inizià u bot in una nova manera. Ci hè un paru di manere fora di a situazione. Tutti sò ligati à u lanciamentu à l'iniziu di u servitore:

  • Aghjunghjite u script run à /etc/init.d
  • Crea un serviziu chì currerà à l'iniziu.

Ùn vecu micca u puntu di abità nantu à elli in dettu, tuttu hè descrittu in abbastanza dettagliu in Internet.

scuperti

Sò cuntentu chì aghju pigliatu questu incarichi. Questa era a mo prima sperienza di sviluppu di bot, è sò cuntentu chì aghju avutu una nova cunniscenza in C #, è travaglià cù Linux.

Link à u servitore Discord. Per quelli chì ghjucanu ghjochi Wargaming.
Link à u repository induve si trova u bot Discord.
Link à u repository DSharpPlus.
Ti ringraziu per a vostra attenzione!

Source: www.habr.com

Add a comment