异步-等待Discord.py功能问题

时间:2018-09-26 18:38:10

标签: python bots discord discord.py

我想让Discord机器人执行某项操作,等待1分钟,然后执行某项操作,之后,循环(while循环)将继续执行相同操作,直到停止程序为止。

这是我的代码:

import discord
from discord.ext import commands
import requests
from bs4 import BeautifulSoup
import time

TOKEN = "MyToken!"
bot = commands.Bot(command_prefix='!')

@bot.event
async def on_ready():
    print("Started!")

@bot.command(pass_context=True)
async def start_bot():
    isAlreadyLive = False
    print("Let's get it started! :D")
    url = 'someLink'
    while True:
        soup = BeautifulSoup(requests.get(url).content, 'html.parser')
        varName = soup.find('span', {'class': 'firstClass secondClass'})
        if varName != None and boolVarName == False:
            await bot.say("SAY THIS! :D ")
            boolVarName = True
        if varName == None:
            await bot.say("SAY THIS #2! :D")
            boolVarName = False
        await time.sleep(60)
        print("Refreshed")

bot.run(TOKEN)

更清楚地说:我希望它检查varName(来自于抓取)是否不等于None(这意味着它已经抓取了一些东西),并检查boolVar是否为True,因为如果为true,则不会。如果页面上仍然有内容,请每分钟发送相同的消息。它每60秒刮一次页面,所以我可以说它正在寻找页面上的一些“更改”。 好吧,我启动了机器人程序,它显示了消息...但是随后出现此错误:

Ignoring exception in command start_bot
Traceback (most recent call last):
  File "C:\Users\WiMAX\PycharmProjects\KockarBot\venv\lib\site-packages\discord\ext\commands\core.py", line 50, in wrapped
    ret = yield from coro(*args, **kwargs)
  File "LiveBot.py", line 27, in start_bot
    await time.sleep(60)
TypeError: object NoneType can't be used in 'await' expression

提前谢谢!

2 个答案:

答案 0 :(得分:0)

要使用异步方式睡眠,请执行以下操作:

await asyncio.sleep(60)

答案 1 :(得分:0)

如果您正在谈论制作循环,那么不和谐对此有帮助。 discord.py有一个名为task的内置模块,其中包括循环。您可以使用

导入
from discord.ext import tasks

然后将其放在命令定义之前

@tasks.loop(seconds=some_float)

然后您可以将其放入on_ready函数中以开始循环

function_name.start()