diff --git a/.idea/discord.xml b/.idea/discord.xml
new file mode 100644
index 0000000..d8e9561
--- /dev/null
+++ b/.idea/discord.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/jsonSchemas.xml b/.idea/jsonSchemas.xml
new file mode 100644
index 0000000..7cf8182
--- /dev/null
+++ b/.idea/jsonSchemas.xml
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/cogs/admin.py b/cogs/admin.py
new file mode 100644
index 0000000..07322f2
--- /dev/null
+++ b/cogs/admin.py
@@ -0,0 +1,64 @@
+import logging
+from asyncio import sleep
+
+import disnake
+
+from disnake.ext import commands, tasks
+
+from lib.Comands import read_json
+from lib.DB import fill_bd, prepare_db
+
+
+class Admin(commands.Cog, name='Admin'):
+ def __init__(self, bot):
+ self.bot = bot # defining bot as global var in class
+ # self.activity.start()
+
+ @commands.Cog.listener() # this is a decorator for events/listeners
+ async def on_ready(self):
+ for g in self.bot.get_all_members():
+ await prepare_db(g.guild.id)
+ for g in self.bot.get_all_members():
+ await fill_bd(g.name, g.id, g.bot, g.nick, g.guild.id)
+
+ logging.info(f'Cog {__name__.split(".")[1]} is ready!.')
+
+ @tasks.loop(seconds=20)
+ async def activity(self):
+ await self.bot.change_presence(
+ activity=disnake.Activity(
+ name=f'Users: {str(len(self.bot.users))}',
+ type=3
+ )
+ )
+ await sleep(10)
+ await self.bot.change_presence(
+ activity=disnake.Activity(
+ name=f'Servers: {str(len(self.bot.guilds))}',
+ type=3
+ )
+ )
+
+ @commands.Cog.listener()
+ async def on_guild_join(self, guild):
+ for g in guild.members:
+ await fill_bd(g.name, g.id, g.bot, g.nick, guild.id)
+
+ @commands.Cog.listener()
+ async def on_member_join(self, member):
+ await fill_bd(member.name, member.id, member.bot, member.nick, member.guild.id)
+
+ bot_role = read_json(member.guild.id, 'bot_role') # Get bot role
+ guest_role = read_json(member.guild.id, 'guest_role') # Get guest role
+
+ if bot_role or guest_role:
+ if member.bot == 0:
+ role = disnake.utils.get(member.guild.roles, id=guest_role)
+ else:
+ role = disnake.utils.get(member.guild.roles, id=bot_role)
+ logging.info(f"Adding to {member} role {role}")
+ await member.add_roles(role)
+
+
+def setup(bot): # an extension must have a setup function
+ bot.add_cog(Admin(bot)) # adding a cog
diff --git a/cogs/audio.py b/cogs/audio.py
index bae8854..efabd55 100644
--- a/cogs/audio.py
+++ b/cogs/audio.py
@@ -1,4 +1,5 @@
import logging
+import random
import tempfile
from os import path, makedirs, rename, remove
@@ -23,16 +24,6 @@ class Audio(commands.Cog):
# Read audio from DB
audio_db = await read_db(member.guild.id, member.id, 'usertracks')
def_audio_db = await read_db(member.guild.id, member.id, 'defaulttracks')
- print(f'Trigger role: {_role}')
- print(f' Memder roles {member.roles}')
- print(role.id in _role for role in member.roles)
-
- print(f'Audio DB: {audio_db}')
- print(f'Def audio DB: {def_audio_db}')
- print(f' Memder is bot {member.bot}')
- print(f' Before channel {before.channel}')
- print('------------------------------------------')
-
if audio_db is not None:
audio_db = audio_db.split(', ') # Need to fix creating list
for i in range(len(audio_db)):
@@ -45,16 +36,16 @@ class Audio(commands.Cog):
if def_audio_db or audio_db is not None:
if def_audio_db is None: def_audio_db = []
if audio_db is None: audio_db = []
- print(audio_db, def_audio_db)
logging.info(f'Play audio from DB')
full_audio = def_audio_db + audio_db
-
- if not self.bot.voice_clients:
- await play_audio(full_audio, self.bot, after.channel)
- elif (role.id in _role for role in member.roles):
+ audio = random.choice(full_audio)
+ await play_audio(audio, self.bot, after.channel)
+ elif len(member.roles) == 1 or _role is None:
+ logging.info(f'Skip playing')
+ elif any(str(role.id) in _role for role in member.roles):
logging.info(f'Play audio from list by role')
- if not self.bot.voice_clients:
- await play_audio(def_audio_ls, self.bot, after.channel)
+ audio = random.choice(def_audio_ls)
+ await play_audio(audio, self.bot, after.channel)
else:
logging.info(f'Skip playing')
diff --git a/cogs/fun.py b/cogs/fun.py
new file mode 100644
index 0000000..f78a4a5
--- /dev/null
+++ b/cogs/fun.py
@@ -0,0 +1,16 @@
+import logging
+
+from disnake.ext import commands
+
+
+class Fun(commands.Cog, name='Fun'):
+ 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!.')
+
+
+def setup(bot): # an extension must have a setup function
+ bot.add_cog(Fun(bot)) # adding a cog
diff --git a/cogs/general.py b/cogs/general.py
index 8fe475c..70ecb74 100644
--- a/cogs/general.py
+++ b/cogs/general.py
@@ -4,8 +4,8 @@ import disnake
from disnake import Option, OptionType, Colour
from disnake.ext import commands
-from lib.Comands import read_json, write_json
-from lib.DB import fill_bd, prepare_db, work_with_db, read_db
+from lib.Comands import write_json
+from lib.DB import work_with_db, read_db
class General(commands.Cog):
@@ -14,33 +14,8 @@ 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():
- await prepare_db(g.guild.id)
- for g in self.bot.get_all_members():
- await 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:
- await fill_bd(g.name, g.id, g.bot, g.nick, guild.id)
-
- @commands.Cog.listener()
- async def on_member_join(self, member):
- await fill_bd(member.name, member.id, member.bot, member.nick, member.guild.id)
-
- bot_role = read_json(member.guild.id, 'bot_role') # Get bot role
- guest_role = read_json(member.guild.id, 'guest_role') # Get guest role
-
- if bot_role or guest_role:
- if member.bot == 0:
- role = disnake.utils.get(member.guild.roles, id=guest_role)
- else:
- role = disnake.utils.get(member.guild.roles, id=bot_role)
- logging.info(f"Adding to {member} role {role}")
- await member.add_roles(role)
-
@commands.Cog.listener()
async def on_member_update(self, before: disnake.Member, after: disnake.Member):
sql_update_query = f"""UPDATE "{after.guild.id}" set nick = ? where userid = ?"""
diff --git a/lib/Comands.py b/lib/Comands.py
index cdd04f4..5c9672a 100644
--- a/lib/Comands.py
+++ b/lib/Comands.py
@@ -17,7 +17,7 @@ async def list_files(fold: str = 'audio'):
return fl[2]
-async def read_json(guild: int, _param: str) -> int or str:
+async def read_json(guild: int, _param: str):
"""
Reads Json file to determite config strings
:param guild: ID of Guild
@@ -25,6 +25,7 @@ async def read_json(guild: int, _param: str) -> int or str:
:return: value of parameter
"""
with open('prefix.json', 'r', encoding='utf-8') as fp: # Open the JSON
+ parameter = None
try:
_json = json.load(fp) # Load the custom prefixes
except TypeError:
@@ -35,10 +36,9 @@ async def read_json(guild: int, _param: str) -> int or str:
try:
parameter = guild_conf[f"{_param}"]
except:
- parameter = None
+ pass
except:
pass
-
return parameter
diff --git a/lib/Player.py b/lib/Player.py
index d989c9e..6777f9d 100644
--- a/lib/Player.py
+++ b/lib/Player.py
@@ -1,13 +1,12 @@
import logging
-import random
from asyncio import sleep
from disnake import FFmpegPCMAudio
-async def play_audio(full_audio, bot, vc):
+async def play_audio(audio, bot, vc):
if not bot.voice_clients:
- audio = random.choice(full_audio)
+ logging.info(audio)
logging.error(f'Playing: {audio}')
await sleep(1)
vp = await vc.connect()
diff --git a/test.py b/test.py
index ea7627c..2f69ef5 100644
--- a/test.py
+++ b/test.py
@@ -13,16 +13,19 @@ if not path.isfile('prefix.json'):
with open('prefix.json', 'w+', encoding='utf-8') as f:
f.write("")
-intents = disnake.Intents(messages=True, guilds=True, message_content=True, voice_states=True, members=True)
+intents = disnake.Intents(messages=True,
+ guilds=True,
+ message_content=True,
+ voice_states=True,
+ members=True)
bot = commands.Bot(command_prefix=determine_prefix,
intents=intents,
- status=disnake.Status.idle,
reload=True,
test_guilds=[929446191270330410, 987120286933602354])
logging.basicConfig(stream=sys.stdout, filemode='w', level='INFO',
- format='%(asctime)s - %(levelname)s - %(threadName)s - %(message)s')
+ format='%(asctime)s - %(levelname)s - %(module)s - %(message)s')
for filename in cog_list():
try: