Implement playtime badges

This commit is contained in:
Trever Fischer
2012-06-09 21:14:58 -04:00
parent 9f6b99f848
commit c4793874bf
4 changed files with 57 additions and 0 deletions

View File

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

View File

@@ -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)

View File

@@ -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
View 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"))