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

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

Саламатсыздарбы Хабровчулар!

Бүгүн сиз .NET Coreде C# менен кантип бот түзүүнү жана аны алыскы серверде кантип иштетүүнү көрсөтө турган макаланы көрөсүз.

Макала фондон, даярдоо баскычынан, логиканы жазуудан жана ботту алыскы серверге өткөрүүдөн турат.

Бул макала көптөгөн үйрөнчүктөргө жардам берет деп үмүттөнөм.

prehistory

Мунун баары мен Discord серверинде өткөргөн бир уйкусуз күз түнүндө башталды. Мен ага жакында эле кошулгандыктан, аны өйдө-ылдый изилдей баштадым. "Вакансиялар" тексттик каналын таап, мен кызыгып, аны ачтым жана мени кызыктырбаган сунуштарды таптым, булар:

"Программист (бот иштеп чыгуучу)
талаптар:

  • программалоо тилдерин билүү;
  • өз алдынча билим алуу жөндөмдүүлүгү.

сунуштар:

  • башка адамдардын кодун түшүнүү жөндөмдүүлүгү;
  • DISCORD функциясын билүү.

максаттар:

  • ботту өнүктүрүү;
  • ботту колдоо жана тейлөө.

Сиздин пайдаңыз:

  • Сизге жаккан долбоорду колдоо жана таасир этүү мүмкүнчүлүгү;
  • Командада иштөө тажрыйбасына ээ болуу;
  • Бар болгон көндүмдөрдү көрсөтүү жана өркүндөтүү мүмкүнчүлүгү.


Бул мени дароо кызыктырды. Ооба, алар бул иш үчүн төлөгөн эмес, бирок алар сизден эч кандай милдеттенмелерди талап кылышкан эмес жана бул портфелде ашыкча болбойт. Ошондуктан мен сервердин администраторуна жаздым, ал менден World of Tanks оюнунда оюнчунун статистикасын көрсөтө турган бот жазууну суранды.

даярдоо этабы

VPS серверине жайылтуу менен .NET Coreдо Discord ботун түзүү
Discrod
Ботубузду жазуудан мурун, аны Discord үчүн түзүшүбүз керек. Сизге керек:

  1. Discord аккаунтуна кириңиз байланыш
  2. "Колдонмолор" өтмөгүндө "Жаңы колдонмо" баскычын чыкылдатып, ботту атаңыз
  3. Ботуңузга кирип, "Орнотуулар" тизмесинен "Бот" өтмөгүн таап, бот белгисин алыңыз
  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. ПАЙДА!

Даярдоо баскычы бүттү, сиз бот жазууга өтсөңүз болот.

Логиканы жазуу

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

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

Discord боту менен иштөө статикалык синхрондуу Task MainTask(string[] args) аркылуу ишке ашат;
Бул функцияны чакыруу үчүн, Mainда катталуу керек

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(); and wait 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;
        }

Көңүл бургула! Бардык токендерди жана тиркеме идентификаторлорун ачык текстте сактоо сунушталбайт! Жок дегенде, Discord мындай токендерди дүйнөлүк тармакка киргенде тыюу салат, эң көп дегенде, бот чабуулчулар тарабынан колдонула баштайт.

VPS - серверге жайылтуу

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

Сиз бот менен бүткөндөн кийин, ал 24/7 тынымсыз иштеп турган серверде жайгаштырылышы керек. Бул сиздин тиркемеңиз иштеп жатканда бот да иштеп жатканына байланыштуу. Тиркемени өчүрөрүңүз менен, сиздин ботуңуз да уктап калат.

Көптөгөн VPS серверлери бул дүйнөдө Windows да, Linux да бар, бирок, көпчүлүк учурларда, Linux'та хостинг алда канча арзан.

Discord серверинде мага vscale.io кеңеши берилди, мен дароо Ubuntuдо виртуалдык сервер түзүп, ботту жүктөдүм. Мен бул сайттын кантип иштээрин сүрөттөбөйм, бирок түз боттун жөндөөлөрүнө өтөм.

Биринчиден, сиз .NET Core менен жазылган биздин ботту иштете турган керектүү программаны орнотушуңуз керек. Муну кантип кылуу керек, бул жерде сүрөттөлөт.

Андан кийин, сиз ботту GitHub сыяктуу Git кызматына жүктөшүңүз жана аны VPS серверине клондошуңуз же ботуңузду башка жолдор менен жүктөп алышыңыз керек. Эсиңизде болсун, сизде консол гана болот, GUI жок. Таптакыр.

Ботуңузду жүктөп алгандан кийин, аны иштетишиңиз керек. Бул үчүн, сизге керек:

  • Бардык көз карандылыкты калыбына келтирүү: dotnet калыбына келтирүү
  • Колдонмону түзүү: dotnet build name_project.sln -c Чыгаруу
  • Курулган DLLге өтүңүз;
  • dotnet name_of_file.dll

Куттуктайбыз! Сиздин ботуңуз иштеп жатат. Бирок, тилекке каршы, бот консолду ээлейт жана VPS серверинен чыгуу оңой эмес. Ошондой эле, сервер кайра жүктөлгөн учурда, сиз ботту жаңы жол менен башташыңыз керек болот. Кырдаалдан чыгуунун бир нече жолу бар. Алардын баары серверди ишке киргизүүдө ишке киргизүү менен байланышкан:

  • /etc/init.d дарегине иштетүү скриптин кошуңуз
  • Ишке киргенде иштей турган кызматты түзүңүз.

Мен аларга майда-чүйдөсүнө чейин токтолуунун маанисин көрбөй турам, баары Интернетте жетиштүү майда-чүйдөсүнө чейин баяндалган.

табылгалары

Мен бул тапшырманы алганыма кубанычтамын. Бул менин ботту иштеп чыгуу боюнча биринчи тажрыйбам болду жана мен C# тилинде жаңы билимдерди алганыма жана Linux менен иштегениме кубанычтамын.

Discord серверине шилтеме. Wargaming оюндарын ойногондор үчүн.
Discord боту жайгашкан репозиторийге шилтеме.
DSharpPlus репозиторийине шилтеме.
Конул бурганын учун рахмат!

Source: www.habr.com

Комментарий кошуу