Exemplo n.º 1
0
    public async Task <Result> ExitClickedAsync()
    {
        var leaseData = await _dataService.LeaseDataAsync(_context.Message.Value.ID, this.CancellationToken);

        if (!leaseData.IsSuccess)
        {
            return((Result)leaseData);
        }

        await using var lease = leaseData.Entity;

        lease.Delete();

        if (lease.Data.WasCreatedWithInteraction)
        {
            return(await _interactionAPI.DeleteOriginalInteractionResponseAsync
                   (
                       _context.ApplicationID,
                       _context.Token,
                       this.CancellationToken
                   ));
        }

        var message = _context.Message.Value;

        return(await _channelAPI.DeleteMessageAsync(message.ChannelID, message.ID, ct : this.CancellationToken));
    }
Exemplo n.º 2
0
        private async Task TryCheckMessageAsync(IPartialMessage message, CancellationToken ct = default)
        {
            var channelId = message.ChannelID.Value;

            var isThreadChannel = await _threadSvc.IsThreadChannelAsync(channelId, ct);

            if (!isThreadChannel)
            {
                return;
            }

            if (!message.GuildID.HasValue)
            {
                return;
            }

            if (!message.Author.HasValue)
            {
                return;
            }

            var author    = message.Author.Value;
            var authorId  = author.ID;
            var messageId = message.ID.Value;
            var guildId   = message.GuildID.Value;

            if ((author.IsBot.HasValue && author.IsBot.Value) ||
                (author.IsSystem.HasValue && author.IsSystem.Value))
            {
                return;
            }

            if (!message.Content.HasValue)
            {
                return;
            }

            var isContentBlocked = await IsContentBlockedAsync(message);

            if (!isContentBlocked)
            {
                return;
            }

            if (await _designatedChannelService.ChannelHasDesignationAsync(guildId.Value, channelId.Value, DesignatedChannelType.Unmoderated, default))
            {
                return;
            }

            var roles = message.Member.Value.Roles.Value.Select(a => a.Value).ToList();

            roles.Add(guildId.Value);

            await _remoraAuthService.SetCurrentAuthenticatedUserAsync(guildId, authorId);

            if (await _authService.HasClaimsAsync(authorId.Value, messageId.Value, roles, AuthorizationClaim.BypassMessageContentPatternCheck))
            {
                Log.Debug("Message {MessageId} was skipped because the author {Author} has the {Claim} claim",
                          messageId, authorId, AuthorizationClaim.BypassMessageContentPatternCheck);
                return;
            }
            Log.Debug("Message {MessageId} is going to be deleted", message.ID);

            using var transaction = await _deletedMessageRepository.BeginCreateTransactionAsync(ct);

            var reason = "Unauthorized Message Content";
            await _channelApi.DeleteMessageAsync(channelId, messageId, reason, ct);

            var self = await _userApi.GetCurrentUserAsync(ct);

            await _deletedMessageRepository.CreateAsync(
                new DeletedMessageCreationData()
            {
                GuildId     = guildId.Value,
                ChannelId   = channelId.Value,
                MessageId   = messageId.Value,
                AuthorId    = authorId.Value,
                Content     = message.Content.Value,
                Reason      = reason,
                CreatedById = self.Entity !.ID.Value
            }, ct);