22
33import logging
44import re
5+ from enum import auto , Enum
56from typing import TYPE_CHECKING , override
67
78import discord
5859)
5960
6061
62+ class MakeMemberStatus (Enum ):
63+ """An Enum representing the possible statuses of a make member attempt."""
64+
65+ SUCCESS = auto ()
66+ ERROR = auto ()
67+ INFO = auto ()
68+
69+
6170class MakeMemberBaseCog (TeXBotBaseCog ):
6271 """Base cog class for make member interactions."""
6372
6473 async def perform_make_member (
6574 self , user : discord .User | discord .Member , raw_group_member_id : str
66- ) -> tuple [bool , str ]:
75+ ) -> tuple [MakeMemberStatus , str ]:
6776 """Perform the actions to make a user a member."""
6877 member_role : discord .Role = await self .bot .member_role
6978 discord_member : discord .Member = await self .bot .get_main_guild_member (user )
@@ -73,16 +82,16 @@ async def perform_make_member(
7382 )
7483
7584 if not re .fullmatch (r"\A\d{7}\Z" , raw_group_member_id ):
76- return False , INVALID_GROUP_MEMBER_ID_MESSAGE
85+ return MakeMemberStatus . ERROR , INVALID_GROUP_MEMBER_ID_MESSAGE
7786
7887 try :
7988 group_member_id : int = int (raw_group_member_id )
8089 except ValueError :
81- return False , INVALID_GROUP_MEMBER_ID_MESSAGE
90+ return MakeMemberStatus . ERROR , INVALID_GROUP_MEMBER_ID_MESSAGE
8291
8392 if member_role in discord_member .roles :
8493 return (
85- False ,
94+ MakeMemberStatus . INFO ,
8695 ":information_source: No changes made. "
8796 "You're already a member - why are you trying this again? "
8897 ":information_source:" ,
@@ -94,15 +103,15 @@ async def perform_make_member(
94103 )
95104 ).aexists ():
96105 return (
97- False ,
106+ MakeMemberStatus . INFO ,
98107 ":information_source: This student ID has already been used. "
99108 "Please contact a committee member if you think this is a mistake."
100109 " :information_source:" ,
101110 )
102111
103112 if not await is_id_a_community_group_member (member_id = group_member_id ):
104113 return (
105- False ,
114+ MakeMemberStatus . INFO ,
106115 f"You must be a member of { self .bot .group_full_name } "
107116 "to use this command.\n "
108117 f"The provided { _GROUP_MEMBER_ID_ARGUMENT_NAME } must match "
@@ -155,7 +164,7 @@ async def perform_make_member(
155164 reason = f"{ discord_member } used TeX-Bot to become a member." ,
156165 )
157166
158- return True , ":information_source: Successfully made you a member!"
167+ return MakeMemberStatus . SUCCESS , ":information_source: Successfully made you a member!"
159168
160169
161170class MakeMemberCommandCog (MakeMemberBaseCog ):
@@ -214,7 +223,7 @@ async def make_member(
214223 user = ctx .user , raw_group_member_id = raw_group_member_id
215224 )
216225
217- if not status :
226+ if status == MakeMemberStatus . ERROR :
218227 await self .command_send_error (ctx = ctx , message = message )
219228 return
220229
0 commit comments