TweetPick은 X(구 트위터) 게시물 참여자 중에서 무작위로 당첨자를 뽑는 프로그램입니다.
다음 참여 유형을 지원합니다.
- 리트윗
- 답글
- 인용 트윗
인증된 세션으로 참여자를 수집한 뒤, 지정한 필터 조건에 따라 로컬에서 당첨자를 추첨합니다.
- 공식 지원: Windows 10/11 (x64)
- macOS 릴리스 산출물 제공:
macos-14러너 기준 단일 아키텍처 - 배포 형식:
- Windows: portable
.exe - macOS:
.zip(압축 해제 후.app실행)
- Windows: portable
- Linux는 공식 지원하지 않습니다.
- 한 화면에서 설정, 실행, 결과 확인까지 가능
- 참여 소스 선택
- 리트윗
- 답글
- 인용 트윗
- 필터 옵션
- 소스별 교집합/합집합
- 최소 팔로워 수
- 키워드 포함
- 결과 출력
- 당첨자 목록 텍스트 복사
- 결과 이미지 저장
- 진행 로그 및 소스별 통계 표시
- 최신 릴리스를 다운로드합니다.
- OS에 맞는 릴리스 자산을 실행합니다.
- Windows:
TweetPick.exe - macOS:
TweetPick.zip압축 해제 후TweetPick.app
- Windows:
- X에 로그인된 상태에서
auth_token,ct0값을 준비합니다. - 트윗 URL과 추첨 조건을 입력합니다.
- 추첨을 실행한 뒤 결과를 복사하거나 저장합니다.
- 릴리스는 GitHub Actions로 빌드되며 GitHub Releases에 배포됩니다.
- 인증 정보(
auth_token,ct0, bearer token)는 로컬 입력값 또는 로컬 환경 변수로만 사용됩니다. - 추첨 자체는 로컬에서 수행되지만, 참여자 수집을 위한 요청은 X 엔드포인트로 전송됩니다.
- 쿠키 값과
.env파일은 절대 다른 사람과 공유하지 마세요. - 릴리스 자산에는 무결성 확인용
.sha256파일이 함께 포함됩니다. - macOS 빌드는 서명/notarization 미적용 상태이므로 첫 실행 시 Gatekeeper 경고가 나타날 수 있으며, 사용자 수동 허용이 필요할 수 있습니다.
SHA256 확인 예시:
certutil -hashfile "TweetPick.exe" SHA256shasum -a 256 "TweetPick.zip"요구 사항:
- Node.js
>=22.13 <23 - npm
- Windows 10/11 (x64) 또는 macOS
환경 변수(.env):
- 필수
TWITTER_BEARERTWITTER_RETWEETERS_OP_IDTWITTER_FAVORITERS_OP_IDTWITTER_SEARCH_TIMELINE_OP_IDTWITTER_TWEET_DETAIL_OP_ID
- 선택
TWITTER_RETWEETERS_FEATURES_JSONTWITTER_TWEET_DETAIL_FIELD_TOGGLES_JSON
명령어:
npm install
npm run verify
npm run buildWindows 패키지:
npm run dist:winmacOS 패키지:
npm run dist:macnpm run dev: 빌드 후 앱 실행npm run clean:dist,release,coverage정리npm run build: 타입 체크 + 컴파일 + 렌더러 자산 복사npm run dist:win: Windows portable 패키지 빌드npm run dist:mac: macOS.zip(내부.app) 패키지 빌드npm run dist:npm run dist:winalias (하위 호환)npm run format: Prettier 포맷 적용npm run lint: 정적 분석npm run typecheck: TypeScript 검사npm run test: Vitest watch 모드npm run test:run: 테스트 1회 실행npm run test:coverage: 커버리지 및 임계치 검사npm run verify: lint + typecheck + sync 검사 + coverage 게이트
GitHub Actions 워크플로:
-
Actions env/secrets 필수 키:
TWITTER_BEARERTWITTER_RETWEETERS_OP_IDTWITTER_FAVORITERS_OP_IDTWITTER_SEARCH_TIMELINE_OP_IDTWITTER_TWEET_DETAIL_OP_ID
-
CI (Verify + Build)(.github/workflows/ci.yml)- 트리거:
main브랜치 push,main대상 PR,v*태그 push - 실행 순서:
npm ci->npm run verify->npm run build
- 트리거:
-
Build & Release (Windows + macOS)(.github/workflows/release.yml)- 트리거:
v*태그 push, 수동 실행 - 실행 순서:
- Windows:
npm ci->npm run verify->npm run dist:win - macOS:
npm ci->npm run verify->npm run dist:mac
- Windows:
- 결과물:
release/*.exe,release/*.zip,release/*.sha256업로드 및 GitHub Release 게시
- 트리거:
- 배포 대상: Windows portable executable, macOS zip (
.app포함) - 빌드 리소스 디렉터리:
build/ - Windows 아이콘:
build/icon.ico scripts/run-dist.mjs는 Windows(npm run dist:win) 패키징 전에 아이콘 파일 존재 여부를 확인합니다.- macOS 패키징은
npm run dist:mac에서electron-builder --mac zip으로 생성합니다. - 소스맵(
*.map)은 패키지 결과물에 포함되지 않습니다.
- 앱 라이선스: Apache-2.0 (LICENSE, NOTICE 참고)