예제 #1
0
    public Task <CreateEventResult> CreateEvent(CreateEventCriteria criteria)
    {
        _createValidator.ValidateAndThrow(criteria);

        Event newEvent;

        try
        {
            newEvent = EventParsingEngine.Parse(criteria.Query, new TimeSpan(-5, 0, 0));
        }
        catch (Exception ex)
        {
            _logger.LogWarning(ex, "Error in creating event with query '{Query}'.", criteria.Query);
            return(Task.FromResult(new CreateEventResult()
            {
                IsSuccessful = false
            }));
        }

        return(Task.FromResult(new CreateEventResult()
        {
            Event = newEvent,
            IsSuccessful = true
        }));
    }
예제 #2
0
    public async Task Create([Remainder] string query = null !)
    {
        using var setTyping = Context.Channel.EnterTypingState();

        var discordOptions = _appOptions.CurrentValue.Discord;
        var guildOptions   = await _guildOptionsManager.GetGuildOptions(new GuildOptionsCriteria()
        {
            GuildId = Context.Guild.Id
        });

        var prefix       = guildOptions?.Prefix ?? discordOptions.Prefix;
        var signupEmotes = guildOptions?.SignupEmotes ?? discordOptions.SignupEmotes;

        if (query is null)
        {
            await ReplyAsync($"Try `{prefix}create event <Title> on <Day> at <Time>`, (without `<>`).");

            return;
        }

        var criteria = new CreateEventCriteria()
        {
            GuildId       = Context.Guild.Id,
            Query         = query,
            VoiceRegionId = Context.Guild.VoiceRegionId
        };

        var result = await _eventsManager.CreateEvent(criteria);

        if (result?.Event is null || !result.IsSuccessful)
        {
            await ReplyAsync($"I'm sorry, I could not create an event for you. Try `{prefix}create event <Title> on <Day> at <Time>`.");

            return;
        }

        var ev       = result.Event;
        var eventMsg = await ReplyAsync(message : null, isTTS : false, embed : ev.ToEmbed());

        var emotes = signupEmotes.Select(x => Emote.TryParse(x, out var em) ? (IEmote)em : new Emoji(x)).ToList();

        emotes.Add(new Emoji("🪑")); // Bench
        emotes.Add(new Emoji("🕑")); // Late
        emotes.Add(new Emoji("❌")); // Cancel

        _ = eventMsg.AddReactionsAsync(emotes.ToArray());

        ev.CreationDateTime = eventMsg.Timestamp;
        ev.Id = eventMsg.Id;

        var saveCriteria = new SaveEventCriteria()
        {
            Event = ev
        };

        _ = _eventsManager.SaveEvent(saveCriteria);
    }