edditing code

This commit is contained in:
2022-08-21 20:59:53 +03:00
parent 1011e287c9
commit 5a50b2ac98
5 changed files with 182 additions and 64 deletions

View File

@@ -1,11 +1,28 @@
import logging
from os import path, makedirs, rename, remove
import tempfile
from os import path, makedirs, rename, remove, walk
from random import random
import disnake
import inter as inter
from disnake import FFmpegPCMAudio
from enum import Enum
from disnake.ext import commands
import lib
# Files = commands.option_enum(lib.Commands.list_files(inter.id))
def Files(str, fold, Enum) -> None:
fl = []
for filenames in walk(fold):
fl.extend(filenames)
break
files = {}
for x in fl[2]:
files[x] = x
class Audio(commands.Cog):
def __init__(self, bot):
self.bot = bot # defining bot as global var in class
@@ -14,17 +31,59 @@ class Audio(commands.Cog):
async def on_ready(self):
logging.info(f'Cog {__name__.split(".")[1]} is ready!.')
@commands.Cog.listener()
async def on_voice_state_update(self, member, before, after):
role = await lib.Commands.read_json(member.guild.id, 'tigger_role')
audio = await lib.DB.read_db(member.guild.id, member.id, 'usertracks')
audio_files = await lib.Commands.list_files(f'audio/{member.id}')
logging.info(f'Func check audio state:\n'
f'\t\t\t\t\tUser: {member}\n'
f'\t\t\t\t\tTrigger role: {role}\n'
f'\t\t\t\t\tAudio list: {audio}\n'
f'\t\t\t\t\tAudio file list: {audio_files}\n'
f'\t\t\t\t\t-----------------')
if before.channel is None and role in member.roles:
pass
# track = random.randint(0, len(f) - 1)
# audio_source = FFmpegPCMAudio(f'audio/{f[track]}')
# logging.error(f'{track}\t\t{f[track]}')
# if not bot.voice_clients:
# await sleep(1)
# _channel = after.channel
# vc = await after.channel.connect()
# if not vc.is_playing():
# vc.play(audio_source, after=None)
# while vc.is_playing():
# await sleep(0.5)
# await sleep(1)
# await vc.disconnect()
# if before.channel is None and member.id == _memb:
# track = random.randint(0, len(f) - 1)
# audio_source = FFmpegPCMAudio(f'audio/{_memb}/bear2_enemy_scav3.wav')
# logging.error(f'{track}\t\t\t{f[track]}')
# if not bot.voice_clients:
# await sleep(1)
# _channel = after.channel
# vc = await after.channel.connect()
# if not vc.is_playing():
# vc.play(audio_source, after=None)
# while vc.is_playing():
# await sleep(0.5)
# await sleep(1)
# await vc.disconnect()
# @commands.slash_command(name="select_audio")
# async def select_audio(self, inter: disnake.ApplicationCommandInteraction,
# files: Files):
# pass
@commands.command(name="upload_audio")
async def upload_audio(self, ctx, user=None):
user = user or ctx.author
print(tempfile.tempdir)
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}')
@@ -33,28 +92,28 @@ class Audio(commands.Cog):
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}')
await at.save(f'{tempfile.tempdir}/{tempfile.mkdtemp(dir=f"tmp/{user.id}")}/{at.filename}')
guess = mimetypes.guess_type(f'{tempfile.tempdir}/{user.id}/{at.filename}')
if guess[0].split('/')[0] == 'audio':
from pymediainfo import MediaInfo
file = f'tmp/{user.id}/{at.filename}'
file = f'{tempfile.tempdir}/{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}')
remove(f'{tempfile.tempdir}/{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}'
a = await lib.DB.read_db(ctx.guild.id, user.id, 'usertracks')
if a:
audiolist = a + ", " + f'{at.filename}'
else:
audiolist = lib.DB.read_db(ctx.guild.id, user.id) + ", " + f'{user.id}/{at.filename}'
audiolist = f'{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}')
await lib.DB.check_exist_audio(ctx, ctx.guild.id, user.id, 'usertracks', at.filename)
await lib.DB.add_audio(ctx.guild.id, user.id, audiolist)
rename(f'{tempfile.tempdir}/{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}')
remove(f'{tempfile.tempdir}/{user.id}/{at.filename}')
else:
await ctx.reply("Has no Attachment")
else:

View File

@@ -1,7 +1,7 @@
import logging
import disnake
from disnake import Option, OptionType
from disnake import Option, OptionType, Colour
from disnake.ext import commands
import lib
@@ -14,20 +14,20 @@ class General(commands.Cog):
@commands.Cog.listener() # this is a decorator for events/listeners
async def on_ready(self):
for g in self.bot.get_all_members():
lib.DB.prepare_db(g.guild.id)
await lib.DB.prepare_db(g.guild.id)
for g in self.bot.get_all_members():
lib.DB.fill_bd(g.name, g.id, g.bot, g.nick, g.guild.id)
await lib.DB.fill_bd(g.name, g.id, g.bot, g.nick, g.guild.id)
logging.info(f'Cog {__name__.split(".")[1]} is ready!.')
@commands.Cog.listener()
async def on_guild_join(self, guild):
for g in guild.members:
lib.DB.fill_bd(g.name, g.id, g.bot, g.nick, guild.id)
await lib.DB.fill_bd(g.name, g.id, g.bot, g.nick, guild.id)
@commands.Cog.listener()
async def on_member_join(self, member):
lib.DB.fill_bd(member.name, member.id, member.bot, member.nick, member.guild.id)
await lib.DB.fill_bd(member.name, member.id, member.bot, member.nick, member.guild.id)
bot_role = lib.Commands.read_json(member.guild.id, 'bot_role') # Get bot role
guest_role = lib.Commands.read_json(member.guild.id, 'guest_role') # Get guest role
@@ -44,7 +44,7 @@ class General(commands.Cog):
async def on_member_update(self, before: disnake.Member, after: disnake.Member):
sql_update_query = f"""UPDATE "{after.guild.id}" set nick = ? where userid = ?"""
data_tuple = (after.nick, before.id)
lib.DB.work_with_db(sql_update_query, data_tuple)
await lib.DB.work_with_db(sql_update_query, data_tuple)
@commands.slash_command(
name="info",
@@ -55,28 +55,36 @@ class General(commands.Cog):
)
async def info(self, inter, user=None):
user = user or inter.author
audio = lib.DB.read_db(inter.guild.id, user.id)
user_audio = await lib.DB.read_db(inter.guild.id, user.id, column='usertracks')
default_audio = await lib.DB.read_db(inter.guild.id, user.id, column='defaulttracks')
rolelist = [r.mention for r in user.roles if r != inter.guild.default_role]
if rolelist:
roles = "\n".join(rolelist)
else:
roles = "Not added any role"
if audio is None:
audios = "Not selected audio"
if user_audio:
audios = "" + "\n".join(sorted(user_audio.split(", ")))
else:
audios = "" + "\n".join(sorted(audio.split(", ")))
audios = "Not selected audio"
if default_audio:
audios2 = "" + "\n".join(sorted(default_audio.split(", ")))
else:
audios2 = "Not selected audio"
emb = disnake.Embed(
title=f"General information",
description=f"General information on server about {user}"
description=f"General information on server about {user}",
color=Colour.random()
)
emb.set_thumbnail(url=user.avatar.url)
emb.set_thumbnail(url=user.display_avatar)
emb.add_field(name="General info",
value=f"Username: {user}\n"
f"Nickname: {user.nick}\n"
f"Joined at: {user.joined_at.strftime('%A, %B %d %Y @ %H:%M:%S')}", inline=False)
emb.add_field(name="Audio list", value=f"{audios}", inline=True)
emb.add_field(name="User audio list", value=f"{audios}", inline=True)
emb.add_field(name="Default audio list", value=f"{audios2}", inline=True)
emb.add_field(name="Roles list", value=f"{roles}", inline=True)
emb.set_footer(text="Information requested by: {}".format(inter.author.display_name))
@@ -126,7 +134,7 @@ class General(commands.Cog):
@commands.has_permissions(administrator=True)
async def set_trigger_role(self, inter, role):
await lib.Commands.write_json(inter.guild.id, "tigger_role", role.id)
await inter.responce.send(f"Role to trigger set to : `{role.name}`", ephemeral=True)
await inter.response.send_message(f"Role to trigger set to : `{role.name}`", ephemeral=True)
@commands.slash_command(
name="set_bot_role",

View File

@@ -1,11 +1,14 @@
import logging
import os
import psutil
import disnake
from disnake.ext import commands
class Bot_info(commands.Cog, name='Bot Info'):
def __init__(self, bot: object) -> object:
def __init__(self, bot):
self.bot = bot # defining bot as global var in class
@commands.Cog.listener() # this is a decorator for events/listeners
@@ -14,20 +17,21 @@ class Bot_info(commands.Cog, name='Bot Info'):
@commands.slash_command(name="info_bot") # this is for making a command
async def info_bot(self, inter):
# await ctx.send(f'Pong! {round(self.bot.latency * 1000)}')
_pid = os.getpid()
_process = psutil.Process(_pid)
emb = disnake.Embed(
title=f"General information",
description=f"General information on about bot",
)
# emb.set_thumbnail(self.bot.avatar.url)
# emb.set_thumbnail(self.bot.display_avatar)
emb.add_field(name="Bot ping", value=f'Bot ping: {round(self.bot.latency * 1000)}', inline=True)
emb.add_field(name="Memory Usage", value=f"{_process.memory_info()[0]/2**20} Mb", inline=True)
emb.add_field(name="CPU Usage", value=f"{_process.cpu_percent()}%", inline=True)
emb.add_field(name="Bot owner", value=f"<@{self.bot.owner_id}>")
emb.set_footer(text="Information requested by: {}".format(inter.author.display_name))
await inter.response.send_message(embed=emb, ephemeral=True)
def setup(bot): # an extension must have a setup function
bot.add_cog(Bot_info(bot)) # adding a cog