Skip to content

Commit 92f2972

Browse files
Implement core tickets system (#20)
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Suggested by Mir, created by Noelle
1 parent 8082e64 commit 92f2972

16 files changed

+1234
-43
lines changed

bot/cogs/config.py

+33-9
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,16 @@
1-
from typing import Optional
1+
from __future__ import annotations
2+
3+
from typing import TYPE_CHECKING, Optional
24

35
import asyncpg
46
import discord
57
import msgspec
68
from async_lru import alru_cache
79
from discord.ext import commands
810
from libs.utils import RoboContext, is_manager
9-
from rodhaj import Rodhaj
11+
12+
if TYPE_CHECKING:
13+
from rodhaj import Rodhaj
1014

1115
UNKNOWN_ERROR_MESSAGE = (
1216
"An unknown error happened. Please contact the dev team for assistance"
@@ -21,6 +25,7 @@ class GuildConfig(msgspec.Struct):
2125
ticket_channel_id: int
2226
logging_channel_id: int
2327
logging_broadcast_url: str
28+
ticket_broadcast_url: str
2429
locked: bool = False
2530

2631
@property
@@ -54,10 +59,18 @@ async def get_webhook(self) -> Optional[discord.Webhook]:
5459
url=conf.logging_broadcast_url, session=self.session
5560
)
5661

62+
async def get_ticket_webhook(self) -> Optional[discord.Webhook]:
63+
conf = await self.get_config()
64+
if conf is None:
65+
return None
66+
return discord.Webhook.from_url(
67+
url=conf.ticket_broadcast_url, session=self.session
68+
)
69+
5770
@alru_cache()
5871
async def get_config(self) -> Optional[GuildConfig]:
5972
query = """
60-
SELECT id, category_id, ticket_channel_id, logging_channel_id, logging_broadcast_url, locked
73+
SELECT id, category_id, ticket_channel_id, logging_channel_id, logging_broadcast_url, ticket_broadcast_url, locked
6174
FROM guild_config
6275
WHERE id = $1;
6376
"""
@@ -184,17 +197,24 @@ async def setup(self, ctx: RoboContext, *, flags: SetupFlags) -> None:
184197
forum_description = "\n".join(forum_description_content)
185198
forum_tags = [
186199
discord.ForumTag(
187-
name="Question", emoji=discord.PartialEmoji(name="\U00002753")
200+
name="Question",
201+
emoji=discord.PartialEmoji(
202+
name="\U00002753"
203+
), # U+2753 Black Question Mark Ornament
188204
),
189205
discord.ForumTag(
190-
name="Serious", emoji=discord.PartialEmoji(name="\U0001f610")
206+
name="Serious",
207+
emoji=discord.PartialEmoji(name="\U0001f610"), # U+1F610 Neutral Face
191208
),
192209
discord.ForumTag(
193-
name="Private", emoji=discord.PartialEmoji(name="\U0001f512")
210+
name="Private",
211+
emoji=discord.PartialEmoji(name="\U0001f512"), # U+1F512 Lock
194212
),
195213
discord.ForumTag(
196214
name="Resolved",
197-
emoji=discord.PartialEmoji(name="\U00002705"),
215+
emoji=discord.PartialEmoji(
216+
name="\U00002705"
217+
), # U+2705 White Heavy Check Mark
198218
moderated=True,
199219
),
200220
]
@@ -222,6 +242,9 @@ async def setup(self, ctx: RoboContext, *, flags: SetupFlags) -> None:
222242
default_layout=discord.ForumLayoutType.list_view,
223243
available_tags=forum_tags,
224244
)
245+
tc_webhook = await ticket_channel.create_webhook(
246+
name="Rodhaj User Proxy Webhook", avatar=avatar_bytes
247+
)
225248
except discord.Forbidden:
226249
await ctx.send(
227250
"\N{NO ENTRY SIGN} Rodhaj is missing permissions: Manage Channels and Manage Webhooks"
@@ -232,8 +255,8 @@ async def setup(self, ctx: RoboContext, *, flags: SetupFlags) -> None:
232255
return
233256

234257
query = """
235-
INSERT INTO guild_config (id, category_id, ticket_channel_id, logging_channel_id, logging_broadcast_url)
236-
VALUES ($1, $2, $3, $4, $5);
258+
INSERT INTO guild_config (id, category_id, ticket_channel_id, logging_channel_id, logging_broadcast_url, ticket_broadcast_url)
259+
VALUES ($1, $2, $3, $4, $5, $6);
237260
"""
238261
try:
239262
await self.pool.execute(
@@ -243,6 +266,7 @@ async def setup(self, ctx: RoboContext, *, flags: SetupFlags) -> None:
243266
ticket_channel.id,
244267
logging_channel.id,
245268
lgc_webhook.url,
269+
tc_webhook.url,
246270
)
247271
except asyncpg.UniqueViolationError:
248272
await ticket_channel.delete(reason=delete_reason)

0 commit comments

Comments
 (0)