【问题标题】:asyncio Discord bot session timeout on Quart web appQuart Web 应用程序上的 asyncio Discord 机器人会话超时
【发布时间】:2021-02-02 10:05:47
【问题描述】:

我正在尝试实现与 Quart 上运行的网络应用的不和谐机器人连接。 我尝试使用here 发布的解决方案之一,它可以工作一段时间,但大约 24 小时后,应用程序中断返回 asyncio.exceptions.TimeoutError

     data = await state.http.send_message(channel.id, content, tts=tts, embed=embed,
   File "/path/to/my/venv/lib/python3.9/site-packages/discord/http.py", line 185, in request
     async with self.__session.request(method, url, **kwargs) as r:
   File "/path/to/my/venv/lib/python3.9/site-packages/aiohttp/client.py", line 1117, in __aenter__
     self._resp = await self._coro
   File "/path/to/my/venv/lib/python3.9/site-packages/aiohttp/client.py", line 619, in _request
     break
   File "/path/to/my/venv/lib/python3.9/site-packages/aiohttp/helpers.py", line 656, in __exit__
     raise asyncio.TimeoutError from None
 asyncio.exceptions.TimeoutError

相关代码:

import discord
import asyncio
from quart import Quart, request, Response

app = Quart(__name__)
client = discord.Client()

@app.before_serving
async def before_serving():
    loop = asyncio.get_event_loop()
    await client.login(os.getenv('TOKEN'))
    loop.create_task(client.connect())

@app.route('/webhook', methods=['POST'])
async def webhook():
    ...
    await channel.send(content, embed=embed)
    ...

我怎样才能让客户端循环存活超过一天? 有没有办法防止客户端会话断开连接,或者我应该定期重新连接它?

【问题讨论】:

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


    【解决方案1】:

    我咳出了 asyncio.TimeoutError 并设法重新启动了会话:

    async def discord_post(channel, message, embed):
        try:
            await channel.send(message, embed=embed)
        except asyncio.TimeoutError:
            await connect_client()
            await channel.send(message, embed=embed)
        
    @app.before_serving
    async def connect_client():
        loop = asyncio.get_event_loop()
        await client.login(os.getenv('DISCORD_TOKEN'))
        loop.create_task(client.connect())
    
    @app.route('/webhook', methods=['POST'])
    async def webhook():
        ...
        await discord_post(channel, text, embed)
        ...
    

    但是处理重启需要将近 300 秒,之后所有请求都会立即处理,即使代码现在正确执行,nginx 也会继续返回 499,但我想这完全是另一个问题

    【讨论】:

      猜你喜欢
      • 2020-12-03
      • 1970-01-01
      • 2019-06-23
      • 1970-01-01
      • 2011-09-23
      • 1970-01-01
      • 1970-01-01
      • 2020-04-16
      • 2022-08-22
      相关资源
      最近更新 更多