Untitled
unknown
plain_text
2 years ago
2.6 kB
10
Indexable
@tasks.loop(hours=1)
async def update_leaderboard():
# Update the regular leaderboard
top_users_main = collection_main.find().sort("xp", -1).limit(20)
leaderboard_message_main = "### Hall of Fame\n"
for idx, user_data in enumerate(top_users_main, start=1):
user_id = user_data["_id"]
try:
member = await client.fetch_user(int(user_id))
xp = user_data["xp"]
leaderboard_message_main += f"{idx}. {member.mention} - XP: {xp}\n"
# Check and assign roles based on XP
await check_and_assign_roles(member, xp, "main")
except discord.NotFound:
print(f"User with ID {user_id} not found.")
channel = client.get_channel(leaderboard_channel_id)
async for message in channel.history():
if message.author == client.user and message.content.startswith("Top 20 Leaderboard:"):
await message.edit(content=leaderboard_message_main)
break
else:
await channel.send(leaderboard_message_main)
# Update the Hall of Fame leaderboard
top_users_hof = collection_hof.find().sort("xp", -1).limit(20)
leaderboard_message_hof = "### Leaderboard\n"
for idx, user_data in enumerate(top_users_hof, start=1):
user_id = user_data["_id"]
try:
member = await client.fetch_user(int(user_id))
xp = user_data["xp"]
leaderboard_message_hof += f"{idx}. {member.mention} - XP: {xp}\n"
except discord.NotFound:
print(f"User with ID {user_id} not found.")
channel_hof = client.get_channel(hof_channel_id) # Replace with the actual channel ID for Hall of Fame
async for message in channel_hof.history():
if message.author == client.user and message.content.startswith("Hall of Fame Leaderboard:"):
await message.edit(content=leaderboard_message_hof)
break
else:
await channel_hof.send(leaderboard_message_hof)
async def check_and_assign_roles(member, xp, context):
if context == "main":
for level, role_id in level_roles.items():
if xp >= level * 3: # Adjust the multiplier as needed
role = member.guild.get_role(role_id)
if role and role not in member.roles:
await member.add_roles(role)
# Congratulations for leveling up
congratulations_channel = member.guild.get_channel(congratulations_channel_id)
await congratulations_channel.send(f"Congratulations {member.mention}! You leveled up to level {level}!")Editor is loading...
Leave a Comment