Faire une discorde bot changement de l'état de la lecture toutes les 10 secondes
Je suis en train de faire l'état pour un test de la discorde bot change entre deux messages, toutes les dix secondes. J'ai besoin du reste du script à exécuter pendant que le message d'état de changements, mais une erreur cesse d'apparaître à chaque fois que j'essaie de le faire fonctionner. Il y a de thread dans mon script, mais je ne suis pas entièrement sûr de savoir comment l'utiliser dans ce cas.
@test_bot.event
async def on_ready():
print('Logged in as')
print(test_bot.user.name)
print(test_bot.user.id)
print('------')
await change_playing()
@test_bot.event
async def change_playing():
threading.Timer(10, change_playing).start()
await test_bot.change_presence(game=discord.Game(name='Currently on ' + str(len(test_bot.servers)) +
' servers'))
threading.Timer(10, change_playing).start()
await test_bot.change_presence(game=discord.Game(name='Say test.help'))
Le message d'erreur:
C:\Python\Python36-32\lib\threading.py:1182: RuntimeWarning: coroutine 'change_playing' was never awaited
self.function(*self.args, **self.kwargs)
- Veuillez modifier la question pour inclure le message d'erreur réelle.
- Édité, merci pour cette remarque.
Vous devez vous connecter pour publier un commentaire.
Threading et asyncio ne pas jouer bien ensemble malheureusement. Vous avez besoin de sauter à travers les cerceaux pour attendre coroutines à l'intérieur de threads. La solution la plus simple est de tout simplement ne pas utiliser le threading.
Ce que vous essayez de faire est d'attendre une durée, puis exécutez une coroutine. Cela peut être fait avec une tâche d'arrière-plan (exemple)
Vous ne pouvez pas utiliser le temps.sleep() comme ceci permettra de bloquer l'exécution de la bot. asyncio.sleep() est bien un coroutine comme tout le reste et, comme telle, est non bloquant.
Enfin, la
@client.event
décorateur doit être utilisé uniquement sur les fonctions du bot reconnaît que les événements. Comme on_ready et on_message.Voir ceci:
Discord.py livré avec un construit en tâche d'arrière-plan de la fonctionnalité,
discord.py la version 1.1.0 introduit
de la discorde.ext.tâches
, qui est conçu pour rendre les tâches de fond comme celui que vous décrivez plus facile, ainsi que le traitement de la potentiellement compliqué logique de se reconnecter à la discorde si il y a un problème de connexion.Voici un exemple de votre tâche à l'aide de
tasks
: