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
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# raidhub-discord

Backend for the RaidHub Discord application: it receives [Discord interactions](https://discord.com/developers/docs/interactions/receiving-and-responding) over HTTP, checks request signatures, registers slash commands, and proxies the relevant work to the RaidHub API (search, instances, channel subscriptions, and related flows). It is meant to run as a small always-on service (for example behind your ingress), not as something you embed in other apps.
Backend for the RaidHub Discord application: it receives [Discord interactions](https://discord.com/developers/docs/interactions/receiving-and-responding) over HTTP, checks request signatures, registers slash commands, and proxies the relevant work to the RaidHub API (search, channel subscriptions, and related flows). It is meant to run as a small always-on service (for example behind your ingress), not as something you embed in other apps.

## Quick start

Expand Down
6 changes: 2 additions & 4 deletions src/app_factory.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@

from .commands import (
register_player_search_pager,
run_instance_deferred,
run_player_search_deferred,
run_subscribe_deferred,
run_subscription_deferred,
Expand Down Expand Up @@ -41,10 +40,9 @@ def create_app() -> FastAPI:
register_player_search_pager(raidhub)

command_handlers: dict[str, CommandHandler] = {
"instance": run_instance_deferred,
"player-search": run_player_search_deferred,
"search": run_player_search_deferred,
"subscribe": run_subscribe_deferred,
"subscription": run_subscription_deferred,
"subscriptions": run_subscription_deferred,
"unsubscribe": run_unsubscribe_deferred,
}

Expand Down
2 changes: 0 additions & 2 deletions src/commands/__init__.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
from .instance import run_instance_deferred
from .player_search import register_player_search_pager, run_player_search_deferred
from .subscribe import run_subscribe_deferred
from .subscription import run_subscription_deferred
Expand All @@ -10,7 +9,6 @@

__all__ = [
"register_player_search_pager",
"run_instance_deferred",
"run_player_search_deferred",
"run_subscribe_deferred",
"run_subscription_deferred",
Expand Down
117 changes: 0 additions & 117 deletions src/commands/instance.py

This file was deleted.

12 changes: 2 additions & 10 deletions src/commands/player_search.py
Original file line number Diff line number Diff line change
Expand Up @@ -38,14 +38,6 @@ async def run_player_search_deferred(
return

query_params: dict[str, Any] = {"query": query}
if "destiny_membership_type" in opts:
query_params["membershipType"] = opts["destiny_membership_type"]
elif "membership_type" in opts:
query_params["membershipType"] = opts["membership_type"]
if "use_global_name_search" in opts:
query_params["global"] = opts["use_global_name_search"]
elif "global" in opts:
query_params["global"] = opts["global"]

page_size = PLAYER_SEARCH_PAGE_SIZE
session_id = store_paged_session(
Expand All @@ -61,15 +53,15 @@ async def run_player_search_deferred(
except Exception as err:
outcome = "error"
await report_deferred_exception(
command="player-search",
command="search",
log_key="PLAYER_SEARCH_DEFERRED_FAILED",
err=err,
discord_application_id=app_id,
interaction_token=token,
user_message_payload={"content": USER_FACING_GENERIC},
)
finally:
observe_deferred_completion(command="player-search", outcome=outcome)
observe_deferred_completion(command="search", outcome=outcome)


__all__ = ["register_player_search_pager", "run_player_search_deferred"]
4 changes: 0 additions & 4 deletions src/commands/player_search_helpers.py
Original file line number Diff line number Diff line change
Expand Up @@ -73,10 +73,6 @@ async def player_search_render_from_state(
offset = page * page_size

params: dict[str, Any] = {"query": query, "count": page_size, "offset": offset}
if "membershipType" in qp:
params["membershipType"] = qp["membershipType"]
if "global" in qp:
params["global"] = qp["global"]

env = await raidhub.request_envelope("GET", "/player/search", params=params)
if not env.get("success"):
Expand Down
37 changes: 14 additions & 23 deletions src/commands/subscribe.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,10 +24,12 @@
subscribe_success_description,
)
from .subscription_helpers import (
clan_target_from_subscribe_leaf,
fetch_subscription_status_envelope,
format_clan_display_name,
subscription_active_clan_ids,
subscription_active_player_ids,
merge_clan_subscribe_put_body,
merge_player_subscribe_put_body,
player_target_from_subscribe_leaf,
subscription_envelope_error_message,
)
from .subscription_routes import SUB_ROUTE_PUT
Expand Down Expand Up @@ -76,11 +78,6 @@ async def run_subscribe_deferred(

leaf = flatten_options(top_opts[0].get("options"))
target_raw = str(leaf.get("player") or leaf.get("clan") or "").strip()
filters: dict[str, Any] = {}
if "require_fresh" in leaf:
filters["requireFresh"] = bool(leaf["require_fresh"])
if "require_completed" in leaf:
filters["requireCompleted"] = bool(leaf["require_completed"])
# TODO: Add raid filter input once we have a solid multi-select UX.
if not target_raw:
await patch_discord_followup_best_effort(
Expand Down Expand Up @@ -147,15 +144,13 @@ async def run_subscribe_deferred(
)
return
if registered:
merged_players = subscription_active_player_ids(status_inner)
if resolved_id not in merged_players:
merged_players.append(resolved_id)
merged_players.sort()
body: dict[str, Any] = {"targets": {"playerMembershipIds": merged_players}}
body = merge_player_subscribe_put_body(status_inner, resolved_id, leaf)
else:
body = {"targets": {"playerMembershipIds": [resolved_id]}}
if filters:
body["filters"] = filters
body = {
"targets": {
"players": [player_target_from_subscribe_leaf(resolved_id, leaf)]
}
}
display_name = format_player_display_name(prow)
icon_raw = prow.get("iconPath")
thumb_url = (
Expand All @@ -178,15 +173,11 @@ async def run_subscribe_deferred(
return
resolved_id = str(int(gid))
if registered:
merged_clans = subscription_active_clan_ids(status_inner)
if resolved_id not in merged_clans:
merged_clans.append(resolved_id)
merged_clans.sort()
body = {"targets": {"clanGroupIds": merged_clans}}
body = merge_clan_subscribe_put_body(status_inner, resolved_id, leaf)
else:
body = {"targets": {"clanGroupIds": [resolved_id]}}
if filters:
body["filters"] = filters
body = {
"targets": {"clans": [clan_target_from_subscribe_leaf(resolved_id, leaf)]}
}

ctx = discord_invocation_context(interaction, route_id=SUB_ROUTE_PUT)
env = await raidhub.request_envelope(
Expand Down
6 changes: 3 additions & 3 deletions src/commands/subscription.py
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ async def run_subscription_deferred(
await patch_discord_followup_best_effort(
app_id,
token,
warn_embed(SUBSCRIPTION_COMMAND_TITLE, "Use `/subscription` to view status."),
warn_embed(SUBSCRIPTION_COMMAND_TITLE, "Use `/subscriptions` to view status."),
)
return

Expand Down Expand Up @@ -81,15 +81,15 @@ async def run_subscription_deferred(
except Exception as err:
outcome = "error"
await report_deferred_exception(
command="subscription",
command="subscriptions",
log_key="SUBSCRIPTION_DEFERRED_FAILED",
err=err,
discord_application_id=app_id,
interaction_token=token,
user_message_payload=error_embed("Subscription Failed", USER_FACING_GENERIC),
)
finally:
observe_deferred_completion(command="subscription", outcome=outcome)
observe_deferred_completion(command="subscriptions", outcome=outcome)


__all__ = ["run_subscription_deferred"]
Loading
Loading