Mencipta bot Discord pada Teras .NET dengan penempatan ke pelayan VPS

Mencipta bot Discord pada Teras .NET dengan penempatan ke pelayan VPS

Hello Khabrovites!

Hari ini anda akan melihat artikel yang akan menunjukkan kepada anda cara membuat bot menggunakan C# pada .NET Core dan cara menjalankannya pada pelayan jauh.

Artikel tersebut akan terdiri daripada latar belakang, peringkat persediaan, menulis logik dan memindahkan bot ke pelayan jauh.

Saya harap artikel ini akan membantu ramai pemula.

prasejarah

Semuanya bermula pada satu malam musim luruh tanpa tidur yang saya habiskan di pelayan Discord. Sejak saya menyertainya baru-baru ini, saya mula mempelajarinya dari atas ke bawah. Setelah menemui saluran teks "Kekosongan", saya mula berminat, membukanya, dan mendapati antara tawaran yang tidak menarik minat saya, ini adalah:

"Pengaturcara (pembangun bot)
Keperluan:

  • pengetahuan bahasa pengaturcaraan;
  • keupayaan untuk pembelajaran kendiri.

ПоТСлания:

  • keupayaan untuk memahami kod orang lain;
  • pengetahuan tentang fungsi DISCORD.

Tugas:

  • pembangunan bot;
  • sokongan dan penyelenggaraan bot.

Faedah anda:

  • Peluang untuk menyokong dan mempengaruhi projek yang anda suka;
  • Mendapat pengalaman bekerja dalam satu pasukan;
  • Peluang untuk menunjukkan dan meningkatkan kemahiran sedia ada.


Ini segera menarik minat saya. Ya, mereka tidak membayar untuk kerja ini, tetapi mereka tidak menuntut sebarang kewajipan daripada anda, dan ia tidak akan berlebihan dalam portfolio. Oleh itu, saya menulis kepada pentadbir pelayan, dan dia meminta saya menulis bot yang akan menunjukkan statistik pemain dalam World of Tanks.

Fasa persediaan

Mencipta bot Discord pada Teras .NET dengan penempatan ke pelayan VPS
Discrod
Sebelum kita mula menulis bot kita, kita perlu menciptanya untuk Discord. Awak perlu:

  1. Log masuk ke akaun Discord ΠΏΠΎ ссылкС
  2. Dalam tab "Aplikasi", klik pada butang "Aplikasi Baharu" dan namakan bot tersebut
  3. Dapatkan token bot dengan log masuk ke bot anda dan cari tab "Bot" dalam senarai "Tetapan".
  4. Simpan token di suatu tempat

Permainan Perang

Selain itu, anda perlu mencipta aplikasi dalam Wargaming untuk mendapatkan akses kepada API Wargaming. Di sini juga, semuanya mudah:

  1. Log masuk ke akaun Wargaming anda melalui pautan ini
  2. Kami pergi ke "Aplikasi Saya" dan klik pada butang "Tambah aplikasi baharu", memberikan nama aplikasi dan memilih jenisnya
  3. Menyimpan ID Aplikasi

perisian

Sudah ada kebebasan memilih. Seseorang menggunakan Visual Studio, seseorang Rider, seseorang biasanya berkuasa, dan menulis kod dalam Vim (lagipun, pengaturcara sebenar hanya menggunakan papan kekunci, bukan?). Walau bagaimanapun, untuk tidak melaksanakan API Discord, anda boleh menggunakan perpustakaan C# tidak rasmi "DSharpPlus". Anda boleh memasangnya sama ada dari NuGet, atau dengan membina sumber sendiri daripada repositori.

Bagi yang tidak tahu atau terlupa cara memasang aplikasi dari NuGet.Arahan untuk Visual Studio

  1. Pergi ke tab Projek - Urus Pakej NuGet;
  2. Klik pada ulasan dan dalam medan carian masukkan "DSharpPlus";
  3. Pilih dan pasang rangka kerja;
  4. KEUNTUNGAN!

Peringkat persediaan sudah tamat, anda boleh teruskan menulis bot.

Logik penulisan

Mencipta bot Discord pada Teras .NET dengan penempatan ke pelayan VPS

Kami tidak akan mempertimbangkan keseluruhan logik aplikasi, saya hanya akan menunjukkan cara bekerja dengan pemintasan mesej oleh bot, dan cara bekerja dengan API Wargaming.

Bekerja dengan bot Discord berlaku melalui Tugas MainTask async statik(rentetan[] args);
Untuk memanggil fungsi ini, di Utama anda perlu mendaftar

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

Seterusnya, anda perlu memulakan bot anda:

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

Di mana token ialah token bot anda.
Kemudian, melalui lambda, kami menulis arahan yang diperlukan yang harus dilakukan oleh bot:

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

Di mana e.Author.Username mendapat nama panggilan pengguna.

Dengan cara ini, apabila anda menghantar sebarang mesej yang bermula dengan &, bot akan menyambut anda.

Pada penghujung fungsi ini, anda mesti menulis await discord.ConnectAsync(); dan tunggu Task.Delay(-1);

Ini akan membolehkan anda melaksanakan arahan di latar belakang tanpa mengambil utas utama.

Sekarang kita perlu berurusan dengan API Wargaming. Semuanya mudah di sini - tulis permintaan CURL, dapatkan respons dalam bentuk rentetan JSON, tarik keluar data yang diperlukan dari sana dan lakukan manipulasi padanya.

Contoh bekerja dengan 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;
        }

Perhatian! Ia sama sekali tidak disyorkan untuk menyimpan semua token dan ID aplikasi dalam teks yang jelas! Sekurang-kurangnya, Discord mengharamkan token tersebut apabila ia memasuki rangkaian seluruh dunia, dan secara maksimum, bot mula digunakan oleh penyerang.

Sebarkan ke VPS - pelayan

Mencipta bot Discord pada Teras .NET dengan penempatan ke pelayan VPS

Sebaik sahaja anda selesai dengan bot, ia perlu dihoskan pada pelayan yang sentiasa berjalan 24/7. Ini disebabkan oleh fakta bahawa apabila aplikasi anda sedang berjalan, bot juga sedang berjalan. Sebaik sahaja anda mematikan aplikasi, bot anda juga akan tertidur.

Banyak pelayan VPS wujud di dunia ini, pada Windows dan Linux, namun, dalam kebanyakan kes, ia adalah lebih murah untuk menjadi hos di Linux.

Pada pelayan Discord, saya telah dinasihatkan vscale.io, dan saya segera mencipta pelayan maya pada Ubuntu padanya dan memuat naik bot. Saya tidak akan menerangkan cara tapak ini berfungsi, tetapi akan terus ke tetapan bot.

Pertama sekali, anda perlu memasang perisian yang diperlukan yang akan menjalankan bot kami yang ditulis dalam .NET Core. Bagaimana untuk melakukannya diterangkan di sini.

Seterusnya, anda perlu memuat naik bot ke perkhidmatan Git, seperti GitHub dan seumpamanya, dan mengklonkannya ke pelayan VPS, atau memuat turun bot anda dengan cara lain. Sila ambil perhatian bahawa anda hanya akan mempunyai konsol, tiada GUI. sama sekali.

Selepas anda memuat turun bot anda, anda perlu menjalankannya. Untuk ini, anda memerlukan:

  • Pulihkan semua kebergantungan: dotnet restore
  • Bina aplikasi: dotnet build name_project.sln -c Release
  • Pergi ke DLL terbina;
  • dotnet name_of_file.dll

tahniah! Bot anda sedang berjalan. Walau bagaimanapun, bot, malangnya, menduduki konsol, dan tidak mudah untuk keluar dari pelayan VPS. Selain itu, sekiranya pelayan dimulakan semula, anda perlu memulakan bot dengan cara yang baharu. Terdapat beberapa cara untuk keluar dari situasi tersebut. Kesemuanya berkaitan dengan pelancaran pada permulaan pelayan:

  • Tambahkan skrip larian pada /etc/init.d
  • Buat perkhidmatan yang akan dijalankan pada permulaan.

Saya tidak melihat titik untuk memikirkannya secara terperinci, semuanya diterangkan dengan terperinci yang mencukupi di Internet.

Penemuan

Saya gembira saya mengambil tugas ini. Ini adalah pengalaman pembangunan bot pertama saya, dan saya gembira kerana saya mendapat pengetahuan baharu dalam C #, dan bekerja dengan Linux.

Pautan ke pelayan Discord. Bagi mereka yang bermain permainan Wargaming.
Pautan ke repositori tempat bot Discord berada.
Pautan ke repositori DSharpPlus.
Thank you!

Sumber: www.habr.com

Tambah komen