Membuat bot Discord di .NET Core dengan penyebaran ke server VPS

Membuat bot Discord di .NET Core dengan penyebaran ke server VPS

Halo warga Khabrovit!

Hari ini Anda akan melihat artikel yang menunjukkan cara membuat bot menggunakan C# di .NET Core dan cara menjalankannya di server jarak jauh.

Artikel akan terdiri dari latar belakang, tahap persiapan, logika penulisan, dan transfer bot ke server jarak jauh.

Saya harap artikel ini akan membantu banyak pemula.

prasejarah

Semuanya dimulai pada suatu malam musim gugur tanpa tidur yang saya habiskan di server Discord. Sejak saya baru bergabung dengannya, saya mulai mempelajarinya dari atas ke bawah. Setelah menemukan saluran teks "Lowongan", saya menjadi tertarik, membukanya, dan menemukan di antara penawaran yang tidak menarik minat saya, yaitu:

"Programmer (pengembang bot)
Persyaratan:

  • pengetahuan tentang bahasa pemrograman;
  • kemampuan untuk belajar mandiri.

ПоТСлания:

  • kemampuan untuk memahami kode orang lain;
  • pengetahuan tentang fungsi DISCORD.

Tugas:

  • pengembangan bot;
  • dukungan dan pemeliharaan bot.

Manfaat Anda:

  • Peluang untuk mendukung dan memengaruhi proyek yang Anda sukai;
  • Memperoleh pengalaman bekerja dalam tim;
  • Kesempatan untuk menunjukkan dan meningkatkan keterampilan yang ada.


Ini langsung menarik minat saya. Ya, mereka tidak membayar pekerjaan ini, tetapi mereka tidak menuntut kewajiban apa pun dari Anda, dan itu tidak akan berlebihan dalam portofolio. Oleh karena itu, saya menulis ke admin server, dan dia meminta saya untuk menulis bot yang akan menampilkan statistik pemain di World of Tanks.

Tahap persiapan

Membuat bot Discord di .NET Core dengan penyebaran ke server VPS
diskro
Sebelum kita mulai menulis bot kita, kita perlu membuatnya untuk Discord. Anda membutuhkan:

  1. Masuk ke akun Perselisihan ΠΏΠΎ ссылкС
  2. Di tab "Aplikasi", klik tombol "Aplikasi Baru" dan beri nama bot
  3. Dapatkan token bot dengan masuk ke bot Anda dan temukan tab "Bot" di daftar "Pengaturan".
  4. Simpan token di suatu tempat

Wargaming

Selain itu, Anda perlu membuat aplikasi di Wargaming untuk mendapatkan akses ke API Wargaming. Di sini juga, semuanya sederhana:

  1. Masuk ke akun Wargaming Anda di tautan ini
  2. Kami pergi ke "Aplikasi Saya" dan klik tombol "Tambahkan aplikasi baru", beri nama aplikasi dan pilih jenisnya
  3. Menyimpan ID Aplikasi

Perangkat lunak

Sudah ada kebebasan memilih. Seseorang menggunakan Visual Studio, seseorang Rider, seseorang umumnya kuat, dan menulis kode di Vim (lagipula, programmer sebenarnya hanya menggunakan keyboard, bukan?). Namun, agar tidak mengimplementasikan Discord API, Anda dapat menggunakan pustaka C# tidak resmi β€œDSharpPlus”. Anda dapat menginstalnya dari NuGet, atau dengan membuat sendiri sumbernya dari repositori.

Bagi yang belum tahu atau sudah lupa cara install aplikasi dari NuGet.Petunjuk untuk Visual Studio

  1. Buka tab Proyek - Kelola Paket NuGet;
  2. Klik ulasan dan di kolom pencarian masukkan "DSharpPlus";
  3. Pilih dan instal kerangka kerja;
  4. LABA!

Tahap persiapan selesai, Anda dapat melanjutkan menulis bot.

Logika tulisan

Membuat bot Discord di .NET Core dengan penyebaran ke server VPS

Kami tidak akan mempertimbangkan keseluruhan logika aplikasi, saya hanya akan menunjukkan cara bekerja dengan penyadapan pesan oleh bot, dan cara bekerja dengan API Wargaming.

Bekerja dengan bot Discord terjadi melalui async Task MainTask(string[] args);
Untuk memanggil fungsi ini, di Main Anda perlu mendaftar

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

Selanjutnya, Anda perlu menginisialisasi bot Anda:

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

Di mana token adalah token bot Anda.
Kemudian, melalui lambda, kami menulis perintah yang diperlukan yang harus dijalankan 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 mendapatkan nama panggilan pengguna.

Dengan cara ini, saat Anda mengirim pesan apa pun yang dimulai dengan &, bot akan menyambut Anda.

Di akhir fungsi ini, Anda harus menulis await discord.ConnectAsync(); dan menunggu Task.Delay(-1);

Ini akan memungkinkan Anda untuk menjalankan perintah di latar belakang tanpa menggunakan utas utama.

Sekarang kita perlu berurusan dengan API Wargaming. Semuanya sederhana di sini - tulis permintaan CURL, dapatkan respons dalam bentuk string JSON, tarik 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! Sangat tidak disarankan untuk menyimpan semua token dan ID aplikasi dalam teks yang jelas! Minimal, Discord melarang token semacam itu saat memasuki jaringan di seluruh dunia, dan maksimal, bot mulai digunakan oleh penyerang.

Terapkan ke VPS - server

Membuat bot Discord di .NET Core dengan penyebaran ke server VPS

Setelah Anda selesai dengan bot, bot harus dihosting di server yang terus berjalan 24/7. Ini karena ketika aplikasi Anda berjalan, bot juga berjalan. Segera setelah Anda mematikan aplikasi, bot Anda juga tertidur.

Banyak server VPS ada di dunia ini, baik di Windows maupun di Linux, namun, dalam banyak kasus, jauh lebih murah untuk menghosting di Linux.

Di server Discord, saya disarankan vscale.io, dan saya segera membuat server virtual di Ubuntu dan mengunggah botnya. Saya tidak akan menjelaskan cara kerja situs ini, tetapi akan langsung ke pengaturan bot.

Pertama-tama, Anda perlu menginstal perangkat lunak yang diperlukan yang akan menjalankan bot kami yang ditulis dalam .NET Core. Cara melakukannya dijelaskan di sini.

Selanjutnya, Anda perlu mengunggah bot ke layanan Git, seperti GitHub dan sejenisnya, dan mengkloningnya ke server VPS, atau mengunduh bot Anda dengan cara lain. Harap perhatikan bahwa Anda hanya akan memiliki konsol, tanpa GUI. Sama sekali.

Setelah mengunduh bot, Anda harus menjalankannya. Untuk ini, Anda perlu:

  • Pulihkan semua dependensi: pemulihan dotnet
  • Bangun aplikasi: dotnet build name_project.sln -c Rilis
  • Buka DLL bawaan;
  • nama dotnet_of_file.dll

Selamat! Bot Anda sedang berjalan. Namun, bot tersebut, sayangnya, menempati konsol, dan tidak mudah untuk keluar dari server VPS. Selain itu, jika server dimulai ulang, Anda harus memulai bot dengan cara baru. Ada beberapa jalan keluar dari situasi tersebut. Semuanya terkait dengan peluncuran saat startup server:

  • Tambahkan skrip run ke /etc/init.d
  • Buat layanan yang akan berjalan saat startup.

Saya tidak melihat gunanya membahasnya secara mendetail, semuanya dijelaskan dengan cukup detail di Internet.

Temuan

Saya senang saya mengambil tugas ini. Ini adalah pengalaman pengembangan bot pertama saya, dan saya senang mendapatkan pengetahuan baru di C #, dan bekerja dengan Linux.

Tautan ke server Perselisihan. Bagi mereka yang bermain game Wargaming.
Tautkan ke repositori tempat bot Discord berada.
Tautkan ke repositori DSharpPlus.
Terima kasih!

Sumber: www.habr.com

Tambah komentar