HOME RSS

이몽블

여러 우물을 파서 수영장을 만드는 방법

카테고리 없음

폰 사진, 아직도 카톡으로 옮기세요? 텔레그램에 던지면 컴퓨터 폴더에 저장되게 만드는 법 (클로드 구독 외 0원)

반응형

먼저 결론부터 말씀드리면, 텔레그램에서 내 봇을 하나 만들고, 컴퓨터에 받는 프로그램을 켜 두면 끝이에요.

폰에서 봇에게 사진·링크·메모를 보내면 컴퓨터의 텔레그램자료 \ 날짜 폴더에 알아서 저장돼요. 그다음 클로드에게 "오늘 받은 자료 정리해줘" 한 마디면 읽고 정리까지 해 줘요.

마케터 한 줄 — 제목에 누구나 해 본 귀찮은 일("카톡으로 옮기기")을 먼저 부르고, 바로 뒤에 결과("폴더에 저장")를 붙였어요. 문제를 먼저 불러 주면 "어, 나 얘기네" 하고 눌러요.

이렇게 돼요

폰에서 보낸 사진과 메모가 날짜 폴더에 이렇게 쌓여요

"오늘 받은 자료 정리해줘" 한 마디면 AI 직원이 읽고 주제별로 정리해요

준비물

준비물 설명
텔레그램 앱 (폰) 무료예요. 봇 만들기도 무료예요.
윈도우 컴퓨터 받는 프로그램이 돌아갈 컴퓨터예요. 관리자 권한은 필요 없어요.
컴퓨터용 클로드 받는 프로그램 파일을 대신 만들어 주고, 받은 자료를 정리해 줘요. Pro 이상 요금제가 필요해요. 아직 없다면 LEVEL 4에서 설치해요.

LEVEL 1. 텔레그램에서 BotFather 찾기

텔레그램 맨 위 검색 칸에 BotFather라고 치세요. 봇을 만들어 주는 텔레그램 공식 계정이에요.

① 이름 옆에 파란 체크가 있는 BotFather를 누르세요

가짜 BotFather 조심! 검색하면 비슷한 이름이 여러 개 나와요. 아이디가 정확히 @BotFather이고 파란 체크가 있는 것만 누르세요.

LEVEL 2. 시작 → /newbot

대화방 아래 시작(START)을 누르면 할 수 있는 명령어 목록이 나와요. 맨 위의 /newbot(새 봇 만들기)을 누르세요.

② /newbot 을 누르세요 (화면은 컴퓨터로 연 텔레그램 웹이에요. 폰 앱도 명령어는 똑같아요)

LEVEL 3. 봇 이름 → 봇 아이디 → 봇 비밀번호(토큰)

BotFather가 영어로 두 가지를 물어봐요.

  1. 봇 이름을 물어보면 아무 이름이나 보내세요. 예: 내 자료함
  2. 봇 아이디를 물어보면 영어로 보내세요. 끝이 꼭 bot으로 끝나야 해요. 예: my_photo_box_bot (이미 누가 쓰고 있으면 다른 걸로 다시 보내라고 해요)

③ /newbot → ④ 봇 이름 → ⑤ 봇 아이디 → ⑥ "Done!" 아래 긴 글자가 봇 비밀번호(토큰)예요

⑥ 토큰은 비밀번호예요. 이걸 알면 누구나 내 봇을 조종할 수 있어요. 캡처해서 올리거나 남에게 보내지 마세요. 혹시 새어 나갔다면 BotFather에 /revoke를 보내면 새 토큰으로 바뀌어요.

토큰을 길게 눌러 복사해 두세요. LEVEL 6에서 한 번 붙여 넣어요.

LEVEL 4. 컴퓨터에 폴더 만들고 클로드 열기

바탕화면에 폴더를 하나 만들고 이름을 텔레그램자료받기라고 붙이세요. 폴더를 열고 위쪽 주소창에 cmd라고 치고 엔터, 검은 창이 열리면 claude라고 치고 엔터.

컴퓨터용 클로드가 아직 없다면 검은 창에서 claude 치기 전에 아래 한 줄을 붙여 넣고 엔터 (클로드를 만든 회사 Anthropic의 공식 설치 명령). 설치가 끝나면 검은 창을 닫았다가 다시 열고 claude를 치세요. 처음 한 번은 인터넷 창이 열리며 클로드 로그인을 하라고 해요.
curl -fsSL https://claude.ai/install.cmd -o install.cmd && install.cmd && del install.cmd

처음 한 번 "이 폴더 믿을래요?"(Do you trust the files in this folder?)가 나오면 아래 화살표로 Yes를 고르고 엔터.

LEVEL 5. 복사용 문장 붙여 넣기 → 클로드가 받는 프로그램을 만들어 줘요

아래 검은 상자 안의 글을 처음부터 끝까지 전부 드래그해서 복사(Ctrl+C)하고, 클로드 창에 붙여 넣고(Ctrl+V) 엔터. 맨 위 부탁 문장부터 맨 아래 코드 끝까지 한 번에 넣으면 돼요.

아래 코드를 이 폴더에 telegram-receiver.ps1 파일로 한 글자도 바꾸지 말고 저장해 줘. 한글이 깨지지 않게 UTF-8(BOM)으로 저장해 줘.
그리고 같은 폴더에 "텔레그램 자료 받기.cmd" 파일도 만들어 줘. 내용은 이 두 줄이야.
@echo off
powershell -NoLogo -NoProfile -ExecutionPolicy Bypass -File "%~dp0telegram-receiver.ps1"

# 텔레그램 자료 받기 (공개용)
# 내 텔레그램 봇으로 보낸 사진·파일·메모·링크를 이 파일이 있는 폴더의 "텔레그램자료\날짜" 폴더에 저장합니다.
# 봇 비밀번호(토큰)는 처음 한 번만 붙여 넣으면 이 컴퓨터, 이 윈도우 계정에서만 풀 수 있게 암호화해서 보관합니다.
# 처음 연결할 때 화면에 나오는 "연결-코드"를 봇에게 보내면, 그 뒤로는 내 메시지만 저장합니다.
$ErrorActionPreference = 'Stop'
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
$script:Base = $PSScriptRoot
$script:Store = Join-Path $Base '텔레그램자료'
$script:StateDir = Join-Path $Base '.telegram-local'
$script:StateFile = Join-Path $StateDir 'state.json'
$script:Token = ''

function Safe-Name([string]$Name) {
$clean = ($Name -replace '[<>:"/\\|?*\x00-\x1f]', '_').Trim().TrimEnd('.')
if (!$clean) { $clean = 'file' }
if ($clean.Length -gt 100) { $clean = $clean.Substring(0,100) }
return $clean
}
function Save-State {
$temp = "$StateFile.tmp"
$script:State | ConvertTo-Json | Set-Content -LiteralPath $temp -Encoding UTF8
Move-Item -LiteralPath $temp -Destination $StateFile -Force
}
function Bot-Call([string]$Method, $Body) {
$uri = 'https://api.telegram.org/bot' + $script:Token + '/' + $Method
$response = Invoke-RestMethod -Uri $uri -Method Post -ContentType 'application/json; charset=utf-8' -Body ([Text.Encoding]::UTF8.GetBytes(($Body | ConvertTo-Json -Depth 12))) -TimeoutSec 65
if (!$response.ok) { throw 'Telegram API failure' }
return $response.result
}
function Download-File([string]$Url, [string]$Target, [long]$ExpectedBytes) {
for ($attempt = 1; $attempt -le 5; $attempt++) {
try {
Invoke-WebRequest -Uri $Url -OutFile $Target -UseBasicParsing -TimeoutSec 120
if ($ExpectedBytes -gt 0 -and (Get-Item -LiteralPath $Target).Length -ne $ExpectedBytes) { throw 'size mismatch' }
return
} catch {
if ($attempt -eq 5) { throw '파일 내려받기 실패' }
Start-Sleep -Seconds 2
}
}
}
function Save-Message($Message) {
$date = [DateTimeOffset]::FromUnixTimeSeconds([long]$Message.date).LocalDateTime
$dir = Join-Path $Store $date.ToString('yyyy-MM-dd')
New-Item -ItemType Directory -Path $dir -Force | Out-Null
$prefix = $date.ToString('HHmmss') + '_' + $Message.message_id
$note = Join-Path $dir ($prefix + '_메모.txt')
$body = @('수신 시각: ' + $date.ToString('yyyy-MM-dd HH:mm:ss'), [string]$Message.text, [string]$Message.caption)
foreach ($entity in @($Message.entities) + @($Message.caption_entities)) {
if ($entity.url) { $body += [string]$entity.url }
}
$media = $null
$name = 'file'
if ($Message.photo) { $media = $Message.photo[-1]; $name = '사진.jpg' }
foreach ($kind in @('document','video','audio','voice','animation','video_note','sticker')) {
if ($Message.$kind) {
$media = $Message.$kind
$name = $media.file_name
if (!$name) { $name = $kind }
break
}
}
if ($media) {
if ($media.file_size -gt 20MB) {
$body += '파일 저장 실패: 텔레그램 봇은 20MB까지만 받을 수 있어요. 작은 파일로 다시 보내 주세요.'
Write-Host '20MB를 넘는 파일은 저장하지 못했습니다.' -ForegroundColor Yellow
} else {
$file = Bot-Call 'getFile' @{file_id=$media.file_id}
if (!$file.file_path) { throw 'File path missing' }
if ($name -notmatch '\.') { $name += [IO.Path]::GetExtension($file.file_path) }
$target = Join-Path $dir ($prefix + '_' + (Safe-Name $name))
$partial = $target + '.partial'
Download-File ('https://api.telegram.org/file/bot' + $script:Token + '/' + $file.file_path) $partial $media.file_size
Move-Item -LiteralPath $partial -Destination $target -Force
$body += '저장 파일: ' + [IO.Path]::GetFileName($target)
}
}
if (!$media -and !$Message.text -and !$Message.caption) { $body += '이 메시지 형식은 저장을 지원하지 않습니다.' }
$body | Set-Content -LiteralPath $note -Encoding UTF8
Write-Host ('저장 완료: ' + $dir + '\' + $prefix) -ForegroundColor Green
}
function Start-Receiver {
New-Item -ItemType Directory -Path $StateDir,$Store -Force | Out-Null
# 같은 프로그램이 두 번 켜져서 같은 메시지를 두 번 저장하지 않게 막습니다.
try { $script:Lock = [IO.File]::Open((Join-Path $StateDir 'receiver.lock'), 'OpenOrCreate', 'ReadWrite', 'None') }
catch { Write-Host '이미 자료 받기 프로그램이 실행 중입니다.'; return }
try {
Write-Host '=== 텔레그램 자료함 ===' -ForegroundColor Cyan
$secretFile = Join-Path $StateDir 'token.dpapi'
if (Test-Path -LiteralPath $secretFile) {
$secret = (Get-Content -LiteralPath $secretFile -Raw).Trim() | ConvertTo-SecureString
} else {
Write-Host 'BotFather가 준 토큰을 복사한 뒤 아래에 붙여넣고 Enter를 누르세요.'
Write-Host '입력한 글자는 보이지 않거나 별표로 표시됩니다.'
$secret = Read-Host '봇 비밀번호(토큰)' -AsSecureString
}
$ptr = [Runtime.InteropServices.Marshal]::SecureStringToBSTR($secret)
try { $script:Token = [Runtime.InteropServices.Marshal]::PtrToStringBSTR($ptr).Trim() }
finally { [Runtime.InteropServices.Marshal]::ZeroFreeBSTR($ptr) }
try { $me = Bot-Call 'getMe' @{} }
catch { Write-Host '연결 실패: 인터넷과 토큰을 확인해주세요. 토큰 자체나 오류 전문을 다른 사람에게 보내지 마세요.' -ForegroundColor Yellow; return }
$secret | ConvertFrom-SecureString | Set-Content -LiteralPath $secretFile -Encoding ASCII
Write-Host ('연결한 봇: @' + $me.username)
if (Test-Path -LiteralPath $StateFile) { $script:State = Get-Content -LiteralPath $StateFile -Raw -Encoding UTF8 | ConvertFrom-Json }
else { $script:State = [pscustomobject]@{owner=0L;offset=0L} }
$pair = '연결-' + ([Guid]::NewGuid().ToString('N').Substring(0,12))
if (!$script:State.owner) {
Write-Host '텔레그램에서 위 봇의 채팅방을 열고 아래 글자를 그대로 보내세요.'
Write-Host $pair -ForegroundColor Yellow
Write-Host '이 과정을 통해 본인의 메시지만 저장하도록 연결합니다.'
}
Write-Host ('저장 위치: ' + $Store)
Write-Host '이 창을 켜두세요. 닫으면 자료 받기가 중지됩니다. 중지: Ctrl+C'
while ($true) {
try {
$updates = @(Bot-Call 'getUpdates' @{offset=$script:State.offset;timeout=30;allowed_updates=@('message')})
foreach ($update in $updates) {
if (!$update) { continue }
$msg = $update.message
if ($msg -and $msg.chat.type -eq 'private') {
if (!$script:State.owner -and $msg.text -ceq $pair) {
$script:State.owner = [long]$msg.from.id
Write-Host '본인 확인 완료! 이제 사진이나 링크를 보내세요.' -ForegroundColor Green
} elseif ($script:State.owner -eq $msg.from.id -and $script:State.owner -ne 0) {
Save-Message $msg
}
}
$script:State.offset = [long]$update.update_id + 1
Save-State
}
} catch {
Write-Host '받기 또는 저장에 실패했습니다. 10초 뒤 다시 시도합니다. 인터넷, 저장 공간, 중복 실행을 확인해주세요.' -ForegroundColor Yellow
Start-Sleep -Seconds 10
}
}
} finally {
$script:Token = ''
if ($script:Lock) { $script:Lock.Dispose() }
}
}
try { Start-Receiver }
catch { Write-Host '실행하지 못했습니다. 이 창의 안내 문구만 알려주세요. 토큰은 보내지 마세요.' -ForegroundColor Yellow }
Read-Host '종료하려면 Enter' | Out-Null

클로드가 폴더에 telegram-receiver.ps1과 텔레그램 자료 받기.cmd 두 파일을 만들어 줘요. 만들기 전에 "해도 될까요?"라고 물으면 읽어 보고 "예"를 누르세요.

이 코드가 하는 일은 딱 세 가지예요. ① 내 봇에 새 메시지가 왔는지 계속 확인 ② 사진·파일·메모·링크를 날짜 폴더에 저장 ③ 처음 연결한 사람(나)의 메시지만 저장. 토큰은 이 컴퓨터, 이 윈도우 계정에서만 풀 수 있게 암호화해서 보관해요.

LEVEL 6. "텔레그램 자료 받기" 더블클릭 → 토큰 붙여 넣기

폴더에 생긴 텔레그램 자료 받기.cmd를 더블클릭하면 검은 창이 떠요. LEVEL 3에서 복사한 토큰을 마우스 오른쪽 클릭(또는 Ctrl+V)으로 붙여 넣고 엔터.

⑦ 여기에 토큰을 붙여 넣고 엔터. 붙여 넣어도 글자가 안 보이거나 별표(*)로 나오는 게 정상이에요

LEVEL 7. 봇에게 "연결-코드" 보내기 (본인 확인)

토큰이 맞으면 검은 창에 연결-로 시작하는 노란 글자가 나와요. 폰 텔레그램에서 LEVEL 3에서 만든 내 봇을 검색해 들어가서, 시작을 누르고 그 글자를 그대로 보내세요.

⑧ 검은 창에 나온 "연결-…" 글자를 봇에게 그대로 보내세요

검은 창에 "본인 확인 완료! 이제 사진이나 링크를 보내세요."가 뜨면 연결 끝이에요. 이제부터는 나만 이 봇으로 저장할 수 있어요.

LEVEL 8. 사진·링크 던져 보기

이제 폰에서 봇에게 사진이든 링크든 메모든 그냥 보내세요. 사진 여러 장을 한 번에 보내도 돼요.

사진은 링크와 같이 보내도 돼요

링크 앞에 "에이아이", "집"처럼 한 단어를 붙여 두면 나중에 찾기 쉬워요

⑨ 검은 창에 초록색 "저장 완료"가 뜨면 컴퓨터에 들어온 거예요

LEVEL 9. 컴퓨터 폴더 확인

LEVEL 4에서 만든 폴더 안에 텔레그램자료 폴더가 생기고, 그 안에 날짜별 폴더가 만들어져요.

⑩ 보낸 날짜 폴더를 여세요

⑪ 사진은 "시각_번호_사진.jpg", 글과 링크는 "시각_번호_메모.txt"로 저장돼요

⑫ 메모 파일에는 받은 시각과 보낸 글·링크가 그대로 들어 있어요

LEVEL 10. 클로드에게 "정리해줘"

날짜 폴더를 열고 주소창에 cmd → claude. 그리고 한 마디만 하세요.

오늘 받은 자료 정리해줘

⑬ 클로드가 링크를 직접 열어 보고 주제별로 정리해 줬어요 (실제로 1분 28초 걸렸어요)

"블로그 글로 써 줘", "카드뉴스로 만들어 줘"처럼 다음 일을 이어서 시킬 수도 있어요. 블로그 글 자동 업로드와 인스타 자동 업로드는 앞 글에 정리해 뒀어요.

(선택) 컴퓨터를 켜면 자동으로 켜지게

키보드 윈도우 키 + R → shell:startup 입력 → 엔터. 열린 폴더에 텔레그램 자료 받기.cmd의 바로 가기를 넣어 두면, 컴퓨터를 켤 때마다 받는 프로그램도 같이 켜져요. (바로 가기: 파일을 마우스 오른쪽 버튼으로 끌어다 놓고 "여기에 바로 가기 만들기")

막혔을 때 해결표

이럴 때 이렇게 하세요
"연결 실패: 인터넷과 토큰을 확인해주세요" 토큰을 다시 복사해서 붙여 넣으세요. 앞뒤에 빈칸이 들어가면 안 돼요. 토큰을 잃어버렸으면 BotFather에 /token을 보내면 다시 알려 줘요.
"이미 자료 받기 프로그램이 실행 중입니다" 이미 다른 창에서 켜져 있어요. 작업 표시줄의 검은 창을 확인하세요. 두 개를 켜면 같은 사진이 두 번 저장될 수 있어서 막아 둔 거예요.
봇이 아무 대답을 안 해요 정상이에요. 이 봇은 대답하지 않고 저장만 해요. 검은 창의 "저장 완료"와 폴더를 확인하세요.
본인 확인 전에 보낸 사진이 없어요 본인 확인(LEVEL 7) 전에 온 메시지는 저장하지 않아요. 확인 끝난 뒤 다시 보내세요.
사진 화질이 떨어져요 텔레그램은 "사진"으로 보내면 크기를 줄여서 보내요. 원본이 필요하면 클립 버튼 → 파일로 보내세요.
영상이 저장이 안 돼요 텔레그램 봇은 20MB까지만 받을 수 있어요. 메모 파일에 "파일 저장 실패"가 적혀 있으면 더 작게 보내세요.
검은 창이 바로 꺼져요 telegram-receiver.ps1을 직접 누르지 말고 텔레그램 자료 받기.cmd를 더블클릭하세요.
한글이 깨져서 나와요 클로드에게 "telegram-receiver.ps1을 UTF-8(BOM)으로 다시 저장해 줘"라고 하세요.

솔직히 아쉬운 점

  • 컴퓨터가 켜져 있고, 검은 창이 떠 있어야 받아요. 꺼져 있을 때 보낸 건 텔레그램이 잠깐 맡아 뒀다가 켜면 들어와요. 텔레그램 공식 문서 기준으로 최대 24시간까지만 맡아 줘요.
  • 파일 하나에 20MB까지예요. 긴 영상은 안 돼요.
  • "사진"으로 보내면 화질이 줄어요. 원본은 "파일"로 보내야 해요.
  • 받는 프로그램 자체는 0원이지만, 정리를 시키는 컴퓨터용 클로드는 유료 요금제가 필요해요.

화면은 2026년 9월 29일 제 텔레그램과 컴퓨터에서 직접 캡처했어요. 봇 이름·아이디·토큰과 컴퓨터 경로는 가렸어요. 텔레그램 봇 한도(20MB, 24시간 보관)는 텔레그램 봇 공식 문서 기준이에요. 이 글은 AI 도우미로 초안을 만들고, 캡처와 내용은 제가 직접 확인했습니다.

반응형