Skip to content

Commit 23b8622

Browse files
committed
BUGFIX:
- Missing node annotation for remote audit() call
1 parent 70e22ef commit 23b8622

File tree

3 files changed

+28
-20
lines changed

3 files changed

+28
-20
lines changed

services/bot/dcsserverbot.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import asyncio
22
import discord
33

4-
from core import Channel, utils, Status, PluginError, Group, DEFAULT_PLUGINS
4+
from core import Channel, utils, Status, PluginError, Group, Node, DEFAULT_PLUGINS
55
from core.data.node import FatalException
66
from core.listener import EventListener
77
from core.services.registry import ServiceRegistry
@@ -310,7 +310,7 @@ async def reload(self, plugin: Optional[str] = None) -> bool:
310310
return rc
311311

312312
async def audit(self, message, *, user: Optional[Union[discord.Member, str]] = None,
313-
server: Optional["Server"] = None, **kwargs):
313+
server: Optional["Server"] = None, node: Optional[Node] = None, **kwargs):
314314
if not self.audit_channel:
315315
self.audit_channel = self.get_channel(self.locals.get('channels', {}).get('audit', -1))
316316
if self.audit_channel:
@@ -337,6 +337,8 @@ async def audit(self, message, *, user: Optional[Union[discord.Member, str]] = N
337337
embed.add_field(name='UCID', value=user)
338338
if server:
339339
embed.add_field(name='Server', value=server.display_name)
340+
if not node:
341+
node = self.node
340342
if kwargs:
341343
for name, value in kwargs.items():
342344
embed.add_field(name=name.title(), value=value, inline=False)
@@ -347,7 +349,7 @@ async def audit(self, message, *, user: Optional[Union[discord.Member, str]] = N
347349
await conn.execute("""
348350
INSERT INTO audit (node, event, server_name, discord_id, ucid)
349351
VALUES (%s, %s, %s, %s, %s)
350-
""", (self.node.name, message, server.name if server else None,
352+
""", (node.name, message, server.name if server else None,
351353
user.id if isinstance(user, discord.Member) else None,
352354
user if isinstance(user, str) else None))
353355

services/bot/service.py

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,7 @@
66
import zipfile
77

88
from aiohttp import BasicAuth
9-
10-
from core import utils, FatalException, Node
9+
from core import utils, FatalException
1110
from core.services.base import Service
1211
from core.services.registry import ServiceRegistry
1312
from discord.ext import commands
@@ -27,7 +26,7 @@
2726
yaml = YAML()
2827

2928
if TYPE_CHECKING:
30-
from core import Server, Plugin
29+
from core import Server, Plugin, Node
3130

3231
__all__ = ["BotService"]
3332

@@ -98,17 +97,17 @@ def proxy_auth(self) -> Optional[BasicAuth]:
9897
return BasicAuth(username, password)
9998

10099
def init_bot(self):
101-
def get_prefix(client, message):
102-
prefixes = [self.locals.get('command_prefix', '.')]
103-
# Allow users to @mention the bot instead of using a prefix
104-
return commands.when_mentioned_or(*prefixes)(client, message)
105-
106100
if self.locals.get('no_discord', False):
107101
return DummyBot(version=self.node.bot_version,
108102
sub_version=self.node.sub_version,
109103
node=self.node,
110104
locals=self.locals)
111105
else:
106+
def get_prefix(client, message):
107+
prefixes = [self.locals.get('command_prefix', '.')]
108+
# Allow users to @mention the bot instead of using a prefix
109+
return commands.when_mentioned_or(*prefixes)(client, message)
110+
112111
# Create the Bot
113112
return DCSServerBot(version=self.node.bot_version,
114113
sub_version=self.node.sub_version,
@@ -132,7 +131,7 @@ async def start(self, *, reconnect: bool = True) -> None:
132131
try:
133132
self.bot = self.init_bot()
134133
await self.install_fonts()
135-
await self.bot.login(self.token)
134+
await self.bot.login(token=self.token)
136135
# noinspection PyAsyncCall
137136
asyncio.create_task(self.bot.connect(reconnect=reconnect))
138137
except Exception as ex:
@@ -204,8 +203,8 @@ async def send_message(self, channel: Optional[int] = -1, content: Optional[str]
204203
await _channel.send(content=content, file=file, embed=_embed)
205204

206205
async def audit(self, message, user: Optional[Union[discord.Member, str]] = None,
207-
server: Optional[Server] = None, **kwargs):
208-
await self.bot.audit(message, user=user, server=server, **kwargs)
206+
server: Optional[Server] = None, node: Optional[Node] = None, **kwargs):
207+
await self.bot.audit(message, user=user, server=server, node=node, **kwargs)
209208

210209
async def rename_server(self, server: Server, new_name: str):
211210
async with self.apool.connection() as conn:

services/servicebus/service.py

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -628,22 +628,29 @@ async def rpc(self, obj: object, data: dict) -> Optional[dict]:
628628
method_name = data['method']
629629
func = getattr(obj, method_name, None)
630630
if not func:
631-
return None
631+
raise ValueError(f"Call to non-existing function {method_name}()")
632632

633633
kwargs = data.get('params', {}).copy()
634634

635635
func_signature = None
636636
if callable(func):
637637
func_signature = inspect.signature(func).parameters
638638

639+
# check function signature
640+
invalid_keys = set(kwargs.keys()) - set(func_signature.keys())
641+
if invalid_keys:
642+
raise ValueError("RPC call {} onto non-matching function {}!".format(
643+
"{}({})".format(method_name, ','.join(kwargs.keys())),
644+
"{}({})".format(method_name, ','.join(func_signature.keys())))
645+
)
646+
639647
server_key = kwargs.get('server')
640-
if server_key and func_signature and func_signature.get('server', None).annotation != 'str':
648+
if server_key and func_signature and func_signature['server'].annotation != 'str':
641649
kwargs['server'] = self.servers.get(server_key, None)
642650

643651
instance_key = kwargs.get('instance')
644-
if instance_key and func_signature and func_signature.get('instance', None).annotation != 'str':
645-
instance_lookup = {inst.name: inst for inst in self.node.instances}
646-
kwargs['instance'] = instance_lookup.get(instance_key, None)
652+
if instance_key and func_signature and func_signature['instance'].annotation != 'str':
653+
kwargs['instance'] = next((inst for inst in self.node.instances if inst.name == instance_key), None)
647654

648655
# Handle master-specific mappings
649656
if self.master:
@@ -662,7 +669,7 @@ async def rpc(self, obj: object, data: dict) -> Optional[dict]:
662669
kwargs['user'] = None
663670

664671
node_key = kwargs.get('node')
665-
if node_key and func_signature and func_signature.get('node', None).annotation != 'str':
672+
if node_key and func_signature and func_signature['node'].annotation != 'str':
666673
kwargs['node'] = self.node.all_nodes.get(node_key, None)
667674

668675
# Log performance and execute function

0 commit comments

Comments
 (0)