我正在开发一个 Discord 机器人,它在某种程度上可以工作,但每隔几分钟就会崩溃。它给了我一个错误,比如
任务已销毁但正在等待处理
我发现了我必须摆脱我的信息response = request.get(url)
并将其替换为async with aiohttp.get(url) as response
.
现在当我拥有这样的东西时,它给了我
从未等待过协程“可用性””
为了解决这个问题,我想我必须使用某种循环,但是我到底需要如何做到这一点?
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")
然而,经过一些研究并根据我查看的代码,我对此并不是百分百确定这个堆栈溢出线程 https://stackoverflow.com/questions/42652147/using-find-all-in-bs4-to-get-text-as-a-list这可能是因为您没有等待response.text。
尝试在response.text前面添加await关键字:
soup = BeautifulSoup(await response.text(), "lxml")
Also 不要使用 time.sleep()当使用discord.py时,改为使用await asyncio.sleep(seconds)
您需要尽可能避免阻塞,因为这可能会导致您的机器人冻结。您可以在以下位置阅读更多相关信息Discord.py 文档的“常见问题解答”部分 https://discordpy.readthedocs.io/en/latest/faq.html#what-does-blocking-mean.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)