Fix up ts3/forum points stuff
This commit is contained in:
parent
efd36e4548
commit
6f97bba84d
@ -1,5 +1,5 @@
|
|||||||
import simplejson as json
|
import simplejson as json
|
||||||
from datetime import datetime
|
from datetime import datetime, timedelta
|
||||||
from flask.ext.sqlalchemy import SQLAlchemy
|
from flask.ext.sqlalchemy import SQLAlchemy
|
||||||
from sqlalchemy.ext.mutable import Mutable
|
from sqlalchemy.ext.mutable import Mutable
|
||||||
|
|
||||||
@ -86,7 +86,8 @@ class User(db.Model):
|
|||||||
ts3_starttime = db.Column(db.DateTime)
|
ts3_starttime = db.Column(db.DateTime)
|
||||||
ts3_endtime = db.Column(db.DateTime)
|
ts3_endtime = db.Column(db.DateTime)
|
||||||
ts3_rewardtime = db.Column(db.DateTime)
|
ts3_rewardtime = db.Column(db.DateTime)
|
||||||
ts3_connections = db.Column(MutableDict.as_mutable(Json))
|
ts3_stretch_award_time = db.Column(db.DateTime)
|
||||||
|
ts3_longest_stretch = db.Column(db.Interval)
|
||||||
|
|
||||||
last_post_reward = db.Column(db.Integer)
|
last_post_reward = db.Column(db.Integer)
|
||||||
winrate_data = db.Column(MutableDict.as_mutable(Json))
|
winrate_data = db.Column(MutableDict.as_mutable(Json))
|
||||||
@ -112,8 +113,8 @@ class User(db.Model):
|
|||||||
def __init__(self, steam_id):
|
def __init__(self, steam_id):
|
||||||
self.steam_id = steam_id
|
self.steam_id = steam_id
|
||||||
self.az_completions = 0
|
self.az_completions = 0
|
||||||
self.ts3_connections = {'list':[]}
|
|
||||||
self.ts3_rewardtime = datetime.utcnow()
|
self.ts3_rewardtime = datetime.utcnow()
|
||||||
|
self.ts3_longest_stretch = timedelta()
|
||||||
self.created = datetime.utcnow()
|
self.created = datetime.utcnow()
|
||||||
self.last_seen = datetime.utcnow()
|
self.last_seen = datetime.utcnow()
|
||||||
self.bio_text = None
|
self.bio_text = None
|
||||||
@ -128,21 +129,28 @@ class User(db.Model):
|
|||||||
now = datetime.utcnow()
|
now = datetime.utcnow()
|
||||||
self.ts3_starttime = self.ts3_starttime or now
|
self.ts3_starttime = self.ts3_starttime or now
|
||||||
self.ts3_endtime = now
|
self.ts3_endtime = now
|
||||||
|
|
||||||
# Add general TS3 points here
|
# Add general TS3 points here
|
||||||
if self.ts3_endtime and self.ts3_rewardtime:
|
|
||||||
delta = (self.ts3_endtime - self.ts3_rewardtime)
|
delta = (self.ts3_endtime - self.ts3_rewardtime)
|
||||||
duration = (delta.seconds % 3600) // 60
|
duration = (delta.seconds % 3600) // 60
|
||||||
if duration > reward_threshold:
|
if duration > reward_threshold:
|
||||||
self.ts3_rewardtime = datetime.utcnow()
|
self.ts3_rewardtime = datetime.utcnow()
|
||||||
self.points_from_ts3 += 1
|
self.points_from_ts3 += 1
|
||||||
else:
|
|
||||||
self.ts3_rewardtime = datetime.utcnow()
|
# Update last_seen for web profile
|
||||||
self.last_seen = datetime.utcnow()
|
self.last_seen = datetime.utcnow()
|
||||||
db.session.commit();
|
db.session.commit();
|
||||||
|
|
||||||
def finalize_connection(self):
|
def finalize_connection(self):
|
||||||
self.ts3_connections['list'].append({'starttime': self.ts3_starttime, 'endtime': self.ts3_endtime})
|
# Check for longest!
|
||||||
self.ts3_startime = None
|
if self.ts3_endtime and self.ts3_starttime:
|
||||||
|
current_stretch = self.ts3_endtime - self.ts3_starttime
|
||||||
|
if current_stretch > self.ts3_longest_stretch:
|
||||||
|
self.ts3_longest_stretch = current_stretch
|
||||||
|
self.ts3_stretch_award_time = datetime.utcnow()
|
||||||
|
|
||||||
|
# Reset values
|
||||||
|
self.ts3_starttime = None
|
||||||
self.ts3_endtime = None
|
self.ts3_endtime = None
|
||||||
db.session.commit();
|
db.session.commit();
|
||||||
|
|
||||||
@ -151,6 +159,7 @@ class User(db.Model):
|
|||||||
posts = board.Users.select().where(board.Users.id == int(self.forum_id))[0].posts
|
posts = board.Users.select().where(board.Users.id == int(self.forum_id))[0].posts
|
||||||
if self.last_post_reward:
|
if self.last_post_reward:
|
||||||
num_points = (posts - self.last_post_reward) / reward_threshold
|
num_points = (posts - self.last_post_reward) / reward_threshold
|
||||||
|
print("Old: {0}, New: {1}, ({0} - {1}) / {2}, {3}, {4}".format(self.last_post_reward, posts, reward_threshold, num_points, self.nickname))
|
||||||
if num_points > 0:
|
if num_points > 0:
|
||||||
self.points_from_forum += num_points
|
self.points_from_forum += num_points
|
||||||
self.last_post_reward += num_points * reward_threshold
|
self.last_post_reward += num_points * reward_threshold
|
||||||
@ -266,7 +275,7 @@ class Event(db.Model):
|
|||||||
@property
|
@property
|
||||||
def expired(self):
|
def expired(self):
|
||||||
current_time = datetime.utcnow()
|
current_time = datetime.utcnow()
|
||||||
return self.end_time < curent_time
|
return self.end_time < current_time
|
||||||
|
|
||||||
def add_participant(self, user):
|
def add_participant(self, user):
|
||||||
entry = self.participants.setdefault(user, {'start_time': datetime.utcnow() })
|
entry = self.participants.setdefault(user, {'start_time': datetime.utcnow() })
|
||||||
|
@ -348,6 +348,7 @@ def award_idle_ts3_points(server):
|
|||||||
for channel in list_response.data:
|
for channel in list_response.data:
|
||||||
if exempt_check(channel['cid']):
|
if exempt_check(channel['cid']):
|
||||||
exempt_cids.append(channel['cid'])
|
exempt_cids.append(channel['cid'])
|
||||||
|
|
||||||
# Get list of clients
|
# Get list of clients
|
||||||
clientlist = server.clientlist()
|
clientlist = server.clientlist()
|
||||||
for clid, client in clientlist.iteritems():
|
for clid, client in clientlist.iteritems():
|
||||||
@ -366,6 +367,7 @@ def award_idle_ts3_points(server):
|
|||||||
active_users.add(doob)
|
active_users.add(doob)
|
||||||
except KeyError:
|
except KeyError:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
doobs = set(models.User.query.filter(models.User.ts3_starttime != None).all())
|
doobs = set(models.User.query.filter(models.User.ts3_starttime != None).all())
|
||||||
for doob in doobs.intersection(active_users):
|
for doob in doobs.difference(active_users):
|
||||||
doob.finalize_connection()
|
doob.finalize_connection()
|
||||||
|
34
migrations/versions/50e77b6e7331_.py
Normal file
34
migrations/versions/50e77b6e7331_.py
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
"""empty message
|
||||||
|
|
||||||
|
Revision ID: 50e77b6e7331
|
||||||
|
Revises: 9e520de441f
|
||||||
|
Create Date: 2014-11-17 13:21:23.705195
|
||||||
|
|
||||||
|
"""
|
||||||
|
|
||||||
|
# revision identifiers, used by Alembic.
|
||||||
|
revision = '50e77b6e7331'
|
||||||
|
down_revision = '9e520de441f'
|
||||||
|
|
||||||
|
from alembic import op
|
||||||
|
import sqlalchemy as sa
|
||||||
|
from sqlalchemy.dialects import mysql
|
||||||
|
|
||||||
|
def upgrade():
|
||||||
|
### commands auto generated by Alembic - please adjust! ###
|
||||||
|
op.add_column('user', sa.Column('ts3_longest_stretch', sa.Interval(), nullable=True))
|
||||||
|
op.add_column('user', sa.Column('ts3_stretch_award_time', sa.DateTime(), nullable=True))
|
||||||
|
op.drop_column('user', u'random_heroes')
|
||||||
|
op.drop_column('user', u'ts3_connections')
|
||||||
|
op.drop_column('user', u'az_completions')
|
||||||
|
### end Alembic commands ###
|
||||||
|
|
||||||
|
|
||||||
|
def downgrade():
|
||||||
|
### commands auto generated by Alembic - please adjust! ###
|
||||||
|
op.add_column('user', sa.Column(u'az_completions', mysql.INTEGER(display_width=11), autoincrement=False, nullable=True))
|
||||||
|
op.add_column('user', sa.Column(u'ts3_connections', mysql.TEXT(), nullable=True))
|
||||||
|
op.add_column('user', sa.Column(u'random_heroes', mysql.TEXT(), nullable=True))
|
||||||
|
op.drop_column('user', 'ts3_stretch_award_time')
|
||||||
|
op.drop_column('user', 'ts3_longest_stretch')
|
||||||
|
### end Alembic commands ###
|
4
run.py
4
run.py
@ -104,6 +104,10 @@ def ts3_process_events():
|
|||||||
tsServer = createTeamspeakInstance()
|
tsServer = createTeamspeakInstance()
|
||||||
process_ts3_events(tsServer)
|
process_ts3_events(tsServer)
|
||||||
|
|
||||||
|
@manager.command
|
||||||
|
def forum_award_points():
|
||||||
|
for user in models.User.query.filter(models.User.forum_id != None).all():
|
||||||
|
user.update_forum_posts()
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
manager.run()
|
manager.run()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user