From 73dfe3abf3e63ae40069320075db9d7d5a75684c Mon Sep 17 00:00:00 2001 From: victormylle Date: Sat, 7 Nov 2020 23:49:16 +0100 Subject: [PATCH] Created timer class --- cogs/playerlink.py | 41 +++++++++++++---------------------------- 1 file changed, 13 insertions(+), 28 deletions(-) diff --git a/cogs/playerlink.py b/cogs/playerlink.py index 2927fae..143d30b 100755 --- a/cogs/playerlink.py +++ b/cogs/playerlink.py @@ -5,6 +5,7 @@ import string import socket import asyncio import threading +from functions.timer import Timer from data import constants from data.DatabaseConnection import * @@ -97,13 +98,13 @@ class PlayerLink(commands.Cog): embed.colour = discord.Colour.orange() return embed - async def update_timer(timer, message): + + async def send_timer_messages(timer, message): while (not timer.ended): - await asyncio.sleep(1) - timer.update() # maybe create a task from this because this takes some time -> timer not accurate if ((timer.minutes < 2 and timer.seconds == 59) or (timer.minutes == 0 and timer.seconds == 0)): asyncio.create_task(message.edit(embed=create_embed(ctx.author, arg, timer))) + await asyncio.sleep(1) try: @@ -111,14 +112,15 @@ class PlayerLink(commands.Cog): uuid = get_player_uuid(arg) send_chat(ctx.author.name, arg, code) #message_send_time = - timer = Timer() + timer = Timer(2, 0) + timer.start() + message = await ctx.send(embed=create_embed(ctx.author, arg, timer)) - # Start timer in background - task = asyncio.create_task(update_timer(timer, message)) + task = asyncio.create_task(send_timer_messages(timer, message)) # Wait for the code response - msg = await self.client.wait_for('message', check=check) + msg = await self.client.wait_for('message', check=check, timeout=120) if msg.content == code: @@ -126,7 +128,7 @@ class PlayerLink(commands.Cog): try: dbLinker.linkPlayer(uuid, authorid) await ctx.author.add_roles(self.get_linked_role()) - timer.ended = True + timer.stop() await message.edit(embed=create_embed(ctx.author, arg, timer, success=True)) except SQLInsertError: await message.edit(embed=create_embed(ctx.author, arg, timer)) @@ -134,14 +136,13 @@ class PlayerLink(commands.Cog): dbLinker.closeconnections() else: # this stops the timer task - task.cancel() - timer.ended = True + timer.stop() await message.edit(embed=create_embed(ctx.author, arg, timer, WrongCodeError())) except PlayerError: await ctx.send("Player '" + arg + "' not found") - #except: - # await ctx.send("Something went wrong") + except: + await ctx.send("Something went wrong") @commands.command(name="Unlink") async def unlink(self, ctx, arg): @@ -161,21 +162,5 @@ class PlayerLink(commands.Cog): dbLinker.closeconnections() -class Timer(): - def __init__(self): - self.minutes = 2 - self.seconds = 0 - self.ended = False - - def update(self): - if (self.minutes > 0 and self.seconds == 0): - self.minutes -= 1 - self.seconds = 59 - elif (self.seconds > 0): - self.seconds -= 1 - if (self.minutes == 0 and self.seconds == 0): - self.ended = True - - def setup(client): client.add_cog(PlayerLink(client))