Python Discord 机器人 - 协程从未被等待

2024-02-06

我正在开发一个 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(使用前将#替换为@)

Python Discord 机器人 - 协程从未被等待 的相关文章

  • Python有条件求解时滞微分方程

    我在用dde23 of pydelay包来求解延迟微分方程 我的问题 如何有条件地编写方程 例如目标方程有两个选项 when x gt 1 dx dt 0 25 x t tau 1 0 pow x t tau 10 0 0 1 x othe
  • Kivy - 文本换行工作错误

    我正在尝试在 Kivy 1 8 0 应用程序中换行文本 当没有太多文字时 一切正常 但如果文本很长并且窗口不是很大 它只是剪切文本 这是示例代码 vbox BoxLayout orientation vertical size hint y
  • 更新 Sqlalchemy 中的多个列

    我有一个在 Flask 上运行的应用程序 并使用 sqlalchemy 与数据库交互 我想用用户指定的值更新表的列 我正在使用的查询是 def update table value1 value2 value3 query update T
  • 查找模块中显式定义的函数 (python)

    好的 我知道您可以使用 dir 方法列出模块中的所有内容 但是有什么方法可以仅查看该模块中定义的函数吗 例如 假设我的模块如下所示 from datetime import date datetime def test return Thi
  • 更改 Altair 中的构面标题位置?

    如何将方面标题 在本例中为年份 移动到每个图的上方 默认值似乎位于图表的一侧 这可以轻易改变吗 import altair as alt from vega datasets import data df data seattle weat
  • numpy 使用 datetime64 进行数字化

    我似乎无法让 numpy digitize 与 datetime64 一起使用 date bins np array np datetime64 datetime datetime 2014 n 1 s for n in range 1 1
  • 使用 scipy curve_fit 拟合噪声指数的建议?

    我正在尝试拟合通常按以下方式建模的数据 def fit eq x a b c d e return a 1 np exp x b c np exp x d e x np arange 0 100 0 001 y fit eq x 1 1 1
  • 在Python中计算内存碎片

    我有一个长时间运行的进程 不断分配和释放对象 尽管正在释放对象 但 RSS 内存使用量会随着时间的推移而增加 如何计算发生了多少碎片 一种可能性是计算 RSS sum of allocations 并将其作为指标 即便如此 我该如何计算分母
  • Python多处理错误“ForkAwareLocal”对象没有属性“连接”

    下面是我的代码 我面临着多处理问题 我看到这个问题之前已经被问过 我已经尝试过这些解决方案 但它似乎不起作用 有人可以帮我吗 from multiprocessing import Pool Manager Class X def init
  • Python 惰性迭代器

    我试图了解迭代器表达式如何以及何时被求值 以下似乎是一个懒惰的表达 g i for i in range 1000 if i 3 i 2 然而 这个在构造上失败了 g line strip for line in open xxx r if
  • 使用 numpy 在 python 中执行最大方差旋转

    我正在研究矩阵的主成分分析 我已经找到了如下所示的组件矩阵 A np array 0 73465832 0 24819766 0 32045055 0 3728976 0 58628043 0 63433607 0 72617152 0 5
  • Python 类型安全吗?

    根据维基百科 https en wikipedia org wiki Type system Type safety and memory safety 如果一种语言不允许违反类型系统规则的操作或转换 计算机科学家就认为该语言是 类型安全的
  • 无法在 python 3.8 上将带有 webapp 的 python 部署到 azure

    我正在尝试使用部署一个测试项目Flask使用以下方法将框架迁移到 Azure 云中Azure CLI https learn microsoft com en us azure app service containers quicksta
  • 如何将回溯/sys.exc_info() 值保存在变量中?

    我想将错误名称和回溯详细信息保存到变量中 这是我的尝试 import sys try try print x except Exception ex raise NameError except Exception er print 0 s
  • Pandas - 合并数据框以将所有值保留在左侧,如果“左侧没有键”,则从右侧“插入”值,否则“更新”左侧现有的“键”

    我有两个数据框 df1 和 df2 np random seed 0 df1 pd DataFrame key A B C D id 2 23 234 2345 2021 np random randn 4 df2 pd DataFrame
  • 更改 Python Cmd 模块处理自动完成的方式

    我有一个 Cmd 控制台 设置为自动完成 Magic the Gathering 收藏管理系统的卡牌名称 它使用文本参数在数据库中查询卡片 并使用结果自动完成 建议卡片 然而 这些卡片名称有多个单词 Cmd 会从last到行尾的空间 例如
  • Python:高精度time.sleep

    你能告诉我如何在 Win32 和 Linux 上的 Python 2 6 中获得高精度睡眠函数吗 您可以在中使用浮点数sleep http docs python org library time html time sleep 该参数可以
  • 如何在单元测试中使用 JSON 发送请求

    我的 Flask 应用程序中有在请求中使用 JSON 的代码 我可以像这样获取 JSON 对象 Request request get json 这一直工作得很好 但是我正在尝试使用 Python 的 unittest 模块创建单元测试 但
  • 如何为所有用户安装 Anaconda python?

    Anaconda python 发行版 https store continuum io cshop anaconda 非常方便地部署科学计算环境 SCE 并根据需要切换python版本 默认情况下 安装会将 python 定位到 anac
  • 缓存 Flask-登录 user_loader

    我有这个 login manager user loader def load user id None return User query get id 在我引入 Flask Principal 之前它运行得很好 identity loa

随机推荐