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") + )