mirror of
https://github.com/RPCS3/discord-bot.git
synced 2025-02-04 09:16:06 +00:00
commit
5e0d651dba
24
CompatBot/Commands/Cyberpunk2077.cs
Normal file
24
CompatBot/Commands/Cyberpunk2077.cs
Normal file
@ -0,0 +1,24 @@
|
||||
using System.Threading.Tasks;
|
||||
using DSharpPlus.CommandsNext;
|
||||
using DSharpPlus.CommandsNext.Attributes;
|
||||
|
||||
namespace CompatBot.Commands
|
||||
{
|
||||
[Group("cp77"), Aliases("cp2077", "cyberpunk2077", "cyberpunk"), Hidden]
|
||||
[Description("Provides information about the Cyberpunk 2077 release event")]
|
||||
internal sealed class Cyberpunk2077: EventsBaseCommand
|
||||
{
|
||||
[GroupCommand]
|
||||
public Task Cp77Countdown(CommandContext ctx)
|
||||
=> NearestEvent(ctx, "Cyberpunk 2077");
|
||||
|
||||
[Command("2077"), Hidden]
|
||||
public Task Cp77(CommandContext ctx, [RemainingText] string junk)
|
||||
=> NearestEvent(ctx, "Cyberpunk 2077");
|
||||
|
||||
[Command("countdown")]
|
||||
[Description("Provides countdown for Cyberpunk 2077 release event")]
|
||||
public Task Countdown(CommandContext ctx)
|
||||
=> Cp77Countdown(ctx);
|
||||
}
|
||||
}
|
@ -25,7 +25,7 @@ namespace CompatBot.Commands
|
||||
|
||||
protected async Task NearestEvent(CommandContext ctx, string eventName = null)
|
||||
{
|
||||
eventName = eventName.Trim(40);
|
||||
var originalEventName = eventName = eventName.Trim(40);
|
||||
var current = DateTime.UtcNow;
|
||||
var currentTicks = current.Ticks;
|
||||
using (var db = new BotDb())
|
||||
@ -61,6 +61,22 @@ namespace CompatBot.Commands
|
||||
var firstNamedEvent = await db.EventSchedule.OrderBy(e => e.Start).FirstOrDefaultAsync(e => e.Year >= current.Year && e.EventName == eventName).ConfigureAwait(false);
|
||||
if (firstNamedEvent == null)
|
||||
{
|
||||
var scheduleEntry = await FuzzyMatchEntryName(db, originalEventName).ConfigureAwait(false);
|
||||
var events = await db.EventSchedule.OrderBy(e => e.Start).Where(e => e.End > current.Ticks && e.Name == scheduleEntry).ToListAsync().ConfigureAwait(false);
|
||||
if (events.Any())
|
||||
{
|
||||
var eventListMsg = new StringBuilder();
|
||||
foreach (var eventEntry in events)
|
||||
{
|
||||
if (eventEntry.Start < current.Ticks)
|
||||
eventListMsg.AppendLine($"{eventEntry.Name} ends in {FormatCountdown(eventEntry.End.AsUtc() - current)}");
|
||||
else
|
||||
eventListMsg.AppendLine($"{eventEntry.Name} starts in {FormatCountdown(eventEntry.Start.AsUtc() - current)}");
|
||||
}
|
||||
await ctx.SendAutosplitMessageAsync(eventListMsg.ToString(), blockStart: "", blockEnd: "").ConfigureAwait(false);
|
||||
return;
|
||||
}
|
||||
|
||||
var noEventMsg = $"No information about the upcoming {eventName.Sanitize(replaceBackTicks: true)} at the moment";
|
||||
if (eventName.Length > 10)
|
||||
noEventMsg = "No information about such event at the moment";
|
||||
@ -463,6 +479,14 @@ namespace CompatBot.Commands
|
||||
return score > 0.8 ? name : eventName;
|
||||
}
|
||||
|
||||
private static async Task<string> FuzzyMatchEntryName(BotDb db, string eventName)
|
||||
{
|
||||
var now = DateTime.UtcNow.Ticks;
|
||||
var knownNames = await db.EventSchedule.Where(e => e.End > now).Select(e => e.Name).ToListAsync().ConfigureAwait(false);
|
||||
var (score, name) = knownNames.Select(n => (score: eventName.GetFuzzyCoefficientCached(n), name: n)).OrderByDescending(t => t.score).FirstOrDefault();
|
||||
return score > 0.5 ? name : eventName;
|
||||
}
|
||||
|
||||
private static string FixTimeString(string dateTime)
|
||||
{
|
||||
return dateTime.ToUpperInvariant()
|
||||
|
@ -113,6 +113,7 @@ namespace CompatBot
|
||||
commands.RegisterCommands<Pr>();
|
||||
commands.RegisterCommands<Events>();
|
||||
commands.RegisterCommands<E3>();
|
||||
commands.RegisterCommands<Cyberpunk2077>();
|
||||
commands.RegisterCommands<BotStats>();
|
||||
|
||||
commands.CommandErrored += UnknownCommandHandler.OnError;
|
||||
|
@ -23,6 +23,9 @@ namespace CompatBot.Utils
|
||||
TimeSpan? timeout,
|
||||
params DiscordEmoji[] reactions)
|
||||
{
|
||||
if (message == null)
|
||||
throw new ArgumentNullException(nameof(message));
|
||||
|
||||
if (reactions.Length == 0)
|
||||
throw new ArgumentException("At least one reaction must be specified", nameof(reactions));
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user