Я пытаюсь интегрировать базовый веб-сервер aiohttp в Cog (с использованием переписывания discord-py). Я использую следующий код для Cog:
from aiohttp import web
import discord
from discord.ext import commands
class Youtube():
def __init__(self, bot):
self.bot = bot
async def webserver(self):
async def handler(request):
return web.Response(text="Hello, world")
app = web.Application()
app.router.add_get('/', handler)
runner = web.AppRunner(app)
await runner.setup()
site = web.TCPSite(runner, '192.168.1.111', 8999)
await self.bot.wait_until_ready()
await site.start()
def setup(bot):
yt = Youtube(bot)
bot.add_cog(yt)
bot.loop.create_task(yt.webserver())
Отлично работает при запуске бота.
Но если я перезагружаю винтик во время работы бота, я сталкиваюсь с проблемой:
OSError: ошибка [Errno 10048] при попытке привязки к адресу
('192.168.1.111', 8999): только одно использование каждого адреса сокета
(протокол / сетевой адрес / порт) обычно разрешен
Я не могу придумать простой / элегантный способ освобождения и повторной привязки при каждой перезагрузке Cog.
Я хотел бы некоторые предложения по этому вопросу. Конечная цель состоит в том, чтобы иметь Cog, который поддерживает подписки на YouTube.
Может быть, есть лучший способ интегрировать базовый веб-сервер в мой бот. Я мог бы использовать deamon (fork) при запуске бота, например (у меня уже есть веб-сервер, написанный с использованием HTTPServer с BaseHTTPRequestHandler, который может обрабатывать подписки на pubsubhubbub на youtube), но каким-то образом я собираюсь объединить его в cog с помощью aiohttp :)