1
0
Fork 0
mirror of synced 2024-05-20 20:42:27 +12:00

Add the ability to ignore channels/members

This commit is contained in:
Phxntxm 2017-04-10 20:26:28 -05:00
parent e531d0ab4d
commit 38133ad8bb
2 changed files with 61 additions and 0 deletions

View file

@ -108,6 +108,55 @@ class Mod:
except discord.HTTPException:
await ctx.send("Sorry, I failed to ban that user!")
@commands.command()
@commands.guild_only()
@utils.custom_perms(manage_guild=True)
async def ignore(self, ctx, member_or_channel):
"""This command can be used to have Bonfire ignore certain members/channels
EXAMPLE: !ignore #general
RESULT: Bonfire will ignore commands sent in the general channel"""
key = str(ctx.message.guild.id)
converter = commands.converter.MemberConverter()
converter.prepare(ctx, member_or_channel)
member = None
channel = None
try:
member = converter.convert()
except commands.converter.BadArgument:
converter = commands.converter.TextChannelConverter()
converter.prepare(ctx, member_or_channel)
try:
channel = converter.convert()
except commands.converter.BadArgument:
await ctx.send("{} does not appear to be a member or channel!".format(member_or_channel))
return
settings = await utils.get_content('server_settings', key)
ignored = settings.get('ignored', {'members': [], 'channels': []})
if member:
if str(member.id) in ignored['members']:
await ctx.send("I am already ignoring {}!".format(member.display_name))
return
elif member.guild_permissions >= ctx.message.author.guild_permissions:
await ctx.send("You cannot make me ignore someone at equal or higher rank than you!")
return
else:
ignored['members'].append(str(member.id))
fmt = "Ignoring {}".format(member.display_name)
elif channel:
if str(channel.id) in ignored['channels']:
await ctx.send("I am already ignoring {}!".format(channel.mention))
return
else:
ignored['channels'].append(str(channel.id))
fmt = "Ignoring {}".format(channel.mention)
update = {'ignored': ignored}
await utils.update_content('server_settings', update, key)
await ctx.send(fmt)
@commands.command(aliases=['alerts'])
@commands.guild_only()
@utils.custom_perms(kick_members=True)

View file

@ -65,6 +65,14 @@ async def db_check():
def is_owner(ctx):
return ctx.message.author.id in config.owner_ids
def should_ignore(ctx):
try:
server_settings = config.cache.get('server_settings').values
ignored = [x for x in server_settings if x['server_id'] == str(
ctx.message.guild.id)][0]['ignored']
return str(ctx.message.author.id) in ignored['members'] or str(ctx.message.channel.id) in ignored['channels']
except (TypeError, IndexError, KeyError):
return False
def custom_perms(**perms):
def predicate(ctx):
@ -72,6 +80,10 @@ def custom_perms(**perms):
if type(ctx.message.channel) is discord.DMChannel:
return True
# Now check if this channel/member should be ignored
if should_ignore(ctx):
return False
# Get the member permissions so that we can compare
member_perms = ctx.message.author.permissions_in(ctx.message.channel)
# Next, set the default permissions if one is not used, based on what was passed