자동화 애플리케이션/챗봇 Chatbot

1분마다 비트코인 시세 알림 봇 만들기

General AI 2024. 7. 6. 14:50
728x90
반응형

Discord Bot 튜토리얼: 1분마다 비트코인 시세 알림 봇 만들기

Python을 사용하여 Discord에서 1분마다 자동으로 비트코인 시세를 알려주는 봇을 만드는 방법을 소개합니다. 이 봇은 지정된 채널에 매 분 비트코인의 USD와 KRW 가격을 제공하며, 사용자 명령으로 알림을 시작하고 중지할 수 있습니다. 이 예제의 파일명은 ex3-bitcoin-bot.py입니다.

1분마다 비트코인 시세 알림 봇 만들기

환경 설정

이 튜토리얼을 시작하기 전에, Discord 봇 개발을 위한 기본적인 환경 설정이 필요합니다. 아래 링크의 가이드를 참고하여 Discord 개발자 포털에서 봇을 생성하고, 필요한 라이브러리를 설치하는 과정을 진행해주세요.

 

Discord 디스코드 봇 만들기: 설정부터 간단한 응답까지

  1. Python 3.7 이상
  2. discord.py 라이브러리
  3. python-dotenv 라이브러리
  4. aiohttp 라이브러리
  5. Discord 봇 토큰
  6. 비트코인 가격을 알림 받을 Discord 채널 ID

필요한 라이브러리는 다음 명령어로 설치할 수 있습니다.

pip install discord.py python-dotenv aiohttp

코드

ex3-bitcoin-bot.py 파일에 다음 코드를 작성합니다:

import os
import discord
from discord.ext import commands, tasks
import aiohttp
from dotenv import load_dotenv

# .env 파일에서 환경 변수 로드
load_dotenv()

intents = discord.Intents.default()
intents.message_content = True

bot = commands.Bot(command_prefix='!', intents=intents)

@bot.event
async def on_ready():
    print(f'{bot.user} 봇이 준비되었습니다!')
    print(f'CHANNEL_ID: {os.getenv("CHANNEL_ID")}')

async def get_bitcoin_price():
    async with aiohttp.ClientSession() as session:
        async with session.get('https://api.coingecko.com/api/v3/simple/price?ids=bitcoin&vs_currencies=usd,krw') as response:
            if response.status == 200:
                data = await response.json()
                usd_price = data['bitcoin']['usd']
                krw_price = data['bitcoin']['krw']
                return f'현재 비트코인 가격:\n${usd_price:,.2f} (USD)\n₩{krw_price:,.0f} (KRW)'
            else:
                return '죄송합니다. 현재 비트코인 가격을 가져올 수 없습니다.'

@tasks.loop(minutes=1)
async def bitcoin_price_task():
    print("bitcoin_price_task 실행 중...")
    channel_id = os.getenv('CHANNEL_ID')
    if channel_id:
        channel = bot.get_channel(int(channel_id))
        if channel:
            price_message = await get_bitcoin_price()
            await channel.send(price_message)
            print(f"메시지 전송 완료: {price_message}")
        else:
            print(f"채널을 찾을 수 없습니다. CHANNEL_ID: {channel_id}")
    else:
        print("CHANNEL_ID가 설정되지 않았습니다.")

@bitcoin_price_task.before_loop
async def before_bitcoin_price_task():
    await bot.wait_until_ready()
    print("bitcoin_price_task 시작 준비 완료")

@bot.command(name='start')
async def start_task(ctx):
    if not bitcoin_price_task.is_running():
        bitcoin_price_task.start()
        await ctx.send("비트코인 가격 알림을 시작합니다.")
    else:
        await ctx.send("이미 비트코인 가격 알림이 실행 중입니다.")

@bot.command(name='stop')
async def stop_task(ctx):
    if bitcoin_price_task.is_running():
        bitcoin_price_task.cancel()
        await ctx.send("비트코인 가격 알림을 중지합니다.")
    else:
        await ctx.send("비트코인 가격 알림이 실행 중이지 않습니다.")

# .env 파일에서 봇 토큰을 가져옵니다
bot.run(os.getenv('DISCORD_TOKEN'))

주요 기능 설명

  1. 비트코인 가격 조회: get_bitcoin_price() 함수는 CoinGecko API를 사용하여 비트코인의 USD와 KRW 가격을 가져옵니다.
  2. 주기적 알림: bitcoin_price_task() 함수는 @tasks.loop(minutes=1) 데코레이터를 사용하여 1분마다 실행되며, 지정된 채널에 비트코인 가격 정보를 보냅니다.
  3. 사용자 명령어:
    • !start: 비트코인 가격 알림을 시작합니다.
    • !stop: 비트코인 가격 알림을 중지합니다.
  4. 오류 처리 및 로깅: 주요 동작마다 콘솔에 로그를 출력하여 디버깅을 용이하게 합니다.

사용 방법

  1. 프로젝트 폴더에 .env 파일을 생성하고 다음 내용을 추가합니다:
  2. DISCORD_TOKEN=your_discord_bot_token_here CHANNEL_ID=your_channel_id_here
  3. 터미널에서 다음 명령어로 봇을 실행합니다:
  4. python ex3-bitcoin-bot.py
  5. Discord 서버에서 다음 명령어를 사용합니다:
    • !start: 비트코인 가격 알림 시작
    • !stop: 비트코인 가격 알림 중지

1분마다 비트코인 시세 알림 봇 만들기

주의사항

  • CoinGecko API의 사용량 제한에 주의해야 합니다. 실제 서비스에서는 더 긴 간격으로 설정하는 것이 좋습니다.
  • CHANNEL_ID를 올바르게 설정했는지 확인하세요. 채널 ID를 얻으려면 Discord 설정에서 개발자 모드를 활성화하고, 채널을 우클릭하여 "ID 복사"를 선택하면 됩니다.

확장 아이디어

  1. 여러 암호화폐의 가격을 동시에 보여주는 기능 추가
  2. 가격 변동 알림 기능 (예: 5% 이상 변동 시 알림)
  3. 차트 이미지 생성 및 전송 기능

이 튜토리얼을 통해 실시간으로 비트코인 시세를 알려주는 Discord 봇을 만드는 방법을 배웠습니다. 이를 기반으로 더 다양하고 유용한 기능을 가진 봇을 개발해 보세요!

728x90
반응형