Ejemplo n.º 1
0
def serverInfo(guildId, channelId):
    # Auth and session
    token = session.get('oauth2_token')
    (user, usertoken) = get_user_cache(token, cache)
    check_auth(user, usertoken)

    channelId = channelId if (channelId != None) else guildId

    mysqldb = MySQL(current_app.config['DB_HOST'], current_app.config['DB_USER'], current_app.config['DB_PASS'])
    mysqldb.connect()
    messages = mysqldb.getMessages(channelId)
    nbMessages = len(messages)

    # API calls
    headers = {'authorization': usertoken}
    channel = requests.get(API_BASE_URL + '/channels/' + channelId, headers=headers).json()
    guild    = requests.get(API_BASE_URL + '/guilds/' + guildId, headers=headers).json()
    channels = requests.get(API_BASE_URL + '/guilds/' + guildId + '/channels', headers=headers).json()
    cache['guilds'][guildId] = guild

    guild = cache['guilds'][channel['guild_id']]
    data = {
        'guildId': guildId,
        'channelId': channelId,
        'channels': channels
    }

    channelinfos = {
        'nbmessages' : nbMessages,
        'nbchannels' : 0,
        'firstmessage' : mysqldb.getFirstMessage(channelId),
        'lastmessage' : mysqldb.getLastMessage(channelId)
    }

    # Compute things

    # Render
    return render_template("layout.html", contentTemplate="server-info.html", user=user, server=guild, data=data, channelinfos=channelinfos)
Ejemplo n.º 2
0
        retryCount += 1
        if (retryCount == 2):
            logging.error('Timeout:user ' + id +
                          ' cannot be filled. Process end.')
            retryCount = 0
            pass
        else:
            logging.warning('Timeout:user ' + id +
                            ' cannot be filled. Retrying...')
            autoFill(id, cursor)


# def readFile():
#     fileHandler = open("Id.txt", "r");
#     IdList = fileHandler.read().splitlines();
#     fileHandler.close();
#     return IdList;

if __name__ == "__main__":
    dt = DataLoader()
    users = dt.get_users()
    dt.update_load_status(users)
    print(users)
    db = MySQL()
    con = db.connect()
    with con:
        with con.cursor() as cursor:
            for user in users:
                autoFill(user, cursor)
        con.commit()
Ejemplo n.º 3
0
def start_database():
    db = MySQL()
    db.init_app(app)
    conn = db.connect()
    conn.autocommit(1)
    return conn
Ejemplo n.º 4
0
def graph(channelId):
    # Logic
    mysqldb = MySQL(current_app.config['DB_HOST'], current_app.config['DB_USER'], current_app.config['DB_PASS'])
    mysqldb.connect()
    messages = mysqldb.getMessages(channelId)

    # main logic
    count = {}
    label = {}
    for message in messages:
        if message['author_id'] in count:
            count[message['author_id']]  += 1
        else:
            count[message['author_id']] = 1
            label[message['author_id']] = message['author_username']

    nodes = []

    authors = len(count)
    i = 0
    for author in count:
        color = colorsys.hsv_to_rgb(1/authors*i,1,1)
        node = {
            'id': author,
            'label': label[author],
            'color': ('#%02X%02X%02X' % (int(color[0]*255), int(color[1]*255), int(color[2]*255))),
            'value': count[author]
        }
        nodes.append(node)
        i+=1

    #[{from: 1, to: 3, value: 3},..]
    edges = []
    labels = {}
    contentMessages = {}
    days = {}
    dayMember = {}
    mostWord = {}

    for author in count:
        dayMember[author] = {}

    for i in range(1, len(messages)):
        # graph
        key = (messages[i]['author_id'],messages[i-1]['author_id'])
        if key in labels:
            labels[key] += 1
            contentMessages[key]+= (" \n " + messages[i]['content'])
        else:
            labels[key] = 1
            contentMessages[key] = messages[i]['content']
        # time
        timestamp = messages[i]['timestamp']
        d = datetime.date(timestamp.year, timestamp.month, timestamp.day)
        timeKey = calendar.timegm(d.timetuple())
        member = messages[i]['author_id']
        if (timeKey in dayMember[member]):
            dayMember[member][timeKey] += 1
        else:
            dayMember[member][timeKey] = 1
        if (timeKey in days):
            days[timeKey] += 1
        else:
            days[timeKey] = 1

    # --- WORD COUNT ---
    for contentMessage in contentMessages:
        msg = contentMessages[contentMessage]
        words = msg.split()
        filteredEN_words = [word for word in words if word not in getEnglishStopsWords()]
        filteredFR_words = [word for word in filteredEN_words if word not in getFrenchStopsWords()]

        word_counts = Counter(filteredFR_words)
        num_words = sum(word_counts.values())

        lst = [(value, key) for key, value in word_counts.items()]
        lst.sort(reverse=True)

        if len(lst) > 0:
            mostWord[contentMessage] = lst[0]
        else:
            mostWord[contentMessage] = ''



    dayList = {}
    for member in dayMember:
        dayList[member] = []
        daysSorted = sorted(dayMember[member])
        for day in daysSorted:
            dayList[member].append([day*1000, dayMember[member][day]])



    for label in labels:
        edge = {
            'from': label[0],
            'to': label[1],
            'arrows': 'to',
            'label' : mostWord[label][1] if (len(mostWord[label]) >= 2) else '',
            'value': labels[label]
        }
        edges.append(edge)


    # Render
    json = {
        'nodes': nodes,
        'edges': edges,
        'days': dayList
    }

    return jsonify(json)
Ejemplo n.º 5
0
def compute(guildId):
    # Auth and session
    token = session.get('oauth2_token')
    (user, usertoken) = get_user_cache(token, cache)

    # Logic
    way = request.args.get('time')
    channelId = request.args.get('channelId')
    mysqldb = MySQL(current_app.config['DB_HOST'], current_app.config['DB_USER'], current_app.config['DB_PASS'])
    mysqldb.connect()
    params = {}

    nbMessagesStr = request.args.get('number')
    if nbMessagesStr is not None:
        nbMessagesLeft = int(request.args.get('number'))
    else:
        nbMessagesLeft = 100
    if nbMessagesLeft < 0:
        nbMessagesLeft = 100
    if nbMessagesLeft > 1000:
        nbMessagesLeft = 1000

    # API calls
    headers = {'authorization': usertoken}

    first = True

    while nbMessagesLeft > 0:
        if not first:
            time.sleep(1)
        first = False
        nbToTake = nbMessagesLeft
        if nbMessagesLeft > 100:
            nbToTake = 100

        lastMessageId = mysqldb.getLastMessage(channelId)
        if lastMessageId is None:
            channel = requests.get(API_BASE_URL + '/channels/' + channelId, headers=headers).json()
            params = {'around': int(channel['last_message_id']), 'limit': nbToTake}
        elif way == 'after':
            lastMessageId = mysqldb.getLastMessage(channelId)
            params = {'after': int(lastMessageId['id']), 'limit': nbToTake}
        elif way == 'before':
            firstMessageId = mysqldb.getFirstMessage(channelId)
            params = {'before': int(firstMessageId['id']), 'limit': nbToTake}
        else:
            abort(412, "Incorrect 'time' parameter.")
            return

        messages = requests.get(API_BASE_URL + '/channels/' + channelId + '/messages', headers=headers, params=params).json()

        def take8(l): return [l[0], l[1][:8]]

        toInsert = [(str(message['id']),
                     str(guildId),
                     str(channelId),
                     str(message['author']['id']),
                     str(message['content']),
                     str(' '.join(take8(message['timestamp'].split('T')))),
                     str(message['author']['username']),
                     message['author']['discriminator'],
                     str(message['author']['avatar'])) for message in messages]
        # DB Fill
        returnValue = mysqldb.insertMessages(toInsert)

        nbMessagesLeft -= nbToTake

    # Render
    json = {
        'result': 'ok',
        'message': 'Successfully inserted messages'
    }

    return jsonify(json)