mirror of
https://github.com/myned/modufur.git
synced 2024-11-01 21:02:38 +00:00
WIP YouTube upload command
This commit is contained in:
parent
89329f52c3
commit
1415c92fcc
1 changed files with 41 additions and 19 deletions
|
@ -1,4 +1,5 @@
|
||||||
import asyncio
|
import asyncio
|
||||||
|
import datetime as dt
|
||||||
import discord
|
import discord
|
||||||
import httplib2
|
import httplib2
|
||||||
import mimetypes
|
import mimetypes
|
||||||
|
@ -8,22 +9,18 @@ import tempfile
|
||||||
import traceback
|
import traceback
|
||||||
import webbrowser
|
import webbrowser
|
||||||
from discord.ext import commands
|
from discord.ext import commands
|
||||||
|
#from run import config
|
||||||
from cogs import booru
|
from cogs import booru
|
||||||
from misc import checks
|
from misc import checks
|
||||||
from misc import exceptions as exc
|
from misc import exceptions as exc
|
||||||
from utils import formatter
|
from utils import formatter
|
||||||
|
|
||||||
from apiclient.discovery import build
|
from apiclient.discovery import build
|
||||||
from apiclient.http import MediaFileUpload
|
from apiclient import http
|
||||||
from oauth2client.client import flow_from_clientsecrets
|
from oauth2client.client import flow_from_clientsecrets
|
||||||
|
youtube = None
|
||||||
|
|
||||||
# flow = flow_from_clientsecrets('../client_secrets.json', scope='https://www.googleapis.com/auth/youtube.upload', login_hint='botmyned@gmail.com', redirect_uri='urn:ietf:wg:oauth:2.0:oob')
|
tempfile.tempdir = os.getcwd()
|
||||||
# flow.params['access_type'] = 'offline'
|
|
||||||
# webbrowser.open_new(flow.step1_get_authorize_url())
|
|
||||||
# credentials = flow.step2_exchange(input('Authorization code: '))
|
|
||||||
# youtube = build('youtube', 'v3', http=credentials.authorize(httplib2.Http()))
|
|
||||||
|
|
||||||
tempfile.tempdir = '../temp'
|
|
||||||
|
|
||||||
command_dict = {}
|
command_dict = {}
|
||||||
|
|
||||||
|
@ -41,7 +38,7 @@ class Utils:
|
||||||
print(command_dict)
|
print(command_dict)
|
||||||
await ctx.invoke(command_dict.get(str(ctx.message.author.id), {}).get('command', None), args)
|
await ctx.invoke(command_dict.get(str(ctx.message.author.id), {}).get('command', None), args)
|
||||||
except Exception:
|
except Exception:
|
||||||
await ctx.send(exc.base + '\n```python' + traceback.format_exc(limit=1) + '```')
|
await ctx.send(exc.base + '\n```' + traceback.format_exc(limit=1) + '```')
|
||||||
traceback.print_exc(limit=1)
|
traceback.print_exc(limit=1)
|
||||||
|
|
||||||
# [prefix]ping -> Pong!
|
# [prefix]ping -> Pong!
|
||||||
|
@ -52,7 +49,7 @@ class Utils:
|
||||||
try:
|
try:
|
||||||
await ctx.send(ctx.message.author.mention + ' 🏓 `' + str(int(self.bot.latency * 1000)) + 'ms`', delete_after=5)
|
await ctx.send(ctx.message.author.mention + ' 🏓 `' + str(int(self.bot.latency * 1000)) + 'ms`', delete_after=5)
|
||||||
except Exception:
|
except Exception:
|
||||||
await ctx.send(exc.base + '\n```python' + traceback.format_exc(limit=1) + '```')
|
await ctx.send(exc.base + '\n```' + traceback.format_exc(limit=1) + '```')
|
||||||
traceback.print_exc(limit=1)
|
traceback.print_exc(limit=1)
|
||||||
command_dict.setdefault(str(ctx.message.author.id), {}).update({'command': ctx.command})
|
command_dict.setdefault(str(ctx.message.author.id), {}).update({'command': ctx.command})
|
||||||
|
|
||||||
|
@ -60,9 +57,9 @@ class Utils:
|
||||||
@checks.del_ctx()
|
@checks.del_ctx()
|
||||||
async def prefix(self, ctx):
|
async def prefix(self, ctx):
|
||||||
try:
|
try:
|
||||||
await ctx.send('**Prefix:** `,` or ' + ctx.me.mention)
|
await ctx.send('**Prefix:** `,`')
|
||||||
except Exception:
|
except Exception:
|
||||||
await ctx.send(exc.base + '\n```python' + traceback.format_exc(limit=1) + '```')
|
await ctx.send(exc.base + '\n```' + traceback.format_exc(limit=1) + '```')
|
||||||
traceback.print_exc(limit=1)
|
traceback.print_exc(limit=1)
|
||||||
|
|
||||||
@commands.group(name=',send', aliases=[',s'], hidden=True)
|
@commands.group(name=',send', aliases=[',s'], hidden=True)
|
||||||
|
@ -78,17 +75,42 @@ class Utils:
|
||||||
async def send_user(self, ctx, user, *message):
|
async def send_user(self, ctx, user, *message):
|
||||||
await discord.utils.get(self.bot.get_all_members(), id=int(user)).send(formatter.tostring(message))
|
await discord.utils.get(self.bot.get_all_members(), id=int(user)).send(formatter.tostring(message))
|
||||||
|
|
||||||
|
@commands.command(aliases=['authenticateupload', 'authupload', 'authup', 'auth'])
|
||||||
|
async def authenticate_upload(self, ctx):
|
||||||
|
global youtube
|
||||||
|
flow = flow_from_clientsecrets('client_secrets.json', scope='https://www.googleapis.com/auth/youtube.upload', login_hint='botmyned@gmail.com', redirect_uri='urn:ietf:wg:oauth:2.0:oob')
|
||||||
|
flow.params['access_type'] = 'offline'
|
||||||
|
webbrowser.open_new_tab(flow.step1_get_authorize_url())
|
||||||
|
credentials = flow.step2_exchange(input('Authorization code: '))
|
||||||
|
youtube = build('youtube', 'v3', http=credentials.authorize(http.build_http()))
|
||||||
|
print('Service built.')
|
||||||
@commands.command(aliases=['up', 'u', 'vid', 'v'])
|
@commands.command(aliases=['up', 'u', 'vid', 'v'])
|
||||||
@checks.is_listed()
|
@checks.is_listed()
|
||||||
async def upload(self, ctx):
|
async def upload(self, ctx):
|
||||||
global youtube
|
global youtube
|
||||||
|
attachments = ctx.message.attachments
|
||||||
try:
|
try:
|
||||||
print(mimetypes.guess_type(ctx.message.attachments[0].filename))
|
if not attachments:
|
||||||
with tempfile.TemporaryFile() as temp:
|
raise exc.MissingAttachment
|
||||||
await ctx.message.attachments[0].save(temp)
|
if len(attachments) > 1:
|
||||||
print(os.path.basename('../temp/*'))
|
raise exc.TooManyAttachments(len(attachments))
|
||||||
print(mimetypes.guess_type(os.path.basename('../temp/*')))
|
mime = mimetypes.guess_type(attachments[0].filename)[0]
|
||||||
# print('https://www.youtube.com/watch?v=' + youtube.videos().insert(part='snippet', body={'categoryId': '24', 'title': 'Test'}, media_body=MediaFileUpload('../temp/*', chunksize=-1))
|
if 'video/' in mime:
|
||||||
|
with tempfile.NamedTemporaryFile() as temp:
|
||||||
|
await attachments[0].save(temp)
|
||||||
|
else:
|
||||||
|
raise exc.InvalidVideoFile(mime)
|
||||||
|
print('https://www.youtube.com/watch?v=' + youtube.videos().insert(part='snippet', body={'categoryId': '24', 'title': 'Test'}, media_body=http.MediaFileUpload(temp.name, chunksize=-1)))
|
||||||
|
except exc.InvalidVideoFile as e:
|
||||||
|
await ctx.send('❌ `' + str(e) + '` **not valid video type.**', delete_after=10)
|
||||||
|
except exc.TooManyAttachments as e:
|
||||||
|
await ctx.send('❌ `' + str(e) + '` **too many attachments.** Only one attachment is permitted to upload.', delete_after=10)
|
||||||
|
except exc.MissingAttachment:
|
||||||
|
await ctx.send('❌ **Missing attachment.**', delete_after=10)
|
||||||
except Exception:
|
except Exception:
|
||||||
await ctx.send(exc.base + '\n```python' + traceback.format_exc(limit=1) + '```')
|
await ctx.send(exc.base + '\n```' + traceback.format_exc(limit=1) + '```')
|
||||||
traceback.print_exc(limit=1)
|
traceback.print_exc(limit=1)
|
||||||
|
@upload.error
|
||||||
|
async def upload_error(self, ctx, error):
|
||||||
|
pass
|
||||||
|
# http.
|
||||||
|
|
Loading…
Reference in a new issue