Telegram-cli 파이썬으로 제어하기
Telegram-cli를 사용하면 콘솔환경에서 메시지를 받고 보낼 수 있습니다. 이를 제어하려면 daemon으로 돌리고 포트로 접근하는 방법도 있겠지만, 파이썬으로 구동시키는 경우에는 Pexpect를 통해서 좀 더 쉽게 제어가 가능합니다. 우선은 Telegram-cli가 깔린 환경이여야 할 것이고, 아래 코드를 참조해보세요. Pexpect를 다른 Application처럼 구동시키려고 해도 Telegram-cli의 경우에는 잘 되지 않았기에 포스팅합니다. ( '>' 문자열로 인식이 쉽게 안되는 문제가 있는듯.. 외국 커뮤니티에서도 같은 이야기가 나오는듯 합니다.)
실행(리셋)시키기
def telegramcli_reset(): # Connect to Telegram Cli print '------------------------------' print 'Telegram Cli Setting Start...' telegram = pexpect.spawn('/bin/telegram-cli') telegram.expect('>') print telegram.before telegram.sendline('dialog_list') telegram.expect('unread') print telegram.before telegram.sendline('msg BotWorld [Notice] Py Server telegram-cli is now on') telegram.expect('>>>') print telegram.before telegram.expect('>') print telegram.before print '------------------------------' return telegram
첫 구동을 시키는 부분입니다. Telegram-cli의 경우에 처음에 dialog_list와 같은 명령으로 대화방 목록을 긁어오지 않는 경우 chat_room 이름을 통하여 메시지를 전달할 수 없는 문제가 있습니다. 따라서 위의 코드처럼 동작하도록 만들었습니다. 저의 경우에는 BotWorld라는 단톡방에 리셋이 될 경우 메시지가 올라오도록 위처럼 작성하였습니다.
초기 구동 코드
telegram = telegramcli_reset()
위와 같이 telegram이라는 변수에 저장되게 해둡니다. 나중에 telegram 변수를 통하여 접근하면 됩니다.
이후 제어
def msg_send(msg): yield 'Msg Sending... ' global telegram try: telegram.expect('[.+]') print telegram.before telegram.sendline('msg BotWorld ' + msg) telegram.expect('>>>') print telegram.before telegram.expect('>') print telegram.before except: yield 'Error. Resending... ' telegram = telegramcli_reset() telegram.sendline('msg BotWorld ' + msg) telegram.expect('>>>') print telegram.before telegram.expect('>') print telegram.before yield unicode(msg, "utf-8")
위는 예시일 뿐입니다. 원하는 이벤트에 위 코드 예시처럼 telegram 변수를 통하여 원하는 메시지를 전달하면 될 것입니다. 저의 경우에는 msg_send 함수가 호출되면 BotWorld 대화방에 메시지가 올라가도록 설정해두었습니다.
사실 공식Bot Interface API가 올라온 마당에, 위 코드가 완전 의미있는 것 같지는 않지만 사용하실 분들이 있을 수도 있을 것 같아 공유해봅니다.
'연재 > Project Jarvis' 카테고리의 다른 글
[Bottle] yield를 사용하여 페이지 완성 전에 내용 내보내기 (29) | 2016.03.23 |
---|---|
[Bottle] paste 서버를 사용하여 Server load량 늘리기 (0) | 2016.03.09 |
간단한 Naver Endic(영어사전) 파싱 예제 (0) | 2016.02.28 |
[WebFramework] Bottle - Django의 간략판 (0) | 2016.02.27 |
[IFTTT] 텔레그램 봇으로 최신 Feed 받아보기 (9) | 2016.02.21 |
Telegram cli 윈도우에 깔기 (0) | 2016.02.21 |