Advertisement
alexop1000

Discord.py

Jan 25th, 2021
1,647
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.46 KB | None | 0 0
  1. @bot.event
  2. async def on_message(message):
  3.     t = open("storage/users.json", "r")
  4.     users = json.load(t)
  5.  
  6.     if message.author.bot:
  7.         return
  8.     if message.channel.is_private:
  9.         return
  10.     else:
  11.         await update_data(users, message.author)
  12.         number = random.randint(5,10)
  13.         await add_experience(users, message.author, number)
  14.         await level_up(users, message.author, message.channel)
  15.  
  16.     with open("storage/users.json", "w") as f:
  17.         json.dump(users, f)
  18.     await bot.process_commands(message)
  19.  
  20.  
  21. async def update_data(users, user):
  22.     if not user.id in users:
  23.         users[user.id] = {}
  24.         users[user.id]["xp"] = 0
  25.         users[user.id]["level"] = 1
  26.         users[user.id]["last_message"] = 0
  27.  
  28. async def add_experience(users, user, exp):
  29.     if time.time() - users[user.id]["last_message"] > 30:
  30.         users[user.id]["xp"] += exp
  31.         users[user.id]["last_message"] = time.time()
  32.         print("player {}/{} gained {} xp".format(user.name, user.id, exp))
  33.     else:
  34.          return
  35.  
  36. async def level_up(users, user, channel):
  37.     experience = users[user.id]["xp"]
  38.     lvl_start = users[user.id]["level"]
  39.     lvl_end = int(experience ** (1/4))
  40.  
  41.     if lvl_start < lvl_end:
  42.         await bot.send_message(channel, ":tada: Congrats {}, you levelled up to level {}!".format(user.mention, lvl_end))
  43.         users[user.id]["level"] = lvl_end
  44.         print("player {}/{} leveled up with {} xp".format(user.name, user.id, experience))
  45.  
  46. @bot.command(pass_context=True)
  47. async def leaderboard(ctx):
  48.     t = open("storage/users.json", "r")
  49.     users = json.load(t)
  50.     experience = users[ctx.message.author.id]["xp"]
  51.     lvl_start = users[ctx.message.author.id]["level"]
  52.     high_score_list = sorted(users, key=lambda x : users[x].get('xp', 0), reverse=True)
  53.     embed=discord.Embed(title='Leaderboard', description='Leaderboard for {}'.format(ctx.message.server.name), color=0xff00f6)
  54.     for number, user in enumerate(high_score_list):
  55.         embed.add_field(name='{}.'.format(number + 1), value='{0} with {1}xp\n'.format(ctx.message.author.server.get_member(user), users[user].get('xp', 0)), inline=False)
  56.     await bot.send_message(ctx.message.channel, embed=embed)
  57.    
  58. @bot.command(pass_context=True)
  59. async def about(ctx):
  60.     servers = bot.servers
  61.     members = bot.get_all_members()
  62.     messages = bot.messages
  63.     channels = bot.get_all_channels()
  64.     embed=discord.Embed(title='Bot information', description='[Support Server Invite](https://discord.gg/hGaayXq)', color=0xff00f6)
  65.     embed.set_author(name=ctx.message.author.name, icon_url=ctx.message.author.avatar_url)
  66.     embed.add_field(name='Servers', value=f'Currently in {str(len(servers))} servers.')
  67.     embed.add_field(name='Online Users', value=str(len({m.id for m in bot.get_all_members() if m.status is not discord.Status.offline})))
  68.     embed.add_field(name='Total Users', value=str(len({m.id for m in bot.get_all_members()})))
  69.     embed.add_field(name='Channels', value=f"{sum(1 for g in bot.servers for _ in g.channels)}")
  70.     embed.add_field(name="Library", value=f"discord.py")
  71.     embed.add_field(name="Invite", value=f"[Click Here](https://discordapp.com/oauth2/authorize?client_id={bot.user.id}&scope=bot&permissions=268905542)")
  72.     embed.add_field(name="Upvote this bot!", value=f"[Click here](https://discordbots.org/bot/{bot.user.id}) :reminder_ribbon:")
  73.     embed.set_footer(text="BaguetteBot | By AlexOp")
  74.     await bot.say(embed=embed)
  75.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement