diff --git a/ladder/templates/invites.html b/ladder/templates/invites.html new file mode 100644 index 0000000..62605a0 --- /dev/null +++ b/ladder/templates/invites.html @@ -0,0 +1,5 @@ +{% load ladder_entry %} +
+{% for entry in ladderentry_list %}{% ladder_entry_channels entry as channels %}{% for channel in channels %}/channel_invite "{{channel}}" {{entry.player}}
+{% endfor %}{% endfor %}
+
diff --git a/ladder/templatetags/ladder_entry.py b/ladder/templatetags/ladder_entry.py index d137c0f..5b6c10f 100644 --- a/ladder/templatetags/ladder_entry.py +++ b/ladder/templatetags/ladder_entry.py @@ -3,7 +3,6 @@ import logging from django import template - from ladder.models import Ladder, LadderEntry register = template.Library() @@ -32,7 +31,10 @@ def ladder_rank(obj, request): key = f"data__{obj.ladder.metric}__gt" flt = {key: obj.data.get(obj.ladder.metric, 0)} return ( - LadderEntry.objects.filter(ladder=obj.ladder).filter(visible=True).filter(**flt).count() + LadderEntry.objects.filter(ladder=obj.ladder) + .filter(visible=True) + .filter(**flt) + .count() + 1 ) @@ -57,3 +59,31 @@ def ladder_difficulties(): .values_list("difficulty", flat=True) .distinct() ) + + +@register.simple_tag +def ladder_entry_channels(instance): + #

+    # /channel_invite "{{channel}}" {{entry.player}} # {{entry.data.DPS|floatformat:0}} DPS
+    channels = []
+    if instance.ladder.internal_name in [
+        "Infected Space",
+    ] and instance.ladder.internal_difficulty in ["Advanced", "Elite"]:
+        if instance.data.get("DPS", 0) >= 500000:
+            channels.append("DPS-#s-Prime")
+        if instance.data.get("DPS", 0) >= 150000:
+            channels.append("DPS-#s-Elites")
+    elif instance.ladder.internal_name in [
+        "Hive Space",
+    ] and instance.ladder.internal_difficulty in ["Elite"]:
+        if instance.data.get("DPS", 0) >= 500000:
+            channels.append("DPS-#s-Prime")
+        if instance.data.get("DPS", 0) >= 150000:
+            channels.append("DPS-#s-Elites")
+    elif instance.ladder.internal_name in [
+        "Bug Hunt",
+        "Nukera Prime: Transdimensional Tactics",
+    ]:
+        if instance.data.get("DPS", 0) >= 1000:
+            channels.append("DPS-#s-Ground")
+    return channels
diff --git a/ladder/urls/ladder_entry.py b/ladder/urls/ladder_entry.py
index b195791..431938f 100644
--- a/ladder/urls/ladder_entry.py
+++ b/ladder/urls/ladder_entry.py
@@ -20,4 +20,9 @@
         views.LadderEntryView.as_view(template_name="ladder_entry.html"),
         name="ui",
     ),
+    path(
+        "ui/invites/",
+        views.LadderInvitesView.as_view(template_name="invites.html"),
+        name="invites",
+    ),
 ]
diff --git a/ladder/views/ladder_entry.py b/ladder/views/ladder_entry.py
index 86ca24e..fa16699 100644
--- a/ladder/views/ladder_entry.py
+++ b/ladder/views/ladder_entry.py
@@ -24,9 +24,7 @@ class LadderEntryViewSet(
 ):
     """LadderEntry API"""
 
-    queryset = LadderEntry.objects.filter(visible=True).exclude(
-        ladder__difficulty="Any"
-    )
+    queryset = LadderEntry.objects.filter(visible=True)
     serializer_class = LadderEntrySerializer
     pagination_class = PageNumberPagination
     filter_backends = (BaseFilterBackend, OrderingFilter)
@@ -74,4 +72,27 @@ def get_queryset(self):
                 ordering = (ordering,)
             queryset = queryset.order_by(*ordering)
 
-        return queryset.filter(visible=True).exclude(ladder__difficulty="Any")
+        return queryset.filter(visible=True)
+
+
+class LadderInvitesView(FilterView):
+    """LadderEntry View"""
+
+    model = LadderEntry
+    filter_backends = (BaseFilterBackend, OrderingFilter)
+    filterset_class = LadderEntryFilter
+
+    def get_queryset(self):
+        return (
+            LadderEntry.objects.filter(
+                ladder__internal_name__in=[
+                    "Infected Space",
+                    "Hive Space",
+                    "Bug Hunt",
+                    "Nukara Prime: Transdimensional Tactics",
+                ],
+            )
+            .exclude(ladder__difficulty="Any")
+            .order_by("-data__DPS")
+            .distinct("name", "ladder__difficulty")
+        )