Креирање на бот Discord на .NET Core со распоредување на VPS сервер

Креирање на бот Discord на .NET Core со распоредување на VPS сервер

Здраво Хабровци!

Денес ќе видите статија која ќе ви покаже како да креирате бот користејќи C# на .NET Core и како да го стартувате на оддалечен сервер.

Статијата ќе се состои од позадина, подготвителна фаза, логика на пишување и пренесување на ботот на оддалечен сервер.

Се надевам дека оваа статија ќе им помогне на многу почетници.

праисторијата

Сè започна во една непроспиена есенска ноќ што ја поминав на серверот Discord. Откако неодамна му се придружив, почнав да го проучувам горе-долу. Откако го најдов текстуалниот канал „Слободни работни места“, се заинтересирав, го отворив и најдов меѓу понудите што не ме интересираа, ова се:

„Програмер (развивач на ботови)
Барања:

  • познавање на програмски јазици;
  • способност за самостојно учење.

Пожелания:

  • способност за разбирање на туѓиот код;
  • познавање на функционалноста на DISCORD.

Задачи:

  • развој на бот;
  • поддршка и одржување на ботот.

Ваша корист:

  • Можност за поддршка и влијание на проектот што ви се допаѓа;
  • Стекнување искуство за работа во тим;
  • Можност за демонстрирање и подобрување на постоечките вештини.


Ова веднаш ме заинтересира. Да, тие не платија за оваа работа, но не бараа никакви обврски од вас и нема да биде излишно во портфолиото. Затоа, му пишав на администраторот на серверот, а тој ме замоли да напишам бот што ќе ја прикажува статистиката на играчот во World of Tanks.

Подготвителната фаза

Креирање на бот Discord на .NET Core со распоредување на VPS сервер
Дискод
Пред да започнеме да го пишуваме нашиот бот, треба да го создадеме за Discord. Ти треба:

  1. Најавете се на сметката на Discord по ссылке
  2. Во табулаторот „Апликации“, кликнете на копчето „Нова апликација“ и именувајте го ботот
  3. Добијте бот токен така што ќе се најавите на вашиот бот и ќе го пронајдете јазичето „Бот“ во списокот „Поставки“
  4. Зачувајте го токенот некаде

Wargaming

Исто така, треба да креирате апликација во Wargaming за да добиете пристап до Wargaming API. И овде сè е едноставно:

  1. Најавете се на вашата сметка на Wargaming со овој линк
  2. Одиме во „Мои апликации“ и кликнуваме на копчето „Додај нова апликација“, давајќи го името на апликацијата и избирајќи го нејзиниот тип
  3. Зачувување на ID на апликацијата

софтвер

Веќе постои слобода на избор. Некој користи Visual Studio, некој Rider, некој е генерално моќен и пишува код во Vim (на крајот на краиштата, вистинските програмери користат само тастатура, нели?). Меѓутоа, за да не го имплементирате Discord API, можете да ја користите неофицијалната C# библиотека „DSharpPlus“. Можете да го инсталирате или од NuGet, или со градење на изворите сами од складиштето.

За оние кои не знаат или заборавиле како да инсталираат апликации од NuGet.Инструкции за Visual Studio

  1. Одете на картичката Проект - Управувајте со пакетите NuGet;
  2. Кликнете на прегледот и во полето за пребарување внесете „DSharpPlus“;
  3. Изберете и инсталирајте рамка;
  4. ПРОИЗВОД!

Подготвителната фаза е завршена, можете да продолжите со пишување на ботот.

Логика на пишување

Креирање на бот Discord на .NET Core со распоредување на VPS сервер

Нема да ја разгледаме целата логика на апликацијата, само ќе покажам како да работиме со пресретнување пораки од ботот и како да работиме со Wargaming API.

Работата со ботот Discord се случува преку статичката асинхронизирана задача 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;
        }

Внимание! Строго не се препорачува да ги складирате сите токени и ID на апликации во јасен текст! Во најмала рака, Discord ги забранува таквите токени кога ќе влезат во светската мрежа, а максимум, ботот почнува да се користи од напаѓачите.

Распоредете на VPS - сервер

Креирање на бот Discord на .NET Core со распоредување на VPS сервер

Откако ќе завршите со ботот, тој треба да биде хостиран на сервер кој постојано работи 24/7. Ова се должи на фактот дека кога вашата апликација работи, ботот исто така работи. Штом ја исклучите апликацијата, и вашиот бот заспива.

Многу VPS сервери постојат во овој свет, и на Windows и на Linux, меѓутоа, во повеќето случаи, е многу поевтино да се хостира на Linux.

На серверот Discord, ме советуваа vscale.io, и веднаш создадов виртуелен сервер на Ubuntu на него и го подигнав ботот. Нема да опишам како работи оваа страница, туку ќе одам директно до поставките за бот.

Пред сè, треба да го инсталирате потребниот софтвер кој ќе работи на нашиот бот напишан во .NET Core. Како да го направите тоа е опишано овде.

Следно, треба да го поставите ботот на услуга Git, како GitHub и слично, и да го клонирате на VPS сервер или да го преземете вашиот бот на други начини. Ве молиме имајте предвид дека ќе имате само конзола, без GUI. Воопшто.

Откако ќе го преземете вашиот бот, треба да го стартувате. За ова ви треба:

  • Вратете ги сите зависности: обновување на точка мрежа
  • Изградба на апликација: dotnet build name_project.sln -c Release
  • Одете во вграден DLL;
  • dotnet name_of_file.dll

Секоја чест! Вашиот бот работи. Сепак, ботот, за жал, ја окупира конзолата и не е лесно да излезете од VPS серверот. Исто така, во случај на рестартирање на серверот, ќе мора да го стартувате ботот на нов начин. Постојат неколку начини за излез од ситуацијата. Сите тие се поврзани со лансирањето при стартување на серверот:

  • Додајте скрипта за стартување во /etc/init.d
  • Создадете услуга што ќе работи при стартување.

Не гледам смисла да се осврнам на нив детално, сè е доволно детално опишано на Интернет.

Наоди

Мило ми е што ја презедов оваа задача. Ова беше моето прво искуство за развој на бот, и мило ми е што добив ново знаење во C # и работа со Linux.

Врска до серверот Discord. За оние кои играат Wargaming игри.
Врска до складиштето каде што се наоѓа ботот Discord.
Врска до складиштето DSharpPlus.
Ви благодариме!

Извор: www.habr.com

Додадете коментар