-
카카오톡 봇 만들기 ( python, pc 카톡, 비활성 ) - 1편python/매크로 2020. 4. 21. 08:03반응형
3줄 선 요약
- 플러스친구 아님
- 모바일 어플을 활용한 방법 아님
- pc카톡, python 으로 pc 환경에서 봇을 제작함
서론
카카오톡 오픈 톡방에 봇이 있으면 좋을 것 같아서 만들려고 보니
카톡 api로는 자신에게 보내기 밖에 안됨
이경우 알람도 안 뜨고, 단톡과 오픈톡에 초대는 당연히 안됩니다.
검색을 하면 플러스친구 (플친) 만드는 법이 뜬다던가
스마트폰 어플로 만드는 자동응답 설정법이 주로 뜸
텔레그램 같은건 api로 간단하게 몇 줄이면 가능하지만
대부분 메신저는 카톡을 사용하기 때문에
기존에 몇 없는 자료들을 정리할 겸, 공유하는 글을 작성합니다.
환경
- 윈도우10
- 카카오톡 pc버전 ( MS store 카톡 X )
- python ( pycharm )
카카오톡 봇
- 기본 기능 + 추가 기능으로 구성
- 기본 기능
- 채팅방에 메시지 전송
- 특정 방 선택 입장
- 추가 기능
- 주기적인 알람 (시간별 날씨, 특정 사이트의 새로운 게시글 등)
- 채팅 인식 (유저 입장 시 인사말 + 공지사항 알림, 명령어로 봇 컨트롤 등)
- 추가 기능에 들어갈 수 있는 것들
- python으로 가능한 것 ( 이 글에선 출력을 문자로 한정한다 )
- 대표적으로 웹 크롤링
※주의사항
카카오톡 정지 (밴) 에는 크게 두 가지가 있다
- 신고에 의한 정지
- 비정상적 패턴 감지에 의한 정지
카톡 봇 사용 시 두 가지 모두 조심해야 하나
특히 2번 패턴 정지를 조심해야 한다.패턴 정지는 자동으로 탐지해서 잡는 거라, 문의를 해도 상담사가 할 수 있는 게 없다. 그냥 기다리라고만 함
연속적으로 다량의 채팅을 전송하거나
같은 채팅 내용을 다수에게 한 번에 보내는 행위 등이 해당됨
채팅방에 메시지 전송
import time, win32con, win32api, win32gui # # 카톡창 이름 (열려있는 상태, 최소화 X, 창뒤에 숨어있는 비활성화 상태 가능) kakao_opentalk_name = '메모장' def kakao_sendtext(text): win32api.SendMessage(hwndEdit, win32con.WM_SETTEXT, 0, text) SendReturn(hwndEdit) # # 엔터 def SendReturn(hwnd): win32api.PostMessage(hwnd, win32con.WM_KEYDOWN, win32con.VK_RETURN, 0) time.sleep(0.01) win32api.PostMessage(hwnd, win32con.WM_KEYUP, win32con.VK_RETURN, 0) # # 핸들 hwndMain = win32gui.FindWindow( None, kakao_opentalk_name) hwndEdit = win32gui.FindWindowEx( hwndMain, None, "RichEdit20W", None) hwndListControl = win32gui.FindWindowEx( hwndMain, None, "EVA_VH_ListControl_Dblclk", None) # # 채팅 전송 text = "SETTEXT_test" kakao_sendtext(text)
위 소스의 동작부터 설명하면
열려있는 '메모장' 이라는 이름의 채팅방에 채팅을 쓰고, 전송한다.
'메모장' 부분에 각자 본인이 원하는 채팅방 이름을 덮어쓰시면 됩니다.
우리가 하려고 하는 건 채팅방의 'RichEdit20W' 라는 텍스트 박스에
원하는 메시지를 입력하고, 엔터 (전송)을 하려고 함
그래서 'RichEdit20W' 의 핸들을 가져오기 위해 사용한 게
FindWindow / FindWindowEx
핸들 부분 설명
hwndMain = win32gui.FindWindow( None, '메모장')
--> FindWindow를 이용해 캡션(이름)이 '메모장' 이라는 창을 찾아서 핸들을 hwndMain 에 저장
hwndEdit = win32gui.FindWindowEx( hwndMain, None, "RichEdit20W", None)
--> FindWindowEx를 이용해 hwndMain(메모장) 의 자식인 RichEdit20W(텍스트박스) 의 핸들을 hwndEdit 에 저장
hwndListControl = win32gui.FindWindowEx( hwndMain, None, "EVA_VH_ListControl_Dblclk", None)
--> 이건 글이 올라오는 대화창의 핸들을 가져온 건데, 나중에 채팅내용 인식 (명령어) 할 때 쓸 거예요
간단하게 채팅방 구조를 확인했고, 채팅 전송 기능을 만들어봤습니다.
다음 글에선 열려있는 채팅방이 아닌, 유저 목록 또는 채팅방 목록에서
원하는 채팅방을 선택해서 열고, 메시지를 보내는 방법을 알아보겠습니다.
반응형'python > 매크로' 카테고리의 다른 글
카카오톡 봇 만들기 ( python, pc 카톡, 비활성 ) - 4편 (30) 2020.05.01 카카오톡 봇 만들기 ( python, pc 카톡, 비활성 ) - 3편 (1) 2020.04.27 카카오톡 봇 만들기 ( python, pc 카톡, 비활성 ) - 2편 (4) 2020.04.24