본문으로 건너뛰기

API

플래닛어스는 서버 내 정보에 쉽게 접근하기 위해 공식 API를 제공합니다.

국가 디스코드 서버에서 연동을 자동화하고 싶나요? 다른 사람의 정보를 쉽게 확인하고 싶다구요? 개발자분들. 지금이 기회입니다.

API 에 접근

API는 api.planetearth.kr 에서 접근할 수 있습니다. 모든 정보는 JSON 형식으로 반환됩니다.

사용 가능한 Lookup Endpoint

  • /discord?discord=[디스코드ID], /discord?name=[닉네임] 또는 /discord?uuid=[UUID]
  • /resident?name=[닉네임], /resident?uuid=[UUID] 또는 /resident?town=[마을이름]
  • /town?name=[마을이름] 또는 /town?uuid=[마을UUID]
  • /nation?name=[국가이름] 또는 /nation?uuid=[국가UUID]

사용 가능한 Bulk Lookup Endpoint

  • /resident/bulk
  • /town/bulk
  • /nation/bulk

사용 가능한 List Endpoint

  • /resident/list
  • /town/list
  • /nation/list

예제 코드

디스코드에서 !auth 를 쳤을 때 해당 유저가 Dev_Island 마을 소속일 경우 역할을 지급하고 별명을 닉네임으로 변경

import discord
import requests

# 봇 토큰
TOKEN = ""
# 역할 ID
ROLE_ID = ""

intents = discord.Intents.all()
client = discord.Client(intents=intents)

@client.event
async def on_ready():
print(f"{client.user}")

@client.event
async def on_message(message):
if message.author == client.user:
return

# !auth를 쳤을때
if message.content.startswith("!auth"):
# SENDER id 가져오기
author_id = message.author.id

# 디스코드 API
discord_url = f"https://api.planetearth.kr/discord?discord={author_id}"
discord_request = requests.get(discord_url)
discord_json = discord_request.json()

# 서버, 역할 가져오기
guild = message.guild
role = discord.utils.get(guild.roles, id=int(ROLE_ID))

# SUCCESS인지 확인
if discord_json["status"] == "SUCCESS":
discord_data = discord_json["data"][0]
# account_id = discord_data['discord'] 디스코드 ID
uuid = discord_data["uuid"] # 마인크래프트 UUID
town_url = f"https://api.planetearth.kr/resident?uuid={uuid}"
town_request = requests.get(town_url)
town_json = town_request.json()
town_data = town_json["data"][0]
town_name = town_data["town"]

# 마을 이름이 같을 때
if town_name == "Dev_Island":
# 마인크래프트 닉네임 가져오기
ign = town_data["name"]
# 역할 부여, 성공 메시지 전송, 마인크래프트 닉네임으로 별명 변경
await message.channel.send("인증에 성공했습니다! 권한을 지급합니다.")
# await message.channel.send(f"마을 {town_name}")
await message.author.add_roles(role)
await message.author.edit(nick=ign)

# FAILED인지 확인
elif town_json["status"] == "FAILED":
# 실패 메시지 전송
await message.channel.send("타우니 데이터를 가져올 수 없습니다.")
# 마을 이름이 같지 않을 때
elif town_name != "Dev_Island":
# 실패 메시지 전송
await message.channel.send("마을에 가입되지 않은 플레이어입니다.")
else:
# 오류 메시지 전송
await message.channel.send("오류가 발생했습니다. 관리자에게 문의해주세요.")
# FAILED인지 확인
elif discord_json["status"] == "FAILED":
# 실패 메시지 전송
await message.channel.send("플래닛어스 디스코드에 인증되지 않은 유저입니다.")
else:
# 오류 메시지 전송
await message.channel.send("오류가 발생했습니다. 관리자에게 문의해주세요.")

client.run(TOKEN)