mirror of
https://github.com/Cog-Creators/Red-DiscordBot.git
synced 2025-11-06 11:18:54 -05:00
* Readd work due to redoing branch * [modlog] Move to core and start work on separating it from cogs * More work on modlog separation * [Core] Finish logic for modlog, do docstrings, async getters * [Core] Add stuff to dunder all * [Docs] Add mod log docs * [Core] Move away from dunder str for Case class * [Docs] don't need to doc special members in modlog docs * More on mod log to implement commands * More work on Mod * [Mod] compatibility with async getters * [Tests] start tests for mod * [Tests] attempted fix * [Tests] mod tests passing now! * [ModLog] update for i18n * modlog.pot -> messages.pot * [Mod] i18n * fix getting admin/mod roles * Fix doc building * [Mod/Modlog] redo imports * [Tests] fix imports in mod tests * [Mod] fix logger problem * [Mod] cleanup errors * A couple of bug fixes Async getters, some old `config.set` syntax * Filter ignores private channels * Fix softban Was still relying on default channels * Actually ignore private channels * Add check for ignored channels * Fix logic for ignore check * Send confirm messages before making case * Pass in guild when setting modlog * Thanks autocomplete * Maintain all data for case * Properly ignore softbans in events * [Mod] bugfixes * [Mod] more changes * [ModLog] timestamp change * [Mod] split filter and cleanup to their own cogs + regen messages.pot * [Cleanup] change logic * [Cleanup] increase limit for channel.history * [Mod] await getter in modset banmentionspam * [Mod] attempt duplicate modlog message fix * [Mod] get_user -> get_user_info * [Modlog] change reason command so the case author can edit their cases (#806) * [Modlog] make reason command guild only * [Modlog] clarify the reason command's help * [Mod] package path changes + numpy style docstrings for modlog * [Mod] change ban and unban events to need view audit log perms to find/create a case * [Modlog] refactoring * [Filter] add autoban feature * [Mod] update case types + event changes * [Mod/Modlog] fix tests, fix permissions things * [Docs] fix up modlog docs * Regenerate messages.pot
59 lines
2.0 KiB
Python
59 lines
2.0 KiB
Python
from discord.ext import commands
|
|
import discord
|
|
|
|
|
|
def mod_or_voice_permissions(**perms):
|
|
async def pred(ctx: commands.Context):
|
|
author = ctx.author
|
|
guild = ctx.guild
|
|
if await ctx.bot.is_owner(author) or guild.owner == author:
|
|
# Author is bot owner or guild owner
|
|
return True
|
|
|
|
admin_role = discord.utils.get(guild.roles, id=await ctx.bot.db.guild(guild).admin_role())
|
|
mod_role = discord.utils.get(guild.roles, id=await ctx.bot.db.guild(guild).mod_role())
|
|
|
|
if admin_role in author.roles or mod_role in author.roles:
|
|
return True
|
|
|
|
for vc in guild.voice_channels:
|
|
resolved = vc.permissions_for(author)
|
|
good = all(getattr(resolved, name, None) == value for name, value in perms.items())
|
|
if not good:
|
|
return False
|
|
else:
|
|
return True
|
|
return commands.check(pred)
|
|
|
|
|
|
def admin_or_voice_permissions(**perms):
|
|
async def pred(ctx: commands.Context):
|
|
author = ctx.author
|
|
guild = ctx.guild
|
|
if await ctx.bot.is_owner(author) or guild.owner == author:
|
|
return True
|
|
admin_role = discord.utils.get(guild.roles, id=await ctx.bot.db.guild(guild).admin_role())
|
|
if admin_role in author.roles:
|
|
return True
|
|
for vc in guild.voice_channels:
|
|
resolved = vc.permissions_for(author)
|
|
good = all(getattr(resolved, name, None) == value for name, value in perms.items())
|
|
if not good:
|
|
return False
|
|
else:
|
|
return True
|
|
return commands.check(pred)
|
|
|
|
|
|
def bot_has_voice_permissions(**perms):
|
|
async def pred(ctx: commands.Context):
|
|
guild = ctx.guild
|
|
for vc in guild.voice_channels:
|
|
resolved = vc.permissions_for(guild.me)
|
|
good = all(getattr(resolved, name, None) == value for name, value in perms.items())
|
|
if not good:
|
|
return False
|
|
else:
|
|
return True
|
|
return commands.check(pred)
|