Krijimi i një roboti Discord në .NET Core me vendosje në një server VPS

Krijimi i një roboti Discord në .NET Core me vendosje në një server VPS

Përshëndetje Khabrovitët!

Sot do të shihni një artikull që do t'ju tregojë se si të krijoni një bot duke përdorur C# në .NET Core dhe si ta ekzekutoni atë në një server të largët.

Artikulli do të përbëhet nga një sfond, një fazë përgatitore, logjika e shkrimit dhe transferimi i botit në një server të largët.

Shpresoj se ky artikull do të ndihmojë shumë fillestarë.

parahistorinë

Gjithçka filloi në një natë pa gjumë vjeshte që kalova në serverin Discord. Meqë kohët e fundit u bashkova me të, fillova ta studioja lart e poshtë. Pasi gjeta kanalin e tekstit "Vendet e lira të punës", u interesova, e hapa dhe gjeta ndër ofertat që nuk më interesuan, këto janë:

"Programues (zhvilluesi i robotëve)
kërkesat:

  • njohja e gjuhëve të programimit;
  • aftësia për vetë-mësim.

Пожелания:

  • aftësia për të kuptuar kodin e njerëzve të tjerë;
  • njohuri për funksionalitetin DISCORD.

Detyrat:

  • zhvillimi i botit;
  • mbështetjen dhe mirëmbajtjen e botit.

Përfitimi juaj:

  • Mundësi për të mbështetur dhe influencuar projektin që ju pëlqen;
  • Fitimi i përvojës së punës në ekip;
  • Mundësi për të demonstruar dhe përmirësuar aftësitë ekzistuese.


Kjo më interesoi menjëherë. Po, ata nuk kanë paguar për këtë punë, por nuk kanë kërkuar asnjë detyrim nga ju dhe nuk do të jetë e tepërt në portofol. Prandaj, i shkrova administratorit të serverit dhe ai më kërkoi të shkruaj një bot që do të tregojë statistikat e lojtarit në World of Tanks.

Faza përgatitore

Krijimi i një roboti Discord në .NET Core me vendosje në një server VPS
Shpërndaj
Përpara se të fillojmë të shkruajmë botin tonë, duhet ta krijojmë atë për Discord. Ju duhet:

  1. Hyni në llogarinë Discord по ссылке
  2. Në skedën "Aplikacione", klikoni në butonin "Aplikacion i ri" dhe emërtoni botin
  3. Merrni një shenjë bot duke u identifikuar në bot tuaj dhe duke gjetur skedën "Bot" në listën "Cilësimet"
  4. Ruaje shenjën diku

Wargaming

Gjithashtu, duhet të krijoni një aplikacion në Wargaming për të pasur akses në Wargaming API. Këtu, gjithashtu, gjithçka është e thjeshtë:

  1. Hyni në llogarinë tuaj Wargaming nga kjo lidhje
  2. Shkojmë te "Aplikimet e mia" dhe klikojmë në butonin "Shto një aplikacion të ri", duke dhënë emrin e aplikacionit dhe duke zgjedhur llojin e tij.
  3. Ruajtja e ID-së së aplikacionit

program

Tashmë ekziston liria e zgjedhjes. Dikush përdor Visual Studio, dikush Rider, dikush është përgjithësisht i fuqishëm dhe shkruan kode në Vim (në fund të fundit, programuesit e vërtetë përdorin vetëm tastierën, apo jo?). Sidoqoftë, për të mos zbatuar Discord API, mund të përdorni bibliotekën jozyrtare C# "DSharpPlus". Mund ta instaloni ose nga NuGet, ose duke ndërtuar vetë burimet nga depoja.

Për ata që nuk dinë ose kanë harruar se si të instalojnë aplikacione nga NuGet.Udhëzime për Visual Studio

  1. Shkoni te skeda Projekti - Menaxho paketat NuGet;
  2. Klikoni mbi rishikimin dhe në fushën e kërkimit shkruani "DSharpPlus";
  3. Zgjidhni dhe instaloni kornizën;
  4. FITIMI!

Faza përgatitore ka përfunduar, mund të vazhdoni të shkruani bot.

Logjika e të shkruarit

Krijimi i një roboti Discord në .NET Core me vendosje në një server VPS

Ne nuk do të shqyrtojmë të gjithë logjikën e aplikacionit, unë do të tregoj vetëm se si të punojmë me përgjimin e mesazheve nga bot dhe si të punojmë me Wargaming API.

Puna me robotin Discord ndodh përmes detyrës statike asinkronike MainTask(string[] args);
Për të thirrur këtë funksion, në Main duhet të regjistroheni

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

Tjetra, ju duhet të inicializoni botin tuaj:

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

Ku token është shenja e botit tuaj.
Më pas, përmes lambda, ne shkruajmë komandat e nevojshme që roboti duhet të ekzekutojë:

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

Ku e.Author.Username po merr pseudonimin e përdoruesit.

Në këtë mënyrë, kur dërgoni ndonjë mesazh që fillon me &, roboti do t'ju përshëndesë.

Në fund të këtij funksioni, duhet të shkruani await discord.ConnectAsync(); dhe presin Task.Delay(-1);

Kjo do t'ju lejojë të ekzekutoni komanda në sfond pa zënë fillin kryesor.

Tani duhet të merremi me Wargaming API. Gjithçka është e thjeshtë këtu - shkruani kërkesat CURL, merrni një përgjigje në formën e një vargu JSON, nxirrni të dhënat e nevojshme prej andej dhe kryeni manipulime mbi to.

Një shembull i punës me 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;
        }

Kujdes! Nuk rekomandohet rreptësisht të ruani të gjitha shenjat dhe ID-të e aplikacioneve në tekst të qartë! Së paku, Discord ndalon shenja të tilla kur ato hyjnë në rrjetin mbarëbotëror, dhe në maksimum, roboti fillon të përdoret nga sulmuesit.

Vendoseni në serverin VPS

Krijimi i një roboti Discord në .NET Core me vendosje në një server VPS

Pasi të keni mbaruar me robotin, ai duhet të strehohet në një server që funksionon vazhdimisht 24/7. Kjo për faktin se kur aplikacioni juaj po ekzekutohet, roboti po funksionon gjithashtu. Sapo fikni aplikacionin, edhe roboti juaj bie në gjumë.

Shumë serverë VPS ekzistojnë në këtë botë, si në Windows ashtu edhe në Linux, megjithatë, në shumicën e rasteve, është shumë më lirë të priten në Linux.

Në serverin Discord, më këshilluan vscale.io, dhe menjëherë krijova një server virtual në Ubuntu në të dhe ngarkova bot-in. Unë nuk do të përshkruaj se si funksionon kjo faqe, por do të shkoj direkt te cilësimet e botit.

Para së gjithash, ju duhet të instaloni softuerin e nevojshëm që do të ekzekutojë botin tonë të shkruar në .NET Core. Si ta bëni këtë përshkruhet këtu.

Më pas, duhet të ngarkoni bot-in në një shërbim Git, si GitHub dhe të ngjashme, dhe ta klononi atë në një server VPS, ose të shkarkoni bot-in tuaj në mënyra të tjera. Ju lutemi vini re se do të keni vetëm një tastierë, pa GUI. fare.

Pasi të keni shkarkuar robotin tuaj, duhet ta ekzekutoni atë. Për këtë ju duhet:

  • Rivendos të gjitha varësitë: rivendosja e dotnet
  • Ndërtimi i aplikacionit: dotnet build name_project.sln -c Release
  • Shkoni te DLL e ndërtuar;
  • dotnet name_of_file.dll

urime! Boti juaj po funksionon. Sidoqoftë, boti, për fat të keq, zë konsolën dhe nuk është e lehtë të dilni nga serveri VPS. Gjithashtu, në rast të rifillimit të serverit, do të duhet ta nisni bot-in në një mënyrë të re. Ka disa mënyra për të dalë nga situata. Të gjitha ato lidhen me nisjen në fillimin e serverit:

  • Shto skriptin e ekzekutimit në /etc/init.d
  • Krijo një shërbim që do të funksionojë në fillim.

Unë nuk e shoh kuptimin të ndalem në to në detaje, gjithçka përshkruhet në detaje të mjaftueshme në internet.

Gjetjet

Më vjen mirë që mora këtë detyrë. Kjo ishte përvoja ime e parë e zhvillimit të robotëve dhe jam i kënaqur që mora njohuri të reja në C # dhe duke punuar me Linux.

Lidhja me serverin Discord. Për ata që luajnë lojëra Wargaming.
Lidhuni me depon ku ndodhet roboti Discord.
Lidhja me depon e DSharpPlus.
Спасибо за внимание!

Burimi: www.habr.com

Shto një koment