
Witajcie Chabrowicze!
Dzisiaj zobaczycie artykuł, który pokaże wam jak stworzyć bota przy użyciu C# na .NET Core i jak uruchomić go na zdalnym serwerze.
Artykuł będzie składał się z tła, etapu przygotowawczego, pisania logiki i przenoszenia bota na zdalny serwer.
Mam nadzieję, że ten artykuł pomoże wielu początkującym.
prehistoria
Wszystko zaczęło się pewnej bezsennej jesiennej nocy, którą spędziłem na serwerze Discord. Odkąd niedawno do niego dołączyłem, zacząłem go studiować od początku do końca. Po znalezieniu kanału tekstowego „Oferty pracy” zainteresowałem się, otworzyłem go i znalazłem wśród ofert, które mnie nie interesują, są to:
„Programista (programista botów)
wymagania:
- znajomość języków programowania;
- umiejętność samodzielnego uczenia się.
Пожелания:
- umiejętność rozumienia kodu innych osób;
- znajomość funkcjonalności DISCORD.
Zadania:
- rozwój botów;
- wsparcie i utrzymanie bota.
Twoja korzyść:
- Możliwość wspierania i wpływania na projekt, który Ci się podoba;
- Zdobycie doświadczenia w pracy w zespole;
- Możliwość zademonstrowania i doskonalenia posiadanych umiejętności.
To mnie natychmiast zainteresowało. Tak, nie zapłacili za tę pracę, ale nie wymagali od ciebie żadnych zobowiązań i nie będzie to zbyteczne w portfolio. Dlatego napisałem do administratora serwera, a on poprosił mnie o napisanie bota, który będzie pokazywał statystyki gracza w World of Tanks.
Faza przygotowawcza

Disrod
Zanim zaczniemy pisać naszego bota, musimy stworzyć go dla Discorda. Potrzebujesz:
- Zaloguj się do konta Discord
- W zakładce „Aplikacje” kliknij przycisk „Nowa aplikacja” i nazwij bota
- Zdobądź token bota, logując się do swojego bota i znajdując zakładkę „Bot” na liście „Ustawienia”
- Zapisz gdzieś token
Wargaming
Ponadto musisz utworzyć aplikację w Wargaming, aby uzyskać dostęp do Wargaming API. Tutaj też wszystko jest proste:
- Zaloguj się do swojego konta Wargaming
- Przechodzimy do „Moich aplikacji” i klikamy w przycisk „Dodaj nową aplikację”, podając nazwę aplikacji i wybierając jej typ
- Zapisywanie identyfikatora aplikacji
Oprogramowanie
Istnieje już wolność wyboru. Ktoś używa Visual Studio, ktoś Rider, ktoś ogólnie jest potężny i pisze kod w Vimie (w końcu prawdziwi programiści używają tylko klawiatury, prawda?). Aby jednak nie implementować Discord API, możesz skorzystać z nieoficjalnej biblioteki C# „DSharpPlus”. Możesz zainstalować go z NuGet lub samodzielnie budując źródła z repozytorium.
Dla tych, którzy nie wiedzą lub zapomnieli jak zainstalować aplikacje z NuGet.Instrukcje dla Visual Studio
- Przejdź do zakładki Projekt - Zarządzaj pakietami NuGet;
- Kliknij recenzję iw polu wyszukiwania wpisz „DSharpPlus”;
- Wybierz i zainstaluj framework;
- ZYSK!
Etap przygotowawczy dobiegł końca, możesz przystąpić do pisania bota.
Logika pisania

Nie będziemy rozważać całej logiki aplikacji, pokażę tylko jak pracować z przechwytywaniem wiadomości przez bota oraz jak pracować z Wargaming API.
Praca z botem Discord odbywa się poprzez statyczne zadanie asynchroniczne MainTask(string[] args);
Aby wywołać tę funkcję, w Main musisz się zarejestrować
MainTask(args).ConfigureAwait(false).GetAwaiter().GetResult();Następnie musisz zainicjować swojego bota:
discord = new DiscordClient(new DiscordConfiguration
{
Token = token,
TokenType = TokenType.Bot,
UseInternalLogHandler = true,
LogLevel = LogLevel.Debug
}); Gdzie token to token twojego bota.
Następnie poprzez lambdę piszemy niezbędne polecenia, które bot powinien wykonać:
discord.MessageCreated += async e =>
{
string message = e.Message.Content;
if (message.StartsWith("&"))
{
await e.Message.RespondAsync(“Hello, ” + e.Author.Username);
}
};
Gdzie e.Author.Username pobiera pseudonim użytkownika.
W ten sposób, kiedy wyślesz jakąkolwiek wiadomość zaczynającą się od &, bot cię przywita.
Na końcu tej funkcji musisz napisać await discord.ConnectAsync(); i czekaj na Task.Delay(-1);
Umożliwi to wykonywanie poleceń w tle bez zajmowania głównego wątku.
Teraz musimy zająć się Wargaming API. Tutaj wszystko jest proste - pisz żądania CURL, uzyskaj odpowiedź w postaci ciągu JSON, wyciągnij stamtąd niezbędne dane i wykonuj na nich manipulacje.
Przykład pracy z 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;
}
Uwaga! Zdecydowanie nie zaleca się przechowywania wszystkich tokenów i identyfikatorów aplikacji w postaci zwykłego tekstu! Discord co najmniej blokuje takie tokeny, gdy wchodzą do światowej sieci, a co najwyżej bot zaczyna być wykorzystywany przez atakujących.
Wdróż na VPS - serwer

Gdy skończysz z botem, musi on być hostowany na serwerze, który stale działa 24 godziny na dobę, 7 dni w tygodniu. Wynika to z faktu, że gdy Twoja aplikacja jest uruchomiona, działa również bot. Gdy tylko wyłączysz aplikację, twój bot też zasypia.
Na świecie istnieje wiele serwerów VPS, takich jak Windowsi dalej Linuxjednak w większości przypadków, Linux Znacznie taniej jest umieścić.
Na serwerze Discord polecono mi vscale.io i od razu stworzyłem na nim serwer wirtualny. Ubuntu i wgrałem bota. Nie będę opisywał, jak działa ta strona, ale przejdę od razu do konfiguracji bota.
Przede wszystkim należy zainstalować niezbędne oprogramowanie, które będzie obsługiwało naszego bota napisane w .NET Core. .
Następnie musisz przesłać bota do usługi Git, takiej jak GitHub i tym podobne, i sklonować go na serwer VPS lub pobrać bota w inny sposób. Pamiętaj, że będziesz mieć tylko konsolę, bez GUI. W ogóle.
Po pobraniu bota musisz go uruchomić. Do tego potrzebujesz:
- Przywróć wszystkie zależności: przywracanie dotnet
- Kompilacja aplikacji: dotnet build name_project.sln -c Release
- Przejdź do wbudowanej biblioteki DLL;
- dotnet nazwa_pliku.dll
Gratulacje! Twój bot działa. Jednak bot niestety okupuje konsolę i nie jest łatwo wyjść z serwera VPS. Ponadto w przypadku restartu serwera będziesz musiał uruchomić bota w nowy sposób. Wyjść z sytuacji jest kilka. Wszystkie dotyczą uruchamiania przy starcie serwera:
- Dodaj skrypt uruchamiania do /etc/init.d
- Utwórz usługę, która będzie działać podczas uruchamiania.
Nie widzę sensu szczegółowo się nad nimi rozwodzić, wszystko jest wystarczająco szczegółowo opisane w Internecie.
odkrycia
Cieszę się, że podjąłem się tego zadania. To było moje pierwsze doświadczenie w tworzeniu bota i cieszę się, że zdobyłem nową wiedzę z zakresu C# i pracy z Linux.
Link do serwera Discord.
Dziękuję za uwagę!
Źródło: www.habr.com
