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
Discrod
Antes de comezar a escribir o noso bot, necesitamos crealo para Discord. Precisas:
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
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
Vaia á pestana Proxecto - Xestionar paquetes NuGet;
Fai clic na revisión e no campo de busca introduce "DSharpPlus";
Seleccionar e instalar framework;
BENEFICIO!
Rematou a fase preparatoria, podes proceder a escribir o bot.
Lóxica de escritura
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
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
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.