From c07b2117e6a473183050c58f89ee213f25cca77e Mon Sep 17 00:00:00 2001 From: xithrius Date: Sun, 7 Mar 2021 23:08:17 -0800 Subject: Added Redis caching. --- bot/exts/help_channels/_cog.py | 65 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) diff --git a/bot/exts/help_channels/_cog.py b/bot/exts/help_channels/_cog.py index 0995c8a79..b095429a3 100644 --- a/bot/exts/help_channels/_cog.py +++ b/bot/exts/help_channels/_cog.py @@ -5,6 +5,7 @@ import typing as t from datetime import datetime, timezone from operator import attrgetter +import async_rediscache import discord import discord.abc from discord.ext import commands @@ -20,6 +21,7 @@ NAMESPACE = "help" HELP_CHANNEL_TOPIC = """ This is a Python help channel. You can claim your own help channel in the Python Help: Available category. """ +AVAILABLE_HELP_CHANNELS = "**Currently available help channel(s):** {available}" class HelpChannels(commands.Cog): @@ -72,6 +74,14 @@ class HelpChannels(commands.Cog): self.last_notification: t.Optional[datetime] = None + # Caching the message object for the dynamic message. + self.dynamic_message_cache = async_rediscache.RedisCache(namespace="Dynamic Message") + + self.how_to_get_help: t.Optional[discord.TextChannel] = None + self.dynamic_message: t.Optional[discord.Message] = None + + self.available_help_channels: t.Set[discord.TextChannel] = set() + # Asyncio stuff self.queue_tasks: t.List[asyncio.Task] = [] self.init_task = self.bot.loop.create_task(self.init_cog()) @@ -102,6 +112,10 @@ class HelpChannels(commands.Cog): await _cooldown.revoke_send_permissions(message.author, self.scheduler) await _message.pin(message) + try: + await _message.dm_on_open(message) + except Exception as e: + log.warning("Error occurred while sending DM:", exc_info=e) # Add user with channel for dormant check. await _caches.claimants.set(message.channel.id, message.author.id) @@ -114,6 +128,9 @@ class HelpChannels(commands.Cog): await _caches.unanswered.set(message.channel.id, True) + # Removing the help channel from the dynamic message, and editing/sending that message. + self.available_help_channels.remove(message.channel) + # Not awaited because it may indefinitely hold the lock while waiting for a channel. scheduling.create_task(self.move_to_available(), name=f"help_claim_{message.id}") @@ -275,6 +292,15 @@ class HelpChannels(commands.Cog): # This may confuse users. So would potentially long delays for the cog to become ready. self.close_command.enabled = True + # Acquiring and modifying the channel to dynamically update the available help channels message. + log.trace("Attempting to fetch dynamic message ID along with How-to-get-help channel ID.") + self.how_to_get_help = await self.dynamic_message_cache.get("How-to-get-help Channel ID") + self.dynamic_message = await self.dynamic_message_cache.get("How-to-get-help Dynamic Message ID") + + # Getting channels that need to be included in the dynamic message. + await self.update_available_help_channels() + log.trace("Dynamic available help message updated.") + await self.init_available() _stats.report_counts() @@ -332,6 +358,10 @@ class HelpChannels(commands.Cog): category_id=constants.Categories.help_available, ) + # Adding the help channel to the dynamic message, and editing/sending that message. + self.available_help_channels.add(channel) + await self.update_available_help_channels() + _stats.report_counts() async def move_to_dormant(self, channel: discord.TextChannel) -> None: @@ -461,3 +491,38 @@ class HelpChannels(commands.Cog): self.queue_tasks.remove(task) return channel + + async def update_available_help_channels(self) -> None: + """Updates the dynamic message within #how-to-get-help for available help channels.""" + if not self.available_help_channels: + self.available_help_channels = set( + c for c in self.available_category.channels if not _channel.is_excluded_channel(c) + ) + + available_channels = AVAILABLE_HELP_CHANNELS.format( + available=', '.join(c.mention for c in self.available_help_channels) or None + ) + + if self.how_to_get_help is None: + self.how_to_get_help = await channel_utils.try_get_channel(constants.Channels.how_to_get_help) + await self.dynamic_message_cache.set("How-to-get-help Channel ID", self.how_to_get_help.id) + + if self.dynamic_message is None: + last_message = await self.how_to_get_help.history(limit=1).find(lambda m: m.author == self.bot.user) + + if not last_message: + self.dynamic_message = await self.how_to_get_help.send(available_channels) + log.trace("A dynamic message was sent for later modification because one couldn't be found.") + else: + await last_message.edit(content=available_channels) + + await self.dynamic_message_cache.set("How-to-get-help Dynamic Message ID", self.dynamic_message.id) + + else: + try: + await self.dynamic_message.edit(content=available_channels) + except discord.NotFound: + self.dynamic_message = await self.how_to_get_help.send(available_channels) + await self.dynamic_message_cache.set("How-to-get-help Dynamic Message ID", self.dynamic_message.id) + log.trace("Dynamic has been sent again since previous was removed during process of updating message.") + -- cgit v1.2.3 From 71ea5a6c9e6f3f4c09ee1b4b26fafb8e31e9ffbf Mon Sep 17 00:00:00 2001 From: xithrius Date: Sun, 7 Mar 2021 23:13:33 -0800 Subject: Removed extra newline at end of _cog.py. --- bot/exts/help_channels/_cog.py | 1 - 1 file changed, 1 deletion(-) diff --git a/bot/exts/help_channels/_cog.py b/bot/exts/help_channels/_cog.py index b095429a3..680c77f10 100644 --- a/bot/exts/help_channels/_cog.py +++ b/bot/exts/help_channels/_cog.py @@ -525,4 +525,3 @@ class HelpChannels(commands.Cog): self.dynamic_message = await self.how_to_get_help.send(available_channels) await self.dynamic_message_cache.set("How-to-get-help Dynamic Message ID", self.dynamic_message.id) log.trace("Dynamic has been sent again since previous was removed during process of updating message.") - -- cgit v1.2.3 From 016614c24bf899122dc2f55b19c4de463bcf5524 Mon Sep 17 00:00:00 2001 From: xithrius Date: Mon, 8 Mar 2021 00:11:24 -0800 Subject: Using http methods to edit/send messages. --- bot/exts/help_channels/_cog.py | 42 ++++++++++++++++-------------------------- 1 file changed, 16 insertions(+), 26 deletions(-) diff --git a/bot/exts/help_channels/_cog.py b/bot/exts/help_channels/_cog.py index 680c77f10..11e3aef59 100644 --- a/bot/exts/help_channels/_cog.py +++ b/bot/exts/help_channels/_cog.py @@ -77,9 +77,7 @@ class HelpChannels(commands.Cog): # Caching the message object for the dynamic message. self.dynamic_message_cache = async_rediscache.RedisCache(namespace="Dynamic Message") - self.how_to_get_help: t.Optional[discord.TextChannel] = None - self.dynamic_message: t.Optional[discord.Message] = None - + self.dynamic_message: t.Optional[int] = None self.available_help_channels: t.Set[discord.TextChannel] = set() # Asyncio stuff @@ -292,9 +290,8 @@ class HelpChannels(commands.Cog): # This may confuse users. So would potentially long delays for the cog to become ready. self.close_command.enabled = True - # Acquiring and modifying the channel to dynamically update the available help channels message. - log.trace("Attempting to fetch dynamic message ID along with How-to-get-help channel ID.") - self.how_to_get_help = await self.dynamic_message_cache.get("How-to-get-help Channel ID") + # Acquiring the dynamic message ID, if it exists within the cache. + log.trace("Attempting to fetch How-to-get-help dynamic message ID.") self.dynamic_message = await self.dynamic_message_cache.get("How-to-get-help Dynamic Message ID") # Getting channels that need to be included in the dynamic message. @@ -503,25 +500,18 @@ class HelpChannels(commands.Cog): available=', '.join(c.mention for c in self.available_help_channels) or None ) - if self.how_to_get_help is None: - self.how_to_get_help = await channel_utils.try_get_channel(constants.Channels.how_to_get_help) - await self.dynamic_message_cache.set("How-to-get-help Channel ID", self.how_to_get_help.id) - - if self.dynamic_message is None: - last_message = await self.how_to_get_help.history(limit=1).find(lambda m: m.author == self.bot.user) - - if not last_message: - self.dynamic_message = await self.how_to_get_help.send(available_channels) - log.trace("A dynamic message was sent for later modification because one couldn't be found.") - else: - await last_message.edit(content=available_channels) - - await self.dynamic_message_cache.set("How-to-get-help Dynamic Message ID", self.dynamic_message.id) - - else: + if self.dynamic_message is not None: try: - await self.dynamic_message.edit(content=available_channels) + await self.bot.http.edit_message( + constants.Channels.how_to_get_help, self.dynamic_message, content=available_channels + ) + log.trace("Help channels have changed, dynamic message has been edited.") except discord.NotFound: - self.dynamic_message = await self.how_to_get_help.send(available_channels) - await self.dynamic_message_cache.set("How-to-get-help Dynamic Message ID", self.dynamic_message.id) - log.trace("Dynamic has been sent again since previous was removed during process of updating message.") + pass + else: + log.trace("No How-to-get-help dynamic message could be found in the Redis cache. Setting a new one.") + new_dynamic_message = await self.bot.http.send_message( + constants.Channels.how_to_get_help, available_channels + ) + self.dynamic_message = new_dynamic_message["id"] + await self.dynamic_message_cache.set("How-to-get-help Dynamic Message ID", self.dynamic_message) -- cgit v1.2.3 From 789689409cd437f77f27e89a1d8e4f8697f70872 Mon Sep 17 00:00:00 2001 From: xithrius Date: Mon, 8 Mar 2021 02:17:51 -0800 Subject: Moved cache, reworked logic so message sends on cog reload. --- bot/exts/help_channels/_caches.py | 4 ++++ bot/exts/help_channels/_cog.py | 21 ++++++++++----------- 2 files changed, 14 insertions(+), 11 deletions(-) diff --git a/bot/exts/help_channels/_caches.py b/bot/exts/help_channels/_caches.py index 4cea385b7..9986ddc09 100644 --- a/bot/exts/help_channels/_caches.py +++ b/bot/exts/help_channels/_caches.py @@ -17,3 +17,7 @@ question_messages = RedisCache(namespace="HelpChannels.question_messages") # activity and False being other activity. # RedisCache[discord.TextChannel.id, bool] unanswered = RedisCache(namespace="HelpChannels.unanswered") + +# This cache keeps track of the dynamic message ID for +# the continuously updated message in the #How-to-get-help channel. +dynamic_message = RedisCache(namespace="HelpChannels.dynamic_message") diff --git a/bot/exts/help_channels/_cog.py b/bot/exts/help_channels/_cog.py index 11e3aef59..0c524d526 100644 --- a/bot/exts/help_channels/_cog.py +++ b/bot/exts/help_channels/_cog.py @@ -74,9 +74,6 @@ class HelpChannels(commands.Cog): self.last_notification: t.Optional[datetime] = None - # Caching the message object for the dynamic message. - self.dynamic_message_cache = async_rediscache.RedisCache(namespace="Dynamic Message") - self.dynamic_message: t.Optional[int] = None self.available_help_channels: t.Set[discord.TextChannel] = set() @@ -292,7 +289,7 @@ class HelpChannels(commands.Cog): # Acquiring the dynamic message ID, if it exists within the cache. log.trace("Attempting to fetch How-to-get-help dynamic message ID.") - self.dynamic_message = await self.dynamic_message_cache.get("How-to-get-help Dynamic Message ID") + self.dynamic_message = await _caches.dynamic_message.get("message_id") # Getting channels that need to be included in the dynamic message. await self.update_available_help_channels() @@ -508,10 +505,12 @@ class HelpChannels(commands.Cog): log.trace("Help channels have changed, dynamic message has been edited.") except discord.NotFound: pass - else: - log.trace("No How-to-get-help dynamic message could be found in the Redis cache. Setting a new one.") - new_dynamic_message = await self.bot.http.send_message( - constants.Channels.how_to_get_help, available_channels - ) - self.dynamic_message = new_dynamic_message["id"] - await self.dynamic_message_cache.set("How-to-get-help Dynamic Message ID", self.dynamic_message) + else: + return + + log.trace("No How-to-get-help dynamic message could be found in the Redis cache. Setting a new one.") + new_dynamic_message = await self.bot.http.send_message( + constants.Channels.how_to_get_help, available_channels + ) + self.dynamic_message = new_dynamic_message["id"] + await _caches.dynamic_message.set("message_id", self.dynamic_message) -- cgit v1.2.3 From 9d783670a2c9fd9249d5e1df00522032dddb6f77 Mon Sep 17 00:00:00 2001 From: xithrius Date: Mon, 8 Mar 2021 02:19:02 -0800 Subject: Removed async_rediscache import. --- bot/exts/help_channels/_cog.py | 1 - 1 file changed, 1 deletion(-) diff --git a/bot/exts/help_channels/_cog.py b/bot/exts/help_channels/_cog.py index 0c524d526..9a33a6bb1 100644 --- a/bot/exts/help_channels/_cog.py +++ b/bot/exts/help_channels/_cog.py @@ -5,7 +5,6 @@ import typing as t from datetime import datetime, timezone from operator import attrgetter -import async_rediscache import discord import discord.abc from discord.ext import commands -- cgit v1.2.3 From fb74ec007410bfb6afb92d4170f0c6402561c79d Mon Sep 17 00:00:00 2001 From: xithrius Date: Fri, 12 Mar 2021 12:13:20 -0800 Subject: Cleared up messages in logs. --- bot/exts/help_channels/_cog.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bot/exts/help_channels/_cog.py b/bot/exts/help_channels/_cog.py index 9a33a6bb1..e70cfc71d 100644 --- a/bot/exts/help_channels/_cog.py +++ b/bot/exts/help_channels/_cog.py @@ -498,16 +498,16 @@ class HelpChannels(commands.Cog): if self.dynamic_message is not None: try: + log.trace("Help channels have changed, dynamic message has been edited.") await self.bot.http.edit_message( constants.Channels.how_to_get_help, self.dynamic_message, content=available_channels ) - log.trace("Help channels have changed, dynamic message has been edited.") except discord.NotFound: pass else: return - log.trace("No How-to-get-help dynamic message could be found in the Redis cache. Setting a new one.") + log.trace("Dynamic message could not be edited or found. Creating a new one.") new_dynamic_message = await self.bot.http.send_message( constants.Channels.how_to_get_help, available_channels ) -- cgit v1.2.3 From c242c373be2cc5f5d577ba18e5e213fc8aed22bf Mon Sep 17 00:00:00 2001 From: xithrius Date: Fri, 12 Mar 2021 12:16:17 -0800 Subject: First dynamic update moved to the init_available method. --- bot/exts/help_channels/_cog.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/bot/exts/help_channels/_cog.py b/bot/exts/help_channels/_cog.py index e70cfc71d..16f6b10bd 100644 --- a/bot/exts/help_channels/_cog.py +++ b/bot/exts/help_channels/_cog.py @@ -242,6 +242,10 @@ class HelpChannels(commands.Cog): for channel in channels[:abs(missing)]: await self.unclaim_channel(channel) + # Getting channels that need to be included in the dynamic message. + await self.update_available_help_channels() + log.trace("Dynamic available help message updated.") + async def init_categories(self) -> None: """Get the help category objects. Remove the cog if retrieval fails.""" log.trace("Getting the CategoryChannel objects for the help categories.") @@ -290,10 +294,6 @@ class HelpChannels(commands.Cog): log.trace("Attempting to fetch How-to-get-help dynamic message ID.") self.dynamic_message = await _caches.dynamic_message.get("message_id") - # Getting channels that need to be included in the dynamic message. - await self.update_available_help_channels() - log.trace("Dynamic available help message updated.") - await self.init_available() _stats.report_counts() -- cgit v1.2.3 From 2aa7e740d6a66e477895460ab51ac02c9b625ee1 Mon Sep 17 00:00:00 2001 From: Matteo Bertucci Date: Tue, 6 Apr 2021 11:25:13 +0200 Subject: Add a !tp get_review command to get the nomination text without posting it This can be used when an information should be added to the post, or someone wants to review the user. --- bot/exts/recruitment/talentpool/_cog.py | 13 +++++++++++ bot/exts/recruitment/talentpool/_review.py | 37 +++++++++++++++++++----------- 2 files changed, 37 insertions(+), 13 deletions(-) diff --git a/bot/exts/recruitment/talentpool/_cog.py b/bot/exts/recruitment/talentpool/_cog.py index fbe79382d..eeba1b187 100644 --- a/bot/exts/recruitment/talentpool/_cog.py +++ b/bot/exts/recruitment/talentpool/_cog.py @@ -1,8 +1,10 @@ import logging import textwrap from collections import ChainMap +from io import StringIO from typing import Union +import discord from discord import Color, Embed, Member, User from discord.ext.commands import Cog, Context, group, has_any_role @@ -332,6 +334,17 @@ class TalentPool(WatchChannel, Cog, name="Talentpool"): return await ctx.send(f"✅ The user with ID `{user_id}` was marked as reviewed.") + @nomination_group.command(aliases=('gr',)) + @has_any_role(*MODERATION_ROLES) + async def get_review(self, ctx: Context, user_id: int) -> None: + """Get the user's review as a markdown file.""" + review = StringIO((await self.reviewer.make_review(user_id))[0]) + if review: + file = discord.File(review, f"{user_id}_review.md") + await ctx.send(file=file) + else: + await ctx.send(f"There doesn't appear to be an active nomination for {user_id}") + @nomination_group.command(aliases=('review',)) @has_any_role(*MODERATION_ROLES) async def post_review(self, ctx: Context, user_id: int) -> None: diff --git a/bot/exts/recruitment/talentpool/_review.py b/bot/exts/recruitment/talentpool/_review.py index fb3461238..c46df4bcc 100644 --- a/bot/exts/recruitment/talentpool/_review.py +++ b/bot/exts/recruitment/talentpool/_review.py @@ -66,26 +66,40 @@ class Reviewer: self._review_scheduler.schedule_at(review_at, user_id, self.post_review(user_id, update_database=True)) async def post_review(self, user_id: int, update_database: bool) -> None: - """Format a generic review of a user and post it to the nomination voting channel.""" + """Format the review of a user and post it to the nomination voting channel.""" + review, seen_emoji = await self.make_review(user_id) + if not review: + return + + guild = self.bot.get_guild(Guild.id) + channel = guild.get_channel(Channels.nomination_voting) + log.trace(f"Posting the review of {user_id}") + message = (await self._bulk_send(channel, review))[-1] + if seen_emoji: + for reaction in (seen_emoji, "👍", "👎"): + await message.add_reaction(reaction) + + if update_database: + nomination = self._pool.watched_users[user_id] + await self.bot.api_client.patch(f"{self._pool.api_endpoint}/{nomination['id']}", json={"reviewed": True}) + + async def make_review(self, user_id: int) -> typing.Tuple[str, Optional[Emoji]]: + """Format a generic review of a user and return it with the seen emoji.""" + log.trace(f"Formatting the review of {user_id}") nomination = self._pool.watched_users[user_id] if not nomination: log.trace(f"There doesn't appear to be an active nomination for {user_id}") - return + return "", None guild = self.bot.get_guild(Guild.id) - channel = guild.get_channel(Channels.nomination_voting) member = guild.get_member(user_id) - if update_database: - await self.bot.api_client.patch(f"{self._pool.api_endpoint}/{nomination['id']}", json={"reviewed": True}) - if not member: - await channel.send( + return ( f"I tried to review the user with ID `{user_id}`, but they don't appear to be on the server 😔" - ) - return + ), None opening = f"<@&{Roles.moderators}> <@&{Roles.admins}>\n{member.mention} ({member}) for Helper!" @@ -104,10 +118,7 @@ class Reviewer: ) review = "\n\n".join(part for part in (opening, current_nominations, review_body, vote_request)) - - message = (await self._bulk_send(channel, review))[-1] - for reaction in (seen_emoji, "👍", "👎"): - await message.add_reaction(reaction) + return review, seen_emoji async def _construct_review_body(self, member: Member) -> str: """Formats the body of the nomination, with details of activity, infractions, and previous nominations.""" -- cgit v1.2.3 From 75af5eff5329cf015309f2664bd1af9eb4f2c95d Mon Sep 17 00:00:00 2001 From: Matteo Bertucci Date: Tue, 6 Apr 2021 14:48:59 +0200 Subject: Use emoji names in nomination body This caused unicode errors in Discord attachment previews. --- bot/exts/recruitment/talentpool/_review.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bot/exts/recruitment/talentpool/_review.py b/bot/exts/recruitment/talentpool/_review.py index c46df4bcc..e38b6bf19 100644 --- a/bot/exts/recruitment/talentpool/_review.py +++ b/bot/exts/recruitment/talentpool/_review.py @@ -114,7 +114,7 @@ class Reviewer: vote_request = ( "*Refer to their nomination and infraction histories for further details*.\n" f"*Please react {seen_emoji} if you've seen this post." - " Then react 👍 for approval, or 👎 for disapproval*." + " Then react :+1: for approval, or :-1: for disapproval*." ) review = "\n\n".join(part for part in (opening, current_nominations, review_body, vote_request)) -- cgit v1.2.3 From ae9afac95481a9bb5f3c96e2920ec372a8939cc8 Mon Sep 17 00:00:00 2001 From: Matteo Bertucci Date: Tue, 6 Apr 2021 14:51:21 +0200 Subject: Properly handle the lack of nomination of a user --- bot/exts/recruitment/talentpool/_cog.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bot/exts/recruitment/talentpool/_cog.py b/bot/exts/recruitment/talentpool/_cog.py index eeba1b187..a49543806 100644 --- a/bot/exts/recruitment/talentpool/_cog.py +++ b/bot/exts/recruitment/talentpool/_cog.py @@ -338,9 +338,9 @@ class TalentPool(WatchChannel, Cog, name="Talentpool"): @has_any_role(*MODERATION_ROLES) async def get_review(self, ctx: Context, user_id: int) -> None: """Get the user's review as a markdown file.""" - review = StringIO((await self.reviewer.make_review(user_id))[0]) + review = (await self.reviewer.make_review(user_id))[0] if review: - file = discord.File(review, f"{user_id}_review.md") + file = discord.File(StringIO(review), f"{user_id}_review.md") await ctx.send(file=file) else: await ctx.send(f"There doesn't appear to be an active nomination for {user_id}") -- cgit v1.2.3 From cb87d95cccd2ed491de0de05745e5952b521b484 Mon Sep 17 00:00:00 2001 From: Matteo Bertucci Date: Tue, 6 Apr 2021 14:57:54 +0200 Subject: Talentpool: loop style change Co-authored-by: ToxicKidz <78174417+ToxicKidz@users.noreply.github.com> --- bot/exts/recruitment/talentpool/_review.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bot/exts/recruitment/talentpool/_review.py b/bot/exts/recruitment/talentpool/_review.py index e38b6bf19..55b162cf0 100644 --- a/bot/exts/recruitment/talentpool/_review.py +++ b/bot/exts/recruitment/talentpool/_review.py @@ -117,7 +117,7 @@ class Reviewer: " Then react :+1: for approval, or :-1: for disapproval*." ) - review = "\n\n".join(part for part in (opening, current_nominations, review_body, vote_request)) + review = "\n\n".join((opening, current_nominations, review_body, vote_request)) return review, seen_emoji async def _construct_review_body(self, member: Member) -> str: -- cgit v1.2.3 From c5806d0a7e682303d80a10955df9ddd64fd2942a Mon Sep 17 00:00:00 2001 From: Xithrius Date: Thu, 8 Apr 2021 19:44:57 -0700 Subject: Added how_to_get_help channel constant. --- bot/constants.py | 1 + config-default.yml | 1 + 2 files changed, 2 insertions(+) diff --git a/bot/constants.py b/bot/constants.py index 547a94a0b..6d14bbb3a 100644 --- a/bot/constants.py +++ b/bot/constants.py @@ -412,6 +412,7 @@ class Channels(metaclass=YAMLGetter): python_general: int cooldown: int + how_to_get_help: int attachment_log: int message_log: int diff --git a/config-default.yml b/config-default.yml index 9b07d026d..8c6e18470 100644 --- a/config-default.yml +++ b/config-default.yml @@ -163,6 +163,7 @@ guild: # Python Help: Available cooldown: 720603994149486673 + how_to_get_help: 704250143020417084 # Topical discord_py: 343944376055103488 -- cgit v1.2.3 From e97c8cd0e737413fe6086899d0d7f7459ccadea1 Mon Sep 17 00:00:00 2001 From: Matteo Bertucci Date: Tue, 6 Apr 2021 15:59:43 +0200 Subject: Recruitment: Don't use emoji literals --- bot/exts/recruitment/talentpool/_cog.py | 6 +++--- bot/exts/recruitment/talentpool/_review.py | 12 ++++++------ 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/bot/exts/recruitment/talentpool/_cog.py b/bot/exts/recruitment/talentpool/_cog.py index a49543806..72604be51 100644 --- a/bot/exts/recruitment/talentpool/_cog.py +++ b/bot/exts/recruitment/talentpool/_cog.py @@ -10,7 +10,7 @@ from discord.ext.commands import Cog, Context, group, has_any_role from bot.api import ResponseCodeError from bot.bot import Bot -from bot.constants import Channels, Guild, MODERATION_ROLES, STAFF_ROLES, Webhooks +from bot.constants import Channels, Emojis, Guild, MODERATION_ROLES, STAFF_ROLES, Webhooks from bot.converters import FetchedMember from bot.exts.moderation.watchchannels._watchchannel import WatchChannel from bot.exts.recruitment.talentpool._review import Reviewer @@ -332,7 +332,7 @@ class TalentPool(WatchChannel, Cog, name="Talentpool"): """Mark a user's nomination as reviewed and cancel the review task.""" if not await self.reviewer.mark_reviewed(ctx, user_id): return - await ctx.send(f"✅ The user with ID `{user_id}` was marked as reviewed.") + await ctx.send(f"{Emojis.check_mark} The user with ID `{user_id}` was marked as reviewed.") @nomination_group.command(aliases=('gr',)) @has_any_role(*MODERATION_ROLES) @@ -353,7 +353,7 @@ class TalentPool(WatchChannel, Cog, name="Talentpool"): return await self.reviewer.post_review(user_id, update_database=False) - await ctx.message.add_reaction("✅") + await ctx.message.add_reaction(Emojis.check_mark) @Cog.listener() async def on_member_ban(self, guild: Guild, user: Union[User, Member]) -> None: diff --git a/bot/exts/recruitment/talentpool/_review.py b/bot/exts/recruitment/talentpool/_review.py index 55b162cf0..11aa3b62b 100644 --- a/bot/exts/recruitment/talentpool/_review.py +++ b/bot/exts/recruitment/talentpool/_review.py @@ -77,7 +77,7 @@ class Reviewer: log.trace(f"Posting the review of {user_id}") message = (await self._bulk_send(channel, review))[-1] if seen_emoji: - for reaction in (seen_emoji, "👍", "👎"): + for reaction in (seen_emoji, "\N{THUMBS UP SIGN}", "\N{THUMBS DOWN SIGN}"): await message.add_reaction(reaction) if update_database: @@ -98,7 +98,7 @@ class Reviewer: if not member: return ( - f"I tried to review the user with ID `{user_id}`, but they don't appear to be on the server 😔" + f"I tried to review the user with ID `{user_id}`, but they don't appear to be on the server :pensive:" ), None opening = f"<@&{Roles.moderators}> <@&{Roles.admins}>\n{member.mention} ({member}) for Helper!" @@ -267,10 +267,10 @@ class Reviewer: @staticmethod def _random_ducky(guild: Guild) -> Union[Emoji, str]: - """Picks a random ducky emoji to be used to mark the vote as seen. If no duckies found returns 👀.""" + """Picks a random ducky emoji to be used to mark the vote as seen. If no duckies found returns :eyes:.""" duckies = [emoji for emoji in guild.emojis if emoji.name.startswith("ducky")] if not duckies: - return "👀" + return ":eyes:" return random.choice(duckies) @staticmethod @@ -300,12 +300,12 @@ class Reviewer: await self._pool.fetch_user_cache() if user_id not in self._pool.watched_users: log.trace(f"Can't find a nominated user with id {user_id}") - await ctx.send(f"❌ Can't find a currently nominated user with id `{user_id}`") + await ctx.send(f":x: Can't find a currently nominated user with id `{user_id}`") return False nomination = self._pool.watched_users[user_id] if nomination["reviewed"]: - await ctx.send("❌ This nomination was already reviewed, but here's a cookie 🍪") + await ctx.send(":x: This nomination was already reviewed, but here's a cookie :cookie:") return False await self.bot.api_client.patch(f"{self._pool.api_endpoint}/{nomination['id']}", json={"reviewed": True}) -- cgit v1.2.3