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

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

Сәлеметсіздер ме Хабровиттер!

Бүгін сіз .NET Core жүйесінде C# көмегімен ботты қалай жасау керектігін және оны қашықтағы серверде қалай іске қосу керектігін көрсететін мақаланы көресіз.

Мақала фон, дайындық кезеңі, логиканы жазу және ботты қашықтағы серверге тасымалдаудан тұрады.

Бұл мақала көптеген жаңадан бастағандарға көмектеседі деп үміттенемін.

тарихын

Мұның бәрі мен Discord серверінде өткізген бір ұйқысыз күз түнінде басталды. Мен оған жақында қосылғандықтан, мен оны жоғары-төмен зерттей бастадым. «Вакансиялар» мәтіндік арнасын тауып, мен қызығып, оны аштым және мені қызықтырмайтын ұсыныстардың арасынан таптым, мыналар:

«Бағдарламашы (бот әзірлеушісі)
талаптар:

  • бағдарламалау тілдерін білу;
  • өздігінен білім алу қабілеті.

Құттықтаулар:

  • басқа адамдардың кодын түсіну қабілеті;
  • DISCORD функциясын білу.

Міндеттері:

  • боттарды әзірлеу;
  • ботқа қолдау көрсету және қызмет көрсету.

Сіздің пайдасы:

  • Сізге ұнайтын жобаны қолдау және әсер ету мүмкіндігі;
  • Топта жұмыс істеу тәжірибесін жинақтау;
  • Бар дағдыларды көрсету және жетілдіру мүмкіндігі.


Бұл мені бірден қызықтырды. Иә, олар бұл жұмыс үшін төлеген жоқ, бірақ олар сізден ешқандай міндеттеме талап етпеді және бұл портфолиода артық болмайды. Сондықтан мен сервер әкімшісіне жаздым, ол World of Tanks ойынындағы ойыншының статистикасын көрсететін бот жазуымды өтінді.

Дайындық кезеңі

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

  1. Discord тіркелгісіне кіріңіз байланыс
  2. «Қолданбалар» қойындысында «Жаңа қолданба» түймесін басып, ботқа атау беріңіз
  3. Ботқа кіріп, «Параметрлер» тізімінен «Бот» қойындысын табу арқылы бот белгісін алыңыз.
  4. Белгішені бір жерде сақтаңыз

Wargaming

Сондай-ақ Wargaming API-ге қол жеткізу үшін Wargaming қолданбасында қосымша жасау керек. Мұнда да бәрі қарапайым:

  1. Wargaming есептік жазбаңызға кіріңіз осы сілтеме бойынша
  2. Біз «Менің қолданбаларым» бөліміне өтіп, қолданбаның атын беріп, оның түрін таңдай отырып, «Жаңа қолданба қосу» түймесін басыңыз.
  3. Қолданба идентификаторын сақтау

Бағдарламалық қамтамасыз ету

Қазірдің өзінде таңдау еркіндігі бар. Біреу Visual Studio пайдаланады, біреу Rider, біреу әдетте күшті және Vim-де код жазады (ақыр соңында, нақты бағдарламашылар тек пернетақтаны пайдаланады, солай ма?). Дегенмен, Discord API қолданбау үшін «DSharpPlus» бейресми C# кітапханасын пайдалануға болады. Сіз оны NuGet-тен немесе репозиторийден көздерді өзіңіз құрастыру арқылы орнатуға болады.

NuGet қолданбаларын орнату жолын білмейтін немесе ұмытып кеткендер үшін.Visual Studio үшін нұсқаулар

  1. Жоба қойындысына өтіңіз - NuGet пакеттерін басқару;
  2. Шолуды басыңыз және іздеу өрісіне «DSharpPlus» енгізіңіз;
  3. Framework таңдау және орнату;
  4. PROFIT!

Дайындық кезеңі аяқталды, сіз ботты жазуды жалғастыра аласыз.

Жазу логикасы

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(); және 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 репозиторийіне сілтеме.
Назарларыңызға рахмет!

Ақпарат көзі: www.habr.com

пікір қалдыру