본문 바로가기

디스코드 봇 개발일지

디스코드 자작봇 개발일지#18

유튜브 영상 예약기능 (음악기능)

기존에는 재생,정지,일시정지 기능만 있던 음악관련기능을

오늘은 예약기능 을 추가하였습니다.


https://youtu.be/C9ZPFTzHg7g


상단 영상을 참고하며 기능을 만들었습니다.

!예약 유튜브링크 를 입력하게되면

예약리스트에 영상이 올라가게됩니다.

!대기목록 보기 를 입력하게되면

현재 대기중인 유튜브 링크들이 나오게됩니다.

!대기목록 취소 를 입력하게되면

현재 대기중인 유튜브 영상들이 모두 대기취소 됩니다.

실행영상입니다.




본래 대기목록 보기 명령어를 사용하면 영상제목을 나오게끔 만들려 하였지만

실력 한계로....

유튜브 링크로 대체하였습니다.




아래는 예약관련기능 코드입니다.

musiclist=[]
queues={}
def check_queue(id):
if queues[id]!=[]:
player = queues[id].pop(0)
players[id] = player
del musiclist[0]
player.start()

예약대기중인 영상을 재생하고 예약목록에서 삭제하는 코드입니다.

위 코드는 코드 상단에 써주세요.


if message.content.startswith("!재생"):
server = message.server
voice_client = client.voice_client_in(server)
msg1 = message.content.split(" ")
url = msg1[1]
player = await voice_client.create_ytdl_player(url, after=lambda: check_queue(server.id))
players[server.id] = player
await client.send_message(message.channel, embed=discord.Embed(description="재생한다!!!!"))
player.start()

재생 명령어도 예약기능이 작동하게끔 코드를 수정하였습니다.

if message.content.startswith('!예약'):
msg1 = message.content.split(" ")
url = msg1[1]
server = message.server
voice_client = client.voice_client_in(server)
player = await voice_client.create_ytdl_player(url, after=lambda: check_queue(server.id))

if server.id in queues:
queues[server.id].append(player)
print('if 1 '+str(queues[server.id])) #queues배열 확인
else:
queues[server.id] = [player]
print('else 1' + str(queues[server.id]))#queues배열 확인
await client.send_message(message.channel,'예약 완료\n')
musiclist.append(url) #대기목록 링크

예약 명령어 코드입니다.


if message.content.startswith('!대기목록'):

server = message.server
msg1 = message.content.split(" ")
mList = msg1[1]
num = 0
bSize = len(musiclist)

if mList =='보기':
embed = discord.Embed(
title='대기중인 곡 들',
description='대기중.....',
colour=discord.Colour.blue()
)
for i in musiclist:
print('예약리스트 : ' + i)
embed.add_field(name='대기중인 곡', value=i, inline=False)
await client.send_message(message.channel, embed=embed)

if mList =='취소':
while num<bSize:
del musiclist[0]
num = num+1

del queues[server.id]
await client.send_message(message.channel,'예약중인 음악 모두 취소 완료')

!대기목록 보기, !대기목록 취소 명령어 코드입니다





예약기능을 만들면서 참고하였던 사이트, 영상 링크입니다.

http://mwultong.blogspot.com/2006/12/python-list-array-size-length.html

https://wikidocs.net/16


깃허브 전체코드 링크입니다.

https://github.com/YeChan39/YeChanParkDark

네이버 블로그 포스팅 주소입니다.

https://blog.naver.com/turnbf/221425516673