aboutsummaryrefslogtreecommitdiffstats
path: root/bot/exts/evergreen/catify.py
blob: a01214038d7509f06d13b6a3ad615ff19e699fcd (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
66
67
68
69
70
71
72
73
74
75
76
77
78
import random
from typing import Optional

from discord import AllowedMentions, Embed
from discord.ext import commands

from bot.constants import Cats, Colours, NEGATIVE_REPLIES


class Catify(commands.Cog):
    """Cog for the catify command."""

    def __init__(self, bot: commands.Bot):
        self.bot = bot

    @commands.command(aliases=["ᓚᘏᗢify", "ᓚᘏᗢ"])
    async def catify(self, ctx: commands.Context, *, text: Optional[str]) -> None:
        """
        Convert the provided text into a cat themed sentence by interspercing cats throughout text.

        If no text is given then the users nickname is edited.
        """
        if not text:
            display_name = ctx.author.display_name

            if len(display_name) > 26:
                embed = Embed(
                    title=random.choice(NEGATIVE_REPLIES),
                    description="Your nickname is too long to be catified! Please change it to be under 26 characters.",
                    color=Colours.soft_red
                )
                await ctx.send(embed=embed)
                return

            else:
                display_name += f" | {random.choice(Cats.cats)}"
                await ctx.send(f"Your catified username is: `{display_name}`")
                await ctx.author.edit(nick=display_name)
        else:
            if len(text) >= 1500:
                embed = Embed(
                    title=random.choice(NEGATIVE_REPLIES),
                    description="Submitted text was too large! Please submit something under 1500 characters.",
                    color=Colours.soft_red
                )
                await ctx.send(embed=embed)
                return

            string_list = text.split()
            for index, name in enumerate(string_list):
                if "cat" in name:
                    if random.randint(0, 5) == 5:
                        string_list[index] = string_list[index].replace("cat", f"**{random.choice(Cats.cats)}**")
                    else:
                        string_list[index] = string_list[index].replace("cat", random.choice(Cats.cats))
                for element in Cats.cats:
                    if element in name:
                        string_list[index] = string_list[index].replace(element, "cat")

        string_len = len(string_list) // 3 or len(string_list)

        for _ in range(random.randint(1, string_len)):
            # insert cat at random index
            if random.randint(0, 5) == 5:
                string_list.insert(random.randint(0, len(string_list)), f"**{random.choice(Cats.cats)}**")
            else:
                string_list.insert(random.randint(0, len(string_list)), random.choice(Cats.cats))

        text = " ".join(string_list)
        await ctx.send(
            f">>> {text}",
            allowed_mentions=AllowedMentions.none()
        )


def setup(bot: commands.Bot) -> None:
    """Loads the catify cog."""
    bot.add_cog(Catify(bot))