ProHoster > Blog > Pentadbiran > 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
Discrod
Sebelum kita mula menulis bot kita, kita perlu menciptanya untuk Discord. Awak perlu:
Kami pergi ke "Aplikasi Saya" dan klik pada butang "Tambah aplikasi baharu", memberikan nama aplikasi dan memilih jenisnya
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
Pergi ke tab Projek - Urus Pakej NuGet;
Klik pada ulasan dan dalam medan carian masukkan "DSharpPlus";
Pilih dan pasang rangka kerja;
KEUNTUNGAN!
Peringkat persediaan sudah tamat, anda boleh teruskan menulis bot.
Logik penulisan
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
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
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.
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.