diff --git a/cogs/audio.py b/cogs/audio.py index 5218032..4042efb 100644 --- a/cogs/audio.py +++ b/cogs/audio.py @@ -1,8 +1,9 @@ import logging -import lib - from os import path, makedirs, rename, remove -from discord.ext import commands + +from disnake.ext import commands + +import lib class Audio(commands.Cog): @@ -34,7 +35,8 @@ class Audio(commands.Cog): await at.save(f'tmp/{user.id}/{at.filename}') guess = mimetypes.guess_type(f'tmp/{user.id}/{at.filename}') - if guess[0]: + 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) @@ -50,13 +52,13 @@ class Audio(commands.Cog): lib.DB.add_audio(ctx.guild.id, user.id, audiolist) rename(f'tmp/{user.id}/{at.filename}', f'audio/{user.id}/{at.filename}') - else: - await ctx.reply(f'Failed to find MIME type of {at.filename}', ephemeral=True) + 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", ephemeral=True) + await ctx.reply("Has no Attachment") else: - await ctx.reply(f'You`re not admin. You can add audio only for your own account', ephemeral=True) + 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 diff --git a/cogs/general.py b/cogs/general.py index 8b864d2..02c28bd 100644 --- a/cogs/general.py +++ b/cogs/general.py @@ -1,12 +1,10 @@ import logging -import dislash +import disnake +from disnake import Option, OptionType +from disnake.ext import commands import lib -import discord - -from discord.ext import commands -from dislash import Option, OptionType, slash_command class General(commands.Cog): @@ -36,29 +34,29 @@ class General(commands.Cog): if bot_role and guest_role: if member.bot == 0: - role = discord.utils.get(member.guild.roles, id=guest_role) + role = disnake.utils.get(member.guild.roles, id=guest_role) else: - role = discord.utils.get(member.guild.roles, id=bot_role) + 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: discord.Member, after: discord.Member): + 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) - @slash_command( + @commands.slash_command( name="info", description="Read list of tracks for user", options=[ - Option("user", "Specify any user", OptionType.USER), + Option("user", "Specify any user", OptionType.user), ] ) - async def info(self, ctx, user=None): - user = user or ctx.author - audio = lib.DB.read_db(ctx.guild.id, user.id) - rolelist = [r.mention for r in user.roles if r != ctx.guild.default_role] + async def info(self, inter, user=None): + user = user or inter.author + audio = lib.DB.read_db(inter.guild.id, user.id) + rolelist = [r.mention for r in user.roles if r != inter.guild.default_role] if rolelist: roles = "\n".join(rolelist) else: @@ -69,27 +67,26 @@ class General(commands.Cog): else: audios = "• " + "\n• ".join(sorted(audio.split(", "))) - emb = discord.Embed( + emb = disnake.Embed( title=f"General information", - description=f"General information on server about {user}", - icon=user.avatar_url + description=f"General information on server about {user}" ) - emb.set_thumbnail(url=user.avatar_url) + emb.set_thumbnail(url=user.avatar.url) 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="Roles list", value=f"{roles}", inline=True) - emb.set_footer(text="Information requested by: {}".format(ctx.author.display_name)) + emb.set_footer(text="Information requested by: {}".format(inter.author.display_name)) - await ctx.reply(embed=emb, ephemeral=True) + await inter.response.send_message(embed=emb, ephemeral=True) - @slash_command( + @commands.slash_command( name="set_guest_role", description="Set Default bot role", options=[ - Option("role", "Specify role", OptionType.ROLE, required=True), + Option("role", "Specify role", OptionType.role, required=True), ] ) @commands.has_permissions(administrator=True) @@ -101,47 +98,62 @@ class General(commands.Cog): @commands.has_permissions(administrator=True) async def command_set_prefix(self, ctx, prefix: str): await lib.Commands.set_prefix(ctx, prefix) + await ctx.reply(f"Prefix set to: `{prefix}`") - @slash_command( + @commands.slash_command( name="set_prefix", description="Setting up bot prefix", options=[ - Option("prefix", "Specify prefix", OptionType.STRING, required=True), - ] - ) - @dislash.has_permissions(administrator=True) - async def slash_set_prefix(self, ctx, prefix: str): - await lib.Commands.set_prefix(ctx, prefix) - - @slash_set_prefix.error - @command_set_prefix.error - async def set_prefix_error(self, ctx, prefix): - await ctx.reply('You don`t have permissions', ephemeral=True) - - @slash_command( - name="set_trigger_role", - description="Setting up role to trigger bot", - options=[ - Option("role", "Specify role", OptionType.ROLE, required=True), + Option("prefix", "Specify prefix", OptionType.string, required=True), ] ) @commands.has_permissions(administrator=True) - async def set_trigger_role(self, ctx, role): - await lib.Commands.write_json(ctx.guild.id, "tigger_role", role.id) - await ctx.send(f"Role to trigger set to : `{role.name}`", ephemeral=True) + async def slash_set_prefix(self, inter, prefix: str): + await lib.Commands.set_prefix(inter, prefix) + await inter.responce.send_message(f"Prefix set to: `{prefix}`", ephemeral=True) - @slash_command( + @slash_set_prefix.error + async def set_prefix_error(self, inter, prefix): + await inter.response.send_message('You don`t have permissions', ephemeral=True) + + @commands.slash_command( + name="set_trigger_role", + description="Setting up role to trigger bot", + options=[ + Option("role", "Specify role", OptionType.role, required=True), + ] + ) + @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) + + @commands.slash_command( name="set_bot_role", description="Set Default bot role", options=[ - Option("role", "Specify role", OptionType.ROLE, required=True), + Option("role", "Specify role", OptionType.role, required=True), ] ) - @dislash.has_permissions(administrator=True) + @commands.has_permissions(administrator=True) async def set_bot_role(self, ctx, role): await lib.Commands.write_json(ctx.guild.id, "bot_role", role.id) await ctx.send(f"Setted up bot role to: `{role.name}`", ephemeral=True) + @commands.slash_command() + async def help(self, inter): + embed = disnake.Embed( + title='Help', description='', colour=disnake.Colour.blue()) + embed.set_footer(text='Have fun!') + + embed.add_field( + name='Prefix', + value= + f'The current prefix for this server is {self.bot.command_prefix}', + inline=True) + + await inter.response.send_message(embed=embed) + def setup(bot): # an extension must have a setup function bot.add_cog(General(bot)) # adding a cog diff --git a/cogs/info.py b/cogs/info.py index 8f09151..644c15e 100644 --- a/cogs/info.py +++ b/cogs/info.py @@ -1,11 +1,10 @@ import logging -import discord -from discord.ext import commands -from dislash import slash_command +import disnake +from disnake.ext import commands -class Bot_info(commands.Cog): +class Bot_info(commands.Cog, name='Bot Info'): def __init__(self, bot): self.bot = bot # defining bot as global var in class @@ -13,17 +12,21 @@ class Bot_info(commands.Cog): async def on_ready(self): logging.info(f'Cog {__name__.split(".")[1]} is ready!.') - @slash_command(name="info_bot") # this is for making a command - async def info_bot(self, ctx): + @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)}') - emb = discord.Embed( + emb = disnake.Embed( title=f"General information", description=f"General information on about bot", ) + # emb.set_thumbnail(self.bot.avatar.url) emb.add_field(name="Bot ping", value=f'Bot ping: {round(self.bot.latency * 1000)}', inline=True) - emb.set_footer(text="Information requested by: {}".format(ctx.author.display_name)) + emb.set_footer(text="Information requested by: {}".format(inter.author.display_name)) + + await inter.response.send_message(embed=emb, ephemeral=True) + + - await ctx.reply(embed=emb, ephemeral=True) def setup(bot): # an extension must have a setup function diff --git a/lib.py b/lib.py index 154fa2a..10d6150 100644 --- a/lib.py +++ b/lib.py @@ -90,16 +90,15 @@ class CogsPrepare: class Commands: @staticmethod - def chech_json(): + def check_json(): if not path.isfile('prefix.json'): - with open('prefix.json', 'w+') as f: + with open('prefix.json', 'w+', encoding='utf-8') as f: f.write("") f.close() @staticmethod - async def set_prefix(ctx, prefix: str): - await Commands.write_json(ctx.guild.id, "prefix", prefix) - await ctx.send(f"Prefix set to: `{prefix}`", ephemeral=True) + async def set_prefix(inter, prefix: str): + await Commands.write_json(inter.guild.id, "prefix", prefix) @staticmethod def list_files(fold: str): @@ -135,7 +134,7 @@ class Commands: @staticmethod async def write_json(guild: int, param_name: str, param: str or int): - with open('prefix.json', 'r') as _f: + with open('prefix.json', 'r', encoding='utf-8') as _f: try: _json = json.load(_f) except json.decoder.JSONDecodeError: @@ -148,23 +147,23 @@ class Commands: _guild = _json[f'{guild}'] _guild.update({f'{param_name}': f'{param}'}) - with open('prefix.json', 'w') as _f: + with open('prefix.json', 'w', encoding='utf-8') as _f: json.dump(_json, _f, indent=4) _f.close() @staticmethod def determine_prefix(bot, msg): - guild = msg.guild with open('prefix.json', 'r', encoding='utf-8') as fp: # Open the JSON - parameter = DEFAULT_PREFIX + parameter: str try: - _json = json.load(fp) # Load the custom prefixes - except error: + from json import load + _json = load(fp) # Load the custom prefixes + except: _json = {} - if guild: # If the guild exists + if msg.guild: # If the guild exists try: - parameter = _json[f"{guild.id}"]["prefix"] # Read prefix from json if is setted up - except error: - pass - return parameter - + parameter = _json[f"{msg.guild.id}"]["prefix"] # Read prefix from json if is setted up + except: + parameter = DEFAULT_PREFIX + print(parameter) + return parameter diff --git a/test.py b/test.py index 3491259..1def14c 100644 --- a/test.py +++ b/test.py @@ -1,26 +1,28 @@ -import json import logging import sys import threading -import discord + +import disnake +from disnake import OptionChoice, OptionType, Option +from disnake.ext import commands + import lib -from os import path -from discord.ext import commands -from dislash import InteractionClient, Option, OptionType, OptionChoice - bot_owner = 386629192743256065 - -lib.Commands.chech_json() -intents = discord.Intents.default() +lib.Commands.check_json() +intents = disnake.Intents(messages=True, guilds=True, message_content=True) intents.members = True -bot = commands.Bot(command_prefix=lib.Commands.determine_prefix, guild_subscriptions=True, intents=intents) -inter_client = InteractionClient(bot, sync_commands=True) + +bot = commands.Bot(command_prefix=lib.Commands.determine_prefix, + intents=intents, + status=disnake.Status.idle, + reload=True, + test_guilds=[929446191270330410, 987120286933602354]) threading.current_thread().name = "main" + logging.basicConfig(stream=sys.stdout, filemode='w', level='INFO', format='%(asctime)s - %(levelname)s - %(threadName)s - %(message)s') - for filename in lib.CogsPrepare.cog_list(): try: bot.load_extension(f'cogs.{filename}') @@ -42,14 +44,19 @@ async def on_ready(): logging.info('We have logged in as {0.user}'.format(bot)) -@inter_client.slash_command( +@bot.command() +async def hello(inter): + await inter.response.reply('hello') + + +@bot.slash_command( name="cog", description="Work with cogs", options=[ Option( "what_do", description="Specify what do with cogs", - type=OptionType.STRING, + type=OptionType.string, required=True, choices=[ OptionChoice("load", "load"), @@ -59,13 +66,13 @@ async def on_ready(): ) ] ) -async def slash_cogs(ctx, what_do): - if ctx.author.id == bot_owner: +async def slash_cogs(inter, what_do): + if inter.author.id == bot_owner: await lib.CogsPrepare.work_with_cogs(what_do, bot) - await ctx.reply(f'Cogs are {what_do}ed', ephemeral=True) + await inter.response.send_message(f'Cogs are {what_do}ed', ephemeral=True) else: - await ctx.reply('You`re not bot owner', ephemeral=True) + await inter.response.send_message('You`re not bot owner', ephemeral=True) bot.run('OTQ3OTUzOTAxNzgzNjIxNjYy.GTXbMv.KrztaTO7-ivsPEAVjsyikSQ-GP-ANwULmDraig')