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.core.cache import cache
|
||||
from django.core.exceptions import ObjectDoesNotExist
|
||||
from minecraft import update_badges
|
||||
import socket
|
||||
import datetime
|
||||
|
||||
@@ -78,6 +79,11 @@ class PlayerSession(models.Model):
|
||||
start = models.DateTimeField(auto_now_add=True, blank=False, null=False)
|
||||
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):
|
||||
if created:
|
||||
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