从未等待协程 discord.py

Posted

技术标签:

【中文标题】从未等待协程 discord.py【英文标题】:coroutine was never awaited discord.py 【发布时间】:2021-11-08 09:56:10 【问题描述】:

嗨,我的函数 check_thunes() 出现问题,它引发了一个错误,协程从未等待

check_thunes() 用于检查玩家是否输入了正确的值,如果没有则发送消息通知玩家。我需要稍后将其应用于其他游戏。我使功能异步能够发送消息。 这是我的代码:

import discord
import time
from random import randrange,choices
import os
from replit import db
from keep_alive import keep_alive   


token = os.environ['token']
client = discord.Client()

@client.event
async def on_ready():
    print("le bot est prêt")

@client.event
async def check_thunes(mise,joueur):
  if joueur in db.keys(): #trouve la thune du joueur dans la  db
      thune=int(db[joueur])
  else:
    db[joueur]="1000"
    thune=int(db[joueur])
    reste=str(thune-mise)
    db[joueur]=reste

  if mise<=0:
    await message.channel.send("Vous ne pouvez pas miser 0 crédit")
    return erreur 

  if thune<=0:
    await message.channel.send("Vous n'avez plus d'thune, mais voici un coup de pouce de 1k")
    db[joueur]=str(1000)
    return

  if mise>thune:
    await message.channel.send("Vous n'avez pas assez d'thune")
    return

  reste=str(thune-mise)
  db[joueur]=reste
  return reste,thune

@client.event
async def on_message(message):

    msg=message.content
    if msg.startswith("!roulette") :
      
      #le message doir se présenter sous la forme
      # !roulette nb(0,50) mise(1,thune)

      gain=0
      thune=0
      reste=0
      nombre=""
      mise=""
      joueur=str(message.author.name)
      nb_g=int(randrange(51))
      erreur=0

      for i in range(10, 12): #trouve le nombre choisit
        nombre+=msg[i]
      nombre=int(nombre)

      for i in range(12,len(msg)): #trouve la mise
        mise+=msg[i]
      mise=int(mise)

      if joueur in db.keys(): #trouve la thune du joueur dans la  db
        thune=int(db[joueur])
      else:
        db[joueur]="1000"
        thune=int(db[joueur])
        reste=str(thune-mise)
        db[joueur]=reste

      #controleur des valeurs choisies
      if nombre>50:
        await message.channel.send("Le nombre choisit doit être entre 0 et 50")
        return
      
      check_thunes(mise, joueur)

      #calcul des gains
      if nombre==nb_g : #regza le premier gagnant du bot
        gain=mise*2

      elif (nombre%2==0 and nb_g%2==0) or (nombre%2==1 and nb_g%2==1 ) :
        gain=round(mise*1.25)
      else :
        gain=0

      if int(reste)+int(gain)>=0:
        db[joueur]=str(int(reste)+int(gain))
      elif int(reste)+int(gain)<0:
        db[joueur]=str(0)
        await message.channel.send("Vous n'avez plus d'thune")
        return

      if gain-mise>=0 :
        await message.channel.send(str("Vous aviez choisit "+str(nombre)+" et la roulette a donnée "+str(nb_g)))
        await message.channel.send(str("Vous avez gagné "+str(gain-mise)))
        await message.channel.send(str("Il vous reste "+str(int(reste)+gain)))
        return
      
      else:
        await message.channel.send(str("Vous aviez choisit "+str(nombre)+" et la roulette a donnée "+str(nb_g)))
        await message.channel.send(str("Vous avez perdu "+str(-(gain-mise))))
        await message.channel.send(str("Il vous reste "+str(int(reste)+gain)))
        return

你能帮帮我吗

【问题讨论】:

这个错误是不言自明的,它是一个协程,你应该await它... 对不起,我是异步函数的新手,所以我不知道如何解决这个问题 简单——只需在调用之前添加await关键字:await check_thunes(mise, joueur) 【参考方案1】:

您将函数定义为coroutine,如下所示:

async def myFunction():
    ...

所以,如果你想调用它,你必须await它,像这样:

await myFunction()

在您的情况下,您只需在调用check_thunes 之前添加await,如建议的Łukasz Kwieciński:

await check_thunes(mise, joueur)

【讨论】:

以上是关于从未等待协程 discord.py的主要内容,如果未能解决你的问题,请参考以下文章

RuntimeWarning:协程“Messageable.send”从未等待 python.py

使用 python 线程时出现协程错误,RuntimeWarning: coroutine 'time_messege' 从未等待

Tornado websocket 客户端:如何异步 on_message? (从未等待协程)

Unity里做等待只能用协程吗

深潜Koltin协程:Job 和等待子协程

未解决的参考:等待。 Kotlin 协程