feat: add !who command

This commit is contained in:
Oliver Booth 2023-08-22 15:11:19 +01:00
parent d956c94aa0
commit 1937b55fef
Signed by: oliverbooth
GPG Key ID: B89D139977693FED
1 changed files with 31 additions and 2 deletions

View File

@ -1,11 +1,13 @@
using System.Reactive.Linq; using System.Reactive.Linq;
using System.Reactive.Subjects; using System.Reactive.Subjects;
using System.Text;
using System.Text.RegularExpressions; using System.Text.RegularExpressions;
using Discord; using Discord;
using Discord.WebSocket; using Discord.WebSocket;
using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
using VpSharp;
using VpSharp.Entities; using VpSharp.Entities;
namespace VpBridge.Services; namespace VpBridge.Services;
@ -19,6 +21,7 @@ internal sealed partial class DiscordService : BackgroundService, IDiscordServic
private readonly ILogger<DiscordService> _logger; private readonly ILogger<DiscordService> _logger;
private readonly IConfiguration _configuration; private readonly IConfiguration _configuration;
private readonly DiscordSocketClient _discordClient; private readonly DiscordSocketClient _discordClient;
private readonly VirtualParadiseClient _virtualParadiseClient;
private readonly Subject<IUserMessage> _messageReceived = new(); private readonly Subject<IUserMessage> _messageReceived = new();
/// <summary> /// <summary>
@ -27,13 +30,16 @@ internal sealed partial class DiscordService : BackgroundService, IDiscordServic
/// <param name="logger">The logger.</param> /// <param name="logger">The logger.</param>
/// <param name="configuration">The configuration.</param> /// <param name="configuration">The configuration.</param>
/// <param name="discordClient">The Discord client.</param> /// <param name="discordClient">The Discord client.</param>
/// <param name="virtualParadiseClient">The Virtual Paradise client.</param>
public DiscordService(ILogger<DiscordService> logger, public DiscordService(ILogger<DiscordService> logger,
IConfiguration configuration, IConfiguration configuration,
DiscordSocketClient discordClient) DiscordSocketClient discordClient,
VirtualParadiseClient virtualParadiseClient)
{ {
_logger = logger; _logger = logger;
_configuration = configuration; _configuration = configuration;
_discordClient = discordClient; _discordClient = discordClient;
_virtualParadiseClient = virtualParadiseClient;
} }
/// <inheritdoc /> /// <inheritdoc />
@ -51,6 +57,29 @@ internal sealed partial class DiscordService : BackgroundService, IDiscordServic
if (message.Channel.Id != _configuration.GetSection("Discord:ChannelId").Get<ulong>()) if (message.Channel.Id != _configuration.GetSection("Discord:ChannelId").Get<ulong>())
return Task.CompletedTask; return Task.CompletedTask;
if (message.Content.Equals("!who"))
{
VirtualParadiseAvatar[] avatars = _virtualParadiseClient.Avatars.Where(a => !a.IsBot).ToArray();
int count = avatars.Length;
if (count > 0)
{
var builder = new StringBuilder();
builder.AppendLine("**Users In World 🌎**");
foreach (VirtualParadiseAvatar avatar in _virtualParadiseClient.Avatars)
{
if (avatar.IsBot || avatar == _virtualParadiseClient.CurrentAvatar)
continue;
builder.AppendLine($"• {avatar.Name}");
}
return message.ReplyAsync(builder.ToString());
}
return message.ReplyAsync("**No Users In World 🚫**");
}
_messageReceived.OnNext(message); _messageReceived.OnNext(message);
return Task.CompletedTask; return Task.CompletedTask;
}; };