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
async def set_prefix_error(self, inter, prefix):
await inter.response.send_message("You don`t have permissions", ephemeral=True)
logger.error(f'{prefix}')
@commands.has_permissions(administrator=True)
@commands.slash_command(

View File

@@ -1,15 +1,18 @@
import random
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 lib import logger
from lib import logger, ListGenerator
from lib import determine_time
from lib import read_db, check_exist_audio, add_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'):
def __init__(self, bot):
self.bot = bot
@@ -41,8 +44,8 @@ class Audio(commands.Cog, name='Audio'):
def_audio_ls = await list_files()
if def_audio_db or audio_db is not None:
if not def_audio_db: def_audio_db = []
if not audio_db: audio_db = []
def_audio_db = [] if not def_audio_db else def_audio_db
audio_db = [] if not audio_db else audio_db
logger.info(f'Play audio from DB')
full_audio = def_audio_db + audio_db
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}'
duration = round(MediaInfo.parse(file).tracks[0].duration / 1000)
max_duration = int(determine_time(ctx))
print(type(max_duration))
if duration > max_duration:
await ctx.reply(f'Audio duration is {duration}, but max is {max_duration}')
remove(f'tmp/{user.id}/{at.filename}')
@@ -93,9 +95,13 @@ class Audio(commands.Cog, name='Audio'):
else:
audiolist = f'{at.filename}'
await check_exist_audio(ctx, ctx.guild.id, user.id, 'usertracks', at.filename)
await add_audio(ctx.guild.id, user.id, audiolist)
if not await check_exist_audio(ctx.guild.id, 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':
await ctx.reply(f'It not audio {at.filename}\n it`s {guess[0]}')
remove(f'tmp/{user.id}/{at.filename}')
@@ -104,6 +110,50 @@ class Audio(commands.Cog, name='Audio'):
else:
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
bot.add_cog(Audio(bot)) # adding a cog

View File

@@ -28,7 +28,7 @@ class General(commands.Cog):
user = user or inter.author
_user = DB_Reader(inter.guild.id)
for r in _user:
if r.userid == user.id:
if r.id == user.id:
user_audio = r.usertracks
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 lib import ListGenerator
from lib import logger
from lib import play_audio
class Testing(commands.Cog, name='Testing'):
@@ -17,51 +11,6 @@ class Testing(commands.Cog, name='Testing'):
async def on_ready(self):
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
bot.add_cog(Testing(bot)) # adding a cog

View File

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

View File

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

View File

@@ -1,6 +1,6 @@
import mimetypes
import os
from typing import Tuple, Optional
from typing import Optional
class ListGenerator:
@@ -36,10 +36,10 @@ class ListGenerator:
class _FileAttrs:
def __init__(self, name, path, type, exc):
def __init__(self, name, path, _type, exc):
self.name = name
self.path = path
self.mimetype = type
self.mimetype = _type
self.exc = exc
def __str__(self):
@@ -63,7 +63,7 @@ class _ListGenerationIter:
return self
@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]
return guess

View File

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