You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

121 lines
4.2KB

  1. import discord
  2. from discord.ext import commands
  3. import checks
  4. from config.server_config import ServerConfig
  5. class SelfAssign():
  6. def __init__(self, Bot):
  7. self.bot = Bot
  8. self.con = ServerConfig()
  9. self.servers = self.con.servers
  10. @commands.command(pass_context=True)
  11. async def listroles(self, ctx):
  12. """
  13. List's all roles that can be self-assigned on this server.
  14. Usage:
  15. {command_prefix}listroles
  16. """
  17. roles = []
  18. for role in self.servers[ctx.message.server.id]["selfAssign"]["roles"]:
  19. for serverrole in ctx.message.server.roles:
  20. if role == serverrole.id:
  21. roles.append("**"+serverrole.name+"**")
  22. roles = '\n'.join(roles)
  23. embed = discord.Embed(colour=discord.Colour(0xDEADBF), # Make Embed colour a constant
  24. description="The self-assignable roles for this server are: \n"+roles)
  25. return await self.bot.send_message(ctx.message.channel, embed=embed)
  26. @commands.command(pass_context=True)
  27. async def iam(self, ctx, role: discord.Role = None):
  28. """
  29. Self-assign yourself a role. Only one role at a time. Doesn't work for roles with spaces.
  30. Usage:
  31. {command_prefix}iam [role]
  32. Example:
  33. .iam OverwatchPing
  34. """
  35. self.servers = self.con.load_config()
  36. if not self.servers[ctx.message.server.id]["selfAssign"]["enabled"]:
  37. return
  38. user = ctx.message.author
  39. server = ctx.message.server
  40. if role not in server.roles:
  41. return await self.bot.say("That role doesn't exist. Roles are case sensitive. ")
  42. if role in user.roles:
  43. return await self.bot.say("You already have that role.")
  44. if role.id in self.servers[ctx.message.server.id]["selfAssign"]["roles"]:
  45. await self.bot.add_roles(user, role)
  46. print("{} added {} to themselves in {} on {}".format(user.display_name, role.name, ctx.message.channel,
  47. ctx.message.server))
  48. return await self.bot.say("Yay {}! You now have the {} role!".format(user.mention, role.name))
  49. else:
  50. return await self.bot.say("That role is not self-assignable.")
  51. @commands.command(pass_context=True)
  52. async def iamn(self, ctx, role: discord.Role = None):
  53. """
  54. Remove a self-assigned role
  55. Usage:
  56. {command_prefix}iamn [role]
  57. Example:
  58. .iamn OverwatchPing
  59. """
  60. self.servers = self.con.load_config()
  61. if not self.servers[ctx.message.server.id]["selfAssign"]["enabled"]:
  62. return
  63. user = ctx.message.author
  64. server = ctx.message.server
  65. if role not in server.roles:
  66. return await self.bot.say("That role doesn't exist. Roles are case sensitive. ")
  67. elif role in user.roles and role.id in self.servers[ctx.message.server.id]["selfAssign"]["roles"]:
  68. await self.bot.remove_roles(user, role)
  69. return await self.bot.reply("{} has been successfully removed.".format(role.name))
  70. elif role not in user.roles and role.id in self.servers[ctx.message.server.id]["selfAssign"]["roles"]:
  71. return await self.bot.reply("You do not have {}.".format(role.name))
  72. else:
  73. return await self.bot.say("That role is not self-assignable.")
  74. @commands.command(pass_context=True, hidden=True)
  75. @checks.is_bot_owner()
  76. async def addrole(self, ctx, role: discord.Role = None):
  77. """
  78. ] Adds a role to the list of roles that can be self assigned for that server.
  79. """
  80. self.servers = self.con.load_config()
  81. if role.id in self.servers[ctx.message.server.id]["selfAssign"]["roles"]:
  82. return await self.bot.say("{} is already a self-assignable role.".format(role.name), delete_after=self.con.delete_after)
  83. self.servers[ctx.message.server.id]["selfAssign"]["roles"].append(role.id)
  84. self.con.update_config(self.servers)
  85. return await self.bot.say('Role "{}" added'.format(str(role)))
  86. @commands.command(pass_context=True, hidden=True)
  87. @checks.is_bot_owner()
  88. async def removerole(self, ctx, role: discord.Role = None):
  89. """
  90. Removes a role from the list of self assignable roles for that server.
  91. :param ctx:
  92. :param role:
  93. :return:
  94. """
  95. self.servers = self.con.load_config()
  96. if role.id in self.servers[ctx.message.server.id]["selfAssign"]["roles"]:
  97. self.servers[ctx.message.server.id]["selfAssign"]["roles"].remove(role.id)
  98. self.con.update_config(self.servers)
  99. return await self.bot.say('"{}" has been removed from the self-assignable roles.'.format(str(role)))
  100. else:
  101. return await self.bot.say("That role was not in the list.")
  102. def setup(Bot):
  103. Bot.add_cog(SelfAssign(Bot))