Beispiel #1
0
 async def add_role(ctx, user: discord.User, role: discord.Role, duration):
     """
     Add role to user with fixed duration. Negative duration denotes permanent role.
     """
     if not util.bot_permissions(ctx.message.author):
         return
     if util.convertible(duration):
         role_duration = int(duration)
     else:
         await bot.reply("Invalid duration!")
         return
     role_admin = ctx.message.author
     with db.session_scope() as session:
         new_user = session.query(db.UserRoles).filter(db.UserRoles.user_id == user.id).filter(role.id == db.UserRoles.role_id).first()
         if not new_user:
             new_user = db.UserRoles(user_id=user.id)
             session.add(new_user)
         new_user.role_id = role.id
         new_user.user_name = user.name
         new_user.admin_id = role_admin.id
         new_user.admin_name = role_admin.name
         new_user.mins_left = role_duration
     await bot.add_roles(user, role)
     await bot.reply("Adding role {0} for {1}!".format(role.name, user.name))
     return
Beispiel #2
0
 async def help(ctx):
     """
     Request help for bot functions.
     """
     if not util.bot_permissions(ctx.message.author):
         return
     help_message = ""
     help_message += "```"
     help_message += "Commands:\n"
     help_message += "!help\n"
     help_message += "!permissions\n"
     help_message += "!roles add_role user role duration\n"
     help_message += "!roles remove_role user role\n"
     help_message += "!roles delete_user_role user_id role\n"
     help_message += "!roles clear_user user\n"
     help_message += "!roles remove_defunct_users\n"
     help_message += "!roles modify_duration user role duration_change\n"
     help_message += "!roles remove_defunct_roles\n"
     help_message += "!roles clear_role role\n"
     help_message += "!roles get_defunct_users\n"
     help_message += "!roles list_all\n"
     help_message += "!roles list_user user\n"
     help_message += "!config add_permission permission\n"
     help_message += "!config remove_permission permission\n"
     help_message += "!config list_permissions\n"
     help_message += "```"
     await bot.reply(help_message)
Beispiel #3
0
 async def remove_defunct_users(ctx):
     """
     Remove all defunct users and any roles they had.
     """
     if not util.bot_permissions(ctx.message.author):
         return
     update_message = ""
     with db.session_scope() as session:
         all_user_roles = session.query(db.UserRoles)
         for user_role in all_user_roles:
             if not discord.utils.get(bot.get_all_members(), id=user_role.user_id):
                 session.delete(user_role)
                 update_message += "Removing role {0} from user {1}!\n".format(user_role.role_id, user_role.user_id)
     await bot.reply(update_message)
Beispiel #4
0
 async def remove_defunct_roles(ctx):
     """
     Remove all defunct roles and any users who were assigned those roles.
     """
     if not util.bot_permissions(ctx.message.author):
         return
     update_message = ""
     with db.session_scope() as session:
         all_user_roles = session.query(db.UserRoles)
         for user_role in all_user_roles:
             if not util.get_role(bot, user_role.role_id):
                 session.delete(user_role)
                 update_message += "Removing role {0} from user {1}!\n".format(user_role.role_id, user_role.user_id)
     await bot.reply(update_message)
Beispiel #5
0
 async def remove_role(ctx, user: discord.User, role: discord.Role):
     """
     Remove role from user.
     """
     if not util.bot_permissions(ctx.message.author):
         return
     with db.session_scope() as session:
         user_delete = session.query(db.UserRoles).filter(db.UserRoles.user_id == user.id).filter(role.id == db.UserRoles.role_id).first()
         if not user_delete:
             await bot.reply("'{0}' currently does not have role {1}!".format(user.name, role.name))
             return
         session.delete(user_delete)
     await bot.remove_roles(user, role)
     await bot.reply("Removing role {0} from user {1}!".format(role.name, user.name))
     return
Beispiel #6
0
 async def get_defunct_users(ctx):
     """
     Get all defunct users and any roles they had.
     """
     if not util.bot_permissions(ctx.message.author):
         return
     update_message = ""
     with db.session_scope() as session:
         all_user_roles = session.query(db.UserRoles)
         for user_role in all_user_roles:
             if not discord.utils.get(bot.get_all_members(), id=user_role.user_id):
                 role = util.get_role(bot, user_role.role_id)
                 if role:
                     update_message += "UserID: {0} with Username: {1}, has role {2} set by AdminID: {3} with AdminUsername: {4} with {5} minutes left on role.\n".format(user_role.user_id, user_role.user_name, role.name, user_role.admin_id, user_role.admin_name, user_role.mins_left)
                 else:
                     update_message += "UserID: {0} with Username: {1}, has defunct role with id {2} set by AdminID: {3} with AdminUsername: {4} with {5} minutes left on role.\n".format(user_role.user_id, user_role.user_name, user_role.role_id, user_role.admin_id, user_role.admin_name, user_role.mins_left)
     await bot.reply(update_message)
Beispiel #7
0
 async def clear_role(ctx, role: discord.Role):
     """
     Remove all users with a given role_id.
     """
     if not util.bot_permissions(ctx.message.author):
         return
     update_message = ""
     with db.session_scope() as session:
         all_user_roles = session.query(db.UserRoles).filter(db.UserRoles.role_id == role.id)
         for user_role in all_user_roles:
             session.delete(user_role)
             user = discord.utils.get(bot.get_all_members(), id=user_role.user_id)
             if user:
                 await bot.remove_roles(user, role)
                 update_message += "Removing role {0} from user {1}!\n".format(role.name, user_role.user_name)
             else:
                 update_message += "Removing role {0} from defunct user {1}!\n".format(role.name, user_role.user_id)
     await bot.reply(update_message)
Beispiel #8
0
 async def clear_user(ctx, user: discord.User):
     """
     Remove all roles from a given user.
     """
     if not util.bot_permissions(ctx.message.author):
         return
     update_message = ""
     with db.session_scope() as session:
         all_roles = session.query(db.UserRoles).filter(db.UserRoles.user_id == user.id)
         for user_role in all_roles:
             role = util.get_role(bot, user_role.role_id)
             session.delete(user_role)
             if role:
                 await bot.remove_roles(user, role)
                 update_message += "Removing role {0} from {1}!\n".format(role.name, user.name)
             else:
                 update_message += "Removing defunct role {0} from {1}!\n".format(user_role.role_id, user.name)
     await bot.reply(update_message)
Beispiel #9
0
 async def delete_user_role(ctx, user_id, role: discord.Role):
     """
     Remove role from user with given user_id. This is used if the user has already left the server.
     """
     if not util.bot_permissions(ctx.message.author):
         return
     with db.session_scope() as session:
         user_delete = session.query(db.UserRoles).filter(db.UserRoles.user_id == user_id).filter(role.id == db.UserRoles.role_id).first()
         if not user_delete:
             await bot.reply("'{0}' currently does not have role {1}!".format(user_id, role.name))
             return
         session.delete(user_delete)
     user = discord.utils.get(bot.get_all_members(), id=user_id)
     if user:
         await bot.remove_roles(user, role)
     else:
         await bot.reply("User with id '{0}' is no longer on the server!")
     await bot.reply("Removing role {0} from user {1}!".format(role.name, user_id))
     return
Beispiel #10
0
 async def list_user(ctx, user: discord.User):
     """
     List the roles and durations currently assigned to a single given user.
     """
     if not util.bot_permissions(ctx.message.author):
         return
     update_message = ""
     with db.session_scope() as session:
         all_roles = session.query(db.UserRoles).filter(db.UserRoles.user_id == user.id)
         if not all_roles.first():
             await bot.reply("No roles for user {0}".format(user.name))
             return
         for user_role in all_roles:
             role = util.get_role(bot, user_role.role_id)
             if role:
                 update_message += "UserID: {0} with Username: {1}, has role {2} set by AdminID: {3} with AdminUsername: {4} with {5} minutes left on role.\n".format(user_role.user_id, user_role.user_name, role.name, user_role.admin_id, user_role.admin_name, user_role.mins_left)
             else:
                 update_message += "UserID: {0} with Username: {1}, has defunct role with id {2} set by AdminID: {3} with AdminUsername: {4} with {5} minutes left on role.\n".format(user.user_id, user.user_name, user.role_id, user.admin_id, user.admin_name, user.mins_left)
     await bot.reply(update_message)
Beispiel #11
0
 async def list_all(ctx):
     """
     List all users with their roles and durations currently assigned.
     """
     if not util.bot_permissions(ctx.message.author):
         return
     update_message = ""
     with db.session_scope() as session:
         all_users = session.query(db.UserRoles)
         if not all_users.first():
             await bot.reply("No roles currently assigned!")
             return
         for user in all_users:
             role = util.get_role(bot, user.role_id)
             if role:
                 update_message += "UserID: {0} with Username: {1}, has role {2} set by AdminID: {3} with AdminUsername: {4} with {5} minutes left on role.\n".format(user.user_id, user.user_name, role.name, user.admin_id, user.admin_name, user.mins_left)
             else:
                 update_message += "UserID: {0} with Username: {1}, has defunct role with id {2} set by AdminID: {3} with AdminUsername: {4} with {5} minutes left on role.\n".format(user.user_id, user.user_name, user.role_id, user.admin_id, user.admin_name, user.mins_left)
     await bot.reply(update_message)
Beispiel #12
0
 async def modify_duration(ctx, user: discord.User, role: discord.Role, duration_change):
     """
     Increase the duration of role for given user by adding duration_change.
     """
     if not util.bot_permissions(ctx.message.author):
         return
     if util.convertible(duration_change):
         change = int(duration_change)
     else:
         await bot.reply("Invalid duration change!")
         return
     with db.session_scope() as session:
         user_change = session.query(db.UserRoles).filter(db.UserRoles.user_id == user.id).filter(role.id == db.UserRoles.role_id).first()
         if not user_change:
             await bot.reply("'{0}' currently does not have role {1}!!".format(user.id, role.name))
             return
         user_change.mins_left += change
         await bot.reply("Role {0} for user {1} successfully had its duration increased by {2}.".format(role.name, user.name, change))
     return
Beispiel #13
0
 async def permissions(ctx):
     """
     Return all permissions that are supported.
     """
     if not util.bot_permissions(ctx.message.author):
         return
     help_message = ""
     help_message += "```"
     help_message += "List of all supported permissions:\n"
     help_message += "create_instant_invite\n"
     help_message += "kick_members\n"
     help_message += "ban_members\n"
     help_message += "administrator\n"
     help_message += "manage_channels\n"
     help_message += "manage_server\n"
     help_message += "add_reactions\n"
     help_message += "view_audit_logs\n"
     help_message += "read_messages\n"
     help_message += "send_messages\n"
     help_message += "send_tts_messages\n"
     help_message += "manage_messages\n"
     help_message += "embed_links\n"
     help_message += "attach_files\n"
     help_message += "read_message_history\n"
     help_message += "mention_everyone\n"
     help_message += "external_emojis\n"
     help_message += "connect\n"
     help_message += "speak\n"
     help_message += "mute_members\n"
     help_message += "deafen_members\n"
     help_message += "move_members\n"
     help_message += "use_voice_activation\n"
     help_message += "change_nickname\n"
     help_message += "manage_nicknames\n"
     help_message += "manage_roles\n"
     help_message += "manage_webhooks\n"
     help_message += "manage_emojis\n"
     help_message += "```"
     await bot.reply(help_message)