import logging from os import path, makedirs, rename, remove from disnake.ext import commands import lib class Audio(commands.Cog): def __init__(self, bot): self.bot = bot # defining bot as global var in class @commands.Cog.listener() # this is a decorator for events/listeners async def on_ready(self): logging.info(f'Cog {__name__.split(".")[1]} is ready!.') @commands.command(name="upload_audio") async def upload_audio(self, ctx, user=None): user = user or ctx.author if ctx.author.guild_permissions.administrator or user is ctx.author: if ctx.message.attachments: from os import error if not path.isdir(f'tmp/{user.id}'): try: makedirs(f'tmp/{user.id}') except error as _error: logging.info(f"Failed to create dir", _error) if not path.isdir(f'audio/{user.id}'): try: makedirs(f'audio/{user.id}') except error as _error: logging.info(f"Failed to create dir", _error) for at in ctx.message.attachments: import mimetypes await at.save(f'tmp/{user.id}/{at.filename}') guess = mimetypes.guess_type(f'tmp/{user.id}/{at.filename}') await ctx.reply(f'it`s {guess}') if guess[0].split('/')[0] == 'audio': from pymediainfo import MediaInfo file = f'tmp/{user.id}/{at.filename}' duration = round(MediaInfo.parse(file).tracks[0].duration / 1000) if duration > 15: await ctx.reply(f'Audio duration is {duration}, but max is 15') remove(f'tmp/{user.id}/{at.filename}') else: a = lib.DB.read_db(ctx.guild.id, user.id) if a is None: audiolist = f'{user.id}/{at.filename}' else: audiolist = lib.DB.read_db(ctx.guild.id, user.id) + ", " + f'{user.id}/{at.filename}' lib.DB.add_audio(ctx.guild.id, user.id, audiolist) rename(f'tmp/{user.id}/{at.filename}', f'audio/{user.id}/{at.filename}') elif guess[0].split('/')[0] != 'audio': await ctx.reply(f'It not audio {at.filename}\n it`s {guess[0]}') remove(f'tmp/{user.id}/{at.filename}') else: await ctx.reply("Has no Attachment") else: await ctx.reply(f'You`re not admin. You can add audio only for your own account') def setup(bot): # an extension must have a setup function bot.add_cog(Audio(bot)) # adding a cog