Update in db exist checker

This commit is contained in:
2022-09-05 01:34:42 +03:00
parent 911f276bcc
commit 7f003e1216
8 changed files with 94 additions and 84 deletions

View File

@@ -128,6 +128,7 @@ class Admin(commands.Cog, name='Admin'):
@slash_set_prefix.error @slash_set_prefix.error
async def set_prefix_error(self, inter, prefix): async def set_prefix_error(self, inter, prefix):
await inter.response.send_message("You don`t have permissions", ephemeral=True) await inter.response.send_message("You don`t have permissions", ephemeral=True)
logger.error(f'{prefix}')
@commands.has_permissions(administrator=True) @commands.has_permissions(administrator=True)
@commands.slash_command( @commands.slash_command(

View File

@@ -1,15 +1,18 @@
import random import random
from os import path, makedirs, rename, remove from os import path, makedirs, rename, remove
from typing import List
import disnake
from disnake import OptionChoice, OptionType, Option
from disnake.ext import commands from disnake.ext import commands
from lib import logger from lib import logger, ListGenerator
from lib import determine_time from lib import determine_time
from lib import read_db, check_exist_audio, add_audio from lib import read_db, check_exist_audio, add_audio
from lib import play_audio from lib import play_audio
# todo: write chose audio from list by slash command # todo: write set audio from list by slash command
class Audio(commands.Cog, name='Audio'): class Audio(commands.Cog, name='Audio'):
def __init__(self, bot): def __init__(self, bot):
self.bot = bot self.bot = bot
@@ -41,8 +44,8 @@ class Audio(commands.Cog, name='Audio'):
def_audio_ls = await list_files() def_audio_ls = await list_files()
if def_audio_db or audio_db is not None: if def_audio_db or audio_db is not None:
if not def_audio_db: def_audio_db = [] def_audio_db = [] if not def_audio_db else def_audio_db
if not audio_db: audio_db = [] audio_db = [] if not audio_db else audio_db
logger.info(f'Play audio from DB') logger.info(f'Play audio from DB')
full_audio = def_audio_db + audio_db full_audio = def_audio_db + audio_db
await play_audio(f'audio/{random.choice(full_audio)}', self.bot, after.channel) await play_audio(f'audio/{random.choice(full_audio)}', self.bot, after.channel)
@@ -82,7 +85,6 @@ class Audio(commands.Cog, name='Audio'):
file = f'tmp/{user.id}/{at.filename}' file = f'tmp/{user.id}/{at.filename}'
duration = round(MediaInfo.parse(file).tracks[0].duration / 1000) duration = round(MediaInfo.parse(file).tracks[0].duration / 1000)
max_duration = int(determine_time(ctx)) max_duration = int(determine_time(ctx))
print(type(max_duration))
if duration > max_duration: if duration > max_duration:
await ctx.reply(f'Audio duration is {duration}, but max is {max_duration}') await ctx.reply(f'Audio duration is {duration}, but max is {max_duration}')
remove(f'tmp/{user.id}/{at.filename}') remove(f'tmp/{user.id}/{at.filename}')
@@ -93,9 +95,13 @@ class Audio(commands.Cog, name='Audio'):
else: else:
audiolist = f'{at.filename}' audiolist = f'{at.filename}'
await check_exist_audio(ctx, ctx.guild.id, user.id, 'usertracks', at.filename) if not await check_exist_audio(ctx.guild.id, user.id, at.filename):
await add_audio(ctx.guild.id, user.id, audiolist) rename(f'tmp/{user.id}/{at.filename}', f'audio/{user.id}/{at.filename}')
rename(f'tmp/{user.id}/{at.filename}', f'audio/{user.id}/{at.filename}') await add_audio(ctx.guild.id, user.id, audiolist)
await ctx.reply(f'Audio {at.filename.split(".")[0]} added to db')
else:
await ctx.reply(f'Audio {at.filename.split(".")[0]} already in db')
remove(f'tmp/{user.id}/{at.filename}')
elif guess[0].split('/')[0] != 'audio': elif guess[0].split('/')[0] != 'audio':
await ctx.reply(f'It not audio {at.filename}\n it`s {guess[0]}') await ctx.reply(f'It not audio {at.filename}\n it`s {guess[0]}')
remove(f'tmp/{user.id}/{at.filename}') remove(f'tmp/{user.id}/{at.filename}')
@@ -104,6 +110,50 @@ class Audio(commands.Cog, name='Audio'):
else: else:
await ctx.reply(f'You`re not admin. You can add audio only for your own account') await ctx.reply(f'You`re not admin. You can add audio only for your own account')
@commands.slash_command(name="play_audio",
description="Make possible playing audio by command",
options=[
Option(name="audio",
type=OptionType.string,
required=True
)
])
async def playaudio(self, inter: disnake.ApplicationCommandInteraction,
audio: str
):
if inter.author.voice is not None:
await inter.response.send_message(f'Played {audio}', ephemeral=True)
await play_audio(audio, self.bot, inter.author.voice.channel)
else:
await inter.response.send_message('You`re not in voice', ephemeral=True)
@playaudio.autocomplete('audio')
async def list_to_play(self, inter: disnake.ApplicationCommandInteraction, current: str) -> List[OptionChoice]:
_def_iter = ListGenerator('audio')
_def_dict: dict = {}
for f in _def_iter:
_def_dict[f.name] = f'{f.path}/{f.name}'
_user_dict: dict = {}
try:
_user_iter = ListGenerator(f'audio/{inter.author.id}')
for f in _user_iter:
_user_dict[f.name] = f'{f.path}/{f.name}'
# user_dict = []
# for _track in user_list:
except IndexError:
pass
_dict = {}
_dict.update(_def_dict)
_dict.update(_user_dict)
return [
OptionChoice(name=choice, value=f'{_dict[choice]}')
for choice in _dict if current.lower() in choice.lower()
]
def setup(bot): # an extension must have a setup function def setup(bot): # an extension must have a setup function
bot.add_cog(Audio(bot)) # adding a cog bot.add_cog(Audio(bot)) # adding a cog

View File

@@ -28,7 +28,7 @@ class General(commands.Cog):
user = user or inter.author user = user or inter.author
_user = DB_Reader(inter.guild.id) _user = DB_Reader(inter.guild.id)
for r in _user: for r in _user:
if r.userid == user.id: if r.id == user.id:
user_audio = r.usertracks user_audio = r.usertracks
default_audio = r.defaulttracks default_audio = r.defaulttracks

View File

@@ -1,12 +1,6 @@
from typing import List
import disnake
from disnake import Option, OptionType, OptionChoice
from disnake.ext import commands from disnake.ext import commands
from lib import ListGenerator
from lib import logger from lib import logger
from lib import play_audio
class Testing(commands.Cog, name='Testing'): class Testing(commands.Cog, name='Testing'):
@@ -17,51 +11,6 @@ class Testing(commands.Cog, name='Testing'):
async def on_ready(self): async def on_ready(self):
logger.info(f'Cog {__name__.split(".")[1]} is ready!.') logger.info(f'Cog {__name__.split(".")[1]} is ready!.')
@commands.slash_command(name="play_audio",
description="Make possible playing audio by command",
options=[
Option(name="audio",
type=OptionType.string,
required=True
)
])
async def playaudio(self, inter: disnake.ApplicationCommandInteraction,
audio: str
):
if inter.author.voice is not None:
await inter.response.send_message(f'Played {audio}', ephemeral=True)
await play_audio(audio, self.bot, inter.author.voice.channel)
else:
await inter.response.send_message('You`re not in voice', ephemeral=True)
@playaudio.autocomplete('audio')
async def list_to_play(self, inter: disnake.ApplicationCommandInteraction, current: str) -> List[OptionChoice]:
_def_iter = ListGenerator('audio')
_def_dict: dict = {}
for f in _def_iter:
_def_dict[f.name] = f'{f.path}/{f.name}'
_user_dict: dict = {}
try:
_user_iter = ListGenerator(f'audio/{inter.author.id}')
for f in _user_iter:
_user_dict[f.name] = f'{f.path}/{f.name}'
# user_dict = []
# for _track in user_list:
except IndexError:
pass
_dict = {}
_dict.update(_def_dict)
_dict.update(_user_dict)
return [
OptionChoice(name=choice, value=f'{_dict[choice]}')
for choice in _dict if current.lower() in choice.lower()
]
def setup(bot): # an extension must have a setup function def setup(bot): # an extension must have a setup function
bot.add_cog(Testing(bot)) # adding a cog bot.add_cog(Testing(bot)) # adding a cog

View File

@@ -20,7 +20,7 @@ def preload_checks():
async def list_files(fold: str = 'audio'): async def list_files(fold: str = 'audio'):
if fold != 'audio': fold = f'audio/{fold}' fold = f'audio/{fold}' if fold != 'audio' else fold
fl = [] fl = []
for filenames in os.walk(fold): for filenames in os.walk(fold):
fl.extend(filenames) fl.extend(filenames)

View File

@@ -1,5 +1,5 @@
import sqlite3 import sqlite3
from typing import List
from lib import logger from lib import logger
@@ -37,20 +37,36 @@ class _DBAttrs:
isbot: bool, isbot: bool,
defaulttracks: None or list, defaulttracks: None or list,
usertracks: None or list): usertracks: None or list):
self.userid = userid self.id = userid
self.username = username self.username = username
self.nick = nick self.nick = nick
self.isbot = isbot self.isbot = isbot
self.defaulttracks = defaulttracks if defaulttracks is not None:
self.usertracks = usertracks self._def_list = defaulttracks
self.defaulttracks = self._defaulttracks
else:
self.defaulttracks = None
if usertracks is not None:
self._user_list = usertracks
self.usertracks = self._usertracks
else:
self.usertracks = None
def __str__(self): def __str__(self):
return self.username return self.username
def __repr__(self): def __repr__(self):
return f'<File attrs userid={self.userid} username={self.username} nick={self.nick} ' \ return f'<File attrs userid={self.id} username={self.username} nick={self.nick} ' \
f'isbot={self.isbot} defaulttracks={self.defaulttracks} usertracks={self.usertracks}>' f'isbot={self.isbot} defaulttracks={self.defaulttracks} usertracks={self.usertracks}>'
@property
def _defaulttracks(self) -> List[str]:
return self._def_list.split(', ')
@property
def _usertracks(self) -> List[str]:
return self._user_list.split(', ')
class _ListGenerationIter: class _ListGenerationIter:
def __init__(self, user_class): def __init__(self, user_class):
@@ -150,16 +166,11 @@ async def read_db(guild: int, user: int, column: str):
pass pass
async def check_exist_audio(ctx, guild: int, user: int, column: str, audio: str): async def check_exist_audio(guild: int, user: int, audio: str):
_list_str = await read_db(guild, user, column) _users_db = DB_Reader(guild)
print(type(_list_str)) for _user in _users_db:
if _list_str is not None: if not _user.isbot:
_list = _list_str.split(',') if _user.id == user and _user.usertracks is not None and audio in _user.usertracks:
if audio in _list: return True
await ctx.reply("File in list") else:
return False
else:
pass
else:
_list = 'None'

View File

@@ -1,6 +1,6 @@
import mimetypes import mimetypes
import os import os
from typing import Tuple, Optional from typing import Optional
class ListGenerator: class ListGenerator:
@@ -36,10 +36,10 @@ class ListGenerator:
class _FileAttrs: class _FileAttrs:
def __init__(self, name, path, type, exc): def __init__(self, name, path, _type, exc):
self.name = name self.name = name
self.path = path self.path = path
self.mimetype = type self.mimetype = _type
self.exc = exc self.exc = exc
def __str__(self): def __str__(self):
@@ -63,7 +63,7 @@ class _ListGenerationIter:
return self return self
@property @property
def type(self) -> tuple[Optional[str], Optional[str]]: def _type(self) -> Optional[str]:
guess = mimetypes.guess_type(f'{self._path}/{self._list[self._current_index]}')[0] guess = mimetypes.guess_type(f'{self._path}/{self._list[self._current_index]}')[0]
return guess return guess

View File

@@ -5,7 +5,6 @@ from disnake import FFmpegPCMAudio
async def play_audio(audio, bot, vc): async def play_audio(audio, bot, vc):
if not bot.voice_clients: if not bot.voice_clients:
logger.info(audio)
logger.error(f'Playing: {audio}') logger.error(f'Playing: {audio}')
await sleep(1) await sleep(1)
vp = await vc.connect() vp = await vc.connect()