diff options
| -rw-r--r-- | bot/seasons/valentines/be_my_valentine.py | 78 |
1 files changed, 46 insertions, 32 deletions
diff --git a/bot/seasons/valentines/be_my_valentine.py b/bot/seasons/valentines/be_my_valentine.py index 71df78f2..203c2e36 100644 --- a/bot/seasons/valentines/be_my_valentine.py +++ b/bot/seasons/valentines/be_my_valentine.py @@ -8,7 +8,7 @@ import discord from discord.ext import commands from discord.ext.commands.cooldowns import BucketType -from bot.constants import Colours, Lovefest +from bot.constants import Colours, Lovefest, Client log = logging.getLogger(__name__) @@ -19,7 +19,6 @@ class BeMyValentine: """ A cog that sends valentines to other users ! """ - id = Lovefest.role_id def __init__(self, bot): self.bot = bot @@ -35,15 +34,13 @@ class BeMyValentine: @commands.group(name="lovefest", invoke_without_command=True) async def lovefest_role(self, ctx): """ - By using this command, you can have yourself the lovefest role or remove it. + You can have yourself the lovefest role or remove it. The lovefest role makes you eligible to receive anonymous valentines from other users. - """ - message = """``` -You can have the lovefest role or get rid of it by using one of the commands shown below: -1) use the command \".lovefest sub\" to get the lovefest role. -2) use the command \".lovefest unsub\" to get rid of the lovefest role. - ```""" - await ctx.send(message) + + 1) use the command \".lovefest sub\" to get the lovefest role. + 2) use the command \".lovefest unsub\" to get rid of the lovefest role. + """ + await ctx.invoke(self.bot.get_command("help"), "lovefest") @lovefest_role.command(name="sub") async def add_role(self, ctx): @@ -81,26 +78,35 @@ You can have the lovefest role or get rid of it by using one of the commands sho (optional) example: .bemyvalentine (sends valentine as a poem or a compliment to a random user) - example: .bemyvalentine @Iceman#6508 p (sends a poem to Iceman) - example: .bemyvalentine @Iceman#6508 Hey I love you, wanna hang around ? (sends the custom message to Iceman) + example: .bemyvalentine Iceman#6508 p (sends a poem to Iceman) + example: .bemyvalentine Iceman Hey I love you, wanna hang around ? (sends the custom message to Iceman) + NOTE : AVOID TAGGING THE USER MOST OF THE TIMES.JUST TRIM THE '@' when using this command. """ - emoji_1, emoji_2 = self.random_emoji() - if ctx.guild is None: # This command should only be used in the server msg = "You are supposed to use this command in the server." return await ctx.send(msg) - channel = self.bot.get_channel(Lovefest.channel_id) + if user: + if Lovefest.role_id not in [role.id for role in user.roles]: + message = f"You cannot send a valentine to {user} as he/she does not have the lovefest role!" + return await ctx.send(message) if user == ctx.author: # Well a user cant valentine himself/herself. - await ctx.send('Come on dude, you cant send a valentine to yourself :expressionless:') + return await ctx.send('Come on dude, you cant send a valentine to yourself :expressionless:') + + emoji_1, emoji_2 = self.random_emoji() + Role = discord.utils.get(ctx.guild.roles, id=Lovefest.role_id) + channel = self.bot.get_channel(Lovefest.channel_id) - elif user is None: + if user is None: author = ctx.author - members = ctx.guild.members - user = self.random_user(author, members) + user = self.random_user(author, Role.members) + if user is None: + return await ctx.send("There are no users avilable to whome your valentine can be sent.") + else: + pass # just making sure that the random does not pick up the same user(ctx.author) if valentine_type is None: @@ -144,20 +150,32 @@ You can have the lovefest role or get rid of it by using one of the commands sho example : .bemyvalentine secret Iceman#6508 Hey I love you, wanna hang around ? (sends the custom message to Iceman in DM making you anonymous) """ - emoji_1, emoji_2 = self.random_emoji() if ctx.guild is not None: # This command is only DM specific msg = "You are not supposed to use this command in the server, DM the command to the bot." return await ctx.send(msg) + if user: + if Lovefest.role_id not in [role.id for role in user.roles]: + message = f"You cannot send a valentine to {user} as he/she does not have the lovefest role!" + return await ctx.send(message) + if user == ctx.author: # Well a user cant valentine himself/herself. - await ctx.send('Come on dude, you cant send a valentine to yourself :expressionless:') + return await ctx.send('Come on dude, you cant send a valentine to yourself :expressionless:') + + guild = self.bot.get_guild(id=Client.guild) + emoji_1, emoji_2 = self.random_emoji() + Role = discord.utils.get(guild.roles, id=Lovefest.role_id) + print(Role) if user is None: author = ctx.author - members = ctx.guild.members - user = self.random_user(author, members) + user = self.random_user(author, Role.members) + if user is None: + return await ctx.send("There are no users avilable to whome your valentine can be sent.") + else: + pass # just making sure that the random does not pick up the same user(ctx.author) if valentine_type is None: @@ -186,15 +204,11 @@ You can have the lovefest role or get rid of it by using one of the commands sho @staticmethod def random_user(author, members): - USER_LOVEFEST = [] - for member in members: - for role in member.roles: - if role.id == Lovefest.role_id: - USER_LOVEFEST.append(member) - - USER_LOVEFEST.remove(author) - user = random.choice(USER_LOVEFEST) - USER_LOVEFEST.append(author) + members.remove(author) + if members.__len__() == 0: + user = None + else: + user = random.choice(members) return user @staticmethod |