Python discord bot - 从未等待过coroutine

时间:2017-12-23 16:43:20

标签: python python-3.x python-asyncio discord discord.py

好吧,我正在使用Python3处理Discord僵尸程序,它在某种程度上起作用,但它每隔几分钟就会崩溃。它给了我一个错误,例如"任务被摧毁但它正在等待"。现在,我搜索了这个问题,并发现了我必须摆脱我的响应= request.get(url)的信息,并将其替换为" async与aiohttp.get(url)作为响应"。现在,当我这样的时候,它给了我" coroutine'可用性'从未等待过"。为了解决这个问题,我想我必须使用某种循环,但我对异步的东西相当新,所以我没有任何线索。

import discord
from discord.ext.commands import Bot
from discord.ext import commands
import asyncio
import time

import requests
from bs4 import BeautifulSoup
import smtplib
import aiohttp
import async_timeout


async def availability():
    url = "some url"
    headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36'}
    async with aiohttp.ClientSession().get(url, headers=headers) as response:
        soup = BeautifulSoup(response.text, "lxml")
        print(soup)
        return soup


Client = discord.Client()
bot_prefix= "?"
client = commands.Bot(command_prefix=bot_prefix)


availible = True


@client.event
async def on_ready():
    print("Bot Online!")
    print("Name: {}".format(client.user.name))
    print("ID: {}".format(client.user.id))

    bessie = 0
    waittime = 0

    while True:
        time.sleep(1)
        if wachttijd == 0:
            if ("0 available") not in str(availability()):
                bessie = bessie + 1
                if bessie == 3:
                    await client.send_message(discord.Object(id='some id'),
                                              '<@&some channel>some text!')
                    print("available")
                    bessie = 0
                    waittime = 10
            else:
                bessie = 0
        else:
            wachttijd = wachttijd - 1



client.run("token")

有人可以帮我这个吗?

1 个答案:

答案 0 :(得分:0)

我不是百分之百确定这一点,但经过一些研究后,根据我在this stackoverflow thread上查看的代码,可能是因为你没有等待回复。文本。

尝试在response.text前面添加await关键字:

soup = BeautifulSoup(await response.text(), "lxml")

使用discord.py时不要使用time.sleep(),而是使用await asyncio.sleep(seconds)

您可能希望尽可能避免阻塞,因为它可能会导致僵尸程序冻结。您可以在"FAQ" section of the discord.py docs找到更多相关信息。