유튜브에서 빵형의 개발도상국님의 카카오톡 매크로 영상을 보다가 영감을 받아 Python 대신 Go 언어로 구현해보았습니다.
- 자동 채팅 감지: 1초마다 카카오톡 채팅창을 스캔합니다.
- 새 채팅 알림 인식: 빨간색 원이 나타나면 이를 인식하여 해당 좌표를 더블클릭하여 채팅방에 접속합니다.
- 채팅 내용 캡처 및 분석: 채팅방 하단의 내용을 캡처하여 OCR 서버로 전송합니다.
- 지역 추출 및 날씨 조회: "[지역]뚱" 형식의 문장이 있을 경우, 지역명을 추출합니다. 지역은 CITYTABLE에 등록되어 있어야합니다.
- 날씨 API 호출: OpenWeather API를 이용하여 해당 지역의 날씨를 조회합니다.
- 자동 응답생성: "[지역]뚱"이 아닌 일반적인 "[문장]뚱"인 경우 문장을 추출합니다.
- GPT API 호출: GPT API를 이용하여 해당 문장에 대한 응답을 생성합니다.
- 응답 제공: 받은 날씨 데이터 또는 GPT를 통해 생성한 응답을 채팅방에 제공합니다.
- 운영체제: macOS Sonoma 14.2.1
- 언어:
- Go 1.22.2
- Python 3.10 (OCR 서버용)
-
.env 파일 설정
OpenWeather 및 OCR 서버 설정 정보를.env
파일에 저장합니다.CURRENTAPI=[openweathermap API URL] KEY=[openweathermap API key] LANG="kr" OCRAPI=[OCR 서버 URL] GPTKEY=[gpt API key]
-
채팅창 위치 설정
cmd/serve.go
의Start
함수에서 다음과 같이 messageBox와 speechBox를 수정하여 스캔할 채팅 위치를 설정합니다.
messageBox는 채팅방 리스트화면입니다. 아래와 같이 빨간색알림이 뜨는 곳을 지정해야합니다.speechBox는 채팅방 화면입니다. 아래와 같이 새로운 채팅이 뜨는 곳을 지정해야합니다.
func Start() { messageBox := &internal.DIR{X1: 490, Y1: 900, X2: 570, Y2: 955} speechBox := &internal.SpeechBox{X: 0, Y: 760, Width: 560, Height: 72} }
- OpenWeather의 Current Weather API에 가입하여 무료 API 키를 발급받습니다.
- 외국 API라 정확한 한국어 지역명을 위해 매칭 테이블을 설정합니다.
package internal var ( CITYTABLE = map[string]string{ "진천": "Chinch'ŏn", "서울": "Seoul", "울산": "Ulsan", "대전": "Daejeon", } REVERSCITYTABLE = map[string]string{ "Chinch'ŏn": "진천", "Seoul": "서울", "Ulsan": "울산", "Daejeon": "대전", } )
- OpenAI의 GPT API에 가입하여 API 키 발급합니다.
- 필요한 경우 API사용을 위한 결제필요합니다.
OCR 서버를 빌드하고 실행합니다.
cd OCR
docker build -t ocr .
docker run -p 3000:5000 ocr
cd robot
go run main.go serve
- RobotGo 오류 발생 시
RobotGo 관련 오류가 발생할 경우, Xcode 설치가 필요할 수 있습니다.
- v1: 지역 현재날씨 정보, gpt를 이용한 자동응답