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
diskro
Sebelum kita mulai menulis bot kita, kita perlu membuatnya untuk Discord. Anda membutuhkan:
Kami pergi ke "Aplikasi Saya" dan klik tombol "Tambahkan aplikasi baru", beri nama aplikasi dan pilih jenisnya
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
Buka tab Proyek - Kelola Paket NuGet;
Klik ulasan dan di kolom pencarian masukkan "DSharpPlus";
Pilih dan instal kerangka kerja;
LABA!
Tahap persiapan selesai, Anda dapat melanjutkan menulis bot.
Logika tulisan
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
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
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:
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.