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)
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)