Efficiently and intuitively create and manage an HTTP web server running in tandem with a discord.py bot
Project description
dpy-http-server
dpy-http-server allows for efficient an intuitive creation and management of
an HTTP web server that runs alongside a discord.py bot.
Key Features
- Easy to use, yet powerful API the makes spinning up a web server on the same event loop as a discord.py bot painless
- Supports reloading on cog reload
Getting Started
Here are some examples on how to use this API:
Global Scope
import discord
import server
from aiohttp import web
bot = discord.Bot(command_prefix="!", description="example", intents=discord.Intents.all())
@bot.event
async def on_ready():
bot.server = server.HTTPServer(
bot=bot,
host="0.0.0.0",
port="8000",
)
await bot.server.start()
@server.add_route(path="/", method="GET")
async def home(request):
return web.json_response(data={"foo": "bar"}, status=200)
bot.run(YOUR_TOKEN)
Inside Bot Subclass
import discord
import server
from aiohttp import web
class Bot(discord.Bot):
def __init__(*args, **kwargs):
super().__init__(*args, **kwargs):
self.server = server.HTTPServer(
bot=self,
host="0.0.0.0",
port=8000,
)
self.loop.create_task(self._start_webserver())
async def _start_webserver(self):
await self.wait_until_ready()
await self.server.start()
@server.add_route(path="/", method="GET")
async def home(self, request):
return web.json_response(data={"foo": bar}, status=200)
bot = Bot(command_prefix="!", description="example", intents=discord.Intents.all())
bot.run(YOUR_TOKEN)
Inside Cog
import server
from aiohttp import web
from discord.ext import commands
class ServerCog(commands.Cog):
def __init__(self, bot):
self.bot = bot
self.server = server.HTTPServer(
bot=self.bot,
host="0.0.0.0",
port=8000,
)
self.bot.loop.create_task(self._start_server())
async def _start_server(self):
await self.bot.wait_until_ready()
await self.server.start()
@server.add_route(path="/", method="GET", cog="ServerCog")
async def home(self, request):
return web.json_response(data={"foo": "bar"}, status=200)
Using Checks with Globally Defined Methods
import discord
import server
from aiohttp import web
bot = discord.Bot(command_prefix="!", description="example", intents=discord.Intents.all())
@bot.event
async def on_ready():
bot.server = server.HTTPServer(
bot=bot,
host="0.0.0.0",
port="8000",
)
await bot.server.start()
async def checker(request):
return request.headers.get("authorization") == "password"
async def fail_handler(request):
return web.json_response(data={"message": "you are not authorized"}, status=401)
@server.add_route(path="/", method="GET")
@server.check(predicate=checker, fail_handler=fail_handler)
async def home(request):
return web.json_response(data={"foo": "bar"}, status=200)
bot.run(YOUR_TOKEN)
Using Checks with Cog Defined Methods
import server
from aiohttp import web
from discord.ext import commands
class ServerCog(commands.Cog):
def __init__(self, bot):
self.bot = bot
self.server = server.HTTPServer(
bot=self.bot,
host="0.0.0.0",
port=8000,
)
self.bot.loop.create_task(self._start_server())
async def _start_server(self):
await self.bot.wait_until_ready()
await self.server.start()
async def checker(self, request):
return request.headers.get("authorization") == "password"
async def fail_handler(self, request):
return web.json_response(data={"message": "you are not authorized"}, status=401)
@server.add_route(path="/", method="GET", cog="ServerCog")
@server.check(predicate="checker", fail_handler="fail_handler")
async def home(self, request):
return web.json_response(data={"foo": "bar"}, status=200)
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file dpy-http-server-0.1.0.tar.gz.
File metadata
- Download URL: dpy-http-server-0.1.0.tar.gz
- Upload date:
- Size: 6.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/49.2.1 requests-toolbelt/0.9.1 tqdm/4.50.2 CPython/3.8.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
03f89f5d3793dc47a556857c02f24fb44ff6de9300ef6b2f86e6e85848652f11
|
|
| MD5 |
75720c7a977efafffbf4856e9d2e392e
|
|
| BLAKE2b-256 |
8a35dbf9af132f6e01e47610d3a2c0b5dd153753ebb5837741aa63887dc1059f
|
File details
Details for the file dpy_http_server-0.1.0-py3-none-any.whl.
File metadata
- Download URL: dpy_http_server-0.1.0-py3-none-any.whl
- Upload date:
- Size: 5.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/49.2.1 requests-toolbelt/0.9.1 tqdm/4.50.2 CPython/3.8.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
52c3e8403c9b4ae69fbf46071d4d62d66ac76a244f2d4f831fb33a66db6722e1
|
|
| MD5 |
8407afd284b95e09a2b70f35c01f73d1
|
|
| BLAKE2b-256 |
9c8090bc7171d7723f29da4e94fa1446557298d1510b99b7a80dc96efa0a53ba
|