From 4c58a9e1a771c7cdcd2f673519745a560aadf87f Mon Sep 17 00:00:00 2001 From: Myned Date: Sun, 31 Dec 2017 21:22:38 -0500 Subject: [PATCH] WIP music cog --- src/cogs/music.py | 57 ++++++++++++++++++++++++++++++++++++++++++++ src/cogs/periodic.py | 8 +++++++ src/run.py | 8 +++---- src/temp/__init__.py | 0 src/utils/utils.py | 1 + 5 files changed, 70 insertions(+), 4 deletions(-) create mode 100644 src/cogs/music.py create mode 100644 src/temp/__init__.py diff --git a/src/cogs/music.py b/src/cogs/music.py new file mode 100644 index 0000000..6f44964 --- /dev/null +++ b/src/cogs/music.py @@ -0,0 +1,57 @@ +import asyncio +import json +from datetime import datetime as dt +from urllib import parse +import re +from pprint import pprint + +import discord as d +from discord import errors as err +from discord.ext import commands as cmds +from discord.ext.commands import errors as errext +import gmusicapi as gpm +import googleapiclient as gapic +import apiclient as apic + +from misc import exceptions as exc +from misc import checks +from utils import utils as u + + +class Music: + + def __init__(self, bot): + self.bot = bot + + self.yt_service = apic.discovery.build('youtube', 'v3', developerKey=u.secrets['client_secrets']['client_secret']) + + @cmds.group(aliases=['pl'], brief='(G) Play music', description='Play music from YouTube, Soundcloud, or Google Play Music') + async def play(self, ctx): + print(ctx.invoked_subcommand) + + @play.command(name='youtube', aliases=['you', 'tube', 'yt', 'y']) + async def _play_youtube(self, ctx, *videos): + try: + if not videos: + raise exc.MissingArgument + + vids = [] + + for video in videos: + if 'http' in video and 'youtube' in video: + vids.append(parse.parse_qs(parse.urlparse(video).query)['v'][0]) + else: + vids.append(video) + + print(vids) + + response = self.yt_service.videos().list(part='snippet', id=','.join(vids)).execute() + pprint(response) + + except exc.MissingArgument: + await ctx.send('**Invalid youtube url or ID**', delete_after=7) + await ctx.message.add_reaction('\N{CROSS MARK}') + + @play.command(name='googleplaymusic', aliases=['googleplay', 'googlemusic', 'playmusic', 'play', 'gpm']) + async def _play_googleplaymusic(self, ctx, query): + pass diff --git a/src/cogs/periodic.py b/src/cogs/periodic.py index 49a85c5..1f36b88 100644 --- a/src/cogs/periodic.py +++ b/src/cogs/periodic.py @@ -23,3 +23,11 @@ class Post: async def _check_posts(self, user, channel): pass + + @cmds.group(aliases=['update', 'up', 'u']) + async def updates(self, ctx): + pass + + @updates.command(name='googleplaymusic', aliases=['googlemusic', 'playmusic', 'music', 'gpm']) + async def _updates_googleplaymusic(self, ctx): + pass diff --git a/src/run.py b/src/run.py index 933a153..ed72b9d 100644 --- a/src/run.py +++ b/src/run.py @@ -70,9 +70,11 @@ async def test(ctx): @bot.event async def on_ready(): if not checks.ready: - from cogs import booru, info, management, owner, tools + # d.opus.load_opus('opuslib') - for cog in (tools.Utils(bot), owner.Bot(bot), owner.Tools(bot), management.Administration(bot), info.Info(bot), booru.MsG(bot)): + from cogs import booru, info, management, music, owner, tools + + for cog in (tools.Utils(bot), owner.Bot(bot), owner.Tools(bot), management.Administration(bot), music.Music(bot), info.Info(bot), booru.MsG(bot)): bot.add_cog(cog) print(f'COG : {type(cog).__name__}') @@ -183,8 +185,6 @@ async def on_guild_remove(guild): print(f'STOPPED : {task} in #{channel.id}') u.dump(u.tasks, 'cogs/tasks.pkl') -# d.opus.load_opus('opus') - async def wait(voice): asyncio.sleep(5) diff --git a/src/temp/__init__.py b/src/temp/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/utils/utils.py b/src/utils/utils.py index 4c865b0..55e1b9f 100644 --- a/src/utils/utils.py +++ b/src/utils/utils.py @@ -85,6 +85,7 @@ def dump(obj, filename, *, json=False): settings = setdefault('misc/settings.pkl', {'del_ctx': [], 'prefixes': {}}) tasks = setdefault('cogs/tasks.pkl', {'auto_del': [], 'auto_rev': [], 'periodic_gpm': []}) temp = setdefault('temp/temp.pkl', {'startup': ()}) +secrets = setdefault('secrets.json', {'client_secrets': {'client_id': '', 'client_secret': ''}}, json=True) RATE_LIMIT = 2.2 color = d.Color(0x1A1A1A)