텔레그램 CLI를 파이썬으로 제어하기 (PyTg)
.
WARNING!!! 텔레그램 CLI 가 v1.x 로 업데이트 되면서 가상 계정인 개인 봇과의 연동 기능이 추가되었습니다. 봇과 연동할 수 있도록 텔레그램 CLI 에서 외부 API를 제공합니다. 파이썬으로 텔레그램과 연동하고 싶다면 pyTelegramBotAPI 인터페이스를 사용하세요. 훨신 막강하고 다양한 응용이 가능해집니다. 아래 링크의 내용을 참고하세요.
https://www.hardcopyworld.com/?p=1792&page=1
(아래 내용은 구 버전의 텔레그램 CLI (v0.x) 에만 사용하길 권장합니다.)
.
지난 강좌에서 텔레그램 CLI를 Pexpect 라이브러리를 이용해서 제어하는 방법을 사용해봤습니다. 이 방법은 단점은 특정 메시지가 발생했을 때 이걸 감지해내기가 상당히 불편하다는 점입니다.
여기서 소개할 PyTg 라이브러리는 보다 파이썬 친화적이고 간편하게 텔레그램을 제어할 수 있도록 해줍니다. 단점도 몇 가지 있는데, 먼저 Telegram-CLI 를 PyTg 패치된 버전으로 설치해야 합니다. 그리고 2명 이상이 참여하는 챗 그룹을 만들어야만 합니다. 자기가 자신에게 보내는 메시지는 감지하지 못합니다.
PyTg 라이브러리 설치
컴파일 및 구동에 필요한 패키지를 설치합니다.
- sudo apt-get install libreadline-dev libconfig-dev libssl-dev lua5.2 liblua5.2-dev libevent-dev make git-core
패치된 Telegram-Cli 부터 설치해야 합니다. 기존에 Telegram-Cli 를 설치하신 분은 tg 폴더명이 중복되지 않도록 별도의 폴더를 만들어 그 안에서 아래 작업을 진행하세요.
- git clone https://github.com/efaisal/tg.git
- cd tg
- ./configure
- make
- ./telegram
이전에 Telegram-Cli 인증받은 것과 같은 인증 작업을 해줍니다. Telegram-Cli 가 2개 설치된 꼴입니다.
메시지가 가는지 확인해 주세요.
폰의 텔레그램을 실행해서 Pi_test 라는 챗 그룹을 만듭니다. Telegram-Cli 를 통해 챗 그룹을 만들 수도 있지만 불행히도 PyTg 패치된 Telegram-Cli 는 이 명령어를 지원하지 않습니다. 이전에 설치한 Telegram-Cli 를 지우시지 않으셨다면 아래와 같은 명령어로 테스트용 챗 그룹을 만듭니다.
- > create_group_chat 챗그룹이름 사용자1 사용자2
이제 PyTg 라이브러리를 설치합니다.
- git clone https://github.com/efaisal/pytg.git
- cd pytg
- sudo python setup.py install
폴더안에 example 폴더가 보이실겁니다. 이 폴더 안에 dump.py, pingbot.py 파일이 있습니다. dump.py 파일은 PyTg 라이브러리를 통해 핸들링 가능한 메시지가 발생할 때 마다 화면에 메시지 전체를 뿌려줍니다. pingbot.py 파일은 특정 챗 그룹에 발생하는 메시지를 감시하다가 ping 메시지가 오면 pong 으로 응답해줍니다. 폰에서 특정 챗 그룹을 연 뒤 ping 이라고 메시지 넣으면 자동으로 pong 이라고 뜹니다. 그리고 quit 이라고 메시지를 넣으면 라즈베리 파이에서 실행중인 pingbot.py 프로세스를 종료합니다.
이 예제를 잘 응용하면 여러가지 재밌는 서비스를 만드실 수 있습니다.
참고자료 :
- tg.py (메시지 콜백) : https://github.com/efaisal/pytg/blob/master/pytg/tg.py
- __init__.py(API) : https://github.com/efaisal/pytg/blob/master/pytg/__init__.py
- PyTg project official page : https://github.com/efaisal/pytg
- 텔레그램 데몬 만들기 : https://github.com/vysheng/tg/issues/373, https://github.com/vysheng/tg/wiki/Running-as-daemon