What Im trying to do is to have a leaderboard with who has the most roles like:
member1 - 10
member2 - 7
member3 - 4
...
The main code that works is this:
data = []
for member in ctx.guild.members:
name, score = member.name, len(member.roles)
data.append((name,score))
data.sort(key=lambda t: t[1], reverse=True)
await ctx.send("Leaderboard")
for i, (name, score) in enumerate(data[:10]):
await ctx.send(f"{i+1}. {name} - {score}")
But I dont want to count the role Member,Admin. So I tried to make the following:
@client.command()
async def top(ctx):
data = []
mroles = []
final = []
banned = ['Admin','Member']
for member in ctx.guild.members:
for roles in member.roles:
name, score = member.name, roles.name
mroles.append(score)
for roles in mroles:
if roles in banned:
continue
else:
final.append(roles)
data.append((name,len(final)))
data.sort(key=lambda t: t[1], reverse=True)
await ctx.send("Leaderboard")
for i, (name, score) in enumerate(data[:10]):
await ctx.send(f"{i+1}. {name} - {score}")
But the output is some crazy values and the name of the member x2:
1. testuser - 16671
2. testuser - 16532
3. testuser2 - 16393
4. testuser2 - 16255
Any clue? I burn my mind for hours i cant make it work.