728x90
반응형
Discord Bot 튜토리얼: 1분마다 비트코인 시세 알림 봇 만들기
Python을 사용하여 Discord에서 1분마다 자동으로 비트코인 시세를 알려주는 봇을 만드는 방법을 소개합니다. 이 봇은 지정된 채널에 매 분 비트코인의 USD와 KRW 가격을 제공하며, 사용자 명령으로 알림을 시작하고 중지할 수 있습니다. 이 예제의 파일명은 ex3-bitcoin-bot.py
입니다.
환경 설정
이 튜토리얼을 시작하기 전에, Discord 봇 개발을 위한 기본적인 환경 설정이 필요합니다. 아래 링크의 가이드를 참고하여 Discord 개발자 포털에서 봇을 생성하고, 필요한 라이브러리를 설치하는 과정을 진행해주세요.
Discord 디스코드 봇 만들기: 설정부터 간단한 응답까지
- Python 3.7 이상
- discord.py 라이브러리
- python-dotenv 라이브러리
- aiohttp 라이브러리
- Discord 봇 토큰
- 비트코인 가격을 알림 받을 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'))
주요 기능 설명
- 비트코인 가격 조회:
get_bitcoin_price()
함수는 CoinGecko API를 사용하여 비트코인의 USD와 KRW 가격을 가져옵니다. - 주기적 알림:
bitcoin_price_task()
함수는@tasks.loop(minutes=1)
데코레이터를 사용하여 1분마다 실행되며, 지정된 채널에 비트코인 가격 정보를 보냅니다. - 사용자 명령어:
!start
: 비트코인 가격 알림을 시작합니다.!stop
: 비트코인 가격 알림을 중지합니다.
- 오류 처리 및 로깅: 주요 동작마다 콘솔에 로그를 출력하여 디버깅을 용이하게 합니다.
사용 방법
- 프로젝트 폴더에
.env
파일을 생성하고 다음 내용을 추가합니다: DISCORD_TOKEN=your_discord_bot_token_here CHANNEL_ID=your_channel_id_here
- 터미널에서 다음 명령어로 봇을 실행합니다:
python ex3-bitcoin-bot.py
- Discord 서버에서 다음 명령어를 사용합니다:
!start
: 비트코인 가격 알림 시작!stop
: 비트코인 가격 알림 중지
주의사항
- CoinGecko API의 사용량 제한에 주의해야 합니다. 실제 서비스에서는 더 긴 간격으로 설정하는 것이 좋습니다.
CHANNEL_ID
를 올바르게 설정했는지 확인하세요. 채널 ID를 얻으려면 Discord 설정에서 개발자 모드를 활성화하고, 채널을 우클릭하여 "ID 복사"를 선택하면 됩니다.
확장 아이디어
- 여러 암호화폐의 가격을 동시에 보여주는 기능 추가
- 가격 변동 알림 기능 (예: 5% 이상 변동 시 알림)
- 차트 이미지 생성 및 전송 기능
이 튜토리얼을 통해 실시간으로 비트코인 시세를 알려주는 Discord 봇을 만드는 방법을 배웠습니다. 이를 기반으로 더 다양하고 유용한 기능을 가진 봇을 개발해 보세요!
728x90
반응형
'자동화 애플리케이션 > 챗봇 Chatbot' 카테고리의 다른 글
주기적으로 메시지를 보내는 디스코드 봇 만들기 (0) | 2024.07.06 |
---|---|
Discord 디스코드 봇 만들기 (0) | 2024.07.06 |
디스코드 서버 만들기 (0) | 2024.06.30 |
디스코드 가이드: 소개부터 기본 사용법까지 (0) | 2024.06.30 |