aboutsummaryrefslogtreecommitdiffstats
path: root/bot/exts/halloween/halloweenify.py
blob: df55b55d6975c0a24617540328a30feb4b2138b7 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
import logging
from json import load
from pathlib import Path
from random import choice

import discord
from discord.errors import Forbidden
from discord.ext import commands
from discord.ext.commands import BucketType

from bot.bot import Bot

log = logging.getLogger(__name__)


class Halloweenify(commands.Cog):
    """A cog to change a invokers nickname to a spooky one!"""

    @commands.cooldown(1, 300, BucketType.user)
    @commands.command()
    async def halloweenify(self, ctx: commands.Context) -> None:
        """Change your nickname into a much spookier one!"""
        async with ctx.typing():
            with open(Path("bot/resources/halloween/halloweenify.json"), "r", encoding="utf8") as f:
                data = load(f)

            # Choose a random character from our list we loaded above and set apart the nickname and image url.
            character = choice(data["characters"])
            nickname = "".join([nickname for nickname in character])
            image = "".join([character[nickname] for nickname in character])

            # Build up a Embed
            embed = discord.Embed()
            embed.colour = discord.Colour.dark_orange()
            embed.title = "Not spooky enough?"
            embed.description = (
                f"**{ctx.author.display_name}** wasn't spooky enough for you? That's understandable, "
                f"{ctx.author.display_name} isn't scary at all! "
                "Let me think of something better. Hmm... I got it!\n\n "
            )
            embed.set_image(url=image)

            if isinstance(ctx.author, discord.Member):
                try:
                    await ctx.author.edit(nick=nickname)
                    embed.description += f"Your new nickname will be: \n:ghost: **{nickname}** :jack_o_lantern:"

                except Forbidden:   # The bot doesn't have enough permission
                    embed.description += (
                        f"Your new nickname should be: \n :ghost: **{nickname}** :jack_o_lantern: \n\n"
                        f"It looks like I cannot change your name, but feel free to change it yourself."
                    )

            else:   # The command has been invoked in DM
                embed.description += (
                    f"Your new nickname should be: \n :ghost: **{nickname}** :jack_o_lantern: \n\n"
                    f"Feel free to change it yourself, or invoke the command again inside the server."
                )

        await ctx.send(embed=embed)


def setup(bot: Bot) -> None:
    """Load the Halloweenify Cog."""
    bot.add_cog(Halloweenify())