Bot discord en python - message auto personnalisés

messages (variables selon l'heure) automatiques à une heure précise,

a marqué ce sujet comme résolu.

Bien le bonjour, ravi d’arriver sur ce site,

je ne suis qu’un modeste débutant et je me suis lancé dans la programmation d’un bot discord via python (j’édite sur sublimetext)

Voici mon "souci" :

je voudrais qu’à une heure spécifique que je choisie, il poste 1 message de manière automatique contenant certaines infos à savoir : le jour, le mois et de l’année actuelles (des infos qui changent donc) sous forme de chiffres

Par exemple que tous les jours à 18h, il envoie "Bonjour, on est le 11102020" (si on est le 11 octobre) le lendemain, il envoie à 18h : "Bonjour, on est le 12112020" (si on est le 12 octobre) et ça automatiquement et de manière systématique

pour aboutir à cela je pense qu’il y a 3 gros points à régler : 1- faire intervenir un objet qui permet de lire la date du jour en stockant les variables "n° du jour de l’année", "n° du mois", "n° de l’année" 2- pouvoir faire dire au bot " message textuel — JMA ——" 3- pouvoir faire dire au bot le message à l’heure souhaitée

mon début : `import discord from discord.ext import commands

bot = commands.Bot (command_prefix = "!", description = "Bot test")

@bot.event async def on_ready(): print("Ready!")

from time import strftime strftime("%Y%m%d")

import time import datetime

@bot.command() async def temps(ctx): mois = 12 message = f’strftime("%Y%m%d")' await ctx.send("..?")`

je me suis un peu documenté et je pense que pour l’étape 1, j’aurais sûrement besoin de "tm_year", "tm_mon", "tm_mday" pour les variables "changeantes" cependant apparemment il faut aussi installer l’objet time pour avoir ça, enfin j’ai pas tout compris…

pour l’étape 3 j’ai vu aussi des pistes avec des "insert" mais je suis aussi un peu.. perdu aussi, ce bot est prévu d’être hebergé en ligne pour être tout le temps connecté sur discord (ça importe peut-être pour la 3- )

en vous remerciant, bonne fin de week-end

+0 -0

Salut,

Sur ton projet j’identifie 3 points mais pas exactement les mêmes que toi. Dans un premier temps tu peux faire une fonction qui construit ton message. C’est à dire avoir quelque chose du genre:

def make_sentence():
    return "Hello, now we are {:04}/{:02}/{:02}".format(
        datetime.now().year,
        datetime.now().month,
        datetime.now().day
    )

Ensuite il te faut envoyer ce message. Dans un premier temps tu peux l’envoyer quand un utilisateur de discord utilise une commande.

Quand cela fonctionne, tu peux, de manière peu optimiser, avoir une boucle infinie qui quand l’heure est celle choisie envoyer un message. Ça serait quelque chose comme ça:

while True:
    if current_time == choosen_time:
        # Do things here
+1 -1

Salut,

Il y a deux mauvaises idées dans le poste de @pyoroalb. La première est de formater la date en appelant plusieurs fois datetime.now(), ce qui peut mener à afficher une date fausse si deux appels ne sont pas sur le même jour si on décide d’appeler la fonction autour de minuit. Quelque chose comme

"Now is {:%Y/%m/%d}".format(datetime.now())

évite ce problème de race condition et utilise un format plus explicite.

Le deuxième problème est de faire une boucle infinie qui va bloquer le processus et rendre impossible toute autre action de la part du bot. Une solution plus propre est par exemple celle présentée ici qui produit un thread responsable de surveiller l’heure sans s’accaparer tout le CPU ni être bloquant.

+1 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte