[python] Tornado와 텔레그램 봇 개발
Tornado는 파이썬 기반의 웹 프레임워크로, 비동기 처리와 고성능 웹 서비스를 지원하는 특징이 있습니다. 이번 포스트에서는 Tornado를 사용하여 텔레그램 봇을 개발하는 방법을 알아보겠습니다.
Tornado 설치 및 설정
Tornado를 사용하기 위해서는 먼저 설치해야 합니다. 다음과 같이 명령어를 사용하여 Tornado를 설치할 수 있습니다.
pip install tornado
Tornado를 설치한 후에는 프로젝트 폴더를 생성하고, Tornado 애플리케이션을 설정해야 합니다. 다음과 같이 app.py
파일을 생성하고, Tornado 애플리케이션을 설정합니다.
import tornado.ioloop
import tornado.web
import tornado.httpclient
class MainHandler(tornado.web.RequestHandler):
def get(self):
self.write("Hello, world")
def make_app():
return tornado.web.Application([
(r"/", MainHandler),
])
if __name__ == "__main__":
app = make_app()
app.listen(8888)
tornado.ioloop.IOLoop.current().start()
app.py
파일을 실행하면 웹 서버가 실행되고, http://localhost:8888
로 접속하면 “Hello, world”라는 문구가 표시됩니다.
텔레그램 봇 개발
이제 Tornado를 사용하여 텔레그램 봇을 개발해 보겠습니다. 텔레그램 봇을 개발하기 위해서는 먼저 텔레그램에서 봇을 생성해야 합니다.
- 텔레그램 앱을 다운로드하고, 로그인합니다.
- BotFather를 검색하여 봇을 생성합니다.
- 봇의 이름과 유저명을 설정하고, 봇 생성 완료 메시지에서 토큰을 복사합니다.
이제 텔레그램 봇을 개발하기 위해 다음과 같이 bot.py
파일을 생성합니다.
import tornado.ioloop
import tornado.web
import tornado.httpclient
class MainHandler(tornado.web.RequestHandler):
def post(self):
chat_id = self.get_body_argument('message')['chat']['id']
text = self.get_body_argument('message')['text']
self.send_message(chat_id, text)
def send_message(self, chat_id, text):
token = "YOUR_TELEGRAM_BOT_TOKEN"
url = f"https://api.telegram.org/bot{token}/sendMessage"
body = {"chat_id": chat_id, "text": text}
http_client = tornado.httpclient.HTTPClient()
try:
response = http_client.fetch(url, method="POST", body=json.dumps(body))
except Exception as e:
print(f"Failed to send message: {e}")
http_client.close()
def make_app():
return tornado.web.Application([
(r"/", MainHandler),
])
if __name__ == "__main__":
app = make_app()
app.listen(8888)
tornado.ioloop.IOLoop.current().start()
bot.py
파일을 실행하면 Tornado 웹 서버가 실행되고, 텔레그램에서 메시지를 받아 해당 메시지를 다시 보내는 간단한 봇이 작동합니다.
결론
이렇게 Tornado를 사용하여 텔레그램 봇을 개발하는 방법에 대해 알아보았습니다. Tornado의 강력한 비동기 처리 기능과 텔레그램 봇 API를 활용하여 다양한 기능을 개발할 수 있습니다. 추가로, Tornado와 텔레그램 봇에 대해 더 자세히 알고 싶다면 공식 문서를 참고하시기 바랍니다. Happy coding!