Nyieun bot Discord on .NET Core kalawan deployment ka server VPS

Nyieun bot Discord on .NET Core kalawan deployment ka server VPS

Hello Khabrovites!

Dinten anjeun bakal nempo hiji artikel nu bakal némbongkeun Anjeun cara nyieun bot maké C# on .NET Core jeung kumaha ngajalankeun eta dina server jauh.

Tulisan bakal diwangun ku latar, tahap persiapan, nyerat logika sareng nransferkeun bot ka server jauh.

Kuring miharep artikel ieu bakal nulungan loba beginners.

prasajarah

Éta sadayana dimimitian dina hiji wengi usum gugur anu teu sare anu kuring nyéépkeun dina server Discord. Kusabab kuring anyar gabung anjeunna, abdi mimiti diajar anjeunna luhur jeung ka handap. Saatos mendakan saluran téks "Lowongan", kuring janten kabetot, dibuka, sareng mendakan nawaran anu henteu dipikaresep ku kuring, nyaéta:

"Programmer (pamekar bot)
Syarat:

  • pangaweruh basa programming;
  • kamampuhan pikeun diajar mandiri.

Пожелания:

  • kamampuhan pikeun ngarti kodeu batur;
  • pangaweruh ngeunaan fungsionalitas DISCORD.

Tugas:

  • ngembangkeun bot;
  • rojongan tur pangropéa tina bot.

kauntungan anjeun:

  • Kasempetan pikeun ngadukung sareng mangaruhan proyék anu anjeun pikahoyong;
  • Mangtaun pangalaman gawé dina tim;
  • Kasempetan pikeun nunjukkeun sareng ningkatkeun kaahlian anu aya.


Ieu langsung museurkeun kuring. Sumuhun, aranjeunna henteu mayar karya ieu, tapi maranéhna teu nungtut sagala kawajiban ti anjeun, sarta eta moal jadi superfluous di portopolio nu. Ku alatan éta, kuring nulis ka admin server, sarta anjeunna nanya kuring nulis bot anu bakal nembongkeun statistik pamuter di Dunya tina bak.

Fase preparatory

Nyieun bot Discord on .NET Core kalawan deployment ka server VPS
Discrod
Sateuacan urang ngamimitian nyerat bot urang, urang kedah nyiptakeunana pikeun Discord. Anjeun peryogi:

  1. Asup ka akun Discord link
  2. Dina tab "Aplikasi", klik tombol "Aplikasi Anyar" sareng nami bot
  3. Kéngingkeun token bot ku log in kana bot anjeun sareng milarian tab "Bot" dina daptar "Setélan".
  4. Simpen token wae

Wargaming

Ogé, anjeun kedah ngadamel aplikasi dina Wargaming pikeun kéngingkeun aksés kana API Wargaming. Di dieu, ogé, sadayana saderhana:

  1. Login ka akun Wargaming anjeun ku link ieu
  2. Kami angkat ka "Aplikasi Abdi" teras klik tombol "Tambahkeun aplikasi énggal", masihan nami aplikasi sareng pilih jinisna
  3. Nyimpen ID Aplikasi

software

Geus aya kabébasan milih. Aya anu ngagunakeun Visual Studio, batur Rider, batur umumna kuat, sareng nyerat kode dina Vim (sanggeus sadayana, programer nyata ngan ukur nganggo keyboard, henteu?). Nanging, supados henteu ngalaksanakeun API Discord, anjeun tiasa nganggo perpustakaan C # anu henteu resmi "DSharpPlus". Anjeun tiasa masang éta tina NuGet, atanapi ku ngawangun sumberna nyalira tina gudang.

Pikeun anu henteu terang atanapi hilap kumaha cara masang aplikasi tina NuGet.Parentah pikeun Visual Studio

  1. Pindah ka tab Project - Atur Paket NuGet;
  2. Pencét kana ulasan sareng dina widang teang lebetkeun "DSharpPlus";
  3. Pilih sareng pasang kerangka;
  4. Kauntungan!

Tahap persiapan parantos réngsé, anjeun tiasa neruskeun nyerat bot.

Logika tulisan

Nyieun bot Discord on .NET Core kalawan deployment ka server VPS

Urang moal nganggap sakabéh logika aplikasi, Kuring ngan bakal nembongkeun kumaha carana digawekeun ku interception pesen ku bot, sarta kumaha carana digawekeun ku Wargaming API.

Gawe sareng bot Discord lumangsung ngaliwatan statik async Tugas MainTask (string [] args);
Pikeun nelepon fungsi ieu, dina Main anjeun kudu ngadaptar

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

Salajengna, anjeun kedah ngamimitian bot anjeun:

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

Dimana token mangrupikeun token bot anjeun.
Teras, ngalangkungan lambda, urang nyerat paréntah anu diperyogikeun yén bot kedah dieksekusi:

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

Dimana e.Author.Username meunang nickname pamaké.

Ku cara ieu, nalika anjeun ngirim pesen anu dimimitian ku &, bot bakal ngabagéakeun anjeun.

Dina ahir fungsi ieu, anjeun kudu nulis await discord.ConnectAsync (); sareng ngantosan Tugas.Tunda (-1);

Ieu bakal ngidinan Anjeun pikeun ngaéksekusi paréntah di tukang tanpa nyokot up thread utama.

Ayeuna urang kudu nungkulan API Wargaming. Sadayana saderhana di dieu - nyerat pamundut CURL, kéngingkeun réspon dina bentuk senar JSON, tarik kaluar data anu diperyogikeun ti dinya sareng ngalaksanakeun manipulasi.

Conto gawé bareng 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;
        }

Perhatosan! Henteu disarankeun pikeun nyimpen sadaya token sareng ID aplikasi dina téks anu jelas! Sahenteuna, Discord ngalarang token sapertos nalika aranjeunna asup kana jaringan sadunya, sareng maksimal, bot mimiti dianggo ku panyerang.

Nyebarkeun ka VPS - server

Nyieun bot Discord on .NET Core kalawan deployment ka server VPS

Sakali anjeun tos rengse kalayan bot, éta perlu jadi hosted dina server anu terus ngajalankeun 24/7. Ieu alatan kanyataan yén nalika aplikasi anjeun ngajalankeun, bot ogé jalan. Pas anjeun mareuman aplikasi, bot anjeun saré ogé.

Seueur server VPS aya di dunya ieu, boh dina Windows sareng dina Linux, tapi dina kalolobaan kasus, éta langkung mirah janten host dina Linux.

Dina server Discord, kuring disarankan vscale.io, sarta kuring geuwat dijieun server maya on Ubuntu dina eta sarta unggah bot. Kuring moal ngajelaskeun kumaha situs ieu jalan, tapi bakal langsung ka setélan bot.

Anu mimiti, anjeun kedah masang parangkat lunak anu diperyogikeun anu bakal ngajalankeun bot kami anu ditulis dina .NET Core. Kumaha cara ngalakukeunana dijelaskeun di dieu.

Salajengna, anjeun kedah unggah bot kana jasa Git, sapertos GitHub sareng anu sanésna, sareng clone kana server VPS, atanapi unduh bot anjeun ku cara anu sanés. Punten dicatet yén anjeun ngan ukur gaduh konsol, henteu aya GUI. Sakabehna.

Saatos Anjeun undeur bot anjeun, anjeun kudu ngajalankeun eta. Pikeun ieu, anjeun peryogi:

  • Mulangkeun sadayana kagumantungan: dotnet restore
  • Ngawangun aplikasi: dotnet ngawangun name_project.sln -c Release
  • Pindah ka diwangun DLL;
  • dotnet name_of_file.dll

Wilujeng! Bot anjeun jalan. Tapi, bot, hanjakalna, nempatan konsol, sareng éta henteu gampang pikeun kaluar tina server VPS. Ogé, dina kasus balikan deui server, anjeun kedah ngamimitian bot ku cara anu énggal. Aya sababaraha cara kaluar tina kaayaan. Sadayana aya hubunganana sareng peluncuran dina ngamimitian server:

  • Tambahkeun skrip ngajalankeun kana /etc/init.d
  • Jieun layanan anu bakal dijalankeun dina ngamimitian.

Kuring teu ningali titik dina dwelling on aranjeunna di jéntré, sagalana dijelaskeun dina cukup jéntré dina Internet.

papanggihan

Abdi bungah abdi nyandak tugas ieu. Ieu mangrupikeun pangalaman pangembangan bot munggaran kuring, sareng kuring bungah yén kuring ngagaduhan pangaweruh anyar dina C #, sareng damel sareng Linux.

Numbu ka server Discord. Pikeun maranéhanana anu maénkeun kaulinan Wargaming.
Tautan ka gudang dimana aya bot Discord.
Tumbu ka gudang DSharpPlus.
Hatur nuhun kanggo nengetan!

sumber: www.habr.com

Tambahkeun komentar