안녕하세요 하이퀄리티의 개발자 중 한명인 키키입니다^^
제가 오늘부터 시간 날때마다 Discord.py 고급 기능 강좌를 달려 하는데 잘 봐주세용^^
주의!: 이 강좌는 파이썬 설치 같은 내용은 담고 있지 않으며 디스코드 봇을 만들수 있는 유저들 위주로 강의합니다(메시지 전송 등 기본적인 기능들만 알아도 되요)
클라이언트를 client라는 변수에 정의했을때를 기준으로 강의 합니다
1. 몆초마다 바뀌는 상테메시지
상테메시지는 봇의 명령어, 서버 수 등을 설명하기 위해서 쓰입니다.
그러면 가장 먼저 상테메시지를 정하는 방법을 알려드릴게요.
await client.change_presence(status = discord.Status.online, activity = discord.Game('상태메시지'))
이 코드를 살명하면 change_presence 함수는 상태메시지를 바꾸는 함수입니다.
여기서 status는 봇의 온라인, 자리비움, 오프라인 등의 상태를 정하는 항목이고 activity는 상태메시지입니다.
하지만 discord.py는 문자열이 아닌 특정 클래스로 상태메시지를 정하게 해주는데요, 그 클래스로 변환해주는 함수기 discord.Game('문자열') 입니다.
그렇게 상태메시지를 정할수 있습니다
근데 이렇게 하면 몆초마다 바뀌는 것이 아니기 때문에 다른 방법을 써야 합니다.
on_ready 이벤트 맨 아래줄에 await bt(['상테메시지 1', '상태메시지 2']) 이런식으로 나주세요.
상테메시지는 편집해서 늘려도 되고 bt는 우리가 만들 async 함수입니다
그리고 아무대나 아래 코드를 작성해주세요
async def bt(games): await client.wait_until_ready() while not client.is_closed(): for g in games: await client.change_presence(status = discord.Status.online, activity = discord.Game(g)) await asyncio.sleep(5)
이 코드는 몆초마다 상태메시지를 바꾸는 코드입니다
설명을 하면 bt 함수를 async로 만들었습니다
await client.wait_until_ready() 는 봇이 준비 될때까지 기다리는 코드로 아직 인켜진 상태면 계속 기다리고 있습니다
while not client.is_closed()는 클라이언트가 꺼지 있지 않을때, 즉 봇이 켜저 있을때 실행해서 봇이 꺼지면 반복문도 종료됩니다
for g in games는 games라는 리스트 안의 값들을 차례대로 g 에 넣는 반복문입니다
await asyncio.sleep(5) 는 5초 동안 쉬는 코드입니다(바꾸셔도 문제는 없어요)
이렇게 저 코드로 몆초마다 상태메시지를 바꿀수 있습니다
2. 봇의 채널 수
이번에는 먼저 전체 코드를 먼저 주겠습니다
ch = 0 for g in client.guilds: ch += len(g.channels)
이 코드는 비어있는 변수 ch를 0으로 정의하고 for g in client.guilds로 g라는 변수 안에 client.guilds의 각 값을 너주는 코드입니다.
len(g.channels)는 g 서버의 채널들 수로 ch에 더해줘서 반복문이 끝나면 ch에 봇의 채널 수가 담기게 됩니다
이 변수를 나중에 상태메시지에 써도 되고 봇 정보 이런곳에 쓰시면 됩니당
이제 강의를 마치겠습니당. 앞으로도 좋은 내용 가지고 올게요^^
https://discord.gg/2gxSqWu - 마인크래프트 개발자 디스코드
댓글이 없습니다.
새로운 댓글을 등록해 주세요!