Creando un bot Discord en .NET Core con implementación nun servidor VPS

Creando un bot Discord en .NET Core con implementación nun servidor VPS

Ola Khabrovites!

Hoxe verás un artigo que che mostrará como crear un bot usando C# en .NET Core e como executalo nun servidor remoto.

O artigo consistirá nun fondo, unha fase preparatoria, a lóxica de escritura e a transferencia do bot a un servidor remoto.

Espero que este artigo axude a moitos principiantes.

prehistoria

Todo comezou nunha noite de outono sen durmir que pasei no servidor de Discord. Desde hai pouco que me unín a el, comecei a estudalo arriba e abaixo. Despois de atopar a canle de texto "Vacantes", interesoume, abriuna e atopei entre as ofertas que non me interesaban, estas son:

"Programador (desenvolvedor de bot)
Requisitos:

  • coñecemento de linguaxes de programación;
  • capacidade de autoaprendizaxe.

Пожелания:

  • capacidade de comprender o código doutras persoas;
  • coñecemento da funcionalidade DISCORD.

Tarefas:

  • desenvolvemento de bots;
  • soporte e mantemento do bot.

O seu beneficio:

  • Oportunidade de apoiar e influír no proxecto que che guste;
  • Adquirir experiencia de traballo en equipo;
  • Oportunidade de demostrar e mellorar as habilidades existentes.


Isto inmediatamente interesoume. Si, non pagaron por este traballo, pero non che esixiron ningunha obriga, e non será superfluo na carteira. Polo tanto, escribín ao administrador do servidor e pediume que escribise un bot que mostrará as estatísticas do xogador en World of Tanks.

A fase de preparación

Creando un bot Discord en .NET Core con implementación nun servidor VPS
Discrod
Antes de comezar a escribir o noso bot, necesitamos crealo para Discord. Precisas:

  1. Inicia sesión na conta de Discord по ссылке
  2. Na pestana "Aplicacións", fai clic no botón "Nova aplicación" e nomea o bot
  3. Obtén un token de bot iniciando sesión no teu bot e atopando a pestana "Bot" na lista "Configuración"
  4. Garda o token nalgún lugar

Wargaming

Ademais, debes crear unha aplicación en Wargaming para acceder á API de Wargaming. Aquí tamén todo é sinxelo:

  1. Inicia sesión na túa conta de Wargaming por esta ligazón
  2. Imos a "As miñas aplicacións" e prememos no botón "Engadir unha nova aplicación", dando o nome da aplicación e seleccionando o seu tipo
  3. Gardando o ID da aplicación

software

Xa hai liberdade de elección. Alguén usa Visual Studio, alguén Rider, alguén xeralmente é poderoso e escribe código en Vim (despois de todo, os programadores reais usan só o teclado, non?). Non obstante, para non implementar a API de Discord, podes usar a biblioteca C# non oficial "DSharpPlus". Podes instalalo desde NuGet ou construíndo as fontes ti mesmo desde o repositorio.

Para aqueles que non saben ou esqueceron como instalar aplicacións de NuGet.Instrucións para Visual Studio

  1. Vaia á pestana Proxecto - Xestionar paquetes NuGet;
  2. Fai clic na revisión e no campo de busca introduce "DSharpPlus";
  3. Seleccionar e instalar framework;
  4. BENEFICIO!

Rematou a fase preparatoria, podes proceder a escribir o bot.

Lóxica de escritura

Creando un bot Discord en .NET Core con implementación nun servidor VPS

Non consideraremos toda a lóxica da aplicación, só mostrarei como traballar coa interceptación de mensaxes polo bot e como traballar coa API de Wargaming.

O traballo co bot Discord prodúcese a través da Tarefa MainTask asincrónica estática(string[] args);
Para chamar a esta función, en Main cómpre rexistrarse

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

A continuación, debes inicializar o teu bot:

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

Onde o token é o token do teu bot.
Despois, a través da lambda, escribimos os comandos necesarios que debe executar o bot:

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

Onde e.Author.Username está a obter o alcume do usuario.

Deste xeito, cando envíes algunha mensaxe que comece por &, o bot saudarache.

Ao final desta función, debes escribir await discord.ConnectAsync(); e agardar Tarefa.Atraso(-1);

Isto permitirache executar comandos en segundo plano sen ocupar o fío principal.

Agora temos que tratar coa API de Wargaming. Aquí todo é sinxelo: escribe solicitudes CURL, obtén unha resposta en forma de cadea JSON, extrae os datos necesarios e realiza manipulacións nelas.

Un exemplo de traballo con 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;
        }

Atención! Non se recomenda estrictamente almacenar todos os tokens e ID das aplicacións en texto claro. Como mínimo, Discord prohibe tales tokens cando entran na rede mundial e, como máximo, os atacantes comezan a usar o bot.

Implementar no servidor VPS

Creando un bot Discord en .NET Core con implementación nun servidor VPS

Unha vez que remates co bot, debe estar aloxado nun servidor que estea en execución constantemente 24/7. Isto débese ao feito de que cando a súa aplicación está en execución, o bot tamén se está a executar. En canto desactivas a aplicación, o teu bot tamén queda durmido.

Neste mundo existen moitos servidores VPS, tanto en Windows como en Linux, con todo, na maioría dos casos, é moito máis barato aloxar en Linux.

No servidor de Discord, aconselláronme vscale.io e inmediatamente creei un servidor virtual en Ubuntu e carguei o bot. Non describirei como funciona este sitio, pero irei directamente á configuración do bot.

En primeiro lugar, cómpre instalar o software necesario que executará o noso bot escrito en .NET Core. Como facelo descríbese aquí.

A continuación, debes cargar o bot a un servizo Git, como GitHub e similares, e clonalo nun servidor VPS ou descargar o teu bot doutros xeitos. Ten en conta que só terás unha consola, sen GUI. En todo.

Despois de descargar o teu bot, debes executalo. Para iso, necesitas:

  • Restaurar todas as dependencias: restauración dotnet
  • Aplicación de compilación: dotnet build name_project.sln -c Versión
  • Vaia á DLL construída;
  • dotnet nome_do_ficheiro.dll

Parabéns! O teu bot está en execución. Non obstante, o bot, por desgraza, ocupa a consola e non é fácil saír do servidor VPS. Ademais, en caso de reiniciar o servidor, terás que iniciar o bot dun xeito novo. Hai un par de formas de saír da situación. Todos eles están relacionados co lanzamento ao inicio do servidor:

  • Engade o script de execución a /etc/init.d
  • Crea un servizo que se executará no inicio.

Non vexo o sentido de determe neles en detalle, todo está descrito con suficiente detalle en Internet.

Descubrimentos

Alégrome de asumir esta tarefa. Esta foi a miña primeira experiencia de desenvolvemento de bots, e estou feliz de ter coñecementos novos en C # e traballar con Linux.

Ligazón ao servidor de Discord. Para aqueles que xogan a xogos de Wargaming.
Ligazón ao repositorio onde se atopa o bot Discord.
Ligazón ao repositorio de DSharpPlus.
Спасибо за внимание!

Fonte: www.habr.com

Engadir un comentario