déplacement méthode en rapport avec le temps dans un fichier a part
This commit is contained in:
parent
4440372dbb
commit
acc8da8be3
5 changed files with 135 additions and 126 deletions
|
@ -3,7 +3,8 @@ import re
|
||||||
import os
|
import os
|
||||||
from discord.ext import commands
|
from discord.ext import commands
|
||||||
customTimezone = os.environ['TIMEZONE']
|
customTimezone = os.environ['TIMEZONE']
|
||||||
from utils.core import goodTimezone, userOrNick
|
from utils.core import userOrNick
|
||||||
|
from utils.time import goodTimezone
|
||||||
|
|
||||||
def setup(client):
|
def setup(client):
|
||||||
client.add_cog(Citation(client))
|
client.add_cog(Citation(client))
|
||||||
|
|
|
@ -6,7 +6,8 @@ from random import choice
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from pytz import timezone
|
from pytz import timezone
|
||||||
customTimezone = os.environ['TIMEZONE']
|
customTimezone = os.environ['TIMEZONE']
|
||||||
from utils.core import goodTimezone, userOrNick
|
from utils.core import userOrNick
|
||||||
|
from utils.time import goodTimezone
|
||||||
from cogs.internet import Internet
|
from cogs.internet import Internet
|
||||||
|
|
||||||
def setup(client):
|
def setup(client):
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
import discord
|
import discord
|
||||||
import time
|
|
||||||
import os
|
import os
|
||||||
import re
|
import re
|
||||||
from discord.ext import commands, tasks
|
from discord.ext import commands, tasks
|
||||||
|
@ -8,9 +7,9 @@ from datetime import datetime
|
||||||
from pytz import timezone
|
from pytz import timezone
|
||||||
from discord_slash import cog_ext
|
from discord_slash import cog_ext
|
||||||
from utils.reminder import Reminder
|
from utils.reminder import Reminder
|
||||||
from utils.core import map_list_among_us, get_age, getURLsInString, getMentionInString, cleanCodeStringWithMentionAndURLs
|
from utils.core import map_list_among_us, getURLsInString, getMentionInString, cleanCodeStringWithMentionAndURLs
|
||||||
from utils.core import cleanUser, userOrNick, ageLayout, stringTempsVersSecondes, timedeltaToString, intToTimestamp, nowTimestampUTC
|
from utils.core import cleanUser, userOrNick
|
||||||
from utils.core import timestampFR
|
from utils.time import stringTempsVersSecondes, nowUTC, intToDatetime, timedeltaToString, timestampScreen, getAge, ageLayout, nowCustom
|
||||||
|
|
||||||
def setup(client):
|
def setup(client):
|
||||||
client.add_cog(Utils(client))
|
client.add_cog(Utils(client))
|
||||||
|
@ -36,22 +35,22 @@ class Utils(commands.Cog):
|
||||||
arg = None
|
arg = None
|
||||||
|
|
||||||
if arg == 'help':
|
if arg == 'help':
|
||||||
return await ctx.send(embed = discord.Embed(color = discord.Colour.random(), description = ":hourglass: correspond au temps entre deux battements de cœurs\n\n:stopwatch: correspond au temps que met le client a calculer le ping\n\n:heartbeat: correspond au temps que met le client a réagir au messages"))
|
return await ctx.send(embed = discord.Embed(color = discord.Colour.random(), description = ":hourglass: correspond au temps entre deux battements de cœurs\n\n:heartbeat: correspond au temps que met le client a réagir au messages (0 est normal lors de l'utilisation d'une commande slash)\n\n:stopwatch: correspond au temps que met le client a calculer le ping"))
|
||||||
else:
|
else:
|
||||||
now = int(round(time.time() * 1000))
|
now = int(round(nowCustom() * 1000))
|
||||||
if fromSlash != True:
|
if fromSlash != True:
|
||||||
ping = now - int(round(ctx.message.created_at.timestamp() * 1000))
|
ping = now - int(round(ctx.message.created_at.timestamp() * 1000))
|
||||||
else:
|
else:
|
||||||
ping = now - int(round(ctx.slash_created_at * 1000))
|
ping = now - int(round(ctx.slash_created_at * 1000))
|
||||||
embed = discord.Embed(description = 'Pinging...')
|
embed = discord.Embed(description = 'Pinging...')
|
||||||
message = await ctx.send(embed = embed)
|
message = await ctx.send(embed = embed)
|
||||||
ping2 = int(round(time.time() * 1000)) - now
|
ping2 = int(round(nowCustom() * 1000)) - now
|
||||||
await message.edit(embed = discord.Embed(color = discord.Colour.random(), description = f':hourglass: {round(self.client.latency * 1000)} ms\n\n:stopwatch: {ping2} ms\n\n:heartbeat: {ping} ms'))
|
await message.edit(embed = discord.Embed(color = discord.Colour.random(), description = f':hourglass: {round(self.client.latency * 1000)} ms\n\n:heartbeat: {ping} ms\n\n:stopwatch: {ping2} ms'))
|
||||||
if fromSlash != True:
|
if fromSlash != True:
|
||||||
await ctx.message.add_reaction(emoji = '✅')
|
await ctx.message.add_reaction(emoji = '✅')
|
||||||
@cog_ext.cog_slash(name="ping", description = "Affiche mon ping, mettre 'help' en argument pour connaître à quoi correspond les données.")
|
@cog_ext.cog_slash(name="ping", description = "Affiche mon ping, mettre 'help' en argument pour connaître à quoi correspond les données.")
|
||||||
async def __ping(self, ctx, arg = None):
|
async def __ping(self, ctx, arg = None):
|
||||||
ctx.slash_created_at = int(datetime.now(timezone(self.customTimezone)).timestamp())
|
ctx.slash_created_at = nowCustom()
|
||||||
if arg == None:
|
if arg == None:
|
||||||
return await self._ping(ctx, True)
|
return await self._ping(ctx, True)
|
||||||
else:
|
else:
|
||||||
|
@ -227,7 +226,7 @@ class Utils(commands.Cog):
|
||||||
await ctx.message.delete()
|
await ctx.message.delete()
|
||||||
embed = discord.Embed(description = text, color = discord.Colour.random())
|
embed = discord.Embed(description = text, color = discord.Colour.random())
|
||||||
embed.set_author(name = f"Mémo noté depuis {ctx.guild.name}", icon_url = ctx.author.avatar_url)
|
embed.set_author(name = f"Mémo noté depuis {ctx.guild.name}", icon_url = ctx.author.avatar_url)
|
||||||
embed.set_footer(text = f'📝 le {datetime.now(timezone(self.customTimezone)).strftime("%d/%m/%Y à %H:%M:%S")}')
|
embed.set_footer(text = f'📝 le {timestampScreen(intToDatetime(nowUTC()))}')
|
||||||
await ctx.author.send(embed = embed)
|
await ctx.author.send(embed = embed)
|
||||||
return await ctx.send("Tu viens de recevoir ton mémo !", delete_after = 5)
|
return await ctx.send("Tu viens de recevoir ton mémo !", delete_after = 5)
|
||||||
@_memo.error
|
@_memo.error
|
||||||
|
@ -368,14 +367,14 @@ class Utils(commands.Cog):
|
||||||
value = str(user[0].created_at.astimezone(timezone(self.customTimezone)))[:-13].replace('-', '/').split()
|
value = str(user[0].created_at.astimezone(timezone(self.customTimezone)))[:-13].replace('-', '/').split()
|
||||||
embed.add_field(name = "Compte créé le", value = f"{value[0][8:]}/{value[0][5:-3]}/{value[0][:4]} à {value[1]}")
|
embed.add_field(name = "Compte créé le", value = f"{value[0][8:]}/{value[0][5:-3]}/{value[0][:4]} à {value[1]}")
|
||||||
|
|
||||||
embed.add_field(name = "Âge du compte", value = ageLayout(get_age(user[0].created_at)))
|
embed.add_field(name = "Âge du compte", value = ageLayout(getAge(user[0].created_at)))
|
||||||
|
|
||||||
embed.add_field(name = "Mention", value = user[0].mention)
|
embed.add_field(name = "Mention", value = user[0].mention)
|
||||||
|
|
||||||
value = str(user[0].joined_at.astimezone(timezone(self.customTimezone)))[:-13].replace('-', '/').split()
|
value = str(user[0].joined_at.astimezone(timezone(self.customTimezone)))[:-13].replace('-', '/').split()
|
||||||
embed.add_field(name = "Serveur rejoint le", value = f"{value[0][8:]}/{value[0][5:-3]}/{value[0][:4]} à {value[1]}")
|
embed.add_field(name = "Serveur rejoint le", value = f"{value[0][8:]}/{value[0][5:-3]}/{value[0][:4]} à {value[1]}")
|
||||||
|
|
||||||
embed.add_field(name = "Est sur le serveur depuis", value = ageLayout(get_age(user[0].joined_at)))
|
embed.add_field(name = "Est sur le serveur depuis", value = ageLayout(getAge(user[0].joined_at)))
|
||||||
if fromSlash != True:
|
if fromSlash != True:
|
||||||
await ctx.message.add_reaction(emoji = '✅')
|
await ctx.message.add_reaction(emoji = '✅')
|
||||||
return await ctx.send(embed = embed)
|
return await ctx.send(embed = embed)
|
||||||
|
@ -510,7 +509,7 @@ class Utils(commands.Cog):
|
||||||
elif seconds > 7776000: # 90 * 60 * 60 * 24
|
elif seconds > 7776000: # 90 * 60 * 60 * 24
|
||||||
embed.add_field(name="Attention", value="Tu as spécifié une durée trop longue, la durée maximum étant de 90 jours.")
|
embed.add_field(name="Attention", value="Tu as spécifié une durée trop longue, la durée maximum étant de 90 jours.")
|
||||||
else:
|
else:
|
||||||
now = int(nowTimestampUTC())
|
now = int(nowUTC())
|
||||||
messageID = None
|
messageID = None
|
||||||
if fromSlash != True:
|
if fromSlash != True:
|
||||||
messageID = ctx.message.id
|
messageID = ctx.message.id
|
||||||
|
@ -526,7 +525,7 @@ class Utils(commands.Cog):
|
||||||
|
|
||||||
@tasks.loop(minutes = 1)
|
@tasks.loop(minutes = 1)
|
||||||
async def _reminderLoop(self):
|
async def _reminderLoop(self):
|
||||||
expiration = Reminder().recuperationExpiration(int(nowTimestampUTC()))
|
expiration = Reminder().recuperationExpiration(int(nowUTC()))
|
||||||
for expired in expiration:
|
for expired in expiration:
|
||||||
message = f"<@{expired[4]}>"
|
message = f"<@{expired[4]}>"
|
||||||
reminder = expired[2]
|
reminder = expired[2]
|
||||||
|
@ -539,8 +538,8 @@ class Utils(commands.Cog):
|
||||||
if sourceMessage != None:
|
if sourceMessage != None:
|
||||||
sourceMessage = await channel.fetch_message(sourceMessage)
|
sourceMessage = await channel.fetch_message(sourceMessage)
|
||||||
await sourceMessage.add_reaction(emoji = '✅')
|
await sourceMessage.add_reaction(emoji = '✅')
|
||||||
finalEmbed = discord.Embed(description = cleanCodeStringWithMentionAndURLs(reminder), timestamp = intToTimestamp(expired[3]), color = discord.Colour.random())
|
finalEmbed = discord.Embed(description = cleanCodeStringWithMentionAndURLs(reminder), timestamp = intToDatetime(expired[3]), color = discord.Colour.random())
|
||||||
finalEmbed.set_footer(text=f"Message d'il y a {timedeltaToString(int(nowTimestampUTC()) - expired[3])}")
|
finalEmbed.set_footer(text=f"Message d'il y a {timedeltaToString(int(nowUTC()) - expired[3])}")
|
||||||
|
|
||||||
links = ""
|
links = ""
|
||||||
findedURLs = getURLsInString(reminder)
|
findedURLs = getURLsInString(reminder)
|
||||||
|
@ -577,12 +576,12 @@ class Utils(commands.Cog):
|
||||||
texte = reminder[0]
|
texte = reminder[0]
|
||||||
if len(texte) > 1024:
|
if len(texte) > 1024:
|
||||||
texte = f"{texte[:1021]}..."
|
texte = f"{texte[:1021]}..."
|
||||||
expiration = reminder[2] - int(nowTimestampUTC())
|
expiration = reminder[2] - int(nowUTC())
|
||||||
if expiration > 0:
|
if expiration > 0:
|
||||||
expiration = f"Expire dans {timedeltaToString(expiration)} +1m de retard max."
|
expiration = f"Expire dans {timedeltaToString(expiration)} +1m de retard max."
|
||||||
else:
|
else:
|
||||||
expiration = f"A déjà expiré."
|
expiration = f"A déjà expiré."
|
||||||
embed.add_field(value = texte, name = f"Fais le {timestampFR(intToTimestamp(reminder[1]))}\n{expiration}", inline = False)
|
embed.add_field(value = texte, name = f"Fais le {timestampScreen(intToDatetime(reminder[1]))}\n{expiration}", inline = False)
|
||||||
else:
|
else:
|
||||||
embed.add_field(name = "\u200b", value = "Vous n'avez aucun rappel en attente !")
|
embed.add_field(name = "\u200b", value = "Vous n'avez aucun rappel en attente !")
|
||||||
embed.set_footer(text = "Les rappels qui ont déjà expirés vont apparaître dans quelques instants.")
|
embed.set_footer(text = "Les rappels qui ont déjà expirés vont apparaître dans quelques instants.")
|
||||||
|
|
|
@ -1,19 +1,7 @@
|
||||||
import re
|
import re
|
||||||
import json
|
import json
|
||||||
import requests
|
import requests
|
||||||
import os
|
|
||||||
from time import time
|
from time import time
|
||||||
from pytz import timezone
|
|
||||||
from datetime import datetime, timedelta
|
|
||||||
|
|
||||||
myTimezone = os.environ['TIMEZONE']
|
|
||||||
|
|
||||||
def goodTimezone(date, tz, type = 0):
|
|
||||||
"""renvoie une date en fonction d'un timezone"""
|
|
||||||
if type == 0:
|
|
||||||
return str(timezone(tz).fromutc(date))[:-13].replace('-', '/').split()
|
|
||||||
elif type == 1:
|
|
||||||
return str(timezone(tz).fromutc(date))[:-13].replace('-', '/').replace(' ', ' à ')
|
|
||||||
|
|
||||||
def map_list_among_us(map):
|
def map_list_among_us(map):
|
||||||
"""Sélecteur de map pour la commande amongus"""
|
"""Sélecteur de map pour la commande amongus"""
|
||||||
|
@ -26,41 +14,6 @@ def map_list_among_us(map):
|
||||||
return maps["skeld"] + maps["mira"] + maps["polus"] + maps["airship"]
|
return maps["skeld"] + maps["mira"] + maps["polus"] + maps["airship"]
|
||||||
return maps[map]
|
return maps[map]
|
||||||
|
|
||||||
def get_age(date):
|
|
||||||
"""Recupère un age précisément à la seconde près"""
|
|
||||||
joursRestants = datetime.now() - date
|
|
||||||
years = joursRestants.total_seconds() / (365.242 * 24 * 3600)
|
|
||||||
months = (years - int(years)) * 12
|
|
||||||
days = (months - int(months)) * (365.242 / 12)
|
|
||||||
hours = (days - int(days)) * 24
|
|
||||||
minutes = (hours - int(hours)) * 60
|
|
||||||
seconds = (minutes - int(minutes)) * 60
|
|
||||||
return (int(years), int(months), int(days), int(hours), int(minutes), int(seconds))
|
|
||||||
|
|
||||||
def ageLayout(tuple):
|
|
||||||
"""avec la méthode 'get_age', permet de mettre en forme un âge"""
|
|
||||||
time = {}
|
|
||||||
time[0], time[1], time[2], time[3], time[4], time[5] = "an", "mois", "jour", "heure", "minute", "seconde"
|
|
||||||
for i in range(len(tuple)):
|
|
||||||
if tuple[i] > 1 and i != 1:
|
|
||||||
time[i] = time[i] + "s"
|
|
||||||
message = ""
|
|
||||||
if tuple[5] > 0: # pour les secondes
|
|
||||||
affichage = [5] # on affiche que : seconde
|
|
||||||
if tuple[4] > 0:
|
|
||||||
affichage = [4, 5] # on affiche : minute + seconde
|
|
||||||
if tuple[3] > 0:
|
|
||||||
affichage = [3, 4, 5] # on affiche : heure + minute + seconde
|
|
||||||
if tuple[2] > 0:
|
|
||||||
affichage = [2, 3, 4] # on affiche : jour + heure + minute
|
|
||||||
if tuple[1] > 0:
|
|
||||||
affichage = [1, 2, 3] # on affiche : mois + jour + heure
|
|
||||||
if tuple[0] > 0:
|
|
||||||
affichage = [0, 1, 3] # on affiche : an + mois + heure
|
|
||||||
for i in affichage:
|
|
||||||
message = message + f", {tuple[i]} {time[i]}"
|
|
||||||
return message[2:]
|
|
||||||
|
|
||||||
def userOrNick(user):
|
def userOrNick(user):
|
||||||
"""Affiche le pseudo et/ou le surnom"""
|
"""Affiche le pseudo et/ou le surnom"""
|
||||||
if user == None:
|
if user == None:
|
||||||
|
@ -154,62 +107,3 @@ def ligneFormatage(ligne):
|
||||||
for balises in liste_balise:
|
for balises in liste_balise:
|
||||||
ligne = ligne.replace(balises[0], balises[1])
|
ligne = ligne.replace(balises[0], balises[1])
|
||||||
return ligne
|
return ligne
|
||||||
|
|
||||||
def stringTempsVersSecondes(time):
|
|
||||||
conversionTemps = {
|
|
||||||
"86400": ["j", "d"],
|
|
||||||
"3600": ["h"],
|
|
||||||
"60": ["m"],
|
|
||||||
"1": ["s", ""]
|
|
||||||
}
|
|
||||||
|
|
||||||
valeursMultiplicateur = ""
|
|
||||||
for i in conversionTemps.values():
|
|
||||||
for j in i:
|
|
||||||
valeursMultiplicateur += f"{j}|"
|
|
||||||
match = re.findall(f'([0-9]+)({valeursMultiplicateur[:-1]})?', time)
|
|
||||||
|
|
||||||
if not match:
|
|
||||||
return "Veuillez entrer un temps valide."
|
|
||||||
|
|
||||||
remindertime = 0
|
|
||||||
for i in match:
|
|
||||||
for tempsEnSeconde, nomCommun in conversionTemps.items():
|
|
||||||
if i[1] in nomCommun:
|
|
||||||
remindertime += int(tempsEnSeconde) * int(i[0])
|
|
||||||
|
|
||||||
return remindertime
|
|
||||||
|
|
||||||
def nowTimestampCustom():
|
|
||||||
return datetime.now(timezone(myTimezone)).timestamp()
|
|
||||||
|
|
||||||
def UTCTimestampToCustomTimestamp(timestamp):
|
|
||||||
return timezone(myTimezone).fromutc(timestamp)
|
|
||||||
|
|
||||||
def nowTimestampUTC():
|
|
||||||
return datetime.utcnow().timestamp()
|
|
||||||
|
|
||||||
def intToTimestamp(int):
|
|
||||||
return datetime.fromtimestamp(int)
|
|
||||||
|
|
||||||
def timedeltaToString(time):
|
|
||||||
age = str(timedelta(seconds = time)).replace('days, ', 'jours, :').split(':')
|
|
||||||
if len(age) == 4:
|
|
||||||
a = [1, 1, 1, 1] # a pour affichage
|
|
||||||
if len(age) == 3:
|
|
||||||
a = [0, 1, 1, 1]
|
|
||||||
age.insert(0, None)
|
|
||||||
for i in range(1, 4):
|
|
||||||
if int(age[i]) == 0:
|
|
||||||
a[i] = 0
|
|
||||||
age[0] = age[0] if a[0] == 1 else ''
|
|
||||||
age[1] = f"{age[1]}h " if a[1] == 1 else ''
|
|
||||||
age[2] = f"{age[2]}m " if a[2] == 1 else ''
|
|
||||||
age[3] = f"{age[3]}s" if a[3] == 1 else ''
|
|
||||||
return ''.join(age)
|
|
||||||
|
|
||||||
def timestampFR(timestamp):
|
|
||||||
date_edit = str(UTCTimestampToCustomTimestamp(timestamp)).replace('-', '/').split(' ')
|
|
||||||
date = date_edit[0]
|
|
||||||
heure = date_edit[1].split('+')[0]
|
|
||||||
return f"{date[8:]}/{date[5:-3]}/{date[:4]} à {heure}"
|
|
||||||
|
|
114
src/utils/time.py
Normal file
114
src/utils/time.py
Normal file
|
@ -0,0 +1,114 @@
|
||||||
|
from os import environ
|
||||||
|
from pytz import timezone
|
||||||
|
from datetime import datetime, timedelta
|
||||||
|
from re import findall
|
||||||
|
|
||||||
|
myTimezone = environ['TIMEZONE']
|
||||||
|
|
||||||
|
def stringTempsVersSecondes(time):
|
||||||
|
"""Convertis une durée rentrée par un utilisateur en string vers des secondes en int"""
|
||||||
|
conversionTemps = {
|
||||||
|
"86400": ["j", "d"],
|
||||||
|
"3600": ["h"],
|
||||||
|
"60": ["m"],
|
||||||
|
"1": ["s", ""]
|
||||||
|
}
|
||||||
|
|
||||||
|
valeursMultiplicateur = ""
|
||||||
|
for i in conversionTemps.values():
|
||||||
|
for j in i:
|
||||||
|
valeursMultiplicateur += f"{j}|"
|
||||||
|
match = findall(f'([0-9]+)({valeursMultiplicateur[:-1]})?', time)
|
||||||
|
|
||||||
|
if not match:
|
||||||
|
return "Veuillez entrer un temps valide."
|
||||||
|
|
||||||
|
remindertime = 0
|
||||||
|
for i in match:
|
||||||
|
for tempsEnSeconde, nomCommun in conversionTemps.items():
|
||||||
|
if i[1] in nomCommun:
|
||||||
|
remindertime += int(tempsEnSeconde) * int(i[0])
|
||||||
|
|
||||||
|
return remindertime
|
||||||
|
|
||||||
|
def nowCustom():
|
||||||
|
"""Heure de maintenant avec fuseau horaire local en float"""
|
||||||
|
return datetime.now(timezone(myTimezone)).timestamp()
|
||||||
|
|
||||||
|
def nowUTC():
|
||||||
|
"""Heure de maintenant en UTC en float"""
|
||||||
|
return datetime.utcnow().timestamp()
|
||||||
|
|
||||||
|
def UTCDatetimeToCustomDatetime(datetime):
|
||||||
|
"""Conversion d'une timestamp UTC en timestamp local en datetime"""
|
||||||
|
return timezone(myTimezone).fromutc(datetime)
|
||||||
|
|
||||||
|
def intToDatetime(intOrFloat):
|
||||||
|
"""Convertis un int ou float en Datetime"""
|
||||||
|
return datetime.fromtimestamp(intOrFloat)
|
||||||
|
|
||||||
|
def timestampScreen(timestamp):
|
||||||
|
"""Affichage d'une timestamp"""
|
||||||
|
date_edit = str(UTCDatetimeToCustomDatetime(timestamp)).replace('-', '/').split(' ')
|
||||||
|
date = date_edit[0]
|
||||||
|
heure = date_edit[1].split('+')[0]
|
||||||
|
return f"{date[8:]}/{date[5:-3]}/{date[:4]} à {heure.split('.')[0]}"
|
||||||
|
|
||||||
|
def timedeltaToString(time):
|
||||||
|
"""Différence entre une heure en seconde et maintenant"""
|
||||||
|
age = str(timedelta(seconds = time)).replace('days, ', 'jours, :').split(':')
|
||||||
|
if len(age) == 4:
|
||||||
|
a = [1, 1, 1, 1] # a pour affichage
|
||||||
|
if len(age) == 3:
|
||||||
|
a = [0, 1, 1, 1]
|
||||||
|
age.insert(0, None)
|
||||||
|
for i in range(1, 4):
|
||||||
|
if int(age[i]) == 0:
|
||||||
|
a[i] = 0
|
||||||
|
age[0] = age[0] if a[0] == 1 else ''
|
||||||
|
age[1] = f"{age[1]}h " if a[1] == 1 else ''
|
||||||
|
age[2] = f"{age[2]}m " if a[2] == 1 else ''
|
||||||
|
age[3] = f"{age[3]}s" if a[3] == 1 else ''
|
||||||
|
return ''.join(age)
|
||||||
|
|
||||||
|
def getAge(date):
|
||||||
|
"""Recupère un age précisément à la seconde près"""
|
||||||
|
joursRestants = datetime.now() - date
|
||||||
|
years = joursRestants.total_seconds() / (365.242 * 24 * 3600)
|
||||||
|
months = (years - int(years)) * 12
|
||||||
|
days = (months - int(months)) * (365.242 / 12)
|
||||||
|
hours = (days - int(days)) * 24
|
||||||
|
minutes = (hours - int(hours)) * 60
|
||||||
|
seconds = (minutes - int(minutes)) * 60
|
||||||
|
return (int(years), int(months), int(days), int(hours), int(minutes), int(seconds))
|
||||||
|
|
||||||
|
def ageLayout(tuple):
|
||||||
|
"""avec la méthode 'getAge', permet de mettre en forme un âge"""
|
||||||
|
time = {}
|
||||||
|
time[0], time[1], time[2], time[3], time[4], time[5] = "an", "mois", "jour", "heure", "minute", "seconde"
|
||||||
|
for i in range(len(tuple)):
|
||||||
|
if tuple[i] > 1 and i != 1:
|
||||||
|
time[i] = time[i] + "s"
|
||||||
|
message = ""
|
||||||
|
if tuple[5] > 0: # pour les secondes
|
||||||
|
affichage = [5] # on affiche que : seconde
|
||||||
|
if tuple[4] > 0:
|
||||||
|
affichage = [4, 5] # on affiche : minute + seconde
|
||||||
|
if tuple[3] > 0:
|
||||||
|
affichage = [3, 4, 5] # on affiche : heure + minute + seconde
|
||||||
|
if tuple[2] > 0:
|
||||||
|
affichage = [2, 3, 4] # on affiche : jour + heure + minute
|
||||||
|
if tuple[1] > 0:
|
||||||
|
affichage = [1, 2, 3] # on affiche : mois + jour + heure
|
||||||
|
if tuple[0] > 0:
|
||||||
|
affichage = [0, 1, 3] # on affiche : an + mois + heure
|
||||||
|
for i in affichage:
|
||||||
|
message = message + f", {tuple[i]} {time[i]}"
|
||||||
|
return message[2:]
|
||||||
|
|
||||||
|
def goodTimezone(date, tz, type = 0):
|
||||||
|
"""Renvoie une date en fonction d'un timezone"""
|
||||||
|
if type == 0:
|
||||||
|
return str(timezone(tz).fromutc(date))[:-13].replace('-', '/').split()
|
||||||
|
elif type == 1:
|
||||||
|
return str(timezone(tz).fromutc(date))[:-13].replace('-', '/').replace(' ', ' à ')
|
Reference in a new issue