Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
62 changes: 42 additions & 20 deletions interactions/api/gateway.py
Original file line number Diff line number Diff line change
Expand Up @@ -277,37 +277,25 @@ def handle_dispatch(self, event: str, data: dict) -> None:
context = self.contextualize(data)
_name: str
_args: list = [context]
_kwargs: dict = dict()
if data["type"] == InteractionType.APPLICATION_COMMAND:
_name = context.data.name
if hasattr(context.data, "options"):
if context.data.options:
for option in context.data.options:
if option["type"] in (
OptionType.SUB_COMMAND,
OptionType.SUB_COMMAND_GROUP,
):
if option.get("options"):
for sub_option in option["options"]:
_args.append(sub_option)
else:
pass
else:
_args.append(option["value"])
_kwargs.update(self.check_sub_command(option))
elif data["type"] == InteractionType.MESSAGE_COMPONENT:
_name = context.data.custom_id
elif data["type"] == InteractionType.APPLICATION_COMMAND_AUTOCOMPLETE:
_name = "autocomplete_"
if hasattr(context.data, "options"):
if context.data.options:
for option in context.data.options:
if option["type"] in (
OptionType.SUB_COMMAND,
OptionType.SUB_COMMAND_GROUP,
):
if option.get("options"):
for sub_option in option["options"]:
if sub_option.get("focused"):
_name += sub_option["name"]
add_name, add_args = self.check_sub_auto(option)
if add_name:
_name += add_name
if add_args:
_args.append(add_args)
elif data["type"] == InteractionType.MODAL_SUBMIT:
_name = f"modal_{context.data.custom_id}"
if hasattr(context.data, "components"):
Expand All @@ -316,10 +304,44 @@ def handle_dispatch(self, event: str, data: dict) -> None:
for _value in component.components:
_args.append(_value["value"])

self.dispatch.dispatch(_name, *_args)
self.dispatch.dispatch(_name, *_args, **_kwargs)

self.dispatch.dispatch("raw_socket_create", data)

def check_sub_command(self, option) -> dict:
_kwargs = dict()
if "options" in option:
if option["type"] == OptionType.SUB_COMMAND_GROUP:
_kwargs["sub_command_group"] = option["name"]
for group_option in option["options"]:
_kwargs["sub_command"] = group_option["name"]
if "options" in group_option:
for sub_option in group_option["options"]:
_kwargs[sub_option["name"]] = sub_option["value"]
elif option["type"] == OptionType.SUB_COMMAND:
_kwargs["sub_command"] = option["name"]
for sub_option in option["options"]:
_kwargs[sub_option["name"]] = sub_option["value"]
else:
_kwargs[option["name"]] = option["value"]

return _kwargs

def check_sub_auto(self, option) -> tuple:
if "options" in option:
if option["type"] == OptionType.SUB_COMMAND_GROUP:
for group_option in option["options"]:
if "options" in group_option:
for sub_option in option["options"]:
if sub_option.get("focused"):
return sub_option["name"], sub_option["value"]
elif option["type"] == OptionType.SUB_COMMAND:
for sub_option in option["options"]:
if sub_option.get("focused"):
return sub_option["name"], sub_option["value"]
elif option.get("focused"):
return option["name"], option["value"]

def contextualize(self, data: dict) -> object:
"""
Takes raw data given back from the gateway
Expand Down
2 changes: 2 additions & 0 deletions interactions/api/gateway.pyi
Original file line number Diff line number Diff line change
Expand Up @@ -47,3 +47,5 @@ class WebSocket:
) -> None: ...
async def resume(self) -> None: ...
async def heartbeat(self) -> None: ...
def check_sub_auto(self, option) -> tuple: ...
def check_sub_command(self, option) -> dict: ...