async def getBannedUser(ctx, user): user = str(user).lower() matcher = StringMatcher() userdata = [] for _user in await ctx.guild.bans(): _user = _user.user member = { "name": _user.name, "fullname": _user.name + "#" + str(_user.discriminator), "mention": "<@!" + str(_user.id) + ">", "nickname": _user.display_name, "discriminator": str(_user.discriminator), "discrim2": "#" + str(_user.discriminator), "id": str(_user.id) } data = {} for item in member: matcher.set_seqs(user, member[item].lower()) data[item] = matcher.quick_ratio() data["_id"] = member["id"] userdata.append(data) matches = {} for user in userdata: for key in user: if key != "_id": if user[key] > .5: matches[user["_id"]] = user[key] break if not matches: raise ValueError(f"NoSuchUser: {user}") id = int(max(matches.items(), key=itemgetter(1))[0]) for banned in await ctx.guild.bans(): if banned.user.id == id: return banned.user
async def getClosestUser(ctx, user, return_member=False): # Thanks to discord's new intent system, this entire function is broken if you are not verified. # Because of this, we migrated back to discord.User, which is what this now returns. return user user = str(user).lower() matcher = StringMatcher() userdata = [] for _user in ctx.guild.members: member = { "name": _user.name, "fullname": _user.name + "#" + str(_user.discriminator), "mention": "<@!" + str(_user.id) + ">", "nickname": _user.display_name, "discriminator": str(_user.discriminator), "discrim2": "#" + str(_user.discriminator), "id": str(_user.id) } data = {} for item in member: matcher.set_seqs(user, member[item].lower()) data[item] = matcher.quick_ratio() data["_id"] = member["id"] userdata.append(data) matches = {} for user in userdata: for key in user: if key != "_id": if user[key] > .5: matches[user["_id"]] = user[key] break if not matches: raise ValueError(f"NoSuchUser: {user}") id = int(max(matches.items(), key=itemgetter(1))[0]) if not return_member: return bot.get_user(id) return ctx.guild.get_member(id)