Advertisement
Guest User

Untitled

a guest
Jun 19th, 2019
214
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 6.93 KB | None | 0 0
  1. @commands.command(pass_context=True, aliases=['si', 'sinfo'])
  2.     async def serverinfo(self, ctx, *, guild_name = None):
  3.         """Lists some info about the current or passed server."""
  4.        
  5.         # Check if we passed another guild
  6.         guild = None
  7.         if guild_name == None:
  8.             guild = ctx.guild
  9.         else:
  10.             for g in self.bot.guilds:
  11.                 if g.name.lower() == guild_name.lower():
  12.                     guild = g
  13.                     break
  14.                 if str(g.id) == str(guild_name):
  15.                     guild = g
  16.                     break
  17.         if guild == None:
  18.             # We didn't find it
  19.             await ctx.send("I couldn't find that guild...")
  20.             return
  21.        
  22.         server_embed = discord.Embed(color=ctx.author.color)
  23.         server_embed.title = guild.name
  24.        
  25.        
  26.        
  27.        
  28.         server_embed.description = "Server Stats"
  29.         online_members = 0
  30.         bot_member     = 0
  31.         bot_online     = 0
  32.         for member in guild.members:
  33.             if member.bot:
  34.                 bot_member += 1
  35.                 if not member.status == discord.Status.offline:
  36.                         bot_online += 1
  37.                 continue
  38.             if not member.status == discord.Status.offline:
  39.                 online_members += 1
  40.         # bot_percent = "{:,g}%".format((bot_member/len(guild.members))*100)
  41.         user_string = "{:,}/{:,} online ({:,g}%)".format(
  42.                 online_members,
  43.                 len(guild.members) - bot_member,
  44.                 round((online_members/(len(guild.members) - bot_member) * 100), 2)
  45.         )
  46.         b_string = "bot" if bot_member == 1 else "bots"
  47.         user_string += "\n{:,}/{:,} {} online ({:,g}%)".format(
  48.                 bot_online,
  49.                 bot_member,
  50.                 b_string,
  51.                 round((bot_online/bot_member)*100, 2)
  52.         )
  53.         try:
  54.             ban_count = len(await guild.bans())
  55.         except discord.Forbidden:
  56.             ban_count = "Kala Lacks the `ban members` permission. (In order to retrieve bans)"
  57.         verification_levels = {
  58.             0: "**None** No Security measures have been taken.",
  59.             1: "**Low** Light Security measures have been taken. (Verified Email)",
  60.             2: "**Moderate** Moderate Security measures have been taken. (Registered on Discord for longer than 5 minutes)",
  61.             3: "**High** High Security measures have been taken. (Member of server for longer than 10 minutes)",
  62.             4: "**Fort Knox** Almost inpenetrable Security measures have been taken. (Verified Phone)"
  63.         }
  64.         content_filter = {
  65.             0: "**None** No Scanning enabled. (Don't scan any messages.)",
  66.             1: "**Moderate** Moderate Scanning enabled. (Scan messages from members without a role.)",
  67.             2: "**High** High Scanning enabled. (Scans every message.)"
  68.         }
  69.         mfa_levels = {
  70.             0: "Does not require 2FA for members with Admin permission.",
  71.             1: "Requires 2FA for members with Admin permission."
  72.         }
  73.         #server_embed.add_field(name="Members", value="{:,}/{:,} online ({:.2f}%)\n{:,} {} ({}%)".format(online_members, len(guild.members), bot_percent), inline=True)
  74.         server_embed.add_field(name="Members ({:,} total)".format(len(guild.members)), value=user_string, inline=True)
  75.         server_embed.add_field(name="Roles", value=str(len(guild.roles)), inline=True)
  76.         chandesc = "{:,} text, {:,} voice".format(len(guild.text_channels), len(guild.voice_channels))
  77.         server_embed.add_field(name="Channels", value=chandesc, inline=True)
  78.         server_embed.add_field(name="Default Role", value=guild.default_role, inline=True)
  79.         server_embed.add_field(name="Owner", value=guild.owner.name + "#" + guild.owner.discriminator, inline=True)
  80.         server_embed.add_field(name="AFK Channel", value=guild.afk_channel, inline=True)
  81.         server_embed.add_field(name="Verification", value=verification_levels[guild.verification_level])
  82.         server_embed.add_field(name="Explicit Content Filter", value=content_filter[guild.explicit_content_filter])
  83.         server_embed.add_field(name="2FA Requirement", value=mfa_levels[guild.mfa_level])
  84.         server_embed.add_field(name="Ban Count", value=ban_count)
  85.         server_embed.add_field(name="Voice Region", value=guild.region, inline=True)
  86.         server_embed.add_field(name="Considered Large", value=guild.large, inline=True)
  87.     # Find out where in our join position this server is
  88.         joinedList = []
  89.         popList    = []
  90.         for g in self.bot.guilds:
  91.             joinedList.append({ 'ID' : g.id, 'Joined' : g.me.joined_at })
  92.             popList.append({ 'ID' : g.id, 'Population' : len(g.members) })
  93.        
  94.         # sort the guilds by join date
  95.         joinedList = sorted(joinedList, key=lambda x:x['Joined'])
  96.         popList = sorted(popList, key=lambda x:x['Population'], reverse=True)
  97.        
  98.         check_item = { "ID" : guild.id, "Joined" : guild.me.joined_at }
  99.         total = len(joinedList)
  100.         position = joinedList.index(check_item) + 1
  101.         server_embed.add_field(name="Join Position", value="{:,} of {:,}".format(position, total), inline=True)
  102.        
  103.         # Get our population position
  104.         check_item = { "ID" : guild.id, "Population" : len(guild.members) }
  105.         total = len(popList)
  106.         position = popList.index(check_item) + 1
  107.         server_embed.add_field(name="Population Rank", value="{:,} of {:,}".format(position, total), inline=True)
  108.        
  109.         emojitext = ""
  110.         emojicount = 0
  111.         for emoji in guild.emojis:
  112.             if emoji.animated:
  113.                 emojiMention = "<a:"+emoji.name+":"+str(emoji.id)+">"
  114.             else:
  115.                 emojiMention = "<:"+emoji.name+":"+str(emoji.id)+">"
  116.             test = emojitext + emojiMention
  117.             if len(test) > 1024:
  118.                 # TOOO BIIIIIIIIG
  119.                 emojicount += 1
  120.                 if emojicount == 1:
  121.                     ename = "Emojis ({:,} total)".format(len(guild.emojis))
  122.                 else:
  123.                     ename = "Emojis (Continued)"
  124.                 server_embed.add_field(name=ename, value=emojitext, inline=True)
  125.                 emojitext=emojiMention
  126.             else:
  127.                 emojitext = emojitext + emojiMention
  128.  
  129.         if len(emojitext):
  130.             if emojicount == 0:
  131.                 emojiname = "Emojis ({} total)".format(len(guild.emojis))
  132.             else:
  133.                 emojiname = "Emojis (Continued)"
  134.             server_embed.add_field(name=emojiname, value=emojitext, inline=True)
  135.  
  136.  
  137.         if len(guild.icon_url):
  138.             server_embed.set_thumbnail(url=guild.icon_url)
  139.         else:
  140.             # No Icon
  141.             server_embed.set_thumbnail(url=ctx.author.default_avatar_url)
  142.         server_embed.set_footer(text="Server ID: {}".format(guild.id))
  143.         await ctx.channel.send(embed=server_embed)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement