2020/01/30 - [Back-end/Python] - [Telegram] 무작정 시작하기 (1) - 설치 및 실행
지난 포스트에서 텔레그램 봇을 생성하고 Message를 Push하는 예제를 다루어보았다. 이번 포스트에서는 명령어(Command)를 입력받고 그에 따른 이벤트를 실행하는 예제를 다루어 보려고 한다.
1. Command Handler 생성.
1-1. 소스 작성.
- cmd_handler_bot.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
#cmd_handler_bot.py
from telegram.ext import Updater
from telegram.ext import CommandHandler
BOT_TOKEN='672768316:AAHXpYmnMzGp_eH0i-juikUFU6q9y78CBhA'
updater = Updater( token=BOT_TOKEN, use_context=True )
dispatcher = updater.dispatcher
def start(update, context):
context.bot.send_message(chat_id=update.effective_chat.id, text="작업을 시작합니다.")
def stop(update, context):
context.bot.send_message(chat_id=update.effective_chat.id, text="작업을 중단합니다.")
def zigbang(update, context):
context.bot.send_message(chat_id=update.effective_chat.id, text="[{}] 주변 매물을 수집합니다.".format( context.args[0] ))
start_handler = CommandHandler('start', start)
stop_handler = CommandHandler('stop', stop)
zigbang_handler = CommandHandler('zigbang', zigbang)
dispatcher.add_handler(start_handler)
dispatcher.add_handler(stop_handler)
dispatcher.add_handler(zigbang_handler)
updater.start_polling()
updater.idle()
|
cs |
- 2 ln: 메시지를 감시하고 있다가 메시지가 입력되면 Queue에 쌓고, Dispatcher를 통해 이벤트를 실행하는 클래스.
- 3 ln: Dispatcher가 수행할 이벤트를 정의하는 클래스.
- 7 ln: 발급받은 Access Token으로 봇을 생성하고 메시지를 감시하는 객체를 생성.
* [ use_context=True ]: callback 매개변수로 context를 사용할 수 있음.
- 8 ln: Dispatcher 객체.
- 10~17 ln: start, stop, zigbang 이벤트
* 봇에서 Message를 Push함.
* [ context.args ]: 명령어와 함께 입력된 파라미터.
- 19~21 ln: 각 이벤트에 대한 Command Handler 생성.
* CommandHandler("명령어", Callback)
- 23~26 ln: 각 Handler를 Dispatcher에 추가.
- 27 ln: Updater가 메시지를 계속 감시.
- 28 ln: 신호 중 하나가 수신 될 때까지 차단하고 업데이터를 중지.
* 이 기능을 사용하지 않으면 Keyboard Interrupt도 안먹힘.
1-2. 실행.
> python cmd_handler_bot.py
1-3. 실행 결과.
- 명령어는 반드시 '/'로 시작해야함.
- 직접 실행해보면 알겠지만, 대부분 입력하자마자 바로 이벤트가 실행됨.
- 예제 소스가 급하게 만든거라 /zigbang에서 파라미터를 넘겨주지 않으면 반응이 없음.
3. 마치며.
- 지금까지 명령어를 입력받아서 이벤트를 처리하는 텔레그램 봇을 아주 간단하게 만들어 보았다. 이벤트로 크롤러를 실행시키면 스마트폰으로 언제 어디서나 자신이 만든 크롤러를 실행하고 결과를 받을 수 있다.
- 다음 포스트에서는 명령어가 아닌 단순 Text를 입력받아 처리하는 기능을 만들어 보도록 하겠다.
'Back-end > Python' 카테고리의 다른 글
[크롤링] Selenium으로 특가 상품 수집 (1) - 프로젝트 준비 (0) | 2020.01.31 |
---|---|
[Telegram] 무작정 시작하기 (3) - Button Message (0) | 2020.01.30 |
[Telegram] 무작정 시작하기 (1) - 설치 및 실행 (0) | 2020.01.30 |
[Celery] 무작정 시작하기 (5) - Monitoring (0) | 2020.01.28 |
[크롤링] 직방에서 방찾기 (2) - Crawler (0) | 2020.01.21 |
댓글