mirror of https://github.com/stijndcl/didier
132 lines
5.6 KiB
Python
132 lines
5.6 KiB
Python
from decorators import help
|
|
import discord
|
|
from discord.ext import commands
|
|
from enums.help_categories import Category
|
|
from functions import checks
|
|
from functions.database import stats
|
|
import json
|
|
|
|
|
|
class Stats(commands.Cog):
|
|
|
|
def __init__(self, client):
|
|
self.client = client
|
|
|
|
# Don't allow any commands to work when locked
|
|
def cog_check(self, ctx):
|
|
return not self.client.locked
|
|
|
|
@commands.group(name="Stats", usage="[Categorie]*", case_insensitive=True, invoke_without_command=True)
|
|
@commands.check(checks.allowedChannels)
|
|
@help.Category(category=Category.Other)
|
|
async def stats(self, ctx):
|
|
s = stats.getOrAddUser(ctx.author.id)
|
|
|
|
# Calculate the percentages
|
|
robAttempts = int(s[2]) + int(s[3]) if int(s[2]) + int(s[3]) != 0 else 1
|
|
robSuccessPercent = round(100 * int(s[2]) / robAttempts, 2)
|
|
robFailedPercent = round(100 * int(s[3]) / robAttempts, 2)
|
|
|
|
embed = discord.Embed(colour=discord.Colour.blue())
|
|
embed.set_author(name="{}'s Stats".format(ctx.author.display_name))
|
|
embed.add_field(name="Geslaagde Rob Pogingen", value="{} ({})%".format(s[2], robSuccessPercent))
|
|
embed.add_field(name="Gefaalde Rob Pogingen", value="{} ({})%".format(s[3], robFailedPercent))
|
|
embed.add_field(name="Aantal Dinks Gestolen", value="{:,}".format(round(s[4])))
|
|
embed.add_field(name="Aantal Nightlies", value=str(s[6]))
|
|
embed.add_field(name="Langste Nightly Streak", value=str(s[5]))
|
|
embed.add_field(name="Totale Profit", value="{:,}".format(round(s[7])))
|
|
embed.add_field(name="Aantal keer gepoked", value=str(s[1]))
|
|
embed.add_field(name="Aantal Gewonnen Coinflips", value=str(s[8]))
|
|
embed.add_field(name="Totale winst uit Coinflips", value="{:,}".format(round(s[9])))
|
|
embed.add_field(name="Aantal Bails", value="{:,}".format(int(s[10])))
|
|
await ctx.send(embed=embed)
|
|
|
|
@stats.command(aliases=["Coinflip"], hidden=True)
|
|
async def cf(self, ctx):
|
|
with open("files/stats.json", "r") as fp:
|
|
s = json.load(fp)
|
|
|
|
embed = discord.Embed(colour=discord.Colour.blue())
|
|
embed.set_author(name="Coinflip Stats")
|
|
embed.description = "**Kop**: {:,} ({}%)\n**Munt**: {:,} ({}%)".format(
|
|
s["cf"]["h"], self.percent(s["cf"], "h"), s["cf"]["t"], self.percent(s["cf"], "t"))
|
|
await ctx.send(embed=embed)
|
|
|
|
@stats.command(aliases=["Roll"], hidden=True)
|
|
async def dice(self, ctx):
|
|
with open("files/stats.json", "r") as fp:
|
|
s = json.load(fp)
|
|
|
|
embed = discord.Embed(colour=discord.Colour.blue())
|
|
embed.set_author(name="Dice Stats")
|
|
embed.description = "\n".join(["**{}**: {:,} ({}%)".format(
|
|
i, s["dice"][i], self.percent(s["dice"], i)) for i in sorted(s["dice"].keys())])
|
|
await ctx.send(embed=embed)
|
|
|
|
@stats.command(hidden=True)
|
|
async def rob(self, ctx):
|
|
with open("files/stats.json", "r") as fp:
|
|
s = json.load(fp)["rob"]
|
|
totalAttempts = s["robs_success"] + s["robs_failed"]
|
|
successPercent = round(100 * s["robs_success"] / totalAttempts, 2)
|
|
failedPercent = round(100 * s["robs_failed"] / totalAttempts, 2)
|
|
embed = discord.Embed(colour=discord.Colour.blue())
|
|
embed.set_author(name="Rob Stats")
|
|
embed.description = "**Geslaagd**: {:,} ({}%)\n**Gefaald**: {:,} ({}%)\n**Borg betaald**: {:,}".format(
|
|
s["robs_success"], successPercent, s["robs_failed"], failedPercent, round(s["bail_paid"])
|
|
)
|
|
await ctx.send(embed=embed)
|
|
|
|
@stats.command(name="Channels", aliases=["C", "CA"], usage="[#Channel]*", hidden=True)
|
|
@commands.check(checks.isMod)
|
|
async def channels(self, ctx, channel: discord.TextChannel = None):
|
|
res = stats.channel_activity(channel)
|
|
|
|
embed = discord.Embed(colour=discord.Colour.blue())
|
|
|
|
if channel:
|
|
embed.set_author(name="Channel Activity - {}".format(channel.name))
|
|
channel_instance = self.client.get_channel(int(res[0][0]))
|
|
embed.add_field(name="Aantal berichten", value="{:,}".format(round(float(res[0][1]), 2)), inline=False)
|
|
|
|
try:
|
|
last_message = await channel_instance.fetch_message(channel_instance.last_message_id)
|
|
except discord.NotFound:
|
|
last_message = None
|
|
|
|
if last_message is None:
|
|
embed.add_field(name="Laatste bericht", value="[Verwijderd]", inline=False)
|
|
else:
|
|
embed.add_field(name="Laatste bericht", value="[Jump URL]({})".format(last_message.jump_url), inline=False)
|
|
elif ctx.guild:
|
|
embed.set_author(name="Channel Activity - {}".format(ctx.guild))
|
|
|
|
description = ""
|
|
for c in sorted(res, key=lambda x: float(x[1]), reverse=True):
|
|
if not any(tc.id == int(c[0]) for tc in ctx.guild.text_channels):
|
|
continue
|
|
|
|
channel_instance = self.client.get_channel(int(c[0]))
|
|
|
|
description += "{}: {:,}\n".format(channel_instance.mention, round(float(c[1]), 2))
|
|
|
|
embed.description = description
|
|
else:
|
|
return await ctx.send("Dit commando werkt niet in DM's.")
|
|
|
|
return await ctx.send(embed=embed)
|
|
|
|
async def callStats(self, name, ctx):
|
|
await [command for command in self.stats.commands if command.name == name][0](ctx)
|
|
|
|
def percent(self, dic, stat):
|
|
total = sum([int(dic[s]) for s in dic])
|
|
if total == 0:
|
|
total = 1
|
|
|
|
return round(100 * int(dic[stat]) / total, 2)
|
|
|
|
|
|
def setup(client):
|
|
client.add_cog(Stats(client))
|