diff options
Diffstat (limited to 'bot/exts/evergreen/conversationstarters.py')
-rw-r--r-- | bot/exts/evergreen/conversationstarters.py | 42 |
1 files changed, 26 insertions, 16 deletions
diff --git a/bot/exts/evergreen/conversationstarters.py b/bot/exts/evergreen/conversationstarters.py index cfa8dbce..423662bb 100644 --- a/bot/exts/evergreen/conversationstarters.py +++ b/bot/exts/evergreen/conversationstarters.py @@ -1,4 +1,5 @@ -import json +import itertools +import logging import random from pathlib import Path @@ -9,10 +10,12 @@ from discord.ext import commands from bot.constants import WHITELISTED_CHANNELS from bot.utils.decorators import override_in_channel +log = logging.getLogger(__name__) -with Path("bot/resources/evergreen/starter.json").open("r", encoding="utf8") as f: - STARTERS = json.load(f)["starters"] +SUGGESTION_FORM = 'https://forms.gle/zw6kkJqv8U43Nfjg9' +with Path("bot/resources/evergreen/starter.yaml").open("r", encoding="utf8") as f: + STARTERS = yaml.load(f, Loader=yaml.FullLoader) with Path("bot/resources/evergreen/py_topics.yaml").open("r", encoding="utf8") as f: # First ID is #python-general and the rest are top to bottom categories of Topical Chat/Help. @@ -24,6 +27,16 @@ with Path("bot/resources/evergreen/py_topics.yaml").open("r", encoding="utf8") a # All the allowed channels that the ".topic" command is allowed to be executed in. ALL_ALLOWED_CHANNELS = [channel_id for channel_id in PY_TOPICS.keys()] + list(WHITELISTED_CHANNELS) +# Putting all topics into one dictionary and shuffling lists to reduce same-topic repetitions. +TOPICS = {} +for k, v in {**{'default': STARTERS}, **PY_TOPICS}.items(): + if len(v): + random.shuffle(v) + TOPICS[k] = itertools.cycle(v) + + else: + TOPICS[k] = False + class ConvoStarters(commands.Cog): """Evergreen conversation topics.""" @@ -39,31 +52,28 @@ class ConvoStarters(commands.Cog): If in a Python channel, a python-related topic will be given. - Otherwise, a random conversation topic will be recieved by the user. + Otherwise, a random conversation topic will be received by the user. """ + # No matter what, the form will be shown. + embed = Embed(description=f'Suggest more topics [here]({SUGGESTION_FORM})!', color=Color.blurple()) + try: # Fetching topics. - channel_topics = PY_TOPICS[ctx.channel.id] + channel_topics = TOPICS[ctx.channel.id] # If the channel isn't Python-related. except KeyError: - await ctx.send(random.choice(STARTERS)) + embed.title = f'**{next(TOPICS["default"])}**' # If the channel ID doesn't have any topics. else: if channel_topics: - await ctx.send(random.choice(channel_topics)) + embed.title = f'**{next(channel_topics)}**' else: - embed = Embed( - description=( - "No topics found for this Python channel. You can suggest new ideas for topics " - "[here](https://github.com/python-discord/seasonalbot/issues/426)!" - ), - color=Color.blurple() - ) - - await ctx.send(embed=embed) + embed.title = 'No topics found for this channel.' + + await ctx.send(embed=embed) def setup(bot: commands.Bot) -> None: |