A high-performance inter-process communication library designed to work with the latest version of discord.py
Project description
Better IPC
A high-performance inter-process communication library designed to work with the latest version of discord.py
This library is heavily based on discod-ext-ipc, which is no longer maintained.
Installation
Stable version (Guaranteed to work)
python -m pip install better-ipc
Unstable version (Active getting updates)
python -m pip install -U git+https://github.com/MiroslavRosenov/better-ipc
Inside your Discord client (with decorator)
import logging
import discord
from discord.ext import commands, ipc
from discord.ext.ipc.Server import route
from discord.ext.ipc.errors import IPCError
class Routes(commands.Cog):
def __init__(self, bot: commands.Bot):
self.bot = bot
if not hasattr(bot, "ipc"):
bot.ipc = ipc.Server(self.bot, host="127.0.0.1", port=2300, secret_key="your_secret_key_here")
bot.ipc.start(self)
@commands.Cog.listener()
async def on_ipc_ready(self):
logging.info("Ipc is ready")
@commands.Cog.listener()
async def on_ipc_error(self, endpoint: str, error: IPCError):
logging.error(endpoint, "raised", error, file=sys.stderr)
@route()
async def get_user_data(self, data):
user = self.bot.get_user(data.user_id)
return user._to_minimal_user_json() # THE OUTPUT MUST BE JSON SERIALIZABLE!
async def setup(bot):
await bot.add_cog(Routes(bot))
Inside your Discord client (with manual endpoint register)
import logging
import discord
from discord.ext import commands, ipc
from discord.ext.ipc.Server import route
from discord.ext.ipc.errors import IPCError
class Routes(commands.Cog):
def __init__(self, bot: commands.Bot):
self.bot = bot
if not hasattr(bot, "ipc"):
bot.ipc = ipc.Server(self.bot, host="127.0.0.1", port=2300, secret_key="your_secret_key_here")
bot.ipc.start(self)
for name, function in inspect.getmembers(self):
if name.startswith("get_"): # ATTENTION: Every function that stats with `get_` will be registered as endpoint
bot.ipc.endpoints[name] = function
@commands.Cog.listener()
async def on_ipc_ready(self):
logging.info("Ipc is ready")
@commands.Cog.listener()
async def on_ipc_error(self, endpoint: str, error: IPCError):
logging.error(endpoint, "raised", error, file=sys.stderr)
async def get_user_data(self, data):
user = self.bot.get_user(data.user_id)
return user._to_minimal_user_json() # THE OUTPUT MUST BE JSON SERIALIZABLE!
async def setup(bot):
await bot.add_cog(Routes(bot))
Inside your web application
from quart import Quart
from discord.ext.ipc import Client
app = Quart(__name__)
IPC = Client(
host="127.0.0.1",
port=2300,
secret_key="your_secret_key_here"
) # These params must be the same as the ones in the client
@app.route('/')
async def main():
data = await ipc_client.request("get_user_data", user_id=383946213629624322)
return str(data)
if __name__ == '__main__':
loop = asyncio.new_event_loop()
asyncio.set_event_loop(loop)
try:
app.ipc = loop.run_until_complete(IPC.start(loop=loop)) # `Client.start()` returns new Client instance
app.run(loop=loop)
finally:
loop.run_until_complete(app.ipc.close()) # Closes the session, doesn't close the loop
loop.close()
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 better-ipc-1.0.1.tar.gz.
File metadata
- Download URL: better-ipc-1.0.1.tar.gz
- Upload date:
- Size: 9.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.1 CPython/3.9.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fdfad6b6e477b2351e1f34b1902996cbed433489e441ba69aac1d11b2268a936
|
|
| MD5 |
82a13e3d3bb5865d8b0ec7a25ddc80d8
|
|
| BLAKE2b-256 |
e81644bed756b90c1a0cf53ab0c13a19994725539eb596c2ac1bcdeeb5273ad3
|
File details
Details for the file better_ipc-1.0.1-py3-none-any.whl.
File metadata
- Download URL: better_ipc-1.0.1-py3-none-any.whl
- Upload date:
- Size: 11.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.1 CPython/3.9.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2b9d0dac301be3515d0f507387d429646f6462012612d1d2f3c3cf15e1a256fe
|
|
| MD5 |
091247b783b9711bfda759682f35a946
|
|
| BLAKE2b-256 |
9ec94cd07f6584929d0fb754bb4f2eafba721615115b32bc40f4d95b4598cb0c
|