def update_overwrite(ctx: commands.Context, overwrite: discord.PermissionOverwrite, permissions: dict): base_perms = dict(iter(discord.PermissionOverwrite())) old_perms = copy(permissions) user_perms = ctx.channel.permissions_for(ctx.author) invalid_perms = [] valid_perms = [] not_allowed: List[str] = [] for perm in old_perms.keys(): if perm not in base_perms.keys(): invalid_perms.append(f"`{perm}`") del permissions[perm] else: valid_perms.append(f"`{perm}`") overwrite.update(**permissions) if invalid_perms: invalid = ( f"\nThe following permissions were invalid:\n{humanize_list(invalid_perms)}\n" ) possible = humanize_list( [f"`{perm}`" for perm in base_perms.keys()]) invalid += f"Possible permissions are:\n{possible}" else: invalid = "" return overwrite, valid_perms, invalid, not_allowed
async def lock(ctx, *args): """ Lock the channel from certain member role """ # await bot.send_message(destination=ctx.message.author, content=ctx.message.server.roles[0].name) role = ctx.message.server.roles[0] permissions = list(role.permissions) permissions = {pair[0]:pair[1] for pair in permissions} permissions['send_messages'] = False # fk this shit raise NotImplemented permissions = PermissionOverwrite() permissions.update(kwargs=permissions) print(permissions.from_pair['send_messages']) await bot.edit_channel_permissions(ctx.message.channel, role, overwrite=permissions)
async def repair(self, ctx, gameName, user): if not await isAuthorized(ctx, "repair", 0): return try: userID = int(''.join(num for num in user if num.isdigit())) user = get(ctx.guild.members, id=userID) if user == None: await ctx.send("User ID lookup failed.") return game = getGames(ctx.guild, gameName) if game == None: await ctx.send("Game not found. Please try again.") return gameList = getUserGames(ctx.guild, userID) gameList = [ session for session in gameList if session[1] == gameName ] if not gameList: playCatObj = get(ctx.guild.categories, name=game[4]) await ctx.channel.edit(category=playCatObj, sync_permissions=True) overwrite = PermissionOverwrite() overwrite.update(read_messages=True, send_message_history=True, send_messages=True, manage_messages=True) await ctx.channel.set_permissions(user, overwrite=overwrite) setUserGame(ctx.guild, str(userID), gameName, str(ctx.channel.id)) await ctx.send("Channel added to active games for {}".format( user.name)) else: await ctx.send("Game already exists:\n" + "UserID = " + str(gameList[0][0]) + "\n" + "Game Name = " + str(gameList[0][1]) + "\n" + "RoomID = " + str(gameList[0][2])) except Exception as e: print(e)