blob: 18ec649dcd85037ab5b6260376043d711c91c51a (
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
|
import json
import random
from pathlib import Path
import discord
from discord.ext import commands
from pydis_core.utils.logging import get_logger
from bot.bot import Bot
from bot.constants import Colours
log = get_logger(__name__)
TEXT_OPTIONS = json.loads(
Path("bot/resources/holidays/halloween/monster.json").read_text("utf8")
) # Data for a mad-lib style generation of text
class MonsterBio(commands.Cog):
"""A cog that generates a spooky monster biography."""
def generate_name(self, seeded_random: random.Random) -> str:
"""Generates a name (for either monster species or monster name)."""
n_candidate_strings = seeded_random.randint(2, len(TEXT_OPTIONS["monster_type"]))
return "".join(seeded_random.choice(TEXT_OPTIONS["monster_type"][i]) for i in range(n_candidate_strings))
@commands.command(brief="Sends your monster bio!")
async def monsterbio(self, ctx: commands.Context) -> None:
"""Sends a description of a monster."""
seeded_random = random.Random(ctx.author.id) # Seed a local Random instance rather than the system one
name = self.generate_name(seeded_random)
species = self.generate_name(seeded_random)
biography_text = seeded_random.choice(TEXT_OPTIONS["biography_text"])
words = {"monster_name": name, "monster_species": species}
for key, value in biography_text.items():
if key == "text":
continue
options = seeded_random.sample(TEXT_OPTIONS[key], value)
words[key] = " ".join(options)
embed = discord.Embed(
title=f"{name}'s Biography",
color=seeded_random.choice([Colours.orange, Colours.purple]),
description=biography_text["text"].format_map(words),
)
await ctx.send(embed=embed)
async def setup(bot: Bot) -> None:
"""Load the Monster Bio Cog."""
await bot.add_cog(MonsterBio())
|