Beispiel #1
0
def on_new_message(bot, update):
    logger.info('new message in %d from %d', update.message.chat_id,
                update.message.from_user.id)
    Member.upsert(update.effective_chat.id, update.effective_user)
    if update.message.reply_to_message:
        Member.upsert(update.effective_chat.id,
                      update.message.reply_to_message.from_user)
Beispiel #2
0
def add_entry():
    userId = request.form['id']
    userPasswd = request.form['passwd']

    for member in Member.all():
        if userId == member.getId():
            return "failed"

    member = Member(userId=userId, userPasswd=userPasswd)
    member.put()
    return "OK"
Beispiel #3
0
class MemberQuery(object):
    def __init__(self, router):
        self._member = Member(router)

    def get(self, key):
        return self._member.get(key)

    @tuplevalue
    def put(self, key, value):
        self._member.put(key, value)

    @tuplevalue
    def delete(self, key, value):
        self._member.delete(key, value, regex=True)
Beispiel #4
0
 def get_top_members_per_num_characters(self, top_n=20):
     query = Member.select(Member, fn.SUM(fn.LENGTH(Message.content)).alias('length')) \
                   .join(Message, JOIN.RIGHT_OUTER) \
                   .group_by(Member) \
                   .order_by(SQL('length').desc()) \
                   .limit(top_n)
     return list(query)
Beispiel #5
0
    def get(self):

        members = Member.query(Member.active == True).order(Member.username)

        #Identify the slackers for future shaming
        double_list = []
        kill_tracker = []

        for person in members:

            if person.double < 0:
                double_list.append(person)

            kill_list = person.kill_list
            logging.debug("Type of kill_list: " + str(type(kill_list)))

            kills7 = sum(kill_list[23:])
            kills14 = sum(kill_list[16:])
            kills30 = sum(kill_list)

            kill_dict = {
                'name': person.username,
                'kills7': kills7,
                'kills14': kills14,
                'kills30': kills30
            }

            kill_tracker.append(kill_dict)

        template = JINJA_ENVIRONMENT.get_template('admin.html')
        self.response.write(
            template.render(kills=kill_tracker, double=double_list))
Beispiel #6
0
    def get(self):

        root_url = 'https://lyrania.co.uk/api/accounts/public_profile.php?'
        memberlist = []

        members = Member.query(Member.active == True).order(Member.username)

        for member in members:

            #Form URL
            params = {'search': str(member.key.id())}
            encoded_params = urllib.urlencode(params)
            url = root_url + encoded_params

            #Fetch request and format response
            response = urlfetch.fetch(url=url, validate_certificate=True)
            result = json.loads(response.content)
            list_addition = [result]
            memberlist = memberlist + list_addition

            #Do stuff with the database HERE
            member.username = result['name']
            member.level = int(result['level'])
            member.quests = int(result['quests_complete'])
            member.base_stats = int(result['base_stats'])
            member.dp = int(result['earned_dp'])

            if result['guild_name'] != 'Phoenix':
                member.active = False

            member.put()

        #Write return
        template = JINJA_ENVIRONMENT.get_template('stats.html')
        self.response.write(template.render(data=memberlist))
Beispiel #7
0
 def get_top_members_per_message_count(self, top_n=9):
     query = Member.select(Member, fn.Count(Message.id).alias('count')) \
                   .join(Message, JOIN.RIGHT_OUTER) \
                   .group_by(Member) \
                   .order_by(SQL('count').desc()) \
                   .limit(top_n)
     return list(query)
Beispiel #8
0
def on_someone(bot, update, groups):
    msg = update.effective_message
    if msg.chat_id < 0:  # groups only
        logger.info('@someone from %d in %d', msg.from_user.id, msg.chat_id)

        active_users = Member.get_active(msg.chat_id)
        if not active_users:
            logger.info('no users for this chat: %d', msg.chat_id)
            Member.upsert(msg.chat_id, msg.from_user)
            return

        rand_user = random.choice(active_users)

        if '@' in groups[0]:
            # mention with "@someone"
            user_mention = mention_html(rand_user.user.user_id, '@someone')
        elif '^' in groups[0]:
            # mention by first name
            user_mention = mention_html(rand_user.user.user_id,
                                        rand_user.user.first_name)
        elif '?' in groups[0]:
            # non-clickable mention using zero-width char
            user_mention = '<code>@someone</code>{}'.format(
                mention_html(rand_user.user.user_id, u'\u200B'))
        else:
            if rand_user.user.alias:  # alias
                # mention by alias if set
                user_mention = mention_html(rand_user.user.user_id,
                                            rand_user.user.alias)
            else:
                # mention by username if present, otherwise user the first name
                user_mention = '@' + rand_user.user.username if rand_user.user.username else mention_html(
                    rand_user.user.user_id, rand_user.user.first_name)

        text = f'{user_mention} {html_escape(groups[1]) if groups[1] else ""}'

        msg.reply_html(text,
                       disable_web_page_preview=True,
                       reply_to_message_id=msg.reply_to_message.message_id
                       if msg.reply_to_message else None)

        # try to delete if the message starts with '!'
        if msg.text.startswith('!'):
            try:
                msg.delete()
            except (BadRequest, TelegramError) as e:
                logger.info("can't delete message: %s", str(e))
Beispiel #9
0
    def delete_member(self, member_id):
        """Deletes a member from the database.

        Args:
            member_id: Unique discord id for that member.

        Returns:
            Whether the member was succesfully deleted.
        """
        return Member.delete().where(Member.member_id == member_id).execute()
Beispiel #10
0
    def get_member(self, member_id):
        """Gets a member from the database.

        Args:
            member_id: Unique discord id for that member.

        Returns:
            A member record.
        """
        return Member.select().where(Member.member_id == member_id).first()
Beispiel #11
0
    def member_exists(self, member_id):
        """Checks whether the chosen member is present in the database.

        Args:
            member_id: Unique discord id for that member.

        Returns:
            Whether there is a member with that id in the database.
        """
        query = Member.select().where(Member.member_id == member_id)
        return query.exists()
Beispiel #12
0
    def add_member(self, member_id, username):
        """Adds a member to the database.

        Args:
            member_id: Unique discord id for that member.
            username: Membername and discriminator combination string.

        Returns:
            A member record.
        """
        member = Member.create(member_id=member_id, username=username)
        return member
def members():
    """Show full list of club members and add new club members to list and database"""
    form = MemberForm()
    members = db.query(Member).order_by(Member.member_id)

    if form.validate_on_submit():
        db.add(Member(name=form.name.data, id_type=form.id_type.data, id_number=form.id_number.data))
        db.commit()
        flash("Membro adicionado com sucesso", "success")
        return redirect(url_for("members"))
    
    return render_template("membros.html", form=form, members=members)
Beispiel #14
0
def get_cards_from_podio(podio_client, app_id):
    p = podio_client
    res = p.Item.filter(app_id, {'limit': 1, 'offset': 0})
    count = res['total'] - 1
    items = res['items']
    offset = 1
    errors = []
    while count > 0:
        res = p.Item.filter(app_id, {'limit': 50, 'offset': offset})
        items.extend(res['items'])
        offset += 50
        count -= 50
    data = dict()
    for item in items:
        i = {
            'item_id': item['item_id'],
            'app_item_id': item['app_item_id'],
            'member': None,
            'owner': None,
        }
        for f in item['fields']:
            if f['field_id'] == config.podio_fid_uid:
                i['uid'] = f['values'][0]['value'].replace(' ', '')
            if f['field_id'] == config.podio_fid_access_level:
                i['access_level'] = int(f['values'][0]['value']['text'])
            if f['field_id'] == config.podio_fid_member:
                i['member'] = Member(
                    item_id=f['values'][0]['value']['item_id'],
                    app_item_id=f['values'][0]['value']['app_item_id'],
                    title=f['values'][0]['value']['title'])
            if f['field_id'] == config.podio_fid_owner:
                i['owner'] = f['values'][0]['value']
            if f['field_id'] == config.podio_fid_expiry_data:
                i['expiry_date'] = datetime.date(
                    *map(int, f['values'][0]['start_date_utc'].split('-')))
        c = Card(uid=i['uid'],
                 access_level=i['access_level'],
                 pin='0000',
                 owner=i['owner'],
                 member_o=i['member'],
                 item_id=i['item_id'],
                 app_item_id=i['app_item_id'],
                 expiry_date=i['expiry_date'] if 'expiry_date' in i else
                 datetime.date(year=2100, month=12, day=31))
        if c.uid in data:
            errors.append('ERROR: Double uid in Podio: "{}".\n{}\n{}'.format(
                c.uid, str(c), str(data[c.uid])))
            continue
        data[c.uid] = c
    return data, errors
Beispiel #15
0
    def get_top_members_per_message_count(self, top_n=9):
        """Gets the most active members sorted by number of messages posted.

        Args:
            top_n: The maximum number of members to return.

        Returns:
            A list of the top n most active members.
        """
        query = Member.select(Member, fn.Count(Message.id).alias('count')) \
                      .join(Message, JOIN.RIGHT_OUTER) \
                      .group_by(Member) \
                      .order_by(SQL('count').desc()) \
                      .limit(top_n)
        return list(query)
Beispiel #16
0
    def post(self):

        action = self.request.get('action')
        logging.info("Admin action: " + action)

        if action == "newcontest":

            contest_name = self.request.get('contestname')
            start_date = self.parseDate(str(self.request.get('startdate')))
            end_date = self.parseDate(str(self.request.get('enddate')))

            #If dates could not be parsed, return error.
            if start_date is None or end_date is None:
                result = "Invalid date parameters: Please use DD-MM-YYYY or YYYY-MM-DD"

            #Else proceed with database update.
            else:
                #Get a list of current members. API call unnecessary since baseline GDP won't be calculated until contest starts.
                members = Member.query(Member.active == True).order(
                    Member.username)
                score_list = []

                #Set up a ContestScore entity for each member
                for person in members:
                    new_score = ContestScore(member_id=person.key.id(),
                                             member_name=person.username,
                                             start_gdp=0,
                                             current_gdp=0)

                    score_list = score_list + [new_score]

                #Create new Contest
                new_contest = Contest(active=False,
                                      name=contest_name,
                                      start=start_date,
                                      end=end_date,
                                      scores=score_list)

                new_contest.put()
                result = "Contest " + new_contest.name + " successfully created!"

        else:
            logging.warning("Admin action: Unable to resolve action type!")
            result = "Error: Unknown action"

        #Output
        template = JINJA_ENVIRONMENT.get_template('admin_submit.html')
        self.response.write(template.render(info=result))
Beispiel #17
0
    def get_top_members_per_num_characters(self, top_n=20):
        """Gets the most active members sorted by the sum of the number of
        characters in the messages they posted.

        Args:
            top_n: The maximum number of members to return.

        Returns:
            A list of the top n most active members.
        """
        query = Member.select(Member, fn.SUM(fn.LENGTH(Message.content)).alias('length')) \
                      .join(Message, JOIN.RIGHT_OUTER) \
                      .group_by(Member) \
                      .order_by(SQL('length').desc()) \
                      .limit(top_n)
        return list(query)
Beispiel #18
0
def addMemberToDatabase():  #member,event,event_Volenteers,Attendance
    from database import Member, Club
    if request.method == 'POST':
        name = request.form['name']
        USN = request.form['USN']
        clubId = request.form['clubId']
        email = request.form['email']
        member = Member(clubId, name, USN, email)
        db.session.add(member)
        db.session.commit()
        club = Club.query.filter_by(id=clubId).first()
        msg = Message('Registration successful',
                      sender='*****@*****.**',
                      recipients=[email])
        msg.body = "Dear Student\n You have been successfully registered for the club" + club.name + "."
        mail.send(msg)
        return 'Member added successfully!!'

    else:
        #Bad Request
        abort(400)
Beispiel #19
0
def on_left_member(bot, update):
    logger.info('left member in %d', update.message.chat.id)
    member = Member.get(Member.user_id == update.message.left_chat_member.id,
                        Member.chat_id == update.effective_chat.id)
    deleted_rows = member.delete_instance()
    logger.info('rows deleted: %d', deleted_rows)
Beispiel #20
0
Base.metadata.create_all(engine)

# Read member's data from csv file
with open('/home/mfsd1809/Dev/FullStackWebDeveloper/GitRepos/membership/directory.csv', encoding="utf8") as fin:
    # Read csv file as a dictionary
    csv_reader = csv.DictReader(fin)

    # Iterate through rows of csv file and insert each member into db
    for row in csv_reader:
        member = Member(
            first_name=row['first_name'],
            last_name=row['last_name'],
            street_num=row['street_num'],
            street_name=row['street_name'],
            city=row['city'],
            _state=row['_state'],
            postal_code=row['postal_code'],
            contact_num=row['contact_num'],
            email=row['email'],
            birthdate=row['birthdate'],
            age=row['age'],
            inserted_date=datetime.now().strftime("%Y-%m-%d %H:%M:%S")
        )
        db.session.add(member)
        db.session.commit()

print('Initial member data inserted into database!')

# Create initial user
user = User(
            first_name='first name here',
            last_name='last name here',
Beispiel #21
0
    def get(self):
        logging.info("Starting maintenance job...")

        #Form URL
        url = 'https://lyrania.co.uk/api/guilds/member_list.php?'
        params = {'api_code': GUILD_SECRET}
        encoded_params = urllib.urlencode(params)
        url = url + encoded_params

        #Fetch request and format response
        response = urlfetch.fetch(url=url, validate_certificate=True)
        result = json.loads(response.content)
        contest_additions = []

        #[START UPDATE GUILD CONTRIBUTIONS]

        for member in result['members']:
            #Attempt to fetch this member from the DB
            candidate_key = try_key(member['id'])
            entry = candidate_key.get()

            #If member not found, create a new one and set aside for addition to ongoing contests
            if entry is None:
                logging.info("New member detected: " + member['username'])

                kill_tracker = []

                for x in xrange(0, 29):
                    kill_tracker.append(0)

                kill_tracker.append(
                    int(member['kills']['kills']) -
                    int(member['kills']['yesterdays_kills']))

                infant_member = Member(
                    id=member['id'],
                    username=member['username'],
                    rank="0",
                    active=True,
                    level=int(member['level']),
                    kills=int(member['kills']['kills']),
                    quests=0,
                    base_stats=0,
                    buffed_stats=0,
                    dp=0,
                    xp=int(member['donations']['exp_donated']),
                    xp_prev=0,
                    food=int(member['donations']['food']),
                    food_prev=0,
                    stone=int(member['donations']['stone']),
                    stone_prev=0,
                    iron=int(member['donations']['iron']),
                    iron_prev=0,
                    lumber=int(member['donations']['lumber']),
                    lumber_prev=0,
                    gems=int(member['donations']['gems']),
                    gems_prev=0,
                    money=int(member['donations']['money']),
                    money_prev=0,
                    jade=int(member['donations']['jade']),
                    jade_prev=0,
                    double=int(member['donations']['double']),
                    gdp=int(member['gdp']['dp']),
                    gdp_prev=0,
                    gdp_spent=int(member['gdp']['dp_spent']),
                    gdp_spent_prev=0,
                    weekly_gdp=int(member['gdp']['weekly_dp']),
                    last_weekly_gdp=int(member['gdp']['last_weekly_dp']),
                    rp=int(member['rp']['donated']),
                    rp_prev=0,
                    chc=0,
                    chd=0,
                    heroism=0,
                    leadership=0,
                    archaeology=0,
                    jc=0,
                    serendipity="",
                    epeen=0,
                    w1=0,
                    w2=0,
                    a1=0,
                    a2=0,
                    a3=0,
                    a4=0,
                    a5=0,
                    a6=0,
                    a7=0,
                    kill_list=kill_tracker)

                infant_member.put()
                new_member = [member['id']]
                contest_additions = contest_additions + new_member

            #Otherwise, update the existing entry
            else:
                entry.username = member['username']
                entry.active = True
                entry.level = int(member['level'])
                entry.kills = int(member['kills']['kills'])
                entry.xp = int(member['donations']['exp_donated'])
                entry.food = int(member['donations']['food'])
                entry.stone = int(member['donations']['stone'])
                entry.iron = int(member['donations']['iron'])
                entry.lumber = int(member['donations']['lumber'])
                entry.gems = int(member['donations']['gems'])
                entry.money = int(member['donations']['money'])
                entry.jade = int(member['donations']['jade'])
                entry.double = int(member['donations']['double'])
                entry.gdp = int(member['gdp']['dp'])
                entry.gdp_spent = int(member['gdp']['dp_spent'])
                entry.weekly_gdp = int(member['gdp']['weekly_dp'])
                entry.last_weekly_gdp = int(member['gdp']['last_weekly_dp'])
                entry.rp = int(member['rp']['donated'])

                kill_tracker = entry.kill_list

                yesterdays_kills = int(member['kills']['kills']) - int(
                    member['kills']['yesterdays_kills'])

                kill_tracker.append(yesterdays_kills)
                kill_tracker = kill_tracker[1:]
                entry.kill_list = kill_tracker

                #Update the database
                entry.put()

        #[END UPDATE GUILD CONTRIBUTIONS]
        #[START UPDATE STATS]

        root_url = 'https://lyrania.co.uk/api/accounts/public_profile.php?'
        memberlist = []

        members = Member.query(Member.active == True).order(Member.username)

        for person in members:

            #Form URL
            params = {'search': str(person.key.id())}
            encoded_params = urllib.urlencode(params)
            url = root_url + encoded_params

            #Fetch request and format response
            response = urlfetch.fetch(url=url, validate_certificate=True)
            result = json.loads(response.content)
            list_addition = [result]
            memberlist = memberlist + list_addition

            #Do stuff with the database HERE
            person.username = result['name']
            person.level = int(result['level'])
            person.quests = int(result['quests_complete'])
            person.base_stats = int(result['base_stats'])
            person.dp = int(result['earned_dp'])

            #If no longer a member, inactivate and store off previous stats
            if result['guild_name'] != 'Phoenix':
                logging.info("Member no longer in guild: " + person.username)
                person.active = False
                person.xp_prev = person.xp
                person.money_prev = person.money
                person.jade_prev = person.jade
                person.gems_prev = person.gems
                person.food_prev = person.food
                person.iron_prev = person.iron
                person.stone_prev = person.stone
                person.lumber_prev = person.lumber
                person.gdp_prev = person.gdp
                person.gdp_spent_prev = person.gdp_spent
                person.rp_prev = person.rp

            person.put()

        #[END UPDATE STATS]
        #[START UPDATE CONTESTS]

        #Get today and also yesterday, since contests up until yesterday are relevant
        today = datetime.date.today()
        date_adjust = datetime.timedelta(days=-1)
        yesterday = today + date_adjust

        contest_list = Contest.query(Contest.end >= yesterday)

        if contest_list is None:
            logging.info("No active contests")

        else:
            for item in contest_list:
                logging.info("Updating contest: " + item.name)

                if item.start <= today and item.end >= today:
                    item.active = True
                else:
                    item.active = False

                for score in item.scores:
                    candidate_key = try_key(score.member_id)
                    this_member = candidate_key.get()

                    if this_member is not None:
                        score.current_gdp = this_member.gdp
                        score.member_name = this_member.username

                        if item.start == today:
                            score.start_gdp = this_member.gdp

                    else:
                        logging.warning("Unable to retrieve member: " +
                                        score.member_name)

                for addition in contest_additions:
                    candidate_key = try_key(addition)
                    entity = candidate_key.get()

                    if entity is not None:
                        new_score = ContestScore(member_id=entity.key.id(),
                                                 member_name=entity.username,
                                                 start_gdp=entity.gdp,
                                                 current_gdp=entity.gdp)

                        item.scores = item.scores + [new_score]

                    else:
                        logging.warning("Unable to add contest addition: " +
                                        str(addition))

                item.put()
Beispiel #22
0
def show_entries():
    members = Member.all()
    return render_template("practice.html", members=members)
Beispiel #23
0
 def __init__(self, router):
     self._member = Member(router)
Beispiel #24
0
def on_new_member(bot, update):
    logger.info('new members in %d: %d new members', update.message.chat.id,
                len(update.message.new_chat_members))
    # db.save_users(update.message.chat_id, update.message.new_chat_members)
    Member.upsert_many(update.effective_chat.id,
                       update.message.new_chat_members)