EPF com message handlers

This commit is contained in:
Ben 2019-12-02 23:24:28 +00:00
parent c59e6fa8c4
commit cfe274e67f
2 changed files with 34 additions and 0 deletions

View File

@ -43,6 +43,7 @@ class Penguin(db.Model):
career_medals = db.Column(db.Integer, nullable=False, server_default=db.text("0")) career_medals = db.Column(db.Integer, nullable=False, server_default=db.text("0"))
agent_medals = db.Column(db.Integer, nullable=False, server_default=db.text("0")) agent_medals = db.Column(db.Integer, nullable=False, server_default=db.text("0"))
last_field_op = db.Column(db.DateTime, nullable=False, server_default=db.text("now()")) last_field_op = db.Column(db.DateTime, nullable=False, server_default=db.text("now()"))
com_message_read_date = db.Column(db.DateTime, nullable=False, server_default=db.text("now()"))
ninja_rank = db.Column(db.SmallInteger, nullable=False, server_default=db.text("0")) ninja_rank = db.Column(db.SmallInteger, nullable=False, server_default=db.text("0"))
ninja_progress = db.Column(db.SmallInteger, nullable=False, server_default=db.text("0")) ninja_progress = db.Column(db.SmallInteger, nullable=False, server_default=db.text("0"))
fire_ninja_rank = db.Column(db.SmallInteger, nullable=False, server_default=db.text("0")) fire_ninja_rank = db.Column(db.SmallInteger, nullable=False, server_default=db.text("0"))
@ -151,3 +152,11 @@ class Login(db.Model):
date = db.Column(db.DateTime, nullable=False, server_default=db.text("now()")) date = db.Column(db.DateTime, nullable=False, server_default=db.text("now()"))
ip_address = db.Column(db.CHAR(255), nullable=False) ip_address = db.Column(db.CHAR(255), nullable=False)
minutes_played = db.Column(db.Integer, nullable=False, server_default=db.text("0")) minutes_played = db.Column(db.Integer, nullable=False, server_default=db.text("0"))
class EpfComMessage(db.Model):
__tablename__ = 'epf_com_message'
message = db.Column(db.Text, nullable=False)
character_id = db.Column(db.ForeignKey('character.id', ondelete='RESTRICT', onupdate='CASCADE'), nullable=False)
date = db.Column(db.DateTime, nullable=False, server_default=db.text("now()"))

View File

@ -4,10 +4,24 @@ from houdini.handlers.play.mail import handle_start_mail_engine
from houdini.data.item import Item from houdini.data.item import Item
from houdini.data.mail import PenguinPostcard from houdini.data.mail import PenguinPostcard
from houdini.data.penguin import EpfComMessage
from houdini.constants import ClientType
import datetime import datetime
import time
import random import random
from aiocache import cached
@cached(alias='default', key='com_messages')
async def get_com_messages(p):
async with p.server.db.transaction():
messages = []
async for message in EpfComMessage.query.order_by(EpfComMessage.date.desc()).gino.iterate():
messages.append(f'{message.message}|{int(time.mktime(message.date.timetuple()))}|{message.character_id}')
return '%'.join(messages)
@handlers.handler(XTPacket('l', 'mst'), before=handle_start_mail_engine) @handlers.handler(XTPacket('l', 'mst'), before=handle_start_mail_engine)
async def handle_send_job_mail(p): async def handle_send_job_mail(p):
@ -102,3 +116,14 @@ async def handle_buy_epf_item(p, item: Item):
return await p.send_error(401) return await p.send_error(401)
await p.add_epf_inventory(item) await p.add_epf_inventory(item)
@handlers.handler(XTPacket('f', 'epfgm'), client=ClientType.Vanilla)
@handlers.allow_once
async def handle_get_com_messages(p):
unread_com_message = await EpfComMessage.query.where(
EpfComMessage.date > p.com_message_read_date).gino.scalar()
if unread_com_message:
await p.server.cache.delete('com_messages')
await p.update(com_message_read_date=datetime.datetime.now()).apply()
await p.send_xt('epfgm', int(bool(unread_com_message)), await get_com_messages(p))