Python - Telegram 봇 만들기

marco x brown·2020년 2월 22일
1

Better than yesterday

목록 보기
1/3
post-thumbnail

꽤 오래 전부터 상상만 해왔던 토이 프로젝트를 지난 주에야 비로소 시작했다. 이 정도로 제대로 진행해보는 개인 프로젝트는 처음이라 시작은 미미하게 해보려 한다. 큰 흐름은 Telegram 봇을 통해 특정 조건에서 알림을 날리는 식이다.

Python으로 개발하고 엔드포인트는 Telegram, 데이터베이스는 AWS RDS MySQL을 적용하기로 했다.
RDS는 처음 써보는데 AWS 리소스를 하나라도 더 경험해보자는 차원이다.

사족이 너무 길었다.
Telegram 봇을 만들기 위한 토큰 발급 등은 지난 주에 완료했고, 이번엔 내 봇에 메시지를 보내는 기능을 파이썬으로 짤 예정이다.

패키지 설치

(venv) $ pip install python-telegram-bot

공식문서:
https://python-telegram-bot.readthedocs.io

먼저 telegram 패키지를 불러오고 발급했던 토큰을 변수화하여 사용한다.
이 부분과 날씨 API 키 등은 나중에 .env를 사용해서 환경변수로 관리할 예정이다.

import telegram


TELEGRAM_TOKEN = '안알랴줌ㅋ'

bot = telegram.Bot(token=TELEGRAM_TOKEN)
updates = bot.getUpdates()
chat_id = updates[-1].message.chat_id

bot.sendMessage(chat_id=chat_id, text='파스타프ㅏ스타파스타')

for update in updates:
    print(update.message)

telegram 패키지의 Bot 클래스를 bot이라는 인스턴스화해준다. getUpdates() 메소드는 메시지 작성 등의 행위로 발생한 채팅방 내 변경사항을 반환해주는 역할을 한다.
message 객체의 chat_id를 통해 현재 채팅방의 ID도 가져온다.

메시지 발송

bot.sendMessage(chat_id=chat_id, text='파스타프ㅏ스타파스타')

메소드명이 굉장히 직관적이다. 코드 저장 후 모듈을 실행하면 text 속성에 명시한 내용의 메시지가 발송된다.

위치 정보 전송

bot.sendLocation(chat_id=chat_id, latitude=latitude, longitude=longitude)

마찬가지로 위치 정보를 전송하는 sendLocation 메소드를 사용한다. 인자로 위도와 경도도 함께 전달해준다.

사실 내 프로젝트에서 원하는 기능은 아니다. Telegram 내에서 현재 좌표를 자동으로 핸들링해야 하는데, 일단 위치와 관련된 메소드라 한번 테스트를 해봤다.

# telegram_bot.py
import telegram

TELEGRAM_TOKEN = '안알랴줌ㅋ'

bot = telegram.Bot(token=TELEGRAM_TOKEN)
updates = bot.get_updates()
chat_id = updates[-1].message.chat_id
latitude = 37.499129
longitude = 127.037126

bot.send_message(chat_id=chat_id, text='파스타프ㅏ스타파스타')
bot.send_location(chat_id=chat_id, latitude=latitude, longitude=longitude)

for update in updates:
    print(update.message)

메소드명을 기존 카멜 케이스에서 스네이크 케이스로 바꿨다. 공식문서를 보니 alias로 스네이크 케이스도 지원하고 있다.
(애초에 Python 패키지인데 왜 카멜 케이스로 만든거지?)

단순 python-telegram-bot 패키지 테스트용이라 굉장히 허접하다. 연습장 같네.
다음은 환경변수 설정.

profile
개발자로 크는 중

0개의 댓글