/
NLObP
/
AAEmu
Обзор
Документация
Войти
/
NLObP
/
AAEmu
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
develop
AAEmu.Game/Services/DiscordBotService.cs
63 строки
2 KB
ZeromusXYZ
[Game] Replace some List results to Enumerable (#1151)
24 янв 2025, 20:31
Не верифицирован
24 янв 2025, 20:31
cf7012c
Код
Авторство
О чём код?
using System; using System.Linq; using System.Threading; using System.Threading.Tasks; using AAEmu.Game.Core.Managers.World; using AAEmu.Game.Models; using Discord; using Discord.WebSocket; using Microsoft.Extensions.Hosting; namespace AAEmu.Game.Services; public class DiscordBotService : IHostedService { private DiscordSocketClient _client; private int playerCount = 0; public async Task StartAsync(CancellationToken cancellationToken) { var token = AppConfiguration.Instance.DiscordToken; if (string.IsNullOrEmpty(token)) return; _client = new DiscordSocketClient(); await _client.LoginAsync(TokenType.Bot, token); await _client.StartAsync(); _client.MessageReceived += MessageReceived; await UpdatePlayerCountPeriodically(TimeSpan.FromSeconds(5), CancellationToken.None); await Task.Delay(-1, cancellationToken); } public async Task StopAsync(CancellationToken cancellationToken) { if (_client == null) return; await _client.StopAsync(); } private async Task UpdatePlayerCountPeriodically(TimeSpan interval, CancellationToken cancellationToken) { while (true) { playerCount = WorldManager.Instance.GetAllCharacters().Count(); await _client.SetActivityAsync(new Discord.Game("with " + playerCount + " other players")); await Task.Delay(interval, cancellationToken); } } public static async Task MessageReceived(SocketMessage message) { if (message.Content == "/online") { var playerNames = WorldManager.Instance.GetAllCharacters().Select(c => c.Name).ToList(); if (playerNames.Count > 0) await message.Channel.SendMessageAsync("Players online: " + string.Join(", ", playerNames)); else await message.Channel.SendMessageAsync("No players online."); } } }