aboutsummaryrefslogtreecommitdiffstats
path: root/bot/exts/evergreen/wonder_twins.py
diff options
context:
space:
mode:
authorGravatar fisher60 <[email protected]>2020-11-19 18:45:43 -0800
committerGravatar fisher60 <[email protected]>2020-11-19 18:45:43 -0800
commit935ed4da80441ceaa4ad9ca80130abc3e27ee2ad (patch)
treee7e2e07694424417917da7ef95d9f90ae1c8c1a4 /bot/exts/evergreen/wonder_twins.py
parentUpdate workflow status badges in readme (diff)
feature/add wonder twins command
This commit implements a wonder twins inspired command. This is a purely fun command that uses real transformations from the show to make random new transformations. The yaml is all hand transcribed from the actual show.
Diffstat (limited to 'bot/exts/evergreen/wonder_twins.py')
-rw-r--r--bot/exts/evergreen/wonder_twins.py49
1 files changed, 49 insertions, 0 deletions
diff --git a/bot/exts/evergreen/wonder_twins.py b/bot/exts/evergreen/wonder_twins.py
new file mode 100644
index 00000000..475ddcb7
--- /dev/null
+++ b/bot/exts/evergreen/wonder_twins.py
@@ -0,0 +1,49 @@
+import random
+from pathlib import Path
+
+import yaml
+from discord.ext.commands import Bot, Cog, Context, command
+
+with open(Path.cwd() / "bot" / "resources" / "evergreen" / "wonder_twins.yaml", "r", encoding="utf-8") as f:
+ info = yaml.load(f, Loader=yaml.FullLoader)
+ WATER_TYPES, OBJECTS, ADJECTIVES = info["water_types"], info["objects"], info["adjectives"]
+
+
+class WonderTwins(Cog):
+ """Cog for a Wonder Twins inspired command."""
+
+ def __init__(self, bot: Bot):
+ self.bot = bot
+
+ @staticmethod
+ def append_onto(phrase: str, insert_word: str) -> str:
+ """Appends one word onto the end of another phrase, used to format the use of 'an' or 'a'."""
+ if insert_word[-1] == "s":
+ phrase = phrase.split()
+ del phrase[0]
+ phrase = " ".join(phrase)
+
+ insert_word = insert_word.split()[-1]
+ return " ".join([phrase, insert_word])
+
+ def format_phrase(self) -> str:
+ """Creates a transformation phrase from available words."""
+ adjective = random.choice((None, random.choice(ADJECTIVES)))
+ object_name = random.choice(OBJECTS)
+ water_type = random.choice(WATER_TYPES)
+
+ words = [object_name, water_type]
+ if adjective:
+ new_object = self.append_onto(adjective, object_name)
+ words[0] = new_object
+ return f"{words[0]} of {words[1]}"
+
+ @command(name="formof", aliases=["wondertwins", "wondertwin", "fo"])
+ async def form_of(self, ctx: Context) -> None:
+ """Command to send a Wonder Twins inspired phrase to the user invoking the command."""
+ await ctx.send(f"Form of {self.format_phrase()}")
+
+
+def setup(bot: Bot) -> None:
+ """Load the WonderTwins cog."""
+ bot.add_cog(WonderTwins(bot))