Adicionar modos de preenchimento e corte ao comando sticker #10
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Descrição
Este PR implementa dois novos modos de escala para o comando
/sticker, permitindo aos usuários escolher como suas imagens e vídeos devem ser redimensionados ao criar figurinhas.Funcionalidades Adicionadas
Modo de Preenchimento (Fill)
Argumentos:
/sticker f,/sticker full,/sticker p,/sticker preencherForça a imagem/vídeo a ser esticada ou distorcida para preencher exatamente 512x512 pixels, ignorando a proporção original. Este também é o comportamento padrão quando nenhum argumento é fornecido.
Modo de Corte (Crop)
Argumentos:
/sticker c,/sticker corta,/sticker cropAumenta o zoom da imagem/vídeo mantendo a proporção até que preencha completamente o espaço de 512x512 pixels, cortando as bordas se necessário. Isso garante que a figurinha fique completamente preenchida sem distorção, mas pode cortar partes da imagem original.
Implementação Técnica
Filtros FFmpeg utilizados:
scale=512:512(distorce para ajustar)scale=512:512:force_original_aspect_ratio=increase,crop=512:512(zoom e corte)Validação de entrada: O argumento do usuário (
data.args[0]) é validado contra strings específicas e nunca interpolado diretamente nos comandos shell, prevenindo injeção de comandos.Compatibilidade: Funciona tanto para imagens quanto para vídeos/GIFs, mantendo todas as funcionalidades existentes (limite de 10 segundos para vídeos, conversão para WebP, etc.)
Mudanças no Código
src/commands/member/sticker.tsSegurança
✅ A análise CodeQL foi executada. As 2 alertas encontradas são pré-existentes e relacionadas ao uso de
inputPathnas chamadasexec(), não introduzidas por este PR.✅ As mudanças implementadas são seguras: a entrada do usuário é validada contra strings específicas e apenas filtros FFmpeg predefinidos são utilizados.
Warning
Firewall rules blocked me from connecting to one or more addresses (expand for details)
I tried to connect to the following addresses, but was blocked by firewall rules:
checkpoint.prisma.io/usr/local/bin/node /home/REDACTED/work/Quirk/Quirk/node_modules/prisma/build/child {"product":"prisma","version":"5.22.0","cli_install_type":"local","information":"","local_timestamp":"2025-10-24T19:11:22Z","project_hash":"c8208cdd","cli_path":"/home/REDACTED/work/Quirk/Quirk/node_modules/.bin/prisma","cli_path_hash":"cffe18d0","endpoint":"REDACTED","disable":false,"arch":"x64","os":"linux","node_version":"v20.19.5","ci":true,"ci_name":"GitHub Actions","command":"generate","schema_providers":["postgresql"],"schema_preview_features":[],"schema_generators_providers":["prisma-client-js"],"cache_file":"/home/REDACTED/.cache/checkpoint-nodejs/prisma-cffe18d0","cache_duration":43200000,"remind_duration":172800000,"force":false,"timeout":5000,"unref":true,"child_path":"/home/REDACTED/work/Quirk/Quirk/node_modules/prisma/build/child","client_event_id":"","previous_client_event_id":"","check_if_update_available":true}(dns block)If you need me to access, download, or install something from one of these locations, you can either:
Original prompt
💬 We'd love your input! Share your thoughts on Copilot coding agent in our 2 minute survey.