Closes #14
This commit is contained in:
@@ -189,6 +189,12 @@ class PycordBot(LibPycordBot):
|
||||
self._("admin_event_started", "messages").format(event_name=event.name),
|
||||
)
|
||||
|
||||
await self.notify_users(
|
||||
guild,
|
||||
pycord_guild,
|
||||
self._("event_started", "messages").format(event_name=event.name),
|
||||
)
|
||||
|
||||
async def _process_events_end(self) -> None:
|
||||
# Get events to end
|
||||
events: List[PycordEvent] = await self._get_events(
|
||||
@@ -228,6 +234,17 @@ class PycordBot(LibPycordBot):
|
||||
# Get list of participants
|
||||
users: List[PycordUser] = await self._get_event_participants(event._id)
|
||||
|
||||
event_ended_string: str = self._("event_ended", "messages").format(
|
||||
event_name=event.name, stages=stages_string
|
||||
)
|
||||
|
||||
chunk_size: int = 2000
|
||||
|
||||
event_info_chunks: List[str] = [
|
||||
event_ended_string[i : i + chunk_size]
|
||||
for i in range(0, len(event_ended_string), chunk_size)
|
||||
]
|
||||
|
||||
for user in users:
|
||||
if str(event._id) not in user.event_channels:
|
||||
logger.warning(
|
||||
@@ -240,30 +257,58 @@ class PycordBot(LibPycordBot):
|
||||
# Send a notification about event start
|
||||
user_channel: TextChannel = guild.get_channel(user.event_channels[str(event._id)])
|
||||
|
||||
event_ended_string: str = self._("event_ended", "messages").format(
|
||||
event_name=event.name, stages=stages_string
|
||||
)
|
||||
|
||||
chunk_size: int = 2000
|
||||
|
||||
event_info_chunks: List[str] = [
|
||||
event_ended_string[i : i + chunk_size]
|
||||
for i in range(0, len(event_ended_string), chunk_size)
|
||||
]
|
||||
|
||||
for chunk in event_info_chunks:
|
||||
await user_channel.send(chunk)
|
||||
|
||||
# Lock each participant out
|
||||
await user.lock_event_channel(guild, event._id, channel=user_channel)
|
||||
|
||||
await event.end(cache=self.cache)
|
||||
|
||||
await self.notify_admins(
|
||||
guild,
|
||||
pycord_guild,
|
||||
self._("admin_event_ended", "messages").format(event_name=event.name),
|
||||
)
|
||||
|
||||
await event.end(cache=self.cache)
|
||||
await self._notify_general_channel_event_end(guild, pycord_guild, event, stages)
|
||||
|
||||
async def _notify_general_channel_event_end(
|
||||
self, guild: Guild, pycord_guild: PycordGuild, event: PycordEvent, stages: List[PycordEventStage]
|
||||
) -> None:
|
||||
event_ended_string: str = self._("event_ended_short", "messages").format(event_name=event.name)
|
||||
|
||||
await self.notify_users(
|
||||
guild,
|
||||
pycord_guild,
|
||||
event_ended_string,
|
||||
)
|
||||
|
||||
chunk_size: int = 2000
|
||||
|
||||
for stage in stages:
|
||||
header_full: str = self._("stage_entry_header", "messages").format(
|
||||
sequence=stage.sequence + 1, question=stage.question
|
||||
)
|
||||
|
||||
header_chunks: List[str] = [
|
||||
header_full[i : i + chunk_size] for i in range(0, len(header_full), chunk_size)
|
||||
]
|
||||
header_chunks_length: int = len(header_chunks)
|
||||
|
||||
files: List[File] | None = stage.get_media_files()
|
||||
|
||||
for index, chunk in enumerate(header_chunks):
|
||||
await self.notify_users(
|
||||
guild,
|
||||
pycord_guild,
|
||||
chunk,
|
||||
files=None if index != header_chunks_length - 1 else files,
|
||||
)
|
||||
|
||||
await self.notify_users(
|
||||
guild, pycord_guild, self._("stage_entry_footer", "messages").format(answer=stage.answer)
|
||||
)
|
||||
|
||||
@staticmethod
|
||||
async def _get_events(query: Dict[str, Any]) -> List[PycordEvent]:
|
||||
@@ -290,18 +335,35 @@ class PycordBot(LibPycordBot):
|
||||
# TODO Add documentation
|
||||
@staticmethod
|
||||
async def notify_admins(guild: Guild, pycord_guild: PycordGuild, message: str) -> None:
|
||||
management_channel: TextChannel | None = guild.get_channel(pycord_guild.channel_id)
|
||||
management_channel: TextChannel | None = guild.get_channel(pycord_guild.management_channel_id)
|
||||
|
||||
if management_channel is None:
|
||||
logger.error(
|
||||
"Discord channel with ID %s in guild with ID %s could not be found!",
|
||||
pycord_guild.channel_id,
|
||||
pycord_guild.management_channel_id,
|
||||
guild.id,
|
||||
)
|
||||
return
|
||||
|
||||
await management_channel.send(message)
|
||||
|
||||
# TODO Add documentation
|
||||
@staticmethod
|
||||
async def notify_users(
|
||||
guild: Guild, pycord_guild: PycordGuild, message: str, files: Optional[List[File]] = None
|
||||
) -> None:
|
||||
general_channel: TextChannel | None = guild.get_channel(pycord_guild.general_channel_id)
|
||||
|
||||
if general_channel is None:
|
||||
logger.error(
|
||||
"Discord channel with ID %s in guild with ID %s could not be found!",
|
||||
pycord_guild.general_channel_id,
|
||||
guild.id,
|
||||
)
|
||||
return
|
||||
|
||||
await general_channel.send(message, files=files)
|
||||
|
||||
async def find_user(self, user: int | User, guild: int | Guild) -> PycordUser:
|
||||
"""Find User by its ID or User object.
|
||||
|
||||
|
Reference in New Issue
Block a user