.NET Core дээр Discord ботыг VPS серверт байршуулах замаар үүсгэж байна

.NET Core дээр Discord ботыг VPS серверт байршуулах замаар үүсгэж байна

Сайн уу Хабровчууд!

Өнөөдөр та .NET Core дээр C# ашиглан бот хэрхэн үүсгэх, алсын сервер дээр хэрхэн ажиллуулахыг харуулах нийтлэлийг үзэх болно.

Нийтлэл нь суурь, бэлтгэл үе шат, логик бичих, роботыг алсын сервер рүү шилжүүлэхээс бүрдэнэ.

Энэ нийтлэл олон эхлэгчдэд тусална гэж найдаж байна.

Эрьт урьдын түүх

Энэ бүхэн намайг Discord сервер дээр өнгөрүүлсэн намрын нэг шөнө нойргүй хоносон цагаас эхэлсэн. Би түүнтэй саяхан элссэнээс хойш түүнийг дээш доош судалж эхэлсэн. "Хоосон орон тоо" гэсэн бичвэр сувгийг олж мэдээд би сонирхож, нээсэн бөгөөд надад сонирхолгүй байгаа саналуудын дунд дараахь зүйлийг олж мэдэв.

"Программист (бот хөгжүүлэгч)
Шаардлагууд:

  • програмчлалын хэлний мэдлэг;
  • бие даан суралцах чадвар.

Пожелания:

  • бусад хүмүүсийн кодыг ойлгох чадвар;
  • DISCORD функцийн талаархи мэдлэг.

Зорилтууд:

  • робот хөгжүүлэх;
  • bot-ийн дэмжлэг, засвар үйлчилгээ.

Таны ашиг тус:

  • Таалагдсан төслийг дэмжих, нөлөөлөх боломж;
  • Багаар ажиллах туршлага хуримтлуулах;
  • Одоо байгаа ур чадвараа харуулах, сайжруулах боломж.


Энэ нь миний сонирхлыг шууд татсан. Тийм ээ, тэд энэ ажлынхаа төлбөрийг төлөөгүй, гэхдээ тэд танаас ямар ч үүрэг хүлээгээгүй бөгөөд энэ нь багцад илүүдэхгүй байх болно. Тиймээс би серверийн админ руу захидал бичсэн бөгөөд тэр надаас World of Tanks дээр тоглогчийн статистикийг харуулах бот бичихийг хүссэн.

Бэлтгэл үе шат

.NET Core дээр Discord ботыг VPS серверт байршуулах замаар үүсгэж байна
Discrod
Бид роботоо бичиж эхлэхээсээ өмнө үүнийг Discord-д зориулж үүсгэх хэрэгтэй. Чамд хэрэгтэй:

  1. Discord данс руу нэвтэрнэ үү холбоос
  2. "Програм" таб дээрээс "Шинэ програм" товчийг дараад роботыг нэрлэнэ үү
  3. Бот руугаа нэвтэрч, "Тохиргоо" жагсаалтаас "Бот" табыг олсноор bot токен аваарай.
  4. Токеныг хаа нэгтээ хадгал

Дайны тоглоом

Мөн та Wargaming API-д хандахын тулд Wargaming дээр програм үүсгэх хэрэгтэй. Энд бас бүх зүйл энгийн:

  1. Wargaming данс руугаа нэвтэрнэ үү энэ холбоос дээр
  2. Бид "Миний програмууд" руу очоод "Шинэ програм нэмэх" товчийг дарж, програмын нэрийг өгч, төрлийг нь сонгоно.
  3. Програмын ID-г хадгалж байна

Програм хангамж

Сонгох эрх чөлөө аль хэдийн бий болсон. Хэн нэгэн Visual Studio ашигладаг, хэн нэгэн Rider, хэн нэгэн нь ерөнхийдөө хүчирхэг, Vim дээр код бичдэг (эцсийн эцэст жинхэнэ програмистууд зөвхөн гар ашигладаг, тийм үү?). Гэсэн хэдий ч, Discord API-г хэрэгжүүлэхгүйн тулд та албан бус C# номын санг "DSharpPlus" ашиглаж болно. Та үүнийг NuGet-ээс суулгаж болно, эсвэл нөөцийн сангаас эх сурвалжаа өөрөө бүтээж болно.

NuGet-ээс програм суулгах талаар мэдэхгүй эсвэл мартсан хүмүүст зориулав.Visual Studio-д зориулсан заавар

  1. Төслийн таб руу очно уу - NuGet багцуудыг удирдах;
  2. Шүүмж дээр товшоод хайлтын талбарт "DSharpPlus" гэж оруулна уу;
  3. Хүрээг сонгох, суулгах;
  4. АШИГ!

Бэлтгэл үе шат дуусч, та бот бичихийг үргэлжлүүлж болно.

Логик бичих

.NET Core дээр Discord ботыг VPS серверт байршуулах замаар үүсгэж байна

Бид програмын логикийг бүхэлд нь авч үзэхгүй, би зөвхөн ботоор мессеж саатуулах, Wargaming API-тай хэрхэн ажиллах талаар л харуулах болно.

Discord роботтой ажиллах нь статик асинхронгуй Task MainTask(string[] args);
Энэ функцийг дуудахын тулд үндсэн хэсэгт бүртгүүлэх шаардлагатай

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

Дараа нь та роботоо эхлүүлэх хэрэгтэй:

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

Токен нь таны роботын тэмдэг хаана байна.
Дараа нь ламбдагаар дамжуулан бид роботын гүйцэтгэх шаардлагатай командуудыг бичнэ.

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

хаана e.Author.Username хэрэглэгчийн хоч авч байна.

Ингэснээр &-ээр эхэлсэн ямар ч мессеж илгээхэд робот тантай мэндчилнэ.

Энэ функцийн төгсгөлд та await discord гэж бичих ёстой.ConnectAsync(); мөн Task.Delay(-1)-ийг хүлээж байна;

Энэ нь үндсэн хэлхээг авахгүйгээр далд тушаалуудыг гүйцэтгэх боломжийг танд олгоно.

Одоо бид Wargaming API-тай ажиллах хэрэгтэй байна. Энд бүх зүйл энгийн байдаг - CURL хүсэлтийг бичиж, JSON стринг хэлбэрээр хариу авч, тэндээс шаардлагатай өгөгдлийг гаргаж аваад тэдгээрт залруулга хийнэ.

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;
        }

Анхаар! Бүх жетон болон програмын ID-г тодорхой текстээр хадгалахыг хатуу зөвлөдөггүй! Наад зах нь Discord ийм жетоныг дэлхий даяарх сүлжээнд нэвтрэхийг хориглодог бөгөөд дээд тал нь роботыг халдагчид ашиглаж эхэлдэг.

VPS - серверт байршуулах

.NET Core дээр Discord ботыг VPS серверт байршуулах замаар үүсгэж байна

Боттой болсны дараа 24/7 тасралтгүй ажилладаг серверт байршуулах шаардлагатай. Энэ нь таны програм ажиллаж байх үед бот ч ажиллаж байгаатай холбоотой юм. Аппликейшнийг унтраамагц таны робот бас унтдаг.

Энэ ертөнцөд Windows болон Линукс дээр олон VPS серверүүд байдаг боловч ихэнх тохиолдолд Линукс дээр байршуулах нь хамаагүй хямд байдаг.

Discord сервер дээр надад vscale.io зөвлөсөн бөгөөд би тэр даруй Ubuntu дээр виртуал сервер үүсгээд ботыг байршуулсан. Би энэ сайт хэрхэн ажилладаг талаар тайлбарлахгүй, харин шууд bot тохиргоо руу орох болно.

Юуны өмнө та .NET Core дээр бичигдсэн манай роботыг ажиллуулах шаардлагатай программ хангамжийг суулгах хэрэгтэй. Үүнийг хэрхэн хийх талаар энд тайлбарласан болно.

Дараа нь та ботыг GitHub гэх мэт Git үйлчилгээнд байршуулж, VPS серверт хувилах эсвэл өөр аргаар ботоо татаж авах хэрэгтэй. Танд зөвхөн консол байх болно, GUI байхгүй гэдгийг анхаарна уу. Бүх.

Та роботоо татаж авсны дараа түүнийг ажиллуулах хэрэгтэй. Үүний тулд танд хэрэгтэй:

  • Бүх хамаарлыг сэргээх: dotnet сэргээх
  • Програм бүтээх: dotnet build name_project.sln -c хувилбар
  • Баригдсан DLL руу очих;
  • dotnet name_of_file.dll

Баяр хүргэе! Таны бот ажиллаж байна. Гэсэн хэдий ч харамсалтай нь bot нь консолыг эзэлдэг бөгөөд VPS серверээс гарах нь тийм ч хялбар биш юм. Мөн сервер дахин ачаалагдсан тохиолдолд та ботыг шинэ аргаар эхлүүлэх хэрэгтэй болно. Нөхцөл байдлаас гарах хоёр арга бий. Эдгээр нь бүгд серверийг эхлүүлэх үед эхлүүлэхтэй холбоотой:

  • Ажиллуулах скриптийг /etc/init.d руу нэмнэ үү
  • Эхлэх үед ажиллах үйлчилгээг үүсгэ.

Тэдгээрийг нарийвчлан авч үзэх шаардлагагүй, Интернет дээр бүх зүйлийг хангалттай нарийвчлан тайлбарласан болно.

үр дүн нь

Би энэ ажлыг хүлээж авсандаа баяртай байна. Энэ бол миний анхны робот хөгжүүлэлтийн туршлага байсан бөгөөд би C # хэл дээр шинэ мэдлэг олж авсандаа баяртай байна, мөн Линукс дээр ажиллаж байна.

Discord сервер рүү холбоно уу. Wargaming тоглоом тоглодог хүмүүст зориулав.
Discord бот байрладаг репозитор руу холбоно уу.
DSharpPlus репозитор руу холбоно уу.
Таны анхаарлын төвд баярлалаа!

Эх сурвалж: www.habr.com

сэтгэгдэл нэмэх