Implement playtime badges
This commit is contained in:
@@ -0,0 +1,11 @@
|
|||||||
|
import badges.api
|
||||||
|
|
||||||
|
def update_badges(user):
|
||||||
|
playtime = user.minecraftprofile.totalPlaytime();
|
||||||
|
print playtime
|
||||||
|
if playtime.days >= 1:
|
||||||
|
badges.api.award(user, "24h_playtime")
|
||||||
|
if playtime.days >= 7:
|
||||||
|
badges.api.award(user, "7d_playtime")
|
||||||
|
if playtime.days >= 30:
|
||||||
|
badges.api.award(user, "30d_playtime")
|
||||||
|
@@ -0,0 +1,12 @@
|
|||||||
|
from django.db.models.signals import post_syncdb
|
||||||
|
import badges.api
|
||||||
|
import badges.models
|
||||||
|
from local import update_badges
|
||||||
|
from django.contrib.auth.models import User
|
||||||
|
|
||||||
|
def create_playtime_badges(app, created_models, verbosity, **kwargs):
|
||||||
|
badges.api.create_badge("24h_playtime", "24 Hours of Playtime", "You've played a combined total of 24 hours")
|
||||||
|
badges.api.create_badge("7d_playtime", "7 Days of Playtime", "You've played a combined total of 7 days")
|
||||||
|
badges.api.create_badge("30d_playtime", "30 Days of Playtime", "You've played a combined total of 30 days")
|
||||||
|
|
||||||
|
post_syncdb.connect(create_playtime_badges, sender=badges.models)
|
||||||
|
@@ -3,6 +3,7 @@ from django.contrib.auth.models import User, Group
|
|||||||
from django.db.models.signals import post_save
|
from django.db.models.signals import post_save
|
||||||
from django.core.cache import cache
|
from django.core.cache import cache
|
||||||
from django.core.exceptions import ObjectDoesNotExist
|
from django.core.exceptions import ObjectDoesNotExist
|
||||||
|
from minecraft import update_badges
|
||||||
import socket
|
import socket
|
||||||
import datetime
|
import datetime
|
||||||
|
|
||||||
@@ -78,6 +79,11 @@ class PlayerSession(models.Model):
|
|||||||
start = models.DateTimeField(auto_now_add=True, blank=False, null=False)
|
start = models.DateTimeField(auto_now_add=True, blank=False, null=False)
|
||||||
end = models.DateTimeField(blank=True, null=True)
|
end = models.DateTimeField(blank=True, null=True)
|
||||||
|
|
||||||
|
def save(self, *args, **kwargs):
|
||||||
|
super(PlayerSession, self).save(*args, **kwargs)
|
||||||
|
if self.end:
|
||||||
|
update_badges(self.player.user)
|
||||||
|
|
||||||
def create_profile(sender, instance, created, **kwargs):
|
def create_profile(sender, instance, created, **kwargs):
|
||||||
if created:
|
if created:
|
||||||
MinecraftProfile.objects.get_or_create(user=instance, mc_username=instance.username)
|
MinecraftProfile.objects.get_or_create(user=instance, mc_username=instance.username)
|
||||||
|
28
minecraft/tests.py
Normal file
28
minecraft/tests.py
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
from django.test import TestCase
|
||||||
|
from django.contrib.auth.models import User
|
||||||
|
from django.test.client import Client
|
||||||
|
from django.core.urlresolvers import reverse
|
||||||
|
from django.core import mail
|
||||||
|
import badges.api
|
||||||
|
import models
|
||||||
|
from datetime import datetime,timedelta
|
||||||
|
|
||||||
|
class BadgeTest(TestCase):
|
||||||
|
def setUp(self):
|
||||||
|
self.player = User.objects.create_user('Player', 'test@example.com')
|
||||||
|
self.server = models.Server.objects.create(hostname="localhost", secret="")
|
||||||
|
|
||||||
|
def tearDown(self):
|
||||||
|
self.player.delete()
|
||||||
|
self.server.delete()
|
||||||
|
|
||||||
|
def testOpenSession(self):
|
||||||
|
self.assertFalse(badges.api.user_has_badge(self.player, "24h_playtime"))
|
||||||
|
models.PlayerSession.objects.create(ip="127.0.0.1", start=datetime.now(), server=self.server, player=self.player.minecraftprofile)
|
||||||
|
self.assertFalse(badges.api.user_has_badge(self.player, "24h_playtime"))
|
||||||
|
|
||||||
|
def test24H(self):
|
||||||
|
self.assertFalse(badges.api.user_has_badge(self.player, "24h_playtime"))
|
||||||
|
now = datetime.now()
|
||||||
|
models.PlayerSession.objects.create(ip="127.0.0.1", start=now, end=now+timedelta(days=2), server=self.server, player=self.player.minecraftprofile)
|
||||||
|
self.assertTrue(badges.api.user_has_badge(self.player, "24h_playtime"))
|
Reference in New Issue
Block a user