blob: 4df3f068c8db9afc3ed1c8ccde66f4a21911adca (
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
|
import json
import random
from pathlib import Path
from discord import Embed
from discord.ext import commands
from bot.utils.decorators import override_in_channel
from bot.constants import WHITELISTED_CHANNELS
with Path("bot/resources/evergreen/starter.json").open("r", encoding="utf8") as f:
STARTERS = json.load(f)["starters"]
with Path("bot/resources/evergreen/py_topics.json").open("r", encoding="utf8") as f:
# First ID is #python-general and the rest are top to bottom categories of Topical Chat/Help.
PY_TOPICS = json.load(f)["python-channels"]
# All the allowed channels that the ".topic" command is allowed to be executed in.
ALL_ALLOWED_CHANNELS = [int(channel_id) for channel_id in PY_TOPICS.keys()].extend(WHITELISTED_CHANNELS)
class ConvoStarters(commands.Cog):
"""Evergreen conversation topics."""
def __init__(self, bot: commands.Bot):
self.bot = bot
@commands.command()
@override_in_channel(ALL_ALLOWED_CHANNELS)
async def topic(self, ctx: commands.Context) -> None:
"""Responds with a random topic to start a conversation
If in a Python channel, a python-related topic will be given.
Otherwise, a random conversation topic will be recieved by the user.
"""
try:
# Fetching topics.
channel_topics = PY_TOPICS[str(ctx.channel.id)]
# If the channel isn't Python-related.
except KeyError:
await ctx.send(random.choice(STARTERS))
# If the channel ID doesn't have any topics.
else:
if channel_topics:
await ctx.send(random.choice(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)!"
))
await ctx.send(embed=embed)
def setup(bot: commands.Bot) -> None:
"""Conversation starters Cog load."""
bot.add_cog(ConvoStarters(bot))
|