Bot discord mute auto et calcul du temps passé

dokkax Messages postés 1 Date d'inscription mardi 19 novembre 2024 Statut Membre Dernière intervention 19 novembre 2024 - Modifié le 22 nov. 2024 à 14:40
mamiemando Messages postés 33446 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 20 décembre 2024 - 22 nov. 2024 à 14:48

Bonjour,

S'il vous plaît aidez-moi à créer un code pour un bot discord qui va :

  1. rendre muet tout le monde dans le channel vocal (id du channel vocal : 1307451490901950506 )
  2. poster tous les jours à minuit le temps passé ces dernières 24h dans le channel vocal  de chaque utilisateur (en mode top 3) sur un channel écrit (id du chanel :1307254551199613013) 


Windows / Chrome 131.0.0.0

A voir également:

1 réponse

mamiemando Messages postés 33446 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 20 décembre 2024 7 812
22 nov. 2024 à 14:48

Bonjour,

Il faut voir au niveau de l'API discord si tu peux rendre muet un utilisateur et si tu peux effectivement récupérer les temps de paroles de chacun.

Sous ces conditions, tu devrais utiliser la classe datetime.timedelta pour stocker les temps écoulés, puis utiliser la fonction sorted pour faire ton classement.

#!/usr/bin/env python3

from datetime import timedelta
from pprint import pprint
from operator import itemgetter

measurements = [
    ("aaa", timedelta(hours=3)),
    ("bbb", timedelta(hours=3, minutes=2)),
    ("ccc", timedelta(hours=2)),
    ("ddd", timedelta(minutes=1)),
    ("eee", timedelta(days=2, hours=1)),
]
pprint(measurements)

measurements = sorted(
    measurements,
    key=itemgetter(1),  # Les durées sont à la position 1 de chaque tuple
    reverse=True        # Tri par durée décroissante
)

n = 3
print(f"Top {n}:")
for i in range(n):
    print(measurements[i][0]) # Affichage des noms

Résultat :

[('aaa', datetime.timedelta(seconds=10800)),
 ('bbb', datetime.timedelta(seconds=10920)),
 ('ccc', datetime.timedelta(seconds=7200)),
 ('ddd', datetime.timedelta(seconds=60)),
 ('eee', datetime.timedelta(days=2, seconds=3600))]
Top 3:
eee
bbb
aaa

Bonne chance

0