[Python] 디스코드 봇에 환율 확인 기능 추가

2023. 2. 12. 13:40·Study/Python

갑자기 환율을 체크할 일이 많아지다 보니 일일이 웹을 켜서 확인하는 것이 너무 귀찮았다.

그래프도 뭣도 필요없고 딱 금액만 나오면 되기 때문에 봇에 간단히 기능을 추가했다.

 

 

1. 환율 API

먼저 환율 데이터를 가져올 API가 필요했다.

개발자 등록하고 API 키 발급받고 하기 너무 귀찮았다. 그러던 중 아래의 환율 API를 발견했다.

Free Currency Rates API

 

GitHub - fawazahmed0/currency-api: Free Currency Exchange Rates API with 150+ Currencies & No Rate Limits

Free Currency Exchange Rates API with 150+ Currencies & No Rate Limits - GitHub - fawazahmed0/currency-api: Free Currency Exchange Rates API with 150+ Currencies & No Rate Limits

github.com

위 API는 키를 발급할 필요도 없고 URL 구조만 잘 맞춰서 GET 요청을 보내기만 하면 끝이었다.

그럼 바로 봇에 쓰기 위해, 이를 이용한 클래스를 작성했다.

 

2. 클래스 작성

import requests

class Exchange():
    
    # 타이완 달러 > 한국 원만 계산
    def NTtoKRW(twd):
        request = requests.get("https://cdn.jsdelivr.net/gh/fawazahmed0/currency-api@1/latest/currencies/twd/krw.min.json")

        result = request.json()
        total = result['krw'] * twd

        return total

    # 화폐 코드 입력하여 API가 지원하는 모든 화폐단위에 대한 환율 제공
    def exchCur(src, amount, dst):
        request = requests.get(f"https://cdn.jsdelivr.net/gh/fawazahmed0/currency-api@1/latest/currencies/{src}/{dst}.min.json")

        result = request.json()
        total = result[f'{dst}'] * amount

        return total

난 타이완 달러를 자주 확인해야 하기 때문에 저것만 바로 빼놨다.

아래는 KRW, USD, GBP 등 3자리 국가 코드를 입력해 결과를 받을 수 있게 했다.

클래스를 다 작성 했으니 이제 봇으로 넘어간다.

 

3. 봇 명령어 작성 및 결과

@client.tree.command()
@app_commands.describe(twd='신 타이완 달러')
async def t2k(interaction: discord.Interaction, twd: float):
    """신 타이완 달러를 원화로 표시"""

    result = ex.NTtoKRW(twd)
    await interaction.response.send_message(f"NT$ {twd}는 원화로 {result}원", ephemeral=True)

@client.tree.command()
@app_commands.describe(src='변환할 화폐', amount='돈의 양', dst='변환 목적 화폐')
async def exchange(interaction: discord.Interaction, src: str, amount: float, dst: str):
    """환율 계산"""

    result = ex.exchCur(src, amount, dst)
    src = src.upper()
    dst = dst.upper()
    
    await interaction.response.send_message(f"{src} {amount} to {dst} \n {result}", ephemeral=True)

위와 같이 명령어를 만들었다.

지금 보니 NTtoKRW()은 네이밍 컨벤션도 개판이고 그냥 exchCur(twd, amount, krw)로 해결할 수 있다. 바로 개선.

F-String을 사용해 결과를 단순 텍스트 메세지로 출력하고 ephemeral을 활성화해 자신만 볼 수 있게 했다.

이걸 실제로 실행한 결과는 아래와 같다.

 

보기 힘든가?

일단 결과는 잘 뱉어준다.

난 여기서 만족하지만 나만 쓰려고 만든 봇은 아니기 때문에 긴 소수점 부분을 정리하고 콤마를 삽입할 것이다.

\n 양쪽에 공백이 있어서 생기는 미묘한 불편함도 있다.

Exchange() 클래스를 아래와 같이 수정했다.

import requests

class Exchange():

    # 화폐 코드 입력하여 API가 지원하는 모든 화폐단위에 대한 환율 제공
    def exchCur(src, amount, dst):
        request = requests.get(f"https://cdn.jsdelivr.net/gh/fawazahmed0/currency-api@1/latest/currencies/{src}/{dst}.min.json")

        result = request.json()
        total = result[f'{dst}'] * amount

        total = round(total, 2)
        total = format(total, ',')

        return total

NTtoKRW()는 삭제했다.

소수점은 두번째 자리에서 끊게 했고, 보기 좋게 하기 위해 콤마를 추가했다.

하는 김에 입력값을 결과에 표현하는 부분도 정리했다.

아래는 개선 후 실행한 결과이다.

 

훨씬 보기 좋은 것 같다

입력값을 출력하는 부분에선 소수점을 정리하지 않았다.

환율 계산 결과를 출력하는 부분도 정상적으로 3자리마다 콤마를 찍어주고, 소수점도 정리되었다.

필요한 조치는 다 취한 느낌이다.

 

4. 마무리

임베드로 좀 꾸며볼까 했는데, 만족스러운 디자인 구성이 떠오르지 않는다.

왠지 그래프도 넣어야 할 것 같고 내가 만족하려면 환율 웹사이트처럼 많은 정보를 담아야 할 것 같다...

이건 나중에 내키면 건드려 볼 예정.

'Study > Python' 카테고리의 다른 글

[Python, AWS] csv에서 DynamoDB에로의 교체  (0) 2023.05.10
[Python] 로깅 클래스 추가  (0) 2023.04.03
[Python] 봇에 Epoch Converter 추가  (0) 2023.03.29
[Python] 봇의 명령어 실행 결과를 csv 형식으로 저장하기  (0) 2023.01.22
[Python] CLOUDTYPE으로 디스코드 봇 배포  (0) 2023.01.17
'Study/Python' 카테고리의 다른 글
  • [Python] 로깅 클래스 추가
  • [Python] 봇에 Epoch Converter 추가
  • [Python] 봇의 명령어 실행 결과를 csv 형식으로 저장하기
  • [Python] CLOUDTYPE으로 디스코드 봇 배포
BVM
BVM
  • BVM
    E:\
    BVM
  • 전체
    오늘
    어제
    • 분류 전체보기 (168)
      • Thoughts (14)
      • Study (69)
        • Japanese (3)
        • C++ & C# (46)
        • Javascript (3)
        • Python (14)
        • Others (3)
      • Play (1)
        • Battlefield (1)
      • Others (11)
      • Camp (73)
        • T.I.L. (57)
        • Temp (1)
        • Standard (10)
        • Challenge (3)
        • Project (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

    • 본 블로그 개설의 목적
  • 인기 글

  • 태그

    IOCP
    베데스다
    cloudtype
    클라우드
    서버
    Dalamud
    Python
    네트워크 프로그래밍
    포인터
    Selenium
    FF14
    C++
    JS
    bot
    discord
    Asio
    프로그래머스
    docker
    c#
    로깅
    Server
    네트워크
    Network
    boost
    db
    스타필드
    암호화
    7계층
    OSI
    discord py
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.2
BVM
[Python] 디스코드 봇에 환율 확인 기능 추가
상단으로

티스토리툴바