본문 바로가기

디스코드 봇 개발일지

디스코드 봇 개발일지#19

유튜브 검색후 선택 재생기능

기존에는 검색기능만 하였지만

검색후 선택하여 재생할 수 있게 만들어봤습니다.








!검색 명령어로 원하는 키워드를 검색한 후

마음에 드는 영상의 번호를 입력해 재생합니다.

소스코드입니다.

코드 상단에

searchYoutubeHref={} # 유튜브 하이퍼링크 모음

을 입력해주세요



if message.content.startswith('!검색'):
Text = ""
learn = message.content.split(" ")
vrsize = len(learn) # 배열크기
vrsize = int(vrsize)
for i in range(1, vrsize): # 띄어쓰기 한 텍스트들 인식함
Text = Text + " " + learn[i]
encText = Text

chromedriver_dir = r'C:\selum\chromedriver_win32\chromedriver.exe' #크롬드라이버 경로
driver = webdriver.Chrome(chromedriver_dir)
driver.get('https://www.youtube.com/results?search_query='+encText) #유튜브 검색링크
source = driver.page_source
bs = bs4.BeautifulSoup(source, 'lxml')
entire = bs.find_all('a', {'id': 'video-title'}) # a태그에서 video title 이라는 id를 찾음

embed = discord.Embed(
title="영상들!",
description="검색한 영상 결과",
colour=discord.Color.blue())

for i in range(0, 5):
entireNum = entire[i]
entireText = entireNum.text.strip() # 영상제목
print(entireText)
test1 = entireNum.get('href') # 하이퍼링크
print(test1)
rink = 'https://www.youtube.com'+test1
# embed.add_field(name=str(i+1)+'번째 영상',value=entireText + '\n링크 : '+rink)
embed.add_field(name=str(i + 1) + '번째 영상', value='\n' + '[%s](<%s>)' % (entireText, rink),
inline=False) # [텍스트](<링크>) 형식으로 적으면 텍스트 하이퍼링크 만들어집니다
searchYoutubeHref[i] = rink
await client.send_message(message.channel,embed=embed)

검색명령어는 검색한 영상들이 영상제목으로 보이게끔 변경하였습니다

if message.content.startswith('1'):

if not searchYoutubeHref: #저장된 하이퍼링크가 없다면
print('searchYoutubeHref 안에 값이 존재하지 않습니다.')
await client.send_message(message.channel, embed=discord.Embed(description="검색한 영상이 없습니다."))
else:
print(searchYoutubeHref[0])
server = message.server
voice_client = client.voice_client_in(server)
url = searchYoutubeHref[0]
player = await voice_client.create_ytdl_player(url, after=lambda: check_queue(server.id))
print(player.is_playing())
players[server.id] = player
await client.send_message(message.channel, embed=discord.Embed(description="재생한다!!!!"))
print(player.is_playing())
player.start()

for i in range(0,5):
del searchYoutubeHref[i]

if message.content.startswith('2'):

if not searchYoutubeHref:
print('searchYoutubeHref 안에 값이 존재하지 않습니다.')
await client.send_message(message.channel, embed=discord.Embed(description="검색한 영상이 없습니다."))
else:
print(searchYoutubeHref[1])
server = message.server
voice_client = client.voice_client_in(server)
url = searchYoutubeHref[1]
player = await voice_client.create_ytdl_player(url, after=lambda: check_queue(server.id))
print(player.is_playing())
players[server.id] = player
await client.send_message(message.channel, embed=discord.Embed(description="재생한다!!!!"))
print(player.is_playing())
player.start()

for i in range(0,5):
del searchYoutubeHref[i]

if message.content.startswith('3'):

if not searchYoutubeHref:
print('searchYoutubeHref 안에 값이 존재하지 않습니다.')
await client.send_message(message.channel, embed=discord.Embed(description="검색한 영상이 없습니다."))
else:
print(searchYoutubeHref[2])
server = message.server
voice_client = client.voice_client_in(server)
url = searchYoutubeHref[2]
player = await voice_client.create_ytdl_player(url, after=lambda: check_queue(server.id))
print(player.is_playing())
players[server.id] = player
await client.send_message(message.channel, embed=discord.Embed(description="재생한다!!!!"))
print(player.is_playing())
player.start()

for i in range(0,5):
del searchYoutubeHref[i]

if message.content.startswith('4'):

if not searchYoutubeHref:
print('searchYoutubeHref 안에 값이 존재하지 않습니다.')
await client.send_message(message.channel, embed=discord.Embed(description="검색한 영상이 없습니다."))
else:
print(searchYoutubeHref[3])
server = message.server
voice_client = client.voice_client_in(server)
url = searchYoutubeHref[3]
player = await voice_client.create_ytdl_player(url, after=lambda: check_queue(server.id))
print(player.is_playing())
players[server.id] = player
await client.send_message(message.channel, embed=discord.Embed(description="재생한다!!!!"))
print(player.is_playing())
player.start()

for i in range(0,5):
del searchYoutubeHref[i]

if message.content.startswith('5'):

if not searchYoutubeHref:
print('searchYoutubeHref 안에 값이 존재하지 않습니다.')
await client.send_message(message.channel, embed=discord.Embed(description="검색한 영상이 없습니다."))
else:
print(searchYoutubeHref[4])
server = message.server
voice_client = client.voice_client_in(server)
url = searchYoutubeHref[4]
player = await voice_client.create_ytdl_player(url, after=lambda: check_queue(server.id))
print(player.is_playing())
players[server.id] = player
await client.send_message(message.channel, embed=discord.Embed(description="재생한다!!!!"))
print(player.is_playing())
player.start()

for i in range(0,5):
del searchYoutubeHref[i]

저장된 하이퍼 링크가 없다면 검색한 영상이 없다고 출력하고

저장된 하이퍼 링크가 있다면 재생을 하게 됩니다.

전체소스 코드입니다.


https://github.com/YeChan39/YeChanParkDark


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

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