async def memberinfo(self, ctx, *, member: discord.Member = None): if await db_valid_cheker(ctx): if member is None: member = ctx.author if await db_load_req( f"SELECT COUNT(*) as count FROM mutemembers WHERE id = {member.id} AND guild_id = {ctx.guild.id}" ) == 1: language = str(await get_guild_language(ctx)) cur = data.cursor() cur.execute( f"SELECT * FROM mutemembers WHERE id = {member.id} AND guild_id = {ctx.guild.id}" ) member_data = cur.fetchone() embed = discord.Embed( title= f"{lang[language]['InfoAbout']} {lang[language]['Member']}", color=discord.Colour.blurple()) embed.add_field( name=f"{lang[language]['Parameter']}", value= "Имя пользователя: \nID: \nИнтервал: \nОтключение через:", inline=True) embed.add_field( name=f"{lang[language]['Value']}", value= f'{member_data[1]}\n{member_data[0]}\n{member_data[4]}\n{member_data[5]}' ) embed.set_footer(text=ctx.author, icon_url=ctx.author.avatar_url) embed.set_author(name=str(member), icon_url=member.avatar_url) await ctx.send(embed=embed) else: await ctx.send("У пользователя не включен медленный режим") await ctx.message.add_reaction(disagree_emoji())
async def on_message(self, message): if str(message.channel.type) == 'text': if await db_load_req( f"SELECT COUNT(*) as count FROM guilds WHERE id = {message.guild.id}" ): cur = data.cursor() cur.execute( f"SELECT * FROM guilds WHERE id={message.guild.id}") guild_data = cur.fetchone() if await db_load_req( f"SELECT COUNT(*) as count FROM mutemembers WHERE id = {message.author.id} AND guild_id = {message.guild.id}" ): cur.execute( f"SELECT * FROM mutemembers WHERE id = {message.author.id} AND guild_id = {message.guild.id}" ) member_data = cur.fetchone() if guild_data[2] == 1: if int(member_data[2]) == 1: await message.delete() else: await db_dump_req( f"UPDATE mutemembers SET in_interval = {bool(1)} WHERE id = {message.author.id} AND guild_id = {message.guild.id}" ) await asyncio.sleep(member_data[4]) await db_dump_req( f"UPDATE mutemembers SET in_interval = {bool(0)} WHERE id = {message.author.id} AND guild_id = {message.guild.id}" ) elif guild_data[2] == 2: if int(member_data[2]) == 1: await message.delete() try: await message.author.send( f"Вы отправляете сообщения слишком быстро \nУдаленно сообщение: {message.content}" ) except: pass else: await db_dump_req( f"UPDATE mutemembers SET in_interval = {bool(1)} WHERE id = {message.author.id} AND guild_id = {message.guild.id}" ) await asyncio.sleep(member_data[4]) await db_dump_req( f"UPDATE mutemembers SET in_interval = {bool(0)} WHERE id = {message.author.id} AND guild_id = {message.guild.id}" ) elif guild_data[2] == 3: mute_role = message.guild.get_role(int(guild_data[5])) if int(member_data[2]) == 1: pass else: await db_dump_req( f"UPDATE mutemembers SET in_interval = {bool(1)} WHERE id = {message.author.id} AND guild_id = {message.guild.id}" ) await message.author.add_roles(mute_role) await asyncio.sleep(member_data[4]) await db_dump_req( f"UPDATE mutemembers SET in_interval = {bool(0)} WHERE id = {message.author.id} AND guild_id = {message.guild.id}" ) await message.author.remove_roles(mute_role)
async def roleinfo(self, ctx, role: discord.Role, subchannel: discord.TextChannel = None): if await db_valid_cheker(ctx): if await db_load_req( f"SELECT COUNT(*) as count FROM muteroles WHERE id = {role.id} AND guild_id = {ctx.guild.id} AND channel_id = {subchannel.id if subchannel is not None else None}" ) == 1: language = str(await get_guild_language(ctx)) cur = data.cursor() cur.execute( f"SELECT * FROM muteroles WHERE id = {role.id} AND guild_id = {ctx.guild.id} AND channel_id = {subchannel.id if subchannel is not None else None}" ) member_data = cur.fetchone() embed = discord.Embed( title= f"{lang[language]['InfoAbout']} {lang[language]['Member']}", color=discord.Colour.blurple()) embed.add_field( name=f"{lang[language]['Parameter']}", value= "Имя пользователя: \nRole ID:\nChannel ID: \nИнтервал: \nОтключение через:", inline=True) embed.add_field( name=f"{lang[language]['Value']}", value= f'{member_data[2]}\n{member_data[0]}\n{member_data[1]}\n{member_data[5]}\n{member_data[6]}' ) embed.set_footer(text=ctx.author, icon_url=ctx.author.avatar_url) await ctx.send(embed=embed) else: await ctx.send("У роли не включен медленный режим") await ctx.message.add_reaction(disagree_emoji())
async def guildinfo(self, ctx): if await db_valid_cheker(ctx): language = await get_guild_language(ctx) cur = data.cursor() cur.execute(f"SELECT * FROM guilds WHERE id={ctx.guild.id}") guild_data = cur.fetchone() if guild_data[5] != 0: mute_role = f'<@&{guild_data[5]}>' else: mute_role = disagree_emoji() if guild_data[6] != 0: log_channel = f'<#{guild_data[6]}>' else: log_channel = disagree_emoji() embed = discord.Embed( title= f"{lang[language]['InfoAbout']} {lang[language]['Guild']}", colour=discord.Colour.blurple()) embed.add_field( name=lang[language]['Parameter'], value= f'ID \n{lang[language]["Mod"]} \n{lang[language]["DOLsetup"]} \n{lang[language]["MRole"]} \n{lang[language]["LChann"]} \n{lang[language]["Lang"]}', inline=True) embed.add_field( name=lang[language]['Value'], value= f'{guild_data[0]} \n{guild_data[2]} \n{guild_data[3]} \n{mute_role} \n{log_channel} \n{language}', inline=True) embed.set_footer(text=ctx.author, icon_url=ctx.author.avatar_url) embed.set_author(name=ctx.guild.name, icon_url=ctx.guild.icon_url) await ctx.send(embed=embed)
async def sql_request(self, ctx, *, request): cur = data.cursor() try: cur.execute(str(request)) await ctx.send(cur.fetchall() or 0) data.commit() except Exception as error: await ctx.send(error)
async def channelslowdown(self, ctx, member: discord.TextChannel, interval, unmute_in='0'): if await db_load_req( f"SELECT COUNT(*) as count FROM mutechannel WHERE id = {member.id} AND guild_id = {ctx.guild.id}") == 0: membervalues = (member.id, str(member), False, datetime.now(), int(interval), int(unmute_in), ctx.guild.id, str(ctx.guild.id) + str(member.id)) cur = data.cursor() cur.execute("INSERT INTO mutechannel VALUES(?, ?, ?, ?, ?, ?, ?, ?);", membervalues) data.commit() if unmute_in == '0': unmute_in = 'Permanent' Bot = ctx.guild.get_member(750415350348382249) if Bot.guild_permissions.manage_messages and Bot.guild_permissions.manage_roles: await ctx.message.add_reaction(agree_emoji()) embed = discord.Embed(title=f"Медленный режим в {member} включён", color=discord.Colour.blurple(), description=f'Интервал: `{interval}` секунд \nМедленный режим отключется через: `{unmute_in}` минут') await ctx.send(embed=embed) else: await ctx.message.add_reaction(warning_emoji()) embed = discord.Embed( title=f"Медленный режим у {member} включён, но некотороые необходимые права отсутствуют", color=discord.Colour.blurple(), description=f'Интервал: `{interval}` секунд \nМедленный режим отключется через: `{unmute_in}` минут \nОтсутствуент право "Управлять сообщениями". Медленный режим не будет работать корректно') await ctx.send(embed=embed) else: await ctx.message.add_reaction(disagree_emoji()) embed = discord.Embed(title=f"{disagree_emoji()} Ошибка", description="Невозможно включить медленный режим каналу дважды.", color=discord.Colour.red()) await ctx.send(embed=embed) await asyncio.sleep(int(unmute_in) * 60) if await db_load_req( f"SELECT COUNT(*) as count FROM mutechannel WHERE id = {member.id} AND guild_id = {ctx.guild.id}") == 1 and unmute_in != 'Permanent': cur = data.cursor() cur.execute(f"DELETE FROM mutechannel WHERE id = {member.id} AND guild_id = {ctx.guild.id}") data.commit() await ctx.message.add_reaction(agree_emoji()) embed = discord.Embed(title=f"Медленный режим у {member} отключён", color=discord.Colour.blurple()) await ctx.send(embed=embed)
async def channelunslowdown(self, ctx, member: discord.TextChannel = None): if member == None: member = ctx.message.channel if await db_load_req( f"SELECT COUNT(*) as count FROM mutechannel WHERE id = {member.id} AND guild_id = {ctx.guild.id}") == 1: cur = data.cursor() cur.execute(f"DELETE FROM mutechannel WHERE id = {member.id} AND guild_id = {ctx.guild.id}") data.commit() await ctx.message.add_reaction(agree_emoji()) embed = discord.Embed(title=f"Медленный режим в {member} отключён", color=discord.Colour.blurple()) await ctx.send(embed=embed) else: await ctx.message.add_reaction(disagree_emoji()) embed = discord.Embed(title=f"{disagree_emoji()} Ошибка", description="Невозможно отключить медленный режим у канла, ведь он уже отключён.", color=discord.Colour.red()) await ctx.send(embed=embed)
async def unslowdown(self, ctx, member: discord.Member): if await db_load_req( f"SELECT COUNT(*) as count FROM mutemembers WHERE id = {member.id} AND guild_id = {ctx.guild.id}" ) == 1: cur = data.cursor() cur.execute( f"DELETE FROM mutemembers WHERE id = {member.id} AND guild_id = {ctx.guild.id}" ) data.commit() await ctx.message.add_reaction(agree_emoji()) embed = discord.Embed(title=f"Медленный режим у {member} отключён", color=discord.Colour.blurple()) await ctx.send(embed=embed) await usd_log(ctx, member, ctx.author) else: await ctx.message.add_reaction(disagree_emoji()) embed = discord.Embed( title=f"{disagree_emoji()} Ошибка", description= "Невозможно отключить медленный режим у пользователя, ведь он уже отключён.", color=discord.Colour.red()) await ctx.send(embed=embed)
async def on_guild_join(self, guild): try: embed = discord.Embed(title=f"Вошёл в {guild.name} ({guild.id})", colour=discord.Colour.blurple()) embed.set_author(name=guild.name, icon_url=guild.icon_url) await self.bot.get_channel(810967184397434921).send(embed=embed) except Exception as error: await self.bot.get_channel(810967184397434921).send(f'Logger error: {error}') count = await db_load_req(f"SELECT COUNT(*) as count FROM guilds WHERE id = {guild.id}") if count == 0: if str(guild.region) == "russia": language = "ru" else: language = "en" guildvalues = (guild.id, str(guild.name), 2, time.time(), bool(1), 0, 0, language) cur = data.cursor() cur.execute("INSERT INTO guilds VALUES(?, ?, ?, ?, ?, ?, ?, ?);", guildvalues) data.commit() elif count == 1: pass else: await developer().send(f'DataBaseError {guild.name} {guild.id} {datetime.now()}')
async def roleunslowdown(self, ctx, role: discord.Role, subchannel: discord.TextChannel = None): if await db_load_req( f"SELECT COUNT(*) as count FROM muteroles WHERE id = {role.id} AND guild_id = {ctx.guild.id} AND channel_id = {subchannel.id if subchannel is not None else None}" ) == 1: cur = data.cursor() cur.execute( f"DELETE FROM muteroles WHERE id = {role.id} AND guild_id = {ctx.guild.id} AND channel_id = {subchannel.id if subchannel is not None else None}" ) data.commit() await ctx.message.add_reaction(agree_emoji()) embed = discord.Embed(title=f"Медленный режим у {role} отключён", color=discord.Colour.blurple()) await ctx.send(embed=embed) else: await ctx.message.add_reaction(disagree_emoji()) embed = discord.Embed( title=f"{disagree_emoji()} Ошибка", description= "Невозможно отключить медленный режим у пользователя, ведь он уже отключён.", color=discord.Colour.red()) await ctx.send(embed=embed)
async def setup(self, ctx): try: guild_language = await get_guild_language(ctx) except: guild_language = "en" embed = discord.Embed(title=f"{loading_emoji()} Инициализация", description="Пожалуйста подождите...", colour=discord.Colour.blurple()) emb_message = await ctx.send(embed=embed) await asyncio.sleep(1) embed = discord.Embed(title="Инициализация завершена") count = await db_load_req( f"SELECT COUNT(*) as count FROM guilds WHERE id = {ctx.guild.id}") if count == 0: if str(ctx.guild.region) == "russia": language = "ru" else: language = "en" guildvalues = (ctx.guild.id, str(ctx.guild.name), 1, time.time(), bool(1), 0, 0, language) cur = data.cursor() cur.execute("INSERT INTO guilds VALUES(?, ?, ?, ?, ?, ?, ?, ?);", guildvalues) data.commit() embed.add_field(name=f"База данных: {agree_emoji()}", value="Данные занесены в базу данных") if embed.colour != discord.Colour.orange( ) and embed.colour != discord.Colour.red(): embed.colour = discord.Colour.green() elif count == 1: embed.add_field(name=f"База данных: {agree_emoji()}", value="Всё в порядке") if embed.colour != discord.Colour.orange( ) and embed.colour != discord.Colour.red(): embed.colour = discord.Colour.green() else: print('DataBaseError', ctx.guild.name, ctx.guild.id, datetime.now()) await developer().send( f'DataBaseError {ctx.guild.name} {ctx.guild.id} {datetime.now()}' ) embed.add_field(name=f"База данных: {disagree_emoji()}", value="Критическая ошибка") embed.colour = discord.Colour.red() await ctx.send( "Критическая ошибка базы данных, разработчик уже извещён о проблеме" ) Bot = ctx.guild.get_member(750415350348382249) if Bot.guild_permissions.manage_messages and Bot.guild_permissions.manage_roles: embed.add_field(name=f"Права: {agree_emoji()}", value="Всё в порядке") if embed.colour != discord.Colour.orange( ) and embed.colour != discord.Colour.red(): embed.colour = discord.Colour.green() else: embed.add_field(name=f"Права: {warning_emoji()}", value="Отсутствуют некоторые необходимые права") if embed.colour != discord.Colour.red(): embed.colour = discord.Colour.orange() await ctx.send( "Проверте права бота, возможно у него отсутствуют права: Управление сообщениями, Управление ролями" ) await emb_message.edit(embed=embed)
async def settings(self, ctx, option, value): cur = data.cursor() cur.execute(f"SELECT * FROM guilds WHERE id={ctx.guild.id}") guild_data = cur.fetchone() db_guild_possible_options = [ "mod", "mute_role", "log_channel", "language" ] mod_possible_value = [1, 2, 3] language_possible_value = ['ru', 'en'] if await db_valid_cheker(ctx): language = await get_guild_language(ctx) if option in db_guild_possible_options: if option == db_guild_possible_options[0]: if int(value) in mod_possible_value: await db_dump_req( f"UPDATE guilds SET mod = {int(value)} WHERE id = {ctx.guild.id};" ) if int(value) == 3 and ctx.guild.get_role( int(guild_data[5])) is None: await ctx.message.add_reaction(warning_emoji()) await ctx.send( "Роль мута не назначена, данный режим не сможет рабоать без неё.\nЧтобы установить роль мута используйте `ts!settings mute_role {роль}` (в качестве аргумента комманды нужно использовать упоминание или ID)." ) else: await ctx.message.add_reaction(agree_emoji()) else: await ctx.send( f"{lang[language]['Parameter']} `{option}` {lang[language]['CannotSet']} `{value}`" ) await ctx.message.add_reaction(disagree_emoji()) elif option == db_guild_possible_options[1]: if value != '0': role = convert_to_role(ctx.guild, value) if role is not None: role_id = role.id else: role_id = 0 await ctx.send( f"{lang[language]['Parameter']} `{option}` {lang[language]['CannotSet']} `{value}`" ) await ctx.message.add_reaction(disagree_emoji()) else: role_id = 0 await db_dump_req( f"UPDATE guilds SET mute_role_id = {int(role_id)} WHERE id = {ctx.guild.id};" ) await ctx.message.add_reaction(agree_emoji()) elif option == db_guild_possible_options[2]: if value != '0': txtchannel = convert_to_channel(value) if txtchannel is not None: channelid = txtchannel.id else: channelid = 0 await ctx.send( f"{lang[language]['Parameter']} `{option}` {lang[language]['CannotSet']} `{value}`" ) await ctx.message.add_reaction(disagree_emoji()) else: channelid = 0 await db_dump_req( f"UPDATE guilds SET log_channel_id = {int(channelid)} WHERE id = {ctx.guild.id};" ) await ctx.message.add_reaction(agree_emoji()) elif option == db_guild_possible_options[3]: if value in language_possible_value: await db_dump_req( f'UPDATE guilds SET language = "{value}" WHERE id = {ctx.guild.id};' ) await ctx.message.add_reaction(agree_emoji()) else: await ctx.send( f"{lang[language]['Parameter']} `{option}` {lang[language]['CannotSet']} `{value}`" ) await ctx.message.add_reaction(disagree_emoji()) else: await ctx.send( f"{lang[language]['Parameter']} `{option}` {lang[language]['NotFound']}" ) await ctx.message.add_reaction(disagree_emoji())