Beispiel #1
0
 async def on_member_join(member):
     """
     When a new member joins a channel, add any unexpired roles they had previously.
     """
     with db.session_scope() as session:
         users = session.query(db.UserRoles).filter(db.UserRoles.user_id == member.id)
         for user in users:
             role = util.get_role(bot, user.role_id)
             if role:
                 await bot.add_roles(member, role)
Beispiel #2
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 #3
0
 async def background_loop():
     """
     Remove any roles that have expired.
     """
     while not bot.is_closed:
         await asyncio.sleep(60)
         with db.session_scope() as session:
             all_users = session.query(db.UserRoles)
             for user in all_users:
                 user.mins_left -= 1
                 role = util.get_role(bot, user.role_id)
                 if user.mins_left == 0:
                     if role:
                         user_obj = discord.utils.get(bot.get_all_members(), id=user.user_id)
                         if user_obj:
                             await bot.remove_roles(user_obj, role)
                     session.delete(user)
Beispiel #4
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 #5
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 #6
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 #7
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)