Skip to content

parkrye/PythonProject-SlackGIFMaker

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

11 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

SlackGIFMaker

Slack 봇으로 이미지/GIF/영상을 받아 Slack 커스텀 이모티콘 규격(128x128 px, 128 KB 이하) 에 맞게 변환해 답신해 주는 도구.

동작

  1. 봇과의 DM에 이미지/영상/GIF 파일을 첨부해 전송 (별도 명령어 불필요)
  2. 봇이 파일을 받아 변환 (짧은 변에 맞춰 중앙 크롭 → 128x128 → ≤128KB)
  3. 변환된 파일을 같은 스레드로 답신

지원 입력 확장자: jpg, jpeg, png, gif, mp4, mov, webm, avi, mkv

Slack 워크스페이스에 이모티콘으로 등록하는 단계는 수동입니다. 봇이 답신한 파일을 다운로드해 슬랙 이모티콘 추가 페이지에서 등록하세요.

요구사항

  • Python 3.10 이상
  • ffmpeg (시스템에 설치되어 PATH에 등록되어 있어야 함)
  • Slack 워크스페이스 + 등록한 Slack App

Slack App 설정

  1. https://api.slack.com/apps 에서 Create New App → From scratch 선택. 이름과 워크스페이스 지정.
  2. Socket Mode 활성화
    • 좌측 메뉴 Socket Mode → Enable Socket Mode
    • App-Level Token 생성 (scope: connections:write) → 토큰(xapp-...)을 SLACK_APP_TOKEN으로 사용
  3. OAuth & PermissionsBot Token Scopes 에 다음 추가
    • chat:write — 변환 결과/안내 메시지 전송
    • files:read — 사용자가 보낸 파일 다운로드
    • files:write — 변환된 파일 업로드
    • im:history — DM 메시지 수신
  4. Event Subscriptions 활성화
    • Subscribe to bot eventsmessage.im 추가
  5. 좌측 Install App → 워크스페이스에 설치 → 발급된 Bot User OAuth Token (xoxb-...)을 SLACK_BOT_TOKEN으로 사용
  6. 슬랙 클라이언트에서 봇과 DM 시작 (검색에서 앱 이름으로 찾기)

설치

# 1. 가상환경 생성 및 활성화
python -m venv .venv
# Windows (Git Bash 기준)
. .venv/Scripts/activate
# macOS / Linux
# source .venv/bin/activate

# 2. 의존성 설치
pip install -r requirements.txt

# 3. 토큰 설정
cp .env.example .env
# .env 파일을 편집해 SLACK_BOT_TOKEN, SLACK_APP_TOKEN 입력

실행

python app.py

SlackGIFMaker 봇 시작 로그가 보이면 정상. 봇과의 DM에 이미지/GIF/영상 파일을 첨부해 보내면 변환됩니다.

동작 방식 요약

  • 이미지(jpg/png): Pillow로 중앙 크롭 + 리사이즈 → 무손실 PNG → 색상 양자화 → JPG fallback 단계로 ≤128KB 보장
  • GIF: 모든 프레임을 동일하게 처리 + 색상 수(256→16) / 프레임 skip(1→5) 단계적 축소
  • 영상: ffmpeg로 중앙 크롭 + 128x128 + 15fps GIF 생성 → 위 GIF 파이프라인에 위임. 영상 길이는 보존

프로젝트 구조

.
├── app.py              # Bolt 앱 + Socket Mode 진입점
├── config.py           # 이모티콘 규격, 트리거 키워드, 지원 확장자
├── handlers/
│   └── generate.py     # /generate 트리거 + 다운로드 + 응답 업로드
└── processors/
    ├── __init__.py     # 확장자 → processor 라우팅
    ├── image.py        # jpg/png 처리
    ├── gif.py          # 애니메이션 GIF 처리
    └── video.py        # mp4 등 → GIF 변환

한계

  • 매우 길거나 색상이 풍부한 영상은 마지막 fallback(16색 + skip 5)에서도 128KB를 초과할 수 있음. 이 경우 명확한 에러 메시지를 응답
  • DM 전용. 채널/멘션 시나리오는 미지원
  • 슬랙 이모티콘 자동 등록은 미지원 (Slack 공식 API 제한)

About

No description or website provided.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors