diff options
Diffstat (limited to 'bot/seasons')
| -rw-r--r-- | bot/seasons/halloween/spookyrating.py | 68 | 
1 files changed, 68 insertions, 0 deletions
| diff --git a/bot/seasons/halloween/spookyrating.py b/bot/seasons/halloween/spookyrating.py new file mode 100644 index 00000000..a9cfda9b --- /dev/null +++ b/bot/seasons/halloween/spookyrating.py @@ -0,0 +1,68 @@ +import bisect +import json +import logging +import random +from pathlib import Path + +import discord +from discord.ext import commands + +from bot.constants import Colours + +log = logging.getLogger(__name__) + +with Path('bot', 'resources', 'halloween', 'spooky_rating.json').open() as file: +    SPOOKY_DATA = json.load(file) +    SPOOKY_DATA = sorted((int(key), value) for key, value in SPOOKY_DATA.items()) + + +class SpookyRating(commands.Cog): +    """A cog for calculating one's spooky rating""" + +    def __init__(self, bot): +        self.bot = bot +        self.local_random = random.Random() + +    @commands.command() +    @commands.cooldown(rate=1, per=5, type=commands.BucketType.user) +    async def spookyrating(self, ctx, who: discord.Member = None): +        """ +        Calculates the spooky rating of someone. + +        Any user will always yield the same result, no matter who calls the command +        """ + +        if who is None: +            who = ctx.author + +        # This ensures that the same result over multiple runtimes +        self.local_random.seed(who.id) +        spooky_percent = self.local_random.randint(1, 101) + +        # We need the -1 due to how bisect returns the point +        # see the documentation for further detail +        # https://docs.python.org/3/library/bisect.html#bisect.bisect +        index = bisect.bisect(SPOOKY_DATA, (spooky_percent,)) - 1 + +        _, data = SPOOKY_DATA[index] + +        embed = discord.Embed( +            title=data['title'], +            description=f'{who} scored {spooky_percent}%!', +            color=Colours.orange +        ) +        embed.add_field( +            name='A whisper from Satan', +            value=data['text'] +        ) +        embed.set_thumbnail( +            url=data['image'] +        ) + +        await ctx.send(embed=embed) + + +def setup(bot): +    """Cog load.""" +    bot.add_cog(SpookyRating(bot)) +    log.info("SpookyRating cog loaded") | 
