Я работал над ботом Discord, который извлекает информацию из API статистики Ubisoft Rainbow Six Siege. Я новичок в кодировании, и я знаю, что это немного сложно, но для получения статистики я использую некоторый пример кода, который я нашел в документации API :
@types.coroutine
def run():
auth = api.Auth("my_email", "my_password")
player = yield from auth.get_player(username, api.Platforms.UPLAY)
operator = yield from player.get_operator(oprtr)
print(operator.kills)
global result
result = (operator.kills)
asyncio.get_event_loop().run_until_complete(run())
print (result)
Я разместил это внутри командной функции, которую я создал:
@client.command()
async def wins(ctx, username, oprtr):
print (username, oprtr)
, которая вместе дает приведенный ниже код, который я аннотировал, чтобы показать, как l oop не заканчивается. Сам по себе (без нахождения внутри команды) @ types.coroutine работает нормально, только когда он находится внутри @ client.command (), l oop не заканчивается.
@client.command()
async def wins(ctx, username, oprtr):
print (username, oprtr)
@types.coroutine
def run():
auth = api.Auth("my_email", "my_password")
player = yield from auth.get_player(username, api.Platforms.UPLAY)
operator = yield from player.get_operator(oprtr)
print(operator.kills) #this value prints, so the function definitely works.
global result
result = (operator.kills)
asyncio.get_event_loop().run_until_complete(run()) #this is the loop which seems to never end,
#and blocks anything from progressing
print (result) #these two outputs do not send, which tells me that everything is being
await ctx.send("Hello") #blocked by the loop
Как я уже сказал, я довольно новый и симпатичный кодировщик sh, так что я ценю любую помощь, это беспокоило меня весь день! Если вам нужна дополнительная информация, я сделаю все возможное, чтобы дать вам ее.