[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:
Will
2017-10-27 20:55:41 -04:00
committed by GitHub
parent 8d8e1c61d8
commit f459a21bef
9 changed files with 175 additions and 8 deletions

View File

@@ -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):
"""