2017-08-14 2 views
1

Je fais un bot de discordance en python et j'ai essayé de l'obtenir pour faire un ping sur un site web et ensuite dire si c'est en haut ou en bas. Voici mon code:Ping sur un site web avec des robots discordants en python

import logging 
logging.basicConfig(level=logging.INFO) 
import discord 
from discord.ext import commands 
import os 

website = "mywebsite.com" 
des = "a website status bot" 
prefix = "." 

client = commands.Bot(description=des, command_prefix=prefix) 

async def my_background_task(): 
    await client.wait_until_ready() 
    channel = discord.Object(id='my server id went here') 
    response = 0 
    while not client.is_closed: 
     print("loop") #debugger 
     await asyncio.sleep(10) 
     global response 
     pr = response 
     response = os.system("ping -c 1 " + website) 
     if response != 0: 
      response = 1 
     if pr != response: 
      if response == 0: 
       await client.send_message(channel, 'mywebsite is up!') 
      else: 
       await client.send_message(channel, 'mywebsite is down!') 
client.run("discord-bot-code-went-here") 

Pour une raison quelconque, il ne court pas la boucle. Des idées?

Merci.

Sidenote: Le bot a fonctionné quand j'ai essayé de faire une commande de ping-pong avec lui donc ce n'est pas la connectivité à la discorde aussi aucune erreur n'est apparue lors de l'exécution du programme.

Répondre

2

Vous n'indiquez pas la boucle pour commencer à exécuter cette tâche.

dans une fonction on_ready, vous devez ajouter:

client.loop.create_task(my_background_task()) 

Cela devrait commencer la tâche de fond, et comme un bonus supplémentaire pour le démarrage dans on_ready, vous ne devez plus attendre prêt.

Example code

+0

Merci @squaswin, mais il ne semble toujours pas courir la boucle ... J'ai réussi à obtenir mon code de travail en le plaçant dans un déclencheur on_ready mais je l'aime toujours travailler comme tâche de fond. Une idée: ce code crée une boucle mais dit-il au client de l'exécuter? –

+0

Pourriez-vous nous montrer votre code édité dans votre question? – xNinjaKittyx

+0

En créant la tâche, vous demandez à asyncio d'exécuter le code quand cela est possible. Comme le code est exécuté par asyncio en tant que tâche en arrière-plan, tant que le client est connecté et que la boucle while ne lance pas une exception non interceptée, le client l'exécute. – squaswin