mirror of
https://github.com/Cog-Creators/Red-DiscordBot.git
synced 2025-11-21 18:27:59 -05:00
[V3 RPC] Add basic RPC functionality (#1017)
* Add basic RPC functionality * Add load/unload/reload rpc commands * Reorganize without rpc_ready event * Remove rpc ready event * Removed bot reference from rpc module * Close RPC server cleanly * refactor bot * Refactor a bit and make RPC server initialization based on a cli flag * Fix version resolver * standardize version getters * Pick a new port number
This commit is contained in:
@@ -10,10 +10,29 @@ from discord.ext.commands.bot import BotBase
|
||||
from discord.ext.commands import GroupMixin
|
||||
|
||||
from .cog_manager import CogManager
|
||||
from . import Config, i18n, RedContext
|
||||
from . import (
|
||||
Config,
|
||||
i18n,
|
||||
RedContext,
|
||||
rpc
|
||||
)
|
||||
|
||||
from typing import TYPE_CHECKING
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from aiohttp_json_rpc import JsonRpc
|
||||
|
||||
|
||||
class RedBase(BotBase):
|
||||
# noinspection PyUnresolvedReferences
|
||||
class RpcMethodMixin:
|
||||
async def rpc__cogs(self, request):
|
||||
return list(self.cogs.keys())
|
||||
|
||||
async def rpc__extensions(self, request):
|
||||
return list(self.extensions.keys())
|
||||
|
||||
|
||||
class RedBase(BotBase, RpcMethodMixin):
|
||||
"""Mixin for the main bot class.
|
||||
|
||||
This exists because `Red` inherits from `discord.AutoShardedClient`, which
|
||||
@@ -26,6 +45,7 @@ class RedBase(BotBase):
|
||||
self._shutdown_mode = ExitCodes.CRITICAL
|
||||
self.db = Config.get_core_conf(force_registration=True)
|
||||
self._co_owners = cli_flags.co_owner
|
||||
self.rpc_enabled = cli_flags.rpc
|
||||
|
||||
self.db.register_global(
|
||||
token=None,
|
||||
@@ -73,6 +93,8 @@ class RedBase(BotBase):
|
||||
|
||||
self.cog_mgr = CogManager(paths=(str(self.main_dir / 'cogs'),))
|
||||
|
||||
self.register_rpc_methods()
|
||||
|
||||
super().__init__(**kwargs)
|
||||
|
||||
async def _dict_abuse(self, indict):
|
||||
@@ -194,6 +216,10 @@ class RedBase(BotBase):
|
||||
del self.extensions[name]
|
||||
# del sys.modules[name]
|
||||
|
||||
def register_rpc_methods(self):
|
||||
rpc.add_method('bot', self.rpc__cogs)
|
||||
rpc.add_method('bot', self.rpc__extensions)
|
||||
|
||||
|
||||
class Red(RedBase, discord.AutoShardedClient):
|
||||
"""
|
||||
|
||||
Reference in New Issue
Block a user