BOOMYA
2022.02.25
@BOOMYA님이 새 포스트를 작성했습니다.
[15일차]나만의 명령어를 만들어 보자(3)
(*작성한 코드도 길며 결과 이미지도 많아 포스트가 길어요!) 14일차에 만든 뼈대를 토대로 만든 영화추천 봇 코드입니다. #Cog/movie.py import discord from discord.ext import commands import json import random from bs4 import BeautifulSoup import requests class Movie(commands.Cog):     def __init__(self, client):         self.client = client         with open("./data/movie_snack.json", "r", encoding="utf-8") as f:             self.snackDict=json.load(f)             @commands.Cog.listener()     async def on_ready(self):         print("Movie Cog is ready")             @commands.command(name="영화추천")     async def recommand_movie(self, ctx, *keyword):         def checkMessage(message):             return message.author == ctx.author and message.channel == ctx.channel         while True:             top_categories = ["현재상영작", "상영예정작"]             embed = discord.Embed(title='다음 중 원하는 항목을 입력해주세요.', description=f'{top_categories}, 추천을 원치 않으면 "종료"를 입력해주세요.', color=discord.Color.orange())             await ctx.send(embed=embed) #선택지1                         message=await self.client.wait_for("message",check=checkMessage)             top_category=message.content                         if '종료' in top_category:                 embed=discord.Embed(title='', description='좋은 하루 보내세요!', color=discord.Color.blue())                 await ctx.send(embed=embed)                 break                             elif top_category == top_categories[0]:                 categories = ["예매율", "평점", "관람객"]                 embed = discord.Embed(title='다음 중 원하는 기준을 선택해주세요.', description=f'{categories}', color=discord.Color.dark_orange())                 await ctx.send(embed=embed) #선택지1.1                                 message=await self.client.wait_for("message", check=checkMessage)                 category = message.content                                 if category == categories[0]:                     keynum = 1                     choice="현재상영작(예매율순)"                 elif category == categories[1]:                     keynum = 2                     choice="현재상영작(평점순)"                 elif category == categories[2]:                     keynum = 3                     choice="현재상영작(관람객순)"                                     url = f"http://www.cgv.co.kr/movies/?lt=1&ot={keynum}"                         elif top_category == top_categories[1]:                 url = "http://www.cgv.co.kr/movies/pre-movies.aspx"                 choice="상영예정작"                             response = requests.get(url)             soup = BeautifulSoup(response.text, 'html.parser')                         box = soup.find("div", {"class":"sect-movie-chart"})             items = box.find_all("li")                         if len(items) > 3:                 limit = 3             else:                 limit = len(items)                         for item in items[:limit]:                 poster = item.find('div', {'class':'box-image'}).select_one('img').get('src')                 title = item.find('div', {'class':'box-contents'}).select_one('strong', {'class':'title'}).text                 reserve = item.find('strong', {'class':'percent'}).select_one('span').text                 age = item.find('span', {'class':'thumb-image'}).select_one('span', {'class':'ico-grade'}).text                                 if item == items[0]:                     embed = discord.Embed(title="MoV의 추천-영화편!", description=f"{choice} 중 top{limit} 작품들입니다.", color=discord.Color.dark_red())                 else:                     embed = discord.Embed(title="", description="", color=discord.Color.dark_red())                 embed.add_field(name="제목", value=title, inline=False)                 embed.set_thumbnail(url=poster)                 embed.add_field(name="연령제한", value=age)                 embed.add_field(name="예매율", value=reserve)                 await ctx.send(embed=embed)                             embed = discord.Embed(title="영화를 보며 드실 간식거리나 마실 음료 추천도 받으시겠습니까?", description="(응/아니)", color=discord.Color.red())             await ctx.send(embed=embed) #선택지2                             message = await self.client.wait_for("message", check = checkMessage)             answer = message.content                             if '응' in answer:                 snacks=["간식", "음료", "둘다"]                 snack = random.choice(self.snackDict["간식"])                 beverage = random.choice(self.snackDict["음료"])                                     embed = discord.Embed(title="다음 중 하나를 선택해주세요.", description=f"{snacks}", color=discord.Color.dark_purple())                 await ctx.send(embed=embed) #선택지2.1                 message = await self.client.wait_for("message", check = checkMessage)                 answer = message.content                                     if answer == snacks[0]:                     embed = discord.Embed(title="Mov의 추천-간식편!", description=f"영화보면서 {snack} 어떠세요?", color=discord.Color.purple())                     await ctx.send(embed=embed)                 elif answer == snacks[1]:                     embed = discord.Embed(title="Mov의 추천-간식편!", description=f"영화보면서 {beverage} 어떠세요?", color=discord.Color.purple())                     await ctx.send(embed=embed)                                         elif answer == snacks[2]:                     embed = discord.Embed(title="Mov의 추천-간식편!", description=f"영화보면서 {snack}, {beverage} 어떠세요?", color=discord.Color.purple())                     await ctx.send(embed=embed)                                             embed = discord.Embed(title="", description="MoV의 추천과 함께 즐거운 관람되세요! 안녕", color=discord.Color.magenta())                 await ctx.send(embed=embed)                 break                                                         elif '아니' in answer:                 embed = discord.Embed(title='', description="그럼 즐거운 관람되세요!", color=discord.Color.magenta())                 await ctx.send(embed=embed)                 break                 def setup(client):     client.add_cog(Movie(client)) 코드의 결과입니다. 다들 수고하셨습니다!
BOOMYA
2022.02.23
@BOOMYA님이 새 포스트를 작성했습니다.
[13일차]나만의 명령어를 만들어 보자
1일차에 영화추천을 받을 수 있는 봇을 만들고 싶다는 거에 맞춰서 명령어를 설정했다. 영화추천은 주어진 선택지를 완료하면 해당하는 유형 중 상위 3개의 영화를 봇이 알려준다. 그리고 영화를 보면서 간식거리를 먹는 경우도 있으니 원한다면 간식거리도 추천을 받을 수 있게 코드를 작성해봤다. *코드가 길며 결과를 보여주는 사진도 많아 포스트가 깁니다! 작성한 코드 #Cog/movie.py import discord from discord.ext import commands import json import random from bs4 import BeautifulSoup import requests class Movie(commands.Cog):     def __init__(self, client):         self.client = client         with open("./data/movie_snack.json", "r", encoding="utf-8") as f:             self.snackDict=json.load(f)             @commands.Cog.listener()     async def on_ready(self):         print("Movie Cog is ready")             @commands.command(name="영화추천")     async def recommand_movie(self, ctx, *keyword):         def checkMessage(message):             return message.author == ctx.author and message.channel == ctx.channel         while True:             top_categories = ["현재상영작", "상영예정작"]             embed = discord.Embed(title='다음 중 원하는 항목을 입력해주세요.', description=f'{top_categories}, 추천을 원치 않으면 "종료"를 입력해주세요.', color=discord.Color.orange())             await ctx.send(embed=embed)                         message=await self.client.wait_for("message",check=checkMessage)             top_category=message.content                         if '종료' in top_category:                 embed=discord.Embed(title='', description='좋은 하루 보내세요!', color=discord.Color.blue())                 await ctx.send(embed=embed)                 break #while문용 break                             elif top_category == top_categories[0]:                 categories = ["예매율", "평점", "관람객"]                 embed = discord.Embed(title='다음 중 원하는 기준을 선택해주세요.', description=f'{categories}', color=discord.Color.dark_orange())                 await ctx.send(embed=embed)                                 message=await self.client.wait_for("message", check=checkMessage)                 category = message.content                                 if category == categories[0]:                     keynum = 1                     choice="현재상영작(예매율순)"                 elif category == categories[1]:                     keynum = 2                     choice="현재상영작(평점순)"                 elif category == categories[2]:                     keynum = 3                     choice="현재상영작(관람객순)"                                     url = f"http://www.cgv.co.kr/movies/?lt=1&ot={keynum}"                         elif top_category == top_categories[1]:                 url = "http://www.cgv.co.kr/movies/pre-movies.aspx"                 choice="상영예정작"                             response = requests.get(url)             soup = BeautifulSoup(response.text, 'html.parser')                         box = soup.find("div", {"class":"sect-movie-chart"})             items = box.find_all("li")                         if len(items) > 3:                 limit = 3             else:                 limit = len(items)                         for item in items[:limit]:                 poster = item.find('div', {'class':'box-image'}).select_one('img').get('src')                 title = item.find('div', {'class':'box-contents'}).select_one('strong', {'class':'title'}).text                 reserve = item.find('strong', {'class':'percent'}).select_one('span').text                 age = item.find('span', {'class':'thumb-image'}).select_one('span', {'class':'ico-grade'}).text                                 if item == items[0]:                     embed = discord.Embed(title="MoV의 추천-영화편!", description=f"{choice} 중 top{limit} 작품들입니다.", color=discord.Color.dark_red())                 else:                     embed = discord.Embed(title="", description="", color=discord.Color.dark_red())                 embed.add_field(name="제목", value=title, inline=False)                 embed.set_thumbnail(url=poster)                 embed.add_field(name="연령제한", value=age)                 embed.add_field(name="예매율", value=reserve)                 await ctx.send(embed=embed)                 if item == items[2]:                     embed=discord.Embed(title="MoV의 영화 추천 어떠셨아요?", description="좋아/별로 로 답해주세요", color=discord.Color.dark_red())                                     await ctx.send(embed=embed)                                     message = await self.client.wait_for("message", check = checkMessage)                     answer = message.content                                     if '좋아' in answer:                         embed = discord.Embed(title="영화를 보며 드실 간식거리나 마실 음료 추천도 받으시겠습니까?", description="(응/아니)", color=discord.Color.red())                         await ctx.send(embed=embed)                                         message = await self.client.wait_for("message", check = checkMessage)                         answer = message.content                                         if '응' in answer:                             snacks=["간식", "음료", "둘다"]                             snack = random.choice(self.snackDict["간식"])                             beverage = random.choice(self.snackDict["음료"])                                                 embed = discord.Embed(title="다음 중 하나를 선택해주세요.", description=f"{snacks}", color=discord.Color.dark_purple())                             await ctx.send(embed=embed)                             message = await self.client.wait_for("message", check = checkMessage)                             answer = message.content                                                 if answer == snacks[0]:                                 embed = discord.Embed(title="Mov의 추천-간식편!", description=f"영화보면서 {snack} 어떠세요?", color=discord.Color.purple())                                 await ctx.send(embed=embed)                             elif answer == snacks[1]:                                 embed = discord.Embed(title="Mov의 추천-간식편!", description=f"영화보면서 {beverage} 어떠세요?", color=discord.Color.purple())                                 await ctx.send(embed=embed)                                                     elif answer == snacks[2]:                                 embed = discord.Embed(title="Mov의 추천-간식편!", description=f"영화보면서 {snack}, {beverage} 어떠세요?", color=discord.Color.purple())                                 await ctx.send(embed=embed)                                                         embed = discord.Embed(title="", description="MoV의 추천과 함께 즐거운 관람되세요! 안녕", color=discord.Color.magenta())                             await ctx.send(embed=embed)                             break                                                     elif '아니' in answer:                             embed = discord.Embed(title='', description="그럼 즐거운 관람되세요!", color=discord.Color.magenta())                             await ctx.send(embed=embed)                             break                     elif '별로' in answer:                         embed=discord.Embed(title='', description="더 발전하는 Mov가 되겠습니다 :-:", color=discord.Color.blue())                         await ctx.send(embed=embed)                         break                 def setup(client):     client.add_cog(Movie(client)) 코드의 결과!
BOOMYA
2022.02.22
@BOOMYA님이 새 포스트를 작성했습니다.
[12일차]크롤링 데이터 전송 명령어 추가하기
작성한 코드 import requests from bs4 import Beautifulsoup ... @commands.command(name='도서추천')     async def book_recommand(self, ctx, *args):         keyword = ''.join(args)         url = f"http://www.yes24.com/Product/Search?domain=ALL&query={keyword}"         response = requests.get(url)         soup = BeautifulSoup(response.text, 'html.parser')         box = soup.find("div", {"class":"sGoodsSecArea"})         items = box.find_all("div", {"class":"itemUnit"})         if len(items) > 5:             limit = 5         else:             limit = len(items)                 for item in items[:limit]:             thumbnaail = item.find('a', {'class':'lnk_img'}).select_one('img').get('data-original')             product = item.find('a', {'class':'gd_name'}).text             author = item.find('span', {'class':'info_auth'}).select_one('a').text             price = item.find('strong', {'class':'txt_num'}).select_one('em').text             grade = item.find('span', {'class':'rating_grade'})             if grade is not None: #평점이 존재하지 않은 경우를 위한 코드                 grade = grade.select_one('em').text             else:                 grade = "아직 평점이 입력되지 않았습니다." event = item.find('dl', {'class':'info_present'})             reserve = item.find('span', {'class':'reserv'}) if item == items[0]:                 embed = discord.Embed(title=f"{keyword} 관련 도서 추천", description="", color=discord.Color.dark_blue())             else:                 embed = discord.Embed(title="", description="", color=discord.Color.dark_blue())             embed.add_field(name="제목", value=product, inline=False)             embed.set_thumbnail(url=thumbnaail)             if event is not None: #이벤트가 진행 중인 도서일 경우 이벤트 내용을 보여주기                 event = event.select_one('dd').text                 embed.add_field(name="<이벤트 진행중>", value=event, inline=False)             if reserve is not None:                 reserve = reserve.select_one('em').text #에약판매를 진행 중인 도서일 경우                 embed.add_field(name='*주의', value=reserve, inline=False)             embed.add_field(name="저자", value=author)             embed.add_field(name="가격(원)", value=price)             embed.add_field(name="평점", value=grade)             await ctx.send(embed=embed) ... 출력 화면! 11일차에서 제시된 코드로 크롤링을 하면 정보가 나오지 않아 저번 크롤링 과정에서 사용했던 방식으로 크롤링을 진행했다.
BOOMYA
2022.02.18
@BOOMYA님이 새 포스트를 작성했습니다.
[10일차]일시정지, 다시시작 명령어 만들기
작성 코드 @commands.command(name='일시정지')     async def youtube_stop(self, ctx):         voice = ctx.voice_client         if voice.is_playing():             voice.pause()             embed = discord.Embed(                 title='', description='음악 재생을 일시중단합니다.', color=discord.Color.red())             await ctx.send(embed=embed)     @commands.command(name='다시재생')     async def youtube_restart(self, ctx):         voice = ctx.voice_client         if voice.is_paused():             voice.resume()             embed = discord.Embed(                 title='', description='멈춘 부분부터 다시 음악을 재생합니다.', color=discord.Color.blue())             await ctx.send(embed=embed) 실행결과를 내고 싶었으나 지난번부터 'NoneType' object has no attribute 'play'이라는 오류메세지와 함께 재생이 되지 않아 해당 코드가 정상적으로 작동을 하는지 확인할 수 없다. 코드가 잘못된 것인가 싶어서 포스트에 작성된 코드를 그대로 복붙을 해봤으나 동일한 결과 ffmeg의 버전을 잘못 다운 받았나 싶어서 다른 버전을 다운 받아도 동일한 결과 대체 이유가 뭔지...
BOOMYA
2022.02.17
@BOOMYA님이 새 포스트를 작성했습니다.
[9일차]디스코드에서 URL을 전송하면 나오는 Embed를 만들어 보세요.
작성한 코드 #Cog/homework.py ... class Homework(commands.Cog):     def __init__(self, client):         self.client = client         with open('./data/lunch.json', 'r', encoding='utf-8') as f:             self.lunchDict = json.load(f)         option = {             'format': 'bestaudio/best',             'noplaylist': True,         }         self.DL = YoutubeDL(option) ...     @commands.command(name='유튜브')     async def youtube(self, ctx, url):         data = self.DL.extract_info(url, download=False)         url = data['url']         title = data['title']         uploader = data['uploader']         uploader_url = data['uploader_url']         image_url = data['thumbnail']         embed = discord.Embed(title=title, url=url, color=discord.Color.red())         embed.set_author(name=uploader, url=uploader_url)         embed.add_field(name="조회수", value=data['view_count'], inline=True)         embed.add_field(name="평점", value=data['average_rating'], inline=True)         embed.add_field(name="좋아요 수", value=data['like_count'], inline=True)         embed.set_image(url=image_url)         await ctx.send(embed=embed) ... 출력 결과 솔직히 이번 부분은 잘 이해가 가지 않아서 다른 분들이 작성한 코드를 이용해서 완성했다 ㅠㅜ 음악재생 파트는 다시 공부를 해야겠다...
BOOMYA
2022.02.16
@BOOMYA님이 새 포스트를 작성했습니다.
[8일차]개인별 퀴즈 랭킹 추가하기
작성한 코드 #Cog/quizrank.py import discord from discord.ext import commands import json import asyncio class Rank(commands.Cog):     def __init__(self, client):         self.client = client         with open('./data/score.json', 'r', encoding='utf-8') as f:             self.rankDict = json.load(f)     @commands.Cog.listener()     async def on_ready(self):         print("Rank Cog is Ready")     @commands.command(name="퀴즈랭킹")     async def rank(self, ctx, arg=None):         rankers = list(self.rankDict.keys())         if arg == None:             embed = discord.Embed(                 title="전체 퀴즈 랭킹", description="전체 퀴즈 랭킹입니다.\n한 문제를 맞출 때 마다 1점이 증가해요!", color=discord.Color.green())             for i in range(len(rankers)):                 ranker = rankers[i]                 score = self.rankDict[ranker]                 n = i+1                 embed.add_field(name=f"{n}.{ranker}",                                 value=f"점수 :{score}점", inline=False)             await ctx.send(embed=embed)         else:             ranker = arg             score = self.rankDict[ranker]             if ranker in rankers:                 rank = 0             for i in range(len(rankers)):                 if rankers[i] == ranker:                     rank = i+1             embed = discord.Embed(                 title="개인 퀴즈 랭킹", description="개인 퀴즈 랭킹입니다.", color=discord.Color.purple()             )             embed.add_field(                 name=f"{ranker}", value=f"{ranker}님은 {score}점으로 {rank}등입니다", inline=False)             await ctx.send(embed=embed) def setup(client):     client.add_cog(Rank(client)) 개인 랭킹 결과! 이름에 띄어쓰기는 어떻게 하는지 잘 모르겠어요 ㅠ.ㅠ
BOOMYA
2022.02.15
@BOOMYA님이 새 포스트를 작성했습니다.
[7일차]퀴즈 랭킹 명령어 추가하기
작성한 코드 #Cog/quizrank.py import discord from discord.ext import commands import json import asyncio class Rank(commands.Cog):     def __init__(self, client):         self.client = client         with open('./data/score.json', 'r', encoding='utf-8') as f:             self.rankDict = json.load(f)     @commands.Cog.listener()     async def on_ready(self):         print("Rank Cog is Ready")     @commands.command(name="퀴즈랭킹")     async def rank(self, ctx):         rankers = list(self.rankDict.keys())         embed = discord.Embed(             title="전체 퀴즈 랭킹", description="전체 퀴즈 랭킹입니다.\n한 문제를 맞출 때 마다 1점이 증가해요!", color=discord.Color.green())         for i in range(len(rankers)):             ranker = rankers[i]             score = self.rankDict[ranker]             n = i+1             embed.add_field(name=f"{n}.{ranker}",                             value=f"점수 :{score}점", inline=False)         await ctx.send(embed=embed) def setup(client):     client.add_cog(Rank(client)) 출력 화면
BOOMYA
2022.02.14
@BOOMYA님이 새 포스트를 작성했습니다.
[6일차]퀴즈를 맞힐 때마다 점수 저장하기
작성한 코드 from unicodedata import name from discord.ext import commands import json import random import asyncio import csv class Quiz(commands.Cog):     def __init__(self, client):         self.client = client         self.quizDict = {}         with open("./data/quiz.csv", "r", encoding='utf-8') as f:             reader = csv.reader(f)             for row in reader:                 self.quizDict[row[0]] = row[1]     @commands.Cog.listener()     async def on_ready(self):         print("Quiz Cog is ready")     @commands.command(name="퀴즈")     async def quiz(self, ctx):         problemList = list(self.quizDict.keys())         problem = random.choice(problemList)         answer = self.quizDict[problem]         await ctx.send(problem)         def checkAnswer(message):             if message.channel == ctx.channel and answer in message.content:                 return True             else:                 return False         try:             # wait_for 이벤트, 시간제한, 이벤트 유효성 검사 함수 3개의 인자가 들어가야함             await self.client.wait_for("message", timeout=10.0, check=checkAnswer)             await ctx.send(f"정답이에요! 1점 획득!")             with open("./data/score.json", "r", encoding='utf-8') as f:                 scoreDict = json.load(f)                 if ctx.author.name not in scoreDict:                     scoreDict[ctx.author.name] = 0                 else:                     scoreDict[ctx.author.name] += 1                 with open("./data/score.json", "w", encoding='utf-8') as f:                     json.dump(scoreDict, f, ensure_ascii=False)         except asyncio.TimeoutError:             await ctx.send(f"땡! 시간초과에요! 정답은 {answer}입니닷!!") def setup(client):     client.add_cog(Quiz(client)) 퀴즈 진행한 화면(생각보다 퀴즈가 어렵따.....) score.json {"뿐뿐뿜": 2}
BOOMYA
2022.02.11
@BOOMYA님이 새 포스트를 작성했습니다.
[5일차]두 개의 음식 종류 입력받기
homework의 코드 from discord.ext import commands import json import random class Homework(commands.Cog):     def __init__(self, client):         self.client = client         with open('./data/lunch.json', 'r', encoding='utf-8') as f:             self.lunchDict = json.load(f)     @commands.Cog.listener()     async def on_ready(self):         print("homework Cog is Ready")     @commands.command(name="이름")     async def _ping(self, ctx):         await ctx.send(ctx.author.name)     @commands.command(name='뭐먹지')     async def recommand_today_lunch(self, ctx, arg1=None, arg2=None):         if arg1 == None and arg2 == None:             categories = list(self.lunchDict.keys())             category = random.choice(categories)             lunch = random.choice(self.lunchDict[category])             await ctx.send(f"오늘 점심은 {category}, 그 중에서 {lunch} 어떠세요?")         elif arg2 == None:             category = arg1             lunch = random.choice(self.lunchDict[category])             await ctx.send(f"오늘 점심은 {lunch} 어떠세요?")         else:             category = random.choice([arg1, arg2])             lunch = random.choice(self.lunchDict[category])             await ctx.send(f"오늘 점심은 {arg1}, {arg2} 중 {category}의 {lunch} 어떠세요?") def setup(client):     client.add_cog(Homework(client)) 각 경우별 결과 ... 배고프당
koukohye61
2022.02.08
@koukohye61님이
[3일차]명령어를 입력한 사람의 이름을 받아오기
포스트를 좋아합니다.
koukohye61
2022.02.08
@koukohye61님이
[3일차]명령어를 입력한 사람의 이름을 받아오기
포스트에 댓글을 남겼습니다.
bellas2kyung
2022.02.07
@bellas2kyung님이
[2일차]봇 실행화면 인증하기
포스트에 댓글을 남겼습니다.
bellas2kyung
2022.02.07
@bellas2kyung님이
[2일차]봇 실행화면 인증하기
포스트를 좋아합니다.
bellas2kyung
2022.02.04
@bellas2kyung님이
[1일차] 내가 구현하고 싶은 챗봇의 기능
포스트에 댓글을 남겼습니다.
bellas2kyung
2022.02.04
@bellas2kyung님이
[1일차] 내가 구현하고 싶은 챗봇의 기능
포스트를 좋아합니다.