2016-07-09 13:27:19 +12:00
|
|
|
from discord.ext import commands
|
|
|
|
from .utils import checks
|
2016-07-10 03:17:54 +12:00
|
|
|
from .utils import config
|
2016-07-16 02:58:10 +12:00
|
|
|
import discord
|
2016-07-17 00:27:10 +12:00
|
|
|
import re
|
2016-07-16 02:58:10 +12:00
|
|
|
|
2016-07-18 07:13:27 +12:00
|
|
|
valid_perms = list(dict(discord.Permissions.none()))
|
2016-07-16 09:39:26 +12:00
|
|
|
|
2016-07-09 13:27:19 +12:00
|
|
|
|
|
|
|
class Mod:
|
2016-07-09 13:59:10 +12:00
|
|
|
"""Commands that can be used by a or an admin, depending on the command"""
|
2016-07-16 09:39:26 +12:00
|
|
|
|
2016-07-09 13:27:19 +12:00
|
|
|
def __init__(self, bot):
|
|
|
|
self.bot = bot
|
2016-07-16 09:39:26 +12:00
|
|
|
|
2016-07-16 23:42:44 +12:00
|
|
|
@commands.group(pass_context=True, no_pm=True)
|
2016-07-10 07:39:32 +12:00
|
|
|
async def nsfw(self, ctx):
|
2016-07-10 07:40:51 +12:00
|
|
|
"""Handles adding or removing a channel as a nsfw channel"""
|
2016-07-10 07:38:48 +12:00
|
|
|
if ctx.invoked_subcommand is None:
|
|
|
|
await self.bot.say('Invalid subcommand passed: {0.subcommand_passed}'.format(ctx))
|
2016-07-16 09:39:26 +12:00
|
|
|
|
2016-07-16 23:42:44 +12:00
|
|
|
@nsfw.command(name="add", pass_context=True, no_pm=True)
|
2016-07-16 10:46:10 +12:00
|
|
|
@checks.customPermsOrRole("kick_members")
|
2016-07-10 07:38:48 +12:00
|
|
|
async def nsfw_add(self, ctx):
|
2016-07-10 06:27:14 +12:00
|
|
|
"""Registers this channel as a 'nsfw' channel"""
|
2016-07-18 03:17:47 +12:00
|
|
|
nsfw_channels = config.getContent('nsfw_channels')
|
|
|
|
if ctx.message.channel.id in nsfw_channels:
|
2016-07-10 03:26:13 +12:00
|
|
|
await self.bot.say("This channel is already registered as 'nsfw'!")
|
2016-07-18 03:17:47 +12:00
|
|
|
else:
|
|
|
|
nsfw_channels.append(ctx.message.channel.id)
|
2016-07-19 00:06:13 +12:00
|
|
|
if config.saveContent('nsfw_channels', nsfw_channels):
|
|
|
|
await self.bot.say("This channel has just been registered as 'nsfw'! Have fun you naughties ;)")
|
|
|
|
else:
|
|
|
|
await self.bot.say("I was unable to save this data")
|
2016-07-16 09:39:26 +12:00
|
|
|
|
2016-07-18 09:10:12 +12:00
|
|
|
@nsfw.command(name="remove", aliases=["delete"], pass_context=True, no_pm=True)
|
2016-07-16 10:46:10 +12:00
|
|
|
@checks.customPermsOrRole("kick_members")
|
2016-07-18 09:10:12 +12:00
|
|
|
async def nsfw_remove(self, ctx):
|
2016-07-10 04:28:18 +12:00
|
|
|
"""Removes this channel as a 'nsfw' channel"""
|
2016-07-18 03:17:47 +12:00
|
|
|
nsfw_channels = config.getContent('nsfw_channels')
|
2016-07-18 09:10:12 +12:00
|
|
|
if ctx.message.channel.id not in nsfw_channels:
|
2016-07-10 04:25:28 +12:00
|
|
|
await self.bot.say("This channel is not registered as a ''nsfw' channel!")
|
2016-07-18 03:17:47 +12:00
|
|
|
else:
|
|
|
|
nsfw_channels.remove(ctx.message.channel.id)
|
2016-07-19 00:06:13 +12:00
|
|
|
if config.saveContent('nsfw_channels', nsfw_channels):
|
|
|
|
await self.bot.say("This channel has just been unregistered as a nsfw channel")
|
|
|
|
else:
|
|
|
|
await self.bot.say("I was unable to save this data")
|
2016-07-16 09:39:26 +12:00
|
|
|
|
2016-07-09 13:27:19 +12:00
|
|
|
@commands.command(pass_context=True, no_pm=True)
|
2016-07-16 10:46:10 +12:00
|
|
|
@checks.customPermsOrRole("manage_server")
|
2016-07-09 13:27:19 +12:00
|
|
|
async def leave(self, ctx):
|
|
|
|
"""Forces the bot to leave the server"""
|
2016-07-10 00:57:25 +12:00
|
|
|
await self.bot.say('Why must I leave? Hopefully I can come back :c')
|
|
|
|
await self.bot.leave_server(ctx.message.server)
|
2016-07-09 13:27:19 +12:00
|
|
|
|
2016-07-16 23:42:44 +12:00
|
|
|
@commands.command(pass_context=True, no_pm=True)
|
2016-07-16 10:46:10 +12:00
|
|
|
@checks.customPermsOrRole("kick_members")
|
2016-07-10 07:14:38 +12:00
|
|
|
async def say(self, ctx, *msg: str):
|
|
|
|
"""Tells the bot to repeat what you say"""
|
|
|
|
msg = ' '.join(msg)
|
|
|
|
await self.bot.say(msg)
|
|
|
|
await self.bot.delete_message(ctx.message)
|
2016-07-16 09:39:26 +12:00
|
|
|
|
2016-07-16 23:42:44 +12:00
|
|
|
@commands.group(pass_context=True, invoke_without_command=True, no_pm=True)
|
2016-07-17 05:14:29 +12:00
|
|
|
@checks.customPermsOrRole("none")
|
2016-07-16 10:23:13 +12:00
|
|
|
async def perms(self, ctx, *command: str):
|
2016-07-16 10:59:15 +12:00
|
|
|
"""This command can be used to print the current allowed permissions on a specific command
|
|
|
|
This supports groups as well as subcommands; pass no argument to print a list of available permissions"""
|
2016-07-16 10:23:13 +12:00
|
|
|
if command is None:
|
2016-07-16 07:16:10 +12:00
|
|
|
await self.bot.say("Valid permissions are: ```{}```".format("\n".join("{}".format(i) for i in valid_perms)))
|
|
|
|
return
|
2016-07-16 10:23:13 +12:00
|
|
|
command = " ".join(command)
|
2016-07-18 09:10:12 +12:00
|
|
|
|
2016-07-18 03:17:47 +12:00
|
|
|
custom_perms = config.getContent('custom_permissions')
|
|
|
|
if custom_perms is None:
|
2016-07-16 01:56:13 +12:00
|
|
|
await self.bot.say("There are no custom permissions setup on this server yet!")
|
|
|
|
return
|
2016-07-18 03:17:47 +12:00
|
|
|
server_perms = custom_perms.get(ctx.message.server.id)
|
|
|
|
if server_perms is None:
|
|
|
|
await self.bot.say("There are no custom permissions setup on this server yet!")
|
2016-07-16 01:56:13 +12:00
|
|
|
return
|
2016-07-18 03:17:47 +12:00
|
|
|
command_perms = server_perms.get(command)
|
|
|
|
if command_perms is None:
|
|
|
|
await self.bot.say("That command has no custom permissions setup on it!")
|
|
|
|
else:
|
2016-07-18 09:10:12 +12:00
|
|
|
await self.bot.say("You need to have the permission `{}` "
|
|
|
|
"to use the command `{}` in this server".format(command_perms, command))
|
2016-07-16 09:39:26 +12:00
|
|
|
|
2016-07-16 23:42:44 +12:00
|
|
|
@perms.command(name="add", aliases=["setup,create"], pass_context=True, no_pm=True)
|
2016-07-17 00:01:32 +12:00
|
|
|
@commands.has_permissions(manage_server=True)
|
2016-07-16 10:18:04 +12:00
|
|
|
async def add_perms(self, ctx, *msg: str):
|
2016-07-16 11:30:46 +12:00
|
|
|
"""Sets up custom permissions on the provided command
|
2016-07-17 00:04:24 +12:00
|
|
|
Format must be 'perms add <command> <permission>'
|
|
|
|
If you want to open the command to everyone, provide 'none' as the permission"""
|
2016-07-18 09:10:12 +12:00
|
|
|
command = " ".join(msg[0:len(msg) - 1])
|
|
|
|
permissions = msg[len(msg) - 1]
|
2016-07-18 08:24:13 +12:00
|
|
|
if permissions.lower() == "none":
|
2016-07-18 08:56:29 +12:00
|
|
|
permissions = "send_messages"
|
2016-07-18 09:10:12 +12:00
|
|
|
msg = msg[0:len(msg) - 1]
|
2016-07-16 10:18:04 +12:00
|
|
|
count = 0
|
|
|
|
cmd = self.bot.commands.get(msg[count])
|
|
|
|
while isinstance(cmd, commands.Group):
|
|
|
|
count += 1
|
2016-07-16 10:41:16 +12:00
|
|
|
try:
|
|
|
|
cmd = cmd.commands.get(msg[count])
|
|
|
|
except:
|
|
|
|
break
|
2016-07-18 09:10:12 +12:00
|
|
|
|
2016-07-16 10:18:04 +12:00
|
|
|
for check in cmd.checks:
|
2016-07-18 09:10:12 +12:00
|
|
|
if "isOwner" == check.__name__ or re.search("has_permissions", str(check)) is not None:
|
2016-07-16 07:16:10 +12:00
|
|
|
await self.bot.say("This command cannot have custom permissions setup!")
|
|
|
|
return
|
2016-07-16 09:39:26 +12:00
|
|
|
|
2016-07-16 07:16:10 +12:00
|
|
|
if getattr(discord.Permissions, permissions, None) is None and not permissions.lower() == "none":
|
|
|
|
await self.bot.say("{} does not appear to be a valid permission! Valid permissions are: ```{}```"
|
2016-07-16 09:39:26 +12:00
|
|
|
.format(permissions, "\n".join(valid_perms)))
|
2016-07-18 09:10:12 +12:00
|
|
|
return
|
|
|
|
|
2016-07-18 03:17:47 +12:00
|
|
|
custom_perms = config.getContent('custom_permissions')
|
|
|
|
if custom_perms is None:
|
|
|
|
custom_perms = {}
|
|
|
|
server_perms = custom_perms.get(ctx.message.server.id)
|
|
|
|
if server_perms is None:
|
2016-07-18 09:10:12 +12:00
|
|
|
custom_perms[ctx.message.server.id] = {command: permissions}
|
2016-07-16 07:16:10 +12:00
|
|
|
else:
|
2016-07-18 03:17:47 +12:00
|
|
|
server_perms[command] = permissions
|
|
|
|
custom_perms[ctx.message.server.id] = server_perms
|
2016-07-19 00:06:13 +12:00
|
|
|
if config.saveContent('custom_permissions', custom_perms):
|
|
|
|
await self.bot.say("I have just added your custom permissions; "
|
|
|
|
"you now need to have `{}` permissions to use the command `{}`".format(permissions, command))
|
|
|
|
else:
|
|
|
|
await self.bot.say("I was unable to save this data")
|
2016-07-18 09:10:12 +12:00
|
|
|
|
2016-07-16 23:59:28 +12:00
|
|
|
@perms.command(name="remove", aliases=["delete"], pass_context=True, no_pm=True)
|
2016-07-17 00:01:32 +12:00
|
|
|
@commands.has_permissions(manage_server=True)
|
2016-07-16 23:59:28 +12:00
|
|
|
async def remove_perms(self, ctx, *command: str):
|
2016-07-17 00:04:24 +12:00
|
|
|
"""Removes the custom permissions setup on the command specified"""
|
2016-07-16 23:59:28 +12:00
|
|
|
cmd = " ".join(command)
|
2016-07-18 03:17:47 +12:00
|
|
|
custom_perms = config.getContent('custom_permissions')
|
|
|
|
if custom_perms is None:
|
2016-07-16 23:59:28 +12:00
|
|
|
await self.bot.say("You do not have custom permissions setup on this server yet!")
|
|
|
|
return
|
2016-07-18 03:17:47 +12:00
|
|
|
server_perms = custom_perms.get(ctx.message.server.id)
|
|
|
|
if server_perms is None:
|
|
|
|
await self.bot.say("There are no custom permissions setup on this server yet!")
|
|
|
|
return
|
2016-07-18 05:48:50 +12:00
|
|
|
command_perms = server_perms.get(cmd)
|
2016-07-18 03:17:47 +12:00
|
|
|
if command_perms is None:
|
2016-07-16 23:59:28 +12:00
|
|
|
await self.bot.say("You do not have custom permissions setup on this command yet!")
|
|
|
|
return
|
2016-07-18 05:48:50 +12:00
|
|
|
del custom_perms[ctx.message.server.id][cmd]
|
2016-07-19 00:06:13 +12:00
|
|
|
if config.saveContent('custom_permissions', custom_perms):
|
|
|
|
await self.bot.say("I have just removed the custom permissions for {}!".format(cmd))
|
|
|
|
else:
|
|
|
|
await self.bot.say("I was unable to save this data")
|
2016-07-09 13:31:18 +12:00
|
|
|
|
2016-07-18 09:10:12 +12:00
|
|
|
|
2016-07-09 13:31:18 +12:00
|
|
|
def setup(bot):
|
|
|
|
bot.add_cog(Mod(bot))
|