async def hardunmute(cmd: SigmaCommand, message: discord.Message, args: list): if message.author.permissions_in(message.channel).manage_channels: if message.mentions: target = message.mentions[0] if len(args) > 1: reason = ' '.join(args[1:]) else: reason = 'Not stated.' hierarchy_me = hierarchy_permit(message.guild.me, target) if hierarchy_me: hierarchy_auth = hierarchy_permit(message.author, target) if hierarchy_auth: ongoing = discord.Embed(color=0x696969, title='⛓ Editing permissions...') ongoing_msg = await message.channel.send(embed=ongoing) for channel in message.guild.channels: if isinstance(channel, discord.TextChannel) or isinstance(channel, discord.CategoryChannel): try: # noinspection PyTypeChecker await channel.set_permissions(target, overwrite=None, reason=reason) except discord.Forbidden: pass log_embed = generate_log_embed(message, target, args) await log_event(cmd.bot, message.guild, cmd.db, log_embed, 'LogMutes') title = f'✅ {target.display_name} has been hard-unmuted.' response = discord.Embed(color=0x77B255, title=title) await ongoing_msg.delete() else: response = discord.Embed(color=0xBE1931, title='❗ That user is equal or above you.') else: response = discord.Embed(color=0xBE1931, title='❗ I can\'t mute a user equal or above me.') else: response = discord.Embed(color=0xBE1931, title='❗ No user targeted.') else: response = discord.Embed(title='⛔ Access Denied. Manage Channels needed.', color=0xBE1931) await message.channel.send(embed=response)
def get_members(cmd, message, targets): """ :param cmd: :type cmd: sigma.core.mechanics.command.SigmaCommand :type message: discord/Message :type targets: list[discord.Member] :rtype: list[discord.Member] or str """ results = [] for target in targets: if cmd.bot.user.id != target.id: if message.author.id != target.id: above_hier = hierarchy_permit(message.author, target) is_admin = message.author.permissions_in( message.channel).administrator if above_hier or is_admin: above_me = hierarchy_permit(message.guild.me, target) if above_me: results.append(target) else: return f'⛔ {target.name} is above my highest role.' else: return f'⛔ {target.name} is equal or above you.' else: return '❗ You can\'t ban yourself.' else: return '❗ I can\'t ban myself.' return results
async def softban(cmd: SigmaCommand, message: discord.Message, args: list): if message.author.permissions_in(message.channel).ban_members: if message.mentions: target = message.mentions[0] if cmd.bot.user.id != target.id: if message.author.id != target.id: above_hier = hierarchy_permit(message.author, target) is_admin = message.author.permissions_in( message.channel).administrator if above_hier or is_admin: above_me = hierarchy_permit(message.guild.me, target) if above_me: reason = ' '.join(args[1:]) if args[1:] else None response = discord.Embed( color=0x696969, title=f'🔩 The user has been soft-banned.') response_title = f'{target.name}#{target.discriminator}' response.set_author(name=response_title, icon_url=user_avatar(target)) to_target = discord.Embed(color=0x696969) to_target.add_field( name='🔩 You have been soft-banned.', value=f'Reason: {reason}') to_target.set_footer( text=f'From: {message.guild.name}.', icon_url=message.guild.icon_url) try: await target.send(embed=to_target) except discord.Forbidden: pass await target.ban( reason= f'By {message.author.name}: {reason} (Soft)') await target.unban() log_embed = generate_log_embed( message, target, reason) await log_event(cmd.bot, message.guild, cmd.db, log_embed, 'LogBans') else: response = discord.Embed( color=0xBE1931, title='⛔ Target is above my highest role.') else: response = discord.Embed( color=0xBE1931, title= '⛔ Can\'t soft-ban someone equal or above you.') else: response = discord.Embed( color=0xBE1931, title='❗ You can\'t soft-ban yourself.') else: response = discord.Embed(color=0xBE1931, title='❗ I can\'t soft-ban myself.') else: response = discord.Embed(color=0xBE1931, title='❗ No user targeted.') else: response = permission_denied('Ban permissions') await message.channel.send(embed=response)
async def kick(cmd: SigmaCommand, message: discord.Message, args: list): if message.author.permissions_in(message.channel).kick_members: if message.mentions: target = message.mentions[0] if cmd.bot.user.id != target.id: if message.author.id != target.id: above_hier = hierarchy_permit(message.author, target) is_admin = message.author.permissions_in( message.channel).administrator if above_hier or is_admin: above_me = hierarchy_permit(message.guild.me, target) if above_me: if len(args) > 1: reason = ' '.join(args[1:]) else: reason = 'No reason stated.' response = discord.Embed( color=0xc1694f, title=f'👢 The user has been removed.') response_title = f'{target.name}#{target.discriminator}' response.set_author(name=response_title, icon_url=user_avatar(target)) to_target = discord.Embed(color=0xc1694f) to_target.add_field(name='👢 You have been kicked.', value=f'Reason: {reason}') to_target.set_footer( text=f'From: {message.guild.name}.', icon_url=message.guild.icon_url) try: await target.send(embed=to_target) except discord.Forbidden: pass await target.kick( reason=f'By {message.author.name}: {reason}') log_embed = generate_log_embed( message, target, reason) await log_event(cmd.bot, message.guild, cmd.db, log_embed, 'LogKicks') else: response = discord.Embed( title='⛔ Target is above my highest role.', color=0xBE1931) else: response = discord.Embed( title='⛔ Can\'t kick someone equal or above you.', color=0xBE1931) else: response = discord.Embed( color=0xBE1931, title='❗ You can\'t kick yourself.') else: response = discord.Embed(color=0xBE1931, title='❗ I can\'t kick myself.') else: response = discord.Embed(color=0xBE1931, title='❗ No user targeted.') else: response = discord.Embed( title='⛔ Access Denied. Kick permissions needed.', color=0xBE1931) await message.channel.send(embed=response)
async def hardmute(cmd: SigmaCommand, message: discord.Message, args: list): if message.author.permissions_in(message.channel).manage_channels: if message.mentions: target = message.mentions[0] if len(args) > 1: reason = ' '.join(args[1:]) else: reason = 'Not stated.' hierarchy_me = hierarchy_permit(message.guild.me, target) if hierarchy_me: hierarchy_auth = hierarchy_permit(message.author, target) if hierarchy_auth: ongoing = discord.Embed(color=0x696969, title='⛓ Editing permissions...') ongoing_msg = await message.channel.send(embed=ongoing) for channel in message.guild.channels: if isinstance(channel, discord.TextChannel) or isinstance( channel, discord.CategoryChannel): try: await channel.set_permissions( target, send_messages=False, add_reactions=False) except discord.Forbidden: pass await ongoing_msg.delete() log_embed = generate_log_embed(message, target, args) await log_event(cmd.bot, message.guild, cmd.db, log_embed, 'LogMutes') title = f'✅ {target.display_name} has been hard-muted.' response = discord.Embed(color=0x77B255, title=title) to_target_title = f'🔇 You have been hard-muted.' to_target = discord.Embed(color=0x696969) to_target.add_field(name=to_target_title, value=f'Reason: {reason}') to_target.set_footer(text=f'On: {message.guild.name}', icon_url=message.guild.icon_url) try: await target.send(embed=to_target) except discord.Forbidden: pass else: response = discord.Embed( color=0xBE1931, title='❗ That user is equal or above you.') else: response = discord.Embed( color=0xBE1931, title='❗ I can\'t mute a user equal or above me.') else: response = discord.Embed(color=0xBE1931, title='❗ No user targeted.') else: response = discord.Embed( title='⛔ Access Denied. Manage Channels needed.', color=0xBE1931) await message.channel.send(embed=response)
async def voicekick(cmd, pld): """ :param cmd: The command object referenced in the command. :type cmd: sigma.core.mechanics.command.SigmaCommand :param pld: The payload with execution data and details. :type pld: sigma.core.mechanics.payload.CommandPayload """ if pld.msg.author.permissions_in(pld.msg.channel).kick_members: target = get_broad_target(pld) if target: if cmd.bot.user.id != target.id: if pld.msg.author.id != target.id: above_hier = hierarchy_permit(pld.msg.author, target) is_admin = pld.msg.author.permissions_in( pld.msg.channel).administrator if above_hier or is_admin: above_me = hierarchy_permit(pld.msg.guild.me, target) if above_me: if target.voice: tvc = target.voice.channel tempvc = discord.utils.find( lambda x: x.name == 'Kick Hall', pld.msg.guild.channels) if not tempvc: tempvc = await pld.msg.guild.create_voice_channel( 'Kick Hall') await target.move_to(tempvc) await tempvc.delete() remove_title = f'👢 {target.name} has been removed from {tvc.name}.' response = discord.Embed(color=0xc1694f, title=remove_title) else: response = GenericResponse( f'{target.name} is not in a voice channel.' ).error() else: response = GenericResponse( 'Target is above my highest role.').denied() else: response = GenericResponse( 'Can\'t kick someone equal or above you.').denied( ) else: response = GenericResponse( 'You can\'t kick yourself.').error() else: response = GenericResponse('I can\'t kick myself.').error() else: response = GenericResponse('No user targeted.').error() else: response = GenericResponse( 'Access Denied. Kick permissions needed.').denied() await pld.msg.channel.send(embed=response)
async def voicekick(cmd: SigmaCommand, message: discord.Message, args: list): if message.author.permissions_in(message.channel).kick_members: if message.mentions: target = message.mentions[0] if cmd.bot.user.id != target.id: if message.author.id != target.id: above_hier = hierarchy_permit(message.author, target) is_admin = message.author.permissions_in( message.channel).administrator if above_hier or is_admin: above_me = hierarchy_permit(message.guild.me, target) if above_me: if target.voice: tvc = target.voice.channel tempvc = discord.utils.find( lambda x: x.name == 'Kick Hall', message.guild.channels) if not tempvc: tempvc = await message.guild.create_voice_channel( 'Kick Hall') await target.move_to(tempvc) await tempvc.delete() remove_title = f'👢 {target.name} has been removed from {tvc.name}.' response = discord.Embed(color=0xc1694f, title=remove_title) else: not_in_voice = f'❗ {target.name} is not in a voice channel.' response = discord.Embed(color=0xBE1931, title=not_in_voice) else: response = discord.Embed( color=0xBE1931, title='⛔ Target is above my highest role.') else: response = discord.Embed( color=0xBE1931, title='⛔ Can\'t kick someone equal or above you.') else: response = discord.Embed( color=0xBE1931, title='❗ You can\'t kick yourself.') else: response = discord.Embed(color=0xBE1931, title='❗ I can\'t kick myself.') else: response = discord.Embed(color=0xBE1931, title='❗ No user targeted.') else: response = permission_denied('Kick permissions') await message.channel.send(embed=response)
async def textunmute(cmd: SigmaCommand, message: discord.Message, args: list): if not message.author.permissions_in(message.channel).manage_messages: response = permission_denied('Manage Messages') else: if not message.mentions: response = discord.Embed(color=0xBE1931, title='❗ No user targeted.') else: author = message.author target = message.mentions[0] is_admin = author.permissions_in(message.channel).administrator if author.id == target.id and not is_admin: response = discord.Embed(color=0xBE1931, title='❗ Can\'t unmute yourself.') else: above_hier = hierarchy_permit(author, target) if not above_hier and not is_admin: response = discord.Embed(color=0xBE1931, title='⛔ Can\'t unmute someone equal or above you.') else: mute_list = await cmd.db.get_guild_settings(message.guild.id, 'muted_users') if mute_list is None: mute_list = [] if target.id not in mute_list: resp_title = f'❗ {target.display_name} is not text muted.' response = discord.Embed(color=0xBE1931, title=resp_title) else: mute_list.remove(target.id) reason = ' '.join(args[1:]) if args[1:] else None await cmd.db.set_guild_settings(message.guild.id, 'muted_users', mute_list) response = discord.Embed(color=0x77B255, title=f'✅ {target.display_name} has been unmuted.') log_embed = generate_log_embed(message, target, reason) await log_event(cmd.bot, message.guild, cmd.db, log_embed, 'log_mutes') await message.channel.send(embed=response)
async def textmute(cmd, pld): """ :param cmd: The command object referenced in the command. :type cmd: sigma.core.mechanics.command.SigmaCommand :param pld: The payload with execution data and details. :type pld: sigma.core.mechanics.payload.CommandPayload """ if not pld.msg.author.permissions_in(pld.msg.channel).manage_messages: response = denied('Access Denied. Manage Messages needed.') else: if not pld.msg.mentions: response = error('No user targeted.') else: author = pld.msg.author target = pld.msg.mentions[0] if author.id == target.id: response = error('Can\'t mute yourself.') elif cmd.bot.user.id == target.id: response = error('I can\'t mute myself.') else: above_hier = hierarchy_permit(author, target) if not above_hier: response = denied('Can\'t mute someone equal or above you.') else: timed = pld.args[-1].startswith('--time=') try: now = arrow.utcnow().timestamp endstamp = now + convert_to_seconds(pld.args[-1].split('=')[-1]) if timed else None except (LookupError, ValueError): err_response = error('Please use the format HH:MM:SS.') await pld.msg.channel.send(embed=err_response) return mute_list = pld.settings.get('muted_users') if mute_list is None: mute_list = [] if target.id in mute_list: response = error(f'{target.display_name} is already text muted.') else: mute_list.append(target.id) await cmd.db.set_guild_settings(pld.msg.guild.id, 'muted_users', mute_list) response = ok(f'{target.display_name} has been text muted.') rarg = pld.args[1:-1] if timed else pld.args[1:] if pld.args[1:] else None reason = ' '.join(rarg) if rarg else None await make_incident(cmd.db, pld.msg.guild, pld.msg.author, target, reason) log_embed = generate_log_embed(pld.msg, target, reason) await log_event(cmd.bot, pld.settings, log_embed, 'log_mutes') guild_icon = str(pld.msg.guild.icon_url) if pld.msg.guild.icon_url else discord.Embed.Empty to_target_title = '🔇 You have been text muted.' to_target = discord.Embed(color=0x696969) to_target.add_field(name=to_target_title, value=f'Reason: {reason}') to_target.set_footer(text=f'On: {pld.msg.guild.name}', icon_url=guild_icon) try: await target.send(embed=to_target) except discord.Forbidden: pass if endstamp: doc_data = {'server_id': pld.msg.guild.id, 'user_id': target.id, 'time': endstamp} await cmd.db[cmd.db.db_nam].TextmuteClockworkDocs.insert_one(doc_data) await pld.msg.channel.send(embed=response)
async def kick(cmd, pld): """ :param cmd: The command object referenced in the command. :type cmd: sigma.core.mechanics.command.SigmaCommand :param pld: The payload with execution data and details. :type pld: sigma.core.mechanics.payload.CommandPayload """ if pld.msg.author.permissions_in(pld.msg.channel).kick_members: target = get_broad_target(pld) if target: if cmd.bot.user.id != target.id: if pld.msg.author.id != target.id: above_hier = hierarchy_permit(pld.msg.author, target) is_admin = pld.msg.author.permissions_in(pld.msg.channel).administrator if above_hier or is_admin: above_me = hierarchy_permit(pld.msg.guild.me, target) if above_me: reason = ' '.join(pld.args[1:]) if pld.args[1:] else None response = discord.Embed(color=0xc1694f, title='👢 The user has been removed.') response_title = f'{target.name}#{target.discriminator}' response.set_author(name=response_title, icon_url=user_avatar(target)) to_target = discord.Embed(color=0xc1694f) to_target.add_field(name='👢 You have been kicked.', value=f'Reason: {reason}') guild_icon = str(pld.msg.guild.icon_url) if pld.msg.guild.icon_url else discord.Embed.Empty to_target.set_footer(text=f'From: {pld.msg.guild.name}.', icon_url=guild_icon) try: await target.send(embed=to_target) except discord.Forbidden: pass author = f'{pld.msg.author.name}#{pld.msg.author.discriminator}' await target.kick(reason=f'By {author}: {reason}') log_embed = generate_log_embed(pld.msg, target, reason) await log_event(cmd.bot, pld.settings, log_embed, 'log_kicks') else: response = denied('Target is above my highest role.') else: response = denied('Can\'t kick someone equal or above you.') else: response = error('You can\'t kick yourself.') else: response = error('I can\'t kick myself.') else: response = error('No user targeted.') else: response = denied('Access Denied. Kick permissions needed.') await pld.msg.channel.send(embed=response)
async def hardunmute(cmd, pld): """ :param cmd: The command object referenced in the command. :type cmd: sigma.core.mechanics.command.SigmaCommand :param pld: The payload with execution data and details. :type pld: sigma.core.mechanics.payload.CommandPayload """ if pld.msg.author.permissions_in(pld.msg.channel).manage_channels: target = get_broad_target(pld) if target: hierarchy_me = hierarchy_permit(pld.msg.guild.me, target) if hierarchy_me: hierarchy_auth = hierarchy_permit(pld.msg.author, target) if hierarchy_auth: reason = ' '.join(pld.args[1:]) if pld.args[1:] else None await make_incident(cmd.db, pld.msg.guild, pld.msg.author, target, reason) ongoing = discord.Embed(color=0x696969, title='⛓ Editing permissions...') ongoing_msg = await pld.msg.channel.send(embed=ongoing) for channel in pld.msg.guild.channels: if isinstance(channel, discord.TextChannel) or isinstance( channel, discord.CategoryChannel): try: # noinspection PyTypeChecker await channel.set_permissions(target, overwrite=None, reason=reason) except discord.Forbidden: pass log_embed = generate_log_embed(pld.msg, target, reason) await log_event(cmd.bot, pld.settings, log_embed, 'log_mutes') response = ok( f'{target.display_name} has been hard-unmuted.') await ongoing_msg.delete() else: response = error('That user is equal or above you.') else: response = error('I can\'t mute a user equal or above me.') else: response = error('No user targeted.') else: response = denied('Access Denied. Manage Channels needed.') await pld.msg.channel.send(embed=response)
async def textmute(cmd: SigmaCommand, message: discord.Message, args: list): if not message.author.permissions_in(message.channel).manage_messages: response = discord.Embed( title='⛔ Access Denied. Manage Messages needed.', color=0xBE1931) else: if not message.mentions: response = discord.Embed(title='❗ No user targeted.', color=0xBE1931) else: author = message.author target = message.mentions[0] if author.id == target.id: response = discord.Embed(title='❗ Can\'t mute yourself.', color=0xBE1931) else: above_hier = hierarchy_permit(author, target) if not above_hier: response = discord.Embed( title='⛔ Can\'t mute someone equal or above you.', color=0xBE1931) else: mute_list = await cmd.db.get_guild_settings( message.guild.id, 'MutedUsers') if mute_list is None: mute_list = [] if target.id in mute_list: resp_title = f'❗ {target.display_name} is already text muted.' response = discord.Embed(title=resp_title, color=0xBE1931) else: mute_list.append(target.id) await cmd.db.set_guild_settings( message.guild.id, 'MutedUsers', mute_list) response = discord.Embed( color=0x77B255, title= f'✅ {target.display_name} has been text muted.') log_embed = generate_log_embed(message, target, args) await log_event(cmd.bot, message.guild, cmd.db, log_embed, 'LogMutes') if len(args) > 1: reason = ' '.join(args[1:]) else: reason = 'Not stated.' to_target_title = f'🔇 You have been text muted.' to_target = discord.Embed(color=0x696969) to_target.add_field(name=to_target_title, value=f'Reason: {reason}') to_target.set_footer(text=f'On: {message.guild.name}', icon_url=message.guild.icon_url) try: await target.send(embed=to_target) except discord.Forbidden: pass await message.channel.send(embed=response)
async def softban(cmd, message, args): if message.author.permissions_in(message.channel).ban_members: if message.mentions: target = message.mentions[0] if cmd.bot.user.id != target.id: if message.author.id != target.id: above_hier = hierarchy_permit(message.author, target) is_admin = message.author.permissions_in( message.channel).administrator if above_hier or is_admin: if len(args) > 1: reason = ' '.join(args[1:]) else: reason = 'No reason stated.' response = discord.Embed( color=0x696969, title=f'🔩 The user has been soft-banned.') response_title = f'{target.name}#{target.discriminator}' response.set_author(name=response_title, icon_url=user_avatar(target)) to_target = discord.Embed(color=0x696969) to_target.add_field( name='🔩 You have been soft-banned.', value=f'Reason: {reason}') to_target.set_footer( text=f'From: {message.guild.name}.', icon_url=message.guild.icon_url) try: await target.send(embed=to_target) except discord.ClientException: pass await target.ban( reason=f'By {message.author.name}: {reason} (Soft)' ) await target.unban() else: response = discord.Embed( title= '⛔ Can\'t soft-ban someone equal or above you.', color=0xBE1931) else: response = discord.Embed( color=0xBE1931, title='❗ You can\'t soft-ban yourself.') else: response = discord.Embed(color=0xBE1931, title='❗ I can\'t soft-ban myself.') else: response = discord.Embed(color=0xBE1931, title='❗ No user targeted.') else: response = discord.Embed( title='⛔ Access Denied. Ban permissions needed.', color=0xBE1931) await message.channel.send(embed=response)
async def hardunmute(cmd, message, args): if message.author.permissions_in(message.channel).manage_channels: if message.mentions: target = message.mentions[0] if len(args) > 1: reason = ' '.join(args[1:]) else: reason = 'Not stated.' hierarchy_me = hierarchy_permit(message.guild.me, target) if hierarchy_me: hierarchy_auth = hierarchy_permit(message.author, target) if hierarchy_auth: for channel in message.guild.channels: if isinstance(channel, discord.TextChannel): try: await channel.set_permissions(target, overwrite=None, reason=reason) except discord.Forbidden: pass log_embed = generate_log_embed(message, target, args) await log_event(cmd.db, message.guild, log_embed) title = f'✅ {target.name}#{target.discriminator} has been hard-unmuted.' response = discord.Embed(color=0x77B255, title=title) else: response = discord.Embed( color=0xBE1931, title='❗ That user is euqal or above you.') else: response = discord.Embed( color=0xBE1931, title='❗ I can\'t mute a user equal or above me.') else: response = discord.Embed(color=0xBE1931, title='❗ No user targetted.') else: response = discord.Embed( title='⛔ Access Denied. Manage Channels needed.', color=0xBE1931) await message.channel.send(embed=response)
async def textunmute(cmd, pld): """ :param cmd: The command object referenced in the command. :type cmd: sigma.core.mechanics.command.SigmaCommand :param pld: The payload with execution data and details. :type pld: sigma.core.mechanics.payload.CommandPayload """ if not pld.msg.author.permissions_in(pld.msg.channel).manage_messages: response = GenericResponse( 'Access Denied. Manage Messages needed.').denied() else: if not pld.msg.mentions: response = GenericResponse('No user targeted.').error() else: author = pld.msg.author target = pld.msg.mentions[0] is_admin = author.permissions_in(pld.msg.channel).administrator if author.id == target.id and not is_admin: response = GenericResponse('Can\'t unmute yourself.').error() else: above_hier = hierarchy_permit(author, target) if not above_hier and not is_admin: response = GenericResponse( 'Can\'t unmute someone equal or above you.').denied() else: mute_list = pld.settings.get('muted_users') if mute_list is None: mute_list = [] if target.id not in mute_list: response = GenericResponse( f'{target.display_name} is not text-muted.').error( ) else: mute_list.remove(target.id) reason = ' '.join( pld.args[1:]) if pld.args[1:] else None await make_incident(cmd.db, pld.msg.guild, pld.msg.author, target, reason) await cmd.db.set_guild_settings( pld.msg.guild.id, 'muted_users', mute_list) response = GenericResponse( f'{target.display_name} has been unmuted.').ok() log_embed = generate_log_embed(pld.msg, target, reason) await log_event(cmd.bot, pld.settings, log_embed, 'log_mutes') await pld.msg.channel.send(embed=response)
async def textmute(cmd: SigmaCommand, message: discord.Message, args: list): if not message.author.permissions_in(message.channel).manage_messages: response = permission_denied('Manage Messages') else: if not message.mentions: response = discord.Embed(color=0xBE1931, title='❗ No user targeted.') else: author = message.author target = message.mentions[0] if author.id == target.id: response = discord.Embed(color=0xBE1931, title='❗ Can\'t mute yourself.') else: above_hier = hierarchy_permit(author, target) if not above_hier: response = discord.Embed(color=0xBE1931, title='⛔ Can\'t mute someone equal or above you.') else: timed = args[-1].startswith('--time=') endstamp = arrow.utcnow().timestamp + convert_to_seconds(args[-1].split('=')[-1]) if timed else None mute_list = await cmd.db.get_guild_settings(message.guild.id, 'MutedUsers') if mute_list is None: mute_list = [] if target.id in mute_list: resp_title = f'❗ {target.display_name} is already text muted.' response = discord.Embed(color=0xBE1931, title=resp_title) else: mute_list.append(target.id) await cmd.db.set_guild_settings(message.guild.id, 'MutedUsers', mute_list) response = discord.Embed(color=0x77B255, title=f'✅ {target.display_name} has been text muted.') rarg = args[1:-1] if timed else args[1:] if args[1:] else None reason = ' '.join(rarg) if rarg else None log_embed = generate_log_embed(message, target, reason) await log_event(cmd.bot, message.guild, cmd.db, log_embed, 'LogMutes') to_target_title = f'🔇 You have been text muted.' to_target = discord.Embed(color=0x696969) to_target.add_field(name=to_target_title, value=f'Reason: {reason}') to_target.set_footer(text=f'On: {message.guild.name}', icon_url=message.guild.icon_url) try: await target.send(embed=to_target) except discord.Forbidden: pass if endstamp: doc_data = {'ServerID': message.guild.id, 'UserID': target.id, 'Time': endstamp} await cmd.db[cmd.db.db_nam].TextmuteClockworkDocs.insert_one(doc_data) await message.channel.send(embed=response)
async def textunmute(cmd, message, args): if not message.author.permissions_in(message.channel).manage_messages: response = discord.Embed( title='⛔ Access Denied. Manage Messages needed.', color=0xBE1931) else: if not message.mentions: response = discord.Embed(title='❗ No user targeted.', color=0xBE1931) else: author = message.author target = message.mentions[0] is_admin = author.permissions_in(message.channel).administrator if author.id == target.id and not is_admin: response = discord.Embed(title='❗ Can\'t unmute yourself.', color=0xBE1931) else: above_hier = hierarchy_permit(author, target) if not above_hier and not is_admin: response = discord.Embed( title='⛔ Can\'t unmute someone equal or above you.', color=0xBE1931) else: mute_list = cmd.db.get_guild_settings( message.guild.id, 'MutedUsers') if mute_list is None: mute_list = [] if target.id not in mute_list: resp_title = f'❗ {target.display_name} is not text muted.' response = discord.Embed(title=resp_title, color=0xBE1931) else: mute_list.remove(target.id) cmd.db.set_guild_settings(message.guild.id, 'MutedUsers', mute_list) response = discord.Embed( color=0x77B255, title=f'✅ {target.display_name} has been unmuted.') log_embed = generate_log_embed(message, target, args) await log_event(cmd.db, message.guild, log_embed) await message.channel.send(embed=response)
async def hardmute(cmd: SigmaCommand, message: discord.Message, args: list): if message.author.permissions_in(message.channel).manage_channels: if message.mentions: target = message.mentions[0] hierarchy_me = hierarchy_permit(message.guild.me, target) if hierarchy_me: hierarchy_auth = hierarchy_permit(message.author, target) if hierarchy_auth: ongoing = discord.Embed(color=0x696969, title='⛓ Editing permissions...') ongoing_msg = await message.channel.send(embed=ongoing) timed = args[-1].startswith('--time=') try: now = arrow.utcnow().timestamp endstamp = now + convert_to_seconds( args[-1].split('=')[-1]) if timed else None except (LookupError, ValueError): err_response = discord.Embed( color=0xBE1931, title='❗ Please use the format HH:MM:SS.') await message.channel.send(embed=err_response) return for channel in message.guild.channels: if isinstance(channel, discord.TextChannel) or isinstance( channel, discord.CategoryChannel): try: await channel.set_permissions( target, send_messages=False, add_reactions=False) except discord.Forbidden: pass await ongoing_msg.delete() rarg = args[ 1:-1] if timed else args[1:] if args[1:] else None reason = ' '.join(rarg) if rarg else None log_embed = generate_log_embed(message, target, reason) await log_event(cmd.bot, message.guild, cmd.db, log_embed, 'log_mutes') title = f'✅ {target.display_name} has been hard-muted.' response = discord.Embed(color=0x77B255, title=title) to_target_title = f'🔇 You have been hard-muted.' to_target = discord.Embed(color=0x696969) to_target.add_field(name=to_target_title, value=f'Reason: {reason}') to_target.set_footer(text=f'On: {message.guild.name}', icon_url=message.guild.icon_url) try: await target.send(embed=to_target) except discord.Forbidden: pass if endstamp: doc_data = { 'server_id': message.guild.id, 'user_id': target.id, 'time': endstamp } await cmd.db[ cmd.db.db_nam ].HardmuteClockworkDocs.insert_one(doc_data) else: response = discord.Embed( color=0xBE1931, title='❗ That user is equal or above you.') else: response = discord.Embed( color=0xBE1931, title='❗ I can\'t mute a user equal or above me.') else: response = discord.Embed(color=0xBE1931, title='❗ No user targeted.') else: response = permission_denied('Manage Channels') await message.channel.send(embed=response)
async def ban(cmd: SigmaCommand, message: discord.Message, args: list): if message.author.permissions_in(message.channel).ban_members: if message.mentions: target = message.mentions[0] if len(args) >= 2: try: clean_days = int(args[-1]) except ValueError: clean_days = 0 else: clean_days = 0 clean_days = clean_days if clean_days in [0, 1, 7] else 0 if cmd.bot.user.id != target.id: if message.author.id != target.id: above_hier = hierarchy_permit(message.author, target) is_admin = message.author.permissions_in( message.channel).administrator if above_hier or is_admin: above_me = hierarchy_permit(message.guild.me, target) if above_me: if len(args) > 1: reason = ' '.join(args[1:]) else: reason = 'No reason stated.' response = discord.Embed( color=0x696969, title=f'🔨 The user has been banned.') response_title = f'{target.name}#{target.discriminator}' response.set_author(name=response_title, icon_url=user_avatar(target)) to_target = discord.Embed(color=0x696969) to_target.add_field(name='🔨 You have been banned.', value=f'Reason: {reason}') to_target.set_footer( text=f'From: {message.guild.name}.', icon_url=message.guild.icon_url) try: await target.send(embed=to_target) except discord.Forbidden: pass audit_reason = f'By {message.author.name}: {reason}' await target.ban(reason=audit_reason, delete_message_days=clean_days) log_embed = generate_log_embed( message, target, reason) await log_event(cmd.bot, message.guild, cmd.db, log_embed, 'LogBans') else: response = discord.Embed( title='⛔ Target is above my highest role.', color=0xBE1931) else: response = discord.Embed( title='⛔ Can\'t ban someone equal or above you.', color=0xBE1931) else: response = discord.Embed( color=0xBE1931, title='❗ You can\'t ban yourself.') else: response = discord.Embed(color=0xBE1931, title='❗ I can\'t ban myself.') else: response = discord.Embed(color=0xBE1931, title='❗ No user targeted.') else: response = discord.Embed( title='⛔ Access Denied. Ban permissions needed.', color=0xBE1931) await message.channel.send(embed=response)
async def ban(cmd, pld): """ :param cmd: The command object referenced in the command. :type cmd: sigma.core.mechanics.command.SigmaCommand :param pld: The payload with execution data and details. :type pld: sigma.core.mechanics.payload.CommandPayload """ if pld.msg.author.permissions_in(pld.msg.channel).ban_members: target = get_broad_target(pld) if target: timed = pld.args[-1].startswith('--time=') try: now = arrow.utcnow().timestamp endstamp = now + convert_to_seconds( pld.args[-1].split('=')[-1]) if timed else None except (LookupError, ValueError): err_response = error('Please use the format HH:MM:SS.') await pld.msg.channel.send(embed=err_response) return if len(pld.args) >= 2: try: if endstamp: clean_days = int(pld.args[-2]) else: clean_days = int(pld.args[-1]) except ValueError: clean_days = 0 else: clean_days = 0 clean_days = clean_days if clean_days in [0, 1, 7] else 0 if cmd.bot.user.id != target.id: if pld.msg.author.id != target.id: above_hier = hierarchy_permit(pld.msg.author, target) is_admin = pld.msg.author.permissions_in( pld.msg.channel).administrator if above_hier or is_admin: above_me = hierarchy_permit(pld.msg.guild.me, target) if above_me: rarg = pld.args[1:-1] if timed else pld.args[ 1:] if pld.args[1:] else None reason = ' '.join(rarg) if rarg else None response = discord.Embed( color=0x696969, title='🔨 The user has been banned.') response_title = f'{target.name}#{target.discriminator}' response.set_author(name=response_title, icon_url=user_avatar(target)) guild_icon = str( pld.msg.guild.icon_url ) if pld.msg.guild.icon_url else discord.Embed.Empty to_target = discord.Embed(color=0x696969) to_target.add_field( name='🔨 You have been banned.', value=f'Reason: {reason}') to_target.set_footer( text=f'From: {pld.msg.guild.name}.', icon_url=guild_icon) try: await target.send(embed=to_target) except discord.Forbidden: pass audit_reason = f'By {pld.msg.author.name}#{pld.msg.author.discriminator}: {reason}' await target.ban(reason=audit_reason, delete_message_days=clean_days) log_embed = generate_log_embed( pld.msg, target, reason) await log_event(cmd.bot, pld.settings, log_embed, 'log_bans') if endstamp: doc_data = { 'server_id': pld.msg.guild.id, 'user_id': target.id, 'time': endstamp } await cmd.db[ cmd.db.db_nam ].BanClockworkDocs.insert_one(doc_data) else: response = denied( 'Target is above my highest role.') else: response = denied( 'Can\'t ban someone equal or above you.') else: response = error('You can\'t ban yourself.') else: response = error('I can\'t ban myself.') else: response = error('No user targeted.') else: response = denied('Access Denied. Ban permissions needed.') await pld.msg.channel.send(embed=response)
async def ban(cmd: SigmaCommand, message: discord.Message, args: list): if message.author.permissions_in(message.channel).ban_members: if message.mentions: target = message.mentions[0] timed = args[-1].startswith('--time=') try: now = arrow.utcnow().timestamp endstamp = now + convert_to_seconds( args[-1].split('=')[-1]) if timed else None except (LookupError, ValueError): err_response = discord.Embed( color=0xBE1931, title='❗ Please use the format HH:MM:SS.') await message.channel.send(embed=err_response) return if len(args) >= 2: try: if endstamp: clean_days = int(args[-2]) else: clean_days = int(args[-1]) except ValueError: clean_days = 0 else: clean_days = 0 clean_days = clean_days if clean_days in [0, 1, 7] else 0 if cmd.bot.user.id != target.id: if message.author.id != target.id: above_hier = hierarchy_permit(message.author, target) is_admin = message.author.permissions_in( message.channel).administrator if above_hier or is_admin: above_me = hierarchy_permit(message.guild.me, target) if above_me: rarg = args[1:-1] if timed else args[1:] if args[ 1:] else None reason = ' '.join(rarg) if rarg else None response = discord.Embed( color=0x696969, title=f'🔨 The user has been banned.') response_title = f'{target.name}#{target.discriminator}' response.set_author(name=response_title, icon_url=user_avatar(target)) to_target = discord.Embed(color=0x696969) to_target.add_field(name='🔨 You have been banned.', value=f'Reason: {reason}') to_target.set_footer( text=f'From: {message.guild.name}.', icon_url=message.guild.icon_url) try: await target.send(embed=to_target) except discord.Forbidden: pass audit_reason = f'By {message.author.name}: {reason}' await target.ban(reason=audit_reason, delete_message_days=clean_days) log_embed = generate_log_embed( message, target, reason) await log_event(cmd.bot, message.guild, cmd.db, log_embed, 'log_bans') if endstamp: doc_data = { 'server_id': message.guild.id, 'user_id': target.id, 'time': endstamp } await cmd.db[ cmd.db.db_nam ].BanClockworkDocs.insert_one(doc_data) else: response = discord.Embed( color=0xBE1931, title='⛔ Target is above my highest role.') else: response = discord.Embed( color=0xBE1931, title='⛔ Can\'t ban someone equal or above you.') else: response = discord.Embed( color=0xBE1931, title='❗ You can\'t ban yourself.') else: response = discord.Embed(color=0xBE1931, title='❗ I can\'t ban myself.') else: response = discord.Embed(color=0xBE1931, title='❗ No user targeted.') else: response = permission_denied('Ban permissions') await message.channel.send(embed=response)
async def hardmute(cmd, pld): """ :param cmd: The command object referenced in the command. :type cmd: sigma.core.mechanics.command.SigmaCommand :param pld: The payload with execution data and details. :type pld: sigma.core.mechanics.payload.CommandPayload """ if pld.msg.author.permissions_in(pld.msg.channel).manage_channels: target = get_broad_target(pld) if target: hierarchy_me = hierarchy_permit(pld.msg.guild.me, target) if hierarchy_me: hierarchy_auth = hierarchy_permit(pld.msg.author, target) if hierarchy_auth: ongoing = discord.Embed(color=0x696969, title='⛓ Editing permissions...') ongoing_msg = await pld.msg.channel.send(embed=ongoing) timed = pld.args[-1].startswith('--time=') try: now = arrow.utcnow().int_timestamp endstamp = now + convert_to_seconds(pld.args[-1].split('=')[-1]) if timed else None except (LookupError, ValueError): err_response = GenericResponse('Please use the format HH:MM:SS.').error() await pld.msg.channel.send(embed=err_response) return for channel in pld.msg.guild.channels: if isinstance(channel, discord.TextChannel) or isinstance(channel, discord.CategoryChannel): try: await channel.set_permissions(target, send_messages=False, add_reactions=False) except (discord.Forbidden, discord.NotFound): pass try: await ongoing_msg.delete() except discord.NotFound: pass rarg = pld.args[1:-1] if timed else pld.args[1:] if pld.args[1:] else None reason = ' '.join(rarg) if rarg else None await make_incident(cmd.db, pld.msg.guild, pld.msg.author, target, reason) log_embed = generate_log_embed(pld.msg, target, reason) await log_event(cmd.bot, pld.settings, log_embed, 'log_mutes') response = GenericResponse(f'{target.display_name} has been hard-muted.').ok() guild_icon = str(pld.msg.guild.icon_url) if pld.msg.guild.icon_url else discord.Embed.Empty to_target_title = '🔇 You have been hard-muted.' to_target = discord.Embed(color=0x696969) to_target.add_field(name=to_target_title, value=f'Reason: {reason}') to_target.set_footer(text=f'On: {pld.msg.guild.name}', icon_url=guild_icon) try: await target.send(embed=to_target) except (discord.Forbidden, discord.HTTPException): pass if endstamp: doc_data = {'server_id': pld.msg.guild.id, 'user_id': target.id, 'time': endstamp} await cmd.db[cmd.db.db_nam].HardmuteClockworkDocs.insert_one(doc_data) else: response = GenericResponse('That user is equal or above you.').error() else: response = GenericResponse('I can\'t mute a user equal or above me.').error() else: response = GenericResponse('No user targeted.').error() else: response = GenericResponse('Access Denied. Manage Channels needed.').denied() await pld.msg.channel.send(embed=response)