示例#1
0
        public async Task AddResponse(DiscordRequest request, Contexts contexts)
        {
            var messageService = _messagesServiceFactory.Create(contexts);
            var onEvent        = request.Arguments.FirstOrDefault(x => x.Name?.ToLowerInvariant() == "onevent")?.Value;
            var message        = request.Arguments.FirstOrDefault(x => x.Name?.ToLowerInvariant() == "message")?.Value;

            if (onEvent == null || message == null)
            {
                await messageService.SendResponse(x => x.NotEnoughArguments(), contexts);

                return;
            }
            var response = await _responsesService.GetResponseByOnEvent(onEvent);

            if (response == null)
            {
                await messageService.SendResponse(x => x.ResponseNotFound(contexts, onEvent), contexts);

                return;
            }
            var responseForThisServer = await _responsesService.GetResponseByOnEvent(onEvent, contexts.Server.Id);

            if (responseForThisServer != null)
            {
                await messageService.SendResponse(x => x.ResponseAlreadyExists(contexts, onEvent), contexts);

                return;
            }
            await _responsesService.AddResponse(onEvent, message, contexts.Server.Id);

            await messageService.SendResponse(x => x.ResponseHasBeenAdded(contexts, onEvent), contexts);
        }
示例#2
0
        public void GetAvatar(DiscordRequest request, Contexts contexts)
        {
            var messageService = _messagesServiceFactory.Create(contexts);

            if (string.IsNullOrEmpty(contexts.User.AvatarUrl))
            {
                messageService.SendResponse(x => x.UserDoesntHaveAvatar(contexts.User), contexts);
                return;
            }

            messageService.SendMessage(contexts.User.AvatarUrl);
        }
示例#3
0
        public async Task GetStatisticsPerPeriod(DiscordRequest request, Contexts contexts)
        {
            var period = _reportsService.SelectPeriod(request.Arguments.FirstOrDefault()?.Value);

            if (implementedBySplitter.Contains(period))
            {
                var query  = new GetMessagesStatisticsQuery(period);
                var result = await this._queryBus.ExecuteAsync(query);

                var periodStats = result.PeriodStatistics.Where(x => x.Count > 0); // todo
                return;
            }

            var getMessages = new GetMessagesQuery(contexts.Server.Id);
            var messages    = this._queryBus.Execute(getMessages).Messages.ToList();
            var report      = _reportsService.CreateReport(messages, period);

            Log.Information("Generated statistics for time range {start} {end}", report.TimeRange.Start, report.TimeRange.End);
#if DEBUG
            PrintDebugStats(report);
#endif
            var path            = _chartsService.GetImageStatisticsPerPeriod(report);
            var messagesService = _messagesServiceFactory.Create(contexts);
            await messagesService.SendFile(path);
        }
        public async Task ReadUserMessages(DiscordRequest request, Contexts contexts)
        {
            var mention      = request.GetMention();
            var selectedUser = _usersService.GetUserByMention(contexts.Server, mention);

            if (selectedUser == null)
            {
                throw new UserNotFoundException(mention);
            }

            var timeRange = request.GetPastTimeRange(defaultTime: TimeSpan.FromHours(1));
            var query     = new GetMessagesQuery(contexts.Server.Id, selectedUser.Id)
            {
                SentDate = timeRange
            };
            var messages = _queryBus.Execute(query).Messages
                           .OrderBy(x => x.SentAt)
                           .ToList();

            var messagesService  = _messagesServiceFactory.Create(contexts);
            var hasForceArgument = request.HasArgument("force") || request.HasArgument("f");

            if (messages.Count > 200 && !hasForceArgument)
            {
                await messagesService.SendResponse(x => x.NumberOfMessagesIsHuge(messages.Count), contexts);

                return;
            }

            if (!messages.Any())
            {
                await messagesService.SendResponse(x => x.UserDidntWriteAnyMessageInThisTime(selectedUser), contexts);

                return;
            }

            var header       = $"Messages from user {selectedUser} starting at {timeRange.Start}";
            var lines        = messages.Select(x => $"{x.SentAt:yyyy-MM-dd HH:mm:ss} {x.Author.Name}: {x.Content.Replace("```", "")}");
            var linesBuilder = new StringBuilder().PrintManyLines(lines.ToArray(), contentStyleBox: true);

            await _directMessagesService.TrySendMessage(contexts.User.Id, header);

            await _directMessagesService.TrySendMessage(contexts.User.Id, linesBuilder.ToString(), MessageType.BlockFormatted);

            await messagesService.SendResponse(x => x.SentByDmMessagesOfAskedUser(messages.Count, selectedUser), contexts);
        }
示例#5
0
        public async Task MuteUserOrOverwrite(Contexts contexts, MuteEvent muteEvent, UserContext userToMute)
        {
            var possiblePreviousUserMuteEvent       = GetNotUnmutedUserMuteEvent(contexts.Server, userToMute);
            var shouldJustMuteAgainTheSameMuteEvent = possiblePreviousUserMuteEvent?.Id == muteEvent.Id;

            if (possiblePreviousUserMuteEvent != null && !shouldJustMuteAgainTheSameMuteEvent)
            {
                var markAsUnmuted = new MarkMuteEventAsUnmutedCommand(possiblePreviousUserMuteEvent.Id);
                await _commandBus.ExecuteAsync(markAsUnmuted);
            }

            await MuteUser(userToMute, contexts.Server);

            await _commandBus.ExecuteAsync(new AddMuteEventCommand(muteEvent));

            var messagesService = _messagesServiceFactory.Create(contexts);
            await messagesService.SendResponse(x => x.MutedUser(userToMute, muteEvent.TimeRange.End), contexts);
        }
示例#6
0
        public Task WelcomeUser(Contexts contexts)
        {
            if (contexts.Channel == null)
            {
                return(Task.CompletedTask);
            }

            var messagesService = _messagesServiceFactory.Create(contexts);

            messagesService.SendResponse(x => x.NewUserArrived(contexts), contexts);
            return(Task.CompletedTask);
        }
示例#7
0
        public void LogException(Exception e, Contexts contexts)
        {
            var messagesService = _messagesServiceFactory.Create(contexts);

            var mostInnerException = e.InnerException ?? e;

            while (mostInnerException.InnerException != null)
            {
                mostInnerException = mostInnerException.InnerException;
            }

            Log.Error(mostInnerException.ToString());

            switch (mostInnerException)
            {
            case NotAdminPermissionsException _:
                messagesService.SendResponse(x => x.UserIsNotAdmin(), contexts);
                break;

            case RoleNotFoundException roleExc:
                messagesService.SendResponse(x => x.RoleNotFound(roleExc.RoleName), contexts);
                break;

            case UserDidntMentionAnyUser _:
                messagesService.SendResponse(x => x.UserDidntMentionAnyUser(), contexts);
                break;

            case UserNotFoundException notFoundExc:
                messagesService.SendResponse(x => x.UserNotFound(notFoundExc.Mention), contexts);
                break;

            case TimeCannotBeNegativeException _:
                messagesService.SendResponse(x => x.TimeCannotBeNegative(), contexts);
                break;

            case TimeIsTooBigException _:
                messagesService.SendResponse(x => x.TimeIsTooBig(), contexts);
                break;

            case NotEnoughArgumentsException _:
                messagesService.SendResponse(x => x.NotEnoughArguments(), contexts);
                break;

            case TimeNotSpecifiedException _:
                messagesService.SendResponse(x => x.TimeNotSpecified(), contexts);
                break;

            default:
                messagesService.SendMessage("Wystąpił nieznany wyjątek");
                break;
            }
        }
示例#8
0
        public void PrintHelp(DiscordRequest request, Contexts contexts)
        {
            var messagesService = _messagesServiceFactory.Create(contexts);

            if (request.HasArgument(null, "json"))
            {
                var helpMessage = this._helpMessageGenerator.GenerateJsonHelp(contexts);
                messagesService.SendMessage(helpMessage, MessageType.Json);
            }
            else
            {
                var helpMessage = this._helpMessageGenerator.GenerateHelp(contexts);
                messagesService.SendResponse(x => x.PrintHelp(helpMessage), contexts);
            }
        }
示例#9
0
        public async Task UnmuteUserAsync(DiscordRequest request, Contexts contexts)
        {
            var requestParser = new MuteRequestParser(request, _usersService, contexts);
            var userToUnmute  = requestParser.GetUser();

            var wasMuted = await _muteService.UnmuteIfNeeded(contexts.Server, userToUnmute);

            if (wasMuted)
            {
                var messagesService = _messagesServiceFactory.Create(contexts);
                await messagesService.SendResponse(x => x.UnmutedUser(userToUnmute), contexts);

                await _directMessagesService.TrySendMessage(userToUnmute.Id, x => x.UnmutedUserForUser(userToUnmute, contexts.Server), contexts);
            }
        }
示例#10
0
 public async Task PrintMarchew(DiscordRequest request, Contexts contexts)
 {
     const string text            = "Moim zdaniem to nie ma tak, że coś jest programowaniem, albo nie jest programowaniem. Gdybym miał powiedzieć, co cenię w programowaniu najbardziej, powiedziałbym, że ludzi. Ekhm… Ludzi, którzy podali mi pomocną dokumentacje, kiedy sobie nie radziłem, kiedy byłem sam. I co ciekawe, to właśnie przypadkowe spotkania wpływają na nasze życie. Chodzi o to, że kiedy wyznaje się pewne wartości, nawet pozornie uniwersalne, bywa, że nie znajduje się zrozumienia, które by tak rzec, które pomaga się nam rozwijać. Ja miałem szczęście, by tak rzec, ponieważ je znalazłem. I dziękuję życiu. Dziękuję mu, życie to śpiew, życie to taniec, życie to miłość. Wielu ludzi pyta mnie o to samo, ale jak ty to robisz? Skąd czerpiesz tę radość? A ja odpowiadam, że to proste, to umiłowanie życia, to właśnie ono sprawia, że dzisiaj na przykład programuje nawigacje, a jutro… kto wie, dlaczego by nie, oddam się pracy społecznej i będę ot, choćby uczyć… znaczy… juniorów.";
     var          messagesService = _messagesServiceFactory.Create(contexts);
     await messagesService.SendMessage(text);
 }