17  메신저 봇 (Messenger Bot)

텔레그램(Telegram), 디스코드(Discord)와 같은 메신저를 위한 봇을 만들어 봅시다. 단순히 대화만 하는 봇을 넘어, 동전 던지기, 주사위 굴리기, 최신 뉴스 브리핑 등 유용한 작업을 자동으로 수행해 주는 똑똑한 비서를 목표로 합니다.

이 프로젝트는 메신저 API와 비동기 프로그래밍(Asynchronous Programming)을 이해하는 데 아주 좋습니다. 특히 외부 서버에서 실시간으로 데이터를 가져오고, 이를 사용자의 메시지에 맞게 가공하여 응답하는 과정을 직접 설계해 보세요.

17.1 주요 개발 포인트

  • 메신저 API 연동: Telegram Bot API, Discord API, Slack API 등을 사용하여 서버와 봇을 연결합니다.
  • 명령어 기반 자동화: ‘/뉴스’, ‘/날씨’, ‘/동전’ 등의 명령어를 인식하여 특정 로직을 실행합니다.
  • NLP 기반 대화 (Conversational AI): 자연어 처리 모델을 활용하여 사용자의 의도를 파악하고 사람처럼 대답하는 기능을 추가합니다.
  • 데이터 실시간 스크래핑: 최신 뉴스, 주식 가격, 일기예보 등 필요한 정보를 웹에서 가져와 전송합니다.
  • 스케줄링 작업: 정해진 시간마다 알림을 보내거나 특정 이벤트를 공지하는 기능을 구현합니다.

17.2 Python 구현 예시 (텔레그램 봇 API 활용 시뮬레이션)

import os
# 실제 실행 시 python-telegram-bot 등 라이브러리 설치가 필요합니다.
# import asyncio
# from telegram import Update

class MessengerBot:
    """
    사용자의 메시지를 처리하고 적절한 명령을 수행합니다.
    """
    def __init__(self, token):
        self.token = token
        print("메신저 봇 서버가 시작되었습니다.")

    async def handle_message(self, message):
        """
        메시지 내용에 따라 각기 다른 기능을 실행합니다.
        """
        text = message.lower()
        print(f"받은 메시지: {text}")
        
        if "뉴스" in text:
            return "오늘의 뉴스: [1] 경제 회복세 지속 [2] 신기술 발표..."
        elif "날씨" in text:
            return "현재 서울의 날씨는 맑음(15도)입니다."
        elif "동전" in text:
            import random
            result = random.choice(["앞면", "뒷면"])
            return f"동전을 던졌습니다: {result}!"
        else:
            return "안녕하세요! 무엇을 도와드릴까요? (뉴스, 날씨, 동전 등)"

if __name__ == "__main__":
    # 봇 토큰 (가상의 예시)
    bot_token = os.environ.get("MESSENGER_BOT_TOKEN", "your_bot_token_here")
    bot = MessengerBot(bot_token)
    
    # 메시지 처리 시뮬레이션
    # asyncio.run(bot.handle_message("오늘 뉴스 보여줘"))
    print("실제 구현 시 API 라이브러리와 비동기 루프가 필요합니다.")