
Halo, Khabrovchans!
Hari ini Anda akan membaca artikel yang akan menjelaskan cara membuat bot menggunakan C # di .NET Core, dan cara mendapatkannya di server jauh.
Artikel ini akan terdiri dari latar belakang, tahap persiapan, logika penulisan dan transfer bot ke server jauh.
Saya harap artikel ini akan membantu banyak pemula.
Latar belakang
Semuanya berawal pada suatu malam musim gugur tanpa tidur yang saya habiskan di server Discord. Karena saya bergabung dengannya relatif baru, saya mulai mempelajarinya naik turun. Setelah menemukan saluran teks "Pekerjaan", saya menjadi tertarik, membukanya, dan menemukan di antara proposal yang tidak menarik bagi saya, ini:
"Programmer (pengembang bot)
Persyaratan:
- pengetahuan bahasa pemrograman;
- kemampuan belajar mandiri.
Keinginan:
- kemampuan untuk memahami kode orang lain;
- pengetahuan tentang fungsi DISCORD.
Tugas:
- pengembangan bot;
- dukungan dan pemeliharaan bot.
Manfaat Anda:
- Kemampuan untuk mendukung dan memengaruhi proyek yang Anda sukai;
- Memperoleh pengalaman kerja tim;
- Kesempatan untuk menunjukkan dan meningkatkan keterampilan yang ada. "
Ini langsung membuat saya tertarik. Ya, mereka tidak membayar untuk pekerjaan ini, tetapi mereka tidak memerlukan kewajiban dari Anda, dan tidak akan ada kelebihan dalam portofolio. Jadi saya menulis admin server, dan dia meminta saya untuk menulis bot yang akan menampilkan statistik pemain di World of Tanks.
Fase persiapan
DiscrodSebelum Anda mulai menulis bot kami, Anda harus membuatnya untuk Discord. Anda perlu:
- Masuk ke akun Perselisihan di
- Di tab "Aplikasi", klik tombol "Aplikasi Baru" dan beri nama bot
- Dapatkan token bot dengan masuk ke bot Anda dan temukan tab "Bot" di daftar "Pengaturan"
- Simpan token di suatu tempat
WargamingAnda juga harus membuat aplikasi dalam Wargaming untuk mengakses API Wargaming. Di sini juga, semuanya sederhana:
- Kami pergi ke akun Wargaming di tautan ini
- Pergi ke "Aplikasi Saya" dan klik tombol "Tambah Aplikasi Baru", berikan nama aplikasi dan pilih jenisnya
- Simpan ID aplikasi
Perangkat lunakSudah ada kebebasan memilih. Seseorang menggunakan Visual Studio, seseorang Penunggang, seseorang umumnya kuat, dan menulis kode dalam Vim (masih, programmer nyata hanya menggunakan keyboard, kan?). Namun, agar tidak mengimplementasikan API Perselisihan, Anda dapat menggunakan pustaka C # "DSharpPlus" tidak resmi. Itu dapat diinstal baik dari NuGet, atau dengan mengumpulkan sendiri sumber dari repositori.
Bagi mereka yang tidak tahu atau lupa cara menginstal aplikasi dari NuGet.Petunjuk untuk Visual Studio- Buka tab Proyek - Manajemen Paket NuGet;
- Klik pada ulasan dan masukkan "DSharpPlus" di bidang pencarian;
- Kami memilih dan menginstal kerangka kerja;
- KEUNTUNGAN!
Fase persiapan berakhir, Anda dapat melanjutkan untuk menulis bot.
Logika ejaan

Kami tidak akan mempertimbangkan keseluruhan logika aplikasi, saya hanya akan menunjukkan cara bekerja dengan intersepsi pesan oleh bot, dan cara bekerja dengan Wargaming API.
Bekerja dengan bot Discord terjadi melalui fungsi statis async Task MainTask (string [] args);
Untuk memanggil fungsi ini, di Main 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 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 - mendapatkan nama panggilan pengguna.
Jadi, ketika Anda mengirim pesan apa pun yang dimulai dengan &, bot akan menyambut Anda.
Di akhir fungsi ini, Anda perlu mendaftar tunggu discord.ConnectAsync (); dan menunggu Task.Delay (-1);
Ini akan memungkinkan Anda untuk mengeksekusi perintah di latar belakang tanpa mengambil utas utama.
Sekarang Anda harus berurusan dengan API Wargaming. Semuanya sederhana di sini - tulis permintaan CURL, dapatkan jawabannya dalam bentuk string JSON, tarik data yang diperlukan dari sana dan lakukan manipulasi pada mereka.
Contoh bekerja dengan WargamingAPI public Player FindPlayer(string searchNickname) {
Perhatian! Sangat tidak disarankan untuk menyimpan semua token dan ID aplikasi dalam teks yang jelas! Paling tidak - Perselisihan melarang token ini ketika mereka mencapai jaringan di seluruh dunia, secara maksimal - bot mulai menggunakan penjahat cyber.
Menyebarkan di server VPS

Setelah Anda selesai dengan bot, Anda harus meletakkannya di server yang terus berjalan 24/7. Ini disebabkan oleh fakta bahwa ketika aplikasi Anda bekerja, bot juga berfungsi. Segera setelah Anda mematikan aplikasi, bot Anda tertidur.
Banyak server VPS ada di dunia ini, baik pada Windows maupun Linux, tetapi dalam kebanyakan kasus, Linux beberapa kali lebih murah untuk di-host.
Di server Discord, saya disarankan oleh vscale.io, dan saya segera membuat server virtual di Ubuntu dan mengunggah bot. Saya tidak akan menjelaskan cara kerja situs ini, tetapi saya akan segera melanjutkan ke pengaturan bot.
Pertama-tama, Anda perlu menginstal perangkat lunak yang diperlukan yang akan menjalankan bot kami yang ditulis dalam .NET Core.
Cara melakukan ini 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. Perhatikan bahwa Anda hanya akan memiliki konsol, tidak akan ada GUI. Tentu saja
Setelah Anda mengunduh bot Anda, Anda harus menjalankannya. Untuk melakukan ini, Anda perlu:
- Pulihkan semua dependensi: pemulihan dotnet
- Bangun Aplikasi: dotnet build name_project.sln -c Release
- Pergi ke DLL yang dibangun;
- dotnet name_of_file.dll
Selamat! Bot Anda sedang berjalan. Namun, bot, sayangnya, menempati konsol, dan tidak akan mudah untuk keluar dari server VPS. Juga, jika server reboot, Anda harus memulai bot lagi. Ada beberapa jalan keluar dari situasi ini. Semuanya terkait dengan memulai pada startup server:
- Tambahkan skrip run ke /etc/init.d
- Buat layanan yang akan dimulai saat startup.
Saya tidak melihat intinya merinci mereka, semuanya dijelaskan secara cukup rinci di Internet.
Kesimpulan
Saya senang bahwa saya menerima tugas ini. Ini adalah pengalaman pengembangan bot pertama saya, dan saya senang bahwa saya telah memperoleh pengetahuan baru dalam C # dan bekerja dengan Linux.
Tautan ke Discord - server.
Bagi mereka yang memainkan game Wargaming.Tautan ke repositori tempat Discord bot berada.Tautan ke repositori DSharpPlus.Terima kasih atas perhatian anda!