def users(self): us = [] auths = Auth.find_project_users(pid=self.id) for auth in auths: u = User.get(id=auth.user_id, status=User._status_ok) if u: us.append(u) return us
def load_player(self, userID, entityID, clientVersion='', featureCode='', clientIP=''): player = self.get_player(entityID) if player: return player user = User.get(userID) # 校验entityID if not user or entityID not in user.roles.get(settings.REGION['ID']): logger.error('player crossed failed %d', entityID) return player = Player.load(entityID) if not player: return player.userID = user.userID player.username = user.username player.username_alias = user.username_alias or '' player.channel = user.channel or '' self.set_player(player) if not player.lastlogin: create_player(player) player.totallogin = 1 # 累计登陆 player.seriallogin = 1 # 连续登陆 player.clientVersion = clientVersion player.featureCode = featureCode player.clientIP = clientIP from common.log import role_register role_register.info(player=player) else: player.load_mails() today = datedate.today() if player.lastlogin.date() != today: # 当日重复不计算累计连续登陆 if player.lastlogin.date() < (datedate.today() - timedelta(days=1)): # 昨天没登陆 player.seriallogin = 1 else: player.seriallogin += 1 player.totallogin += 1 # 月卡减去每天登录的天数 if player.monthly_card_30: delta = today - player.lastlogin.date() player.monthly_card_30 = max(player.monthly_card_30 - delta.days + 1, 0) # {{ 新月卡 if player.monthcard1: delta = today - player.lastlogin.date() player.monthcard1 = max(player.monthcard1 - delta.days + 1, 0) if player.monthcard2: delta = today - player.lastlogin.date() player.monthcard2 = max(player.monthcard2 - delta.days + 1, 0) if player.weekscard1: delta = today - player.lastlogin.date() player.weekscard1 = max(player.weekscard1 - delta.days + 1, 0) if player.weekscard2: delta = today - player.lastlogin.date() player.weekscard2 = max(player.weekscard2 - delta.days + 1, 0) # }} player.daily_first_login = True now = int(time.time()) player.lastlogin = datetime.fromtimestamp(now) player.save() return player
def post(self, *args, **kwargs): tid = kwargs.get('tid') if not tid: raise HTTPError(404) task = Task.get(id=tid) form = CommentForm(self.request.arguments) # set form data form.from_user_id.data = self.user.id form.from_user_name.data = self.user.name form.to_user_id.data = task.creator_id form.to_user_name.data = task.creator_name form.task_id.data = task.id form.task_title.data = task.title # 分析content 识别链接, 识别@ # 链接 <a>url</a> content, at_users = analyse_content(form.content.data) print '****************content: ', repr(content) form.type.data = Comment._type_at if at_users else Comment._type_reply form.content.data = content if form.validate(): comment = Comment.new(**form.data) # 评论消息 自己回复自己或者自己@自己不发消息 if int(self.user.id) != int(task.creator_id): Message.set( user_id=task.creator_id, from_user=self.user, task=task, pid=self.pid, pname=self.auth.project_name, type='apply', content=content, ) # @消息 for name in at_users: user = User.get(name=name, status=User._status_ok) if user and user.id != int(self.user.id): Message.set( user_id=user.id, from_user=self.user, task=task, pid=self.pid, pname=self.auth.project_name, type='@', content=content, ) return self.redirect('/%s/task/%s' % (self.pid, task.id)) else: return self.render('comment.html', errors=form.errors, auth=self.auth, task=task)
def check_auth(cls, pid, uid, is_admin=False): auth = cls.get(user_id=uid, project_id=pid, status=cls._status_allow) if not auth and is_admin: project = Project.get(id=pid, status__no=Project._status_del) user = User.get(id=uid, status=User._status_ok) if not user or not user.admin or not project: return None auth = cls.new( project_id=project.id, project_name=project.name, user_id=user.id, user_name=user.name, status=cls._status_allow ) return auth
def post(self, *args, **kwargs): tid = kwargs.get('tid') if not tid: raise HTTPError(404) task = Task.get(id=tid) form = CommentForm(self.request.arguments) # set form data form.from_user_id.data = self.user.id form.from_user_name.data = self.user.name form.to_user_id.data = task.creator_id form.to_user_name.data = task.creator_name form.task_id.data = task.id form.task_title.data = task.title # 分析content 识别链接, 识别@ # 链接 <a>url</a> content, at_users = analyse_content(form.content.data) print '****************content: ', repr(content) form.type.data = Comment._type_at if at_users else Comment._type_reply form.content.data = content if form.validate(): comment = Comment.new(**form.data) # 评论消息 自己回复自己或者自己@自己不发消息 if int(self.user.id) != int(task.creator_id): Message.set( user_id=task.creator_id, from_user=self.user, task=task, pid=self.pid, pname=self.auth.project_name, type='apply', content=content, ) # @消息 for name in at_users: user = User.get(name=name, status=User._status_ok) if user and user.id != int(self.user.id): Message.set( user_id=user.id, from_user=self.user, task=task, pid=self.pid, pname=self.auth.project_name, type='@', content=content, ) return self.redirect('/%s/task/%s' % (self.pid, task.id)) else: return self.render('comment.html', errors=form.errors, auth=self.auth, task=task)
def common_login(request, raw_username, req, auto_register=False, check_password=True): # 检查版本 try: clientversion = int(getattr(req.deviceInfo, 'clientVersion', 1)) except ValueError: clientversion = 1 if get_device_id(req.deviceInfo) in g_block_devices: raise ApplicationError(0, u"该设备已被禁止登录 如有疑问请联系客服") if get_g_version() and clientversion and get_g_version() > clientversion: raise ApplicationError(msgTips.FAIL_MSG_LOGIN_OLDVERSION, settings.CLIENTOLDVERSION_NOTICE) username = raw_username # 检查白名单 if username not in g_whitelist: raise ApplicationError(0, get_loginlimitmsg()) # 查找用户 userID = UsernameIndexing.get_pk(username) if userID: user = User.get(userID) user.load_containers() # 检查设备锁定 if user.lock_device and get_device_id( req.deviceInfo) != user.lock_device: raise ApplicationError(0, u'该帐号为试玩帐号,只能在注册时的使用的设备上登录!') else: user = None clientIP = request.env.get('REMOTE_ADDR', '') password = getattr(req, 'password', '') or "dummy" if not user and auto_register: # register try: user = register(raw_username, password, get_device_id(req.deviceInfo)) except RegisterError as e: raise ApplicationError(0, e.message) # 创建成功 userID = user.userID info = unpack_login_info(req.deviceInfo, userID=userID, username=user.username, featureCode=req.featureCode, clientIP=clientIP) info.update({ 'userID': userID, 'username': user.username, 'type': 'register' }) gm_logger.info({'sessionaccess': info}) account_register.info(**info) if not user: raise ApplicationError(msgTips.FAIL_MSG_LOGIN_WRONG_ACCOUNT) # 检查密码 userID = user.userID if check_password: hashed = user.password if not utils.check_password(password, hashed): raise ApplicationError(msgTips.FAIL_MSG_INVALID_PASSWORD) # 检查封停 now = int(time.time()) if user.blocktime and user.blocktime > now: raise ApplicationError(0, u"该账号已被禁止登录 如有疑问请联系客服") if user.imsi in g_block_devices: raise ApplicationError(0, u"该账号已被禁止登录 如有疑问请联系客服") do_login(request, userID) user.lastserver = req.regionID user.save() # log info = unpack_login_info(req.deviceInfo, userID=userID, username=user.username, featureCode=req.featureCode, clientIP=clientIP) info.update({'userID': userID, 'username': user.username, 'type': 'login'}) gm_logger.info({'sessionaccess': info}) account_login.info(**info) # 响应 entityIDs = user.roles.get(req.regionID, []) return poem_pb.HTTPLoginResponse( userID=userID, sdk_username=user.username, world=encode_world( route(req.regionID, entityIDs[0] if entityIDs else None)), verify_code=request.sid, )
def load_player( self, userID, entityID, clientVersion='', featureCode='', clientIP=''): from reward.manager import givegoldmail player = self.get_player(entityID) if player: return player user = User.get(userID) # 校验entityID if not user or entityID not in user.roles.get(settings.REGION['ID']): logger.error('player crossed failed %d', entityID) return player = Player.load(entityID) player.userID = user.userID player.username = user.username player.username_alias = user.username_alias or '' player.channel = user.channel or '' if not player: return self.set_player(player) if not player.lastlogin: create_player(player) player.totallogin = 1 # 累计登陆 player.seriallogin = 1 # 连续登陆 givegoldmail(player) player.clientVersion = clientVersion player.featureCode = featureCode player.clientIP = clientIP from common.log import role_register role_register.info(player=player) if not user.back_reward_received: data = get_player_reward() try: gold, credits = data[user.username] except KeyError: pass else: from mail.manager import send_mail send_mail( player.entityID, u'老训练师钻石大礼', u' 亲爱的训练师,您好!这是您在《神奇小精灵》充值所获得钻石的返还,请查收!', addition={'gold': gold}) player.credits = credits user.back_reward_received = True user.save() else: player.load_pets() player.load_equips() player.load_mails() player.load_faction() player.load_group() player.load_offline_attrs() # player.load_offline_mail() today = datedate.today() if player.lastlogin.date() != today: # 当日重复不计算累计连续登陆 # 永久商店还没开启的情况下每天都要清空玩家身上商品信息 # 目的是临时商店开启时第一次有效地刷新商品信息 clean_yesterday_daily_taskrewards(player) # 策划要求,隔天的任务奖励全部清空 if player.lastlogin.date() < ( datedate.today() - timedelta( days=1)): # 昨天没登陆 player.seriallogin = 1 if player.guide_end_signal: player.seriallogin_after_guide = 1 else: player.seriallogin += 1 if player.guide_end_signal: player.seriallogin_after_guide += 1 player.totallogin += 1 if player.guide_end_signal: player.totallogin_after_guide += 1 player.get_serialloginreward = 0 # 月卡减去每天登录的天数 if player.monthly_card_30: delta = today - player.lastlogin.date() player.monthly_card_30 = max( player.monthly_card_30 - delta.days + 1, 0) # {{ 新月卡 if player.monthcard1: delta = today - player.lastlogin.date() player.monthcard1 = max( player.monthcard1 - delta.days + 1, 0) if player.monthcard2: delta = today - player.lastlogin.date() player.monthcard2 = max( player.monthcard2 - delta.days + 1, 0) if player.weekscard1: delta = today - player.lastlogin.date() player.weekscard1 = max( player.weekscard1 - delta.days + 1, 0) if player.weekscard2: delta = today - player.lastlogin.date() player.weekscard2 = max( player.weekscard2 - delta.days + 1, 0) # }} # build_loginreward_set(player) givegoldmail(player) # 控制日冒险礼包 if player.trigger_packs_flag: player.trigger_packs_flag = getattr( settings, "TRIGGER_PACKS_FLAG", True) from pvp.rank import g_rankManager g_rankManager.check_mail(player) g_rankManager.reset_rank(player) from pvp.swap import g_swapManager g_swapManager.give_rewards(player) from campaign.manager import g_campaignManager g_campaignManager.reset(player) from pvp.daily import g_dailyManager g_dailyManager.reset(player) from faction.city import g_cityDungeon g_cityDungeon.reset_player(player, all=True) from faction.city import g_cityContend g_cityContend.reset_player(player, all=True) from campaign.manager import reset_check_in_monthly reset_check_in_monthly(player) from pvp.rob import check_rob, resize_rob_history_by_time check_rob(player) from pvp.loot import check_loot check_loot(player) resize_rob_history_by_time(player) from campaign.manager import start_count_down start_count_down(player) from mall.manager import reset_vip_packs reset_vip_packs(player) from mall.manager import first_recharge_patch first_recharge_patch(player) from campaign.manager import reset_fund reset_fund(player) from explore.dlc import g_dlcCampaignManager g_dlcCampaignManager.reset_task(player) from group.manager import give_reward_by_mail give_reward_by_mail(player) from explore.boss import give_reward give_reward(player) from world.service import give_goods configs = get_config(RechargeConfig) # from task.manager import patch_noob_tasks # patch_noob_tasks(player) # patch_guide_fb(player) for g, amount in player.offline_recharges or []: config = configs.get(g) if config: give_goods(player, config, amount=amount) player.offline_recharges = [] from explore.ambition import reload_ambition reload_ambition(player) from explore.ambition import reload_vip_ambition reload_vip_ambition(player) from task.manager import on_monthly_card on_monthly_card(player) from task.manager import on_vip_level on_vip_level(player) from task.manager import on_login on_login(player) from task.manager import on_vip_level on_vip_level(player) from task.manager import on_levelup on_levelup(player) from task.manager import on_dlc_score on_dlc_score(player) from task.manager import on_friends_count on_friends_count(player) from campaign.manager import reset_online_packs reset_online_packs(player, refresh=True) from campaign.manager import reset_consume_campaign reset_consume_campaign(player) from campaign.manager import reset_login_campaign reset_login_campaign(player) from mail.manager import apply_condition_mail apply_condition_mail(player) from campaign.manager import do_login_campaign do_login_campaign(player) from campaign.manager import reset_recharges reset_recharges(player) check_power_packs(player) player.daily_first_login = True now = int(time.time()) player.lastlogin = datetime.fromtimestamp(now) # 推荐好友 from friend.manager import recommendp recommendp(player) if player.first_recharge_flag: player.first_recharge_flag = getattr( settings, "PAY", True) # 触发power计算, 更新indexing if not user.back_level_reward_received: data = get_player_level_reward() try: level, gold = data[user.username] except KeyError: pass else: from mail.manager import send_mail send_mail( player.entityID, u'老训练师等级返利', u'亲爱的训练师: 您在旧版《神奇小精灵》1月17日之前,达到[colorF:246;255;0]%d级[colorF:255;255;255],向您奉上[colorF:246;255;0]钻石*%d[colorF:255;255;255]。祝您游戏愉快~' % (level, gold), addition={'gold': gold}) user.back_level_reward_received = True user.save() # update seed state from campaign.manager import g_campaignManager if g_campaignManager.seed_campaign.is_open(): g_campaignManager.seed_campaign.updateSeedState(player) # player.update_power() player.save() return player
def load_user(userid): user = User() return user.get(userid)