from rocketchat_API.rocketchat import RocketChat import os import json from datetime import datetime from monthdelta import monthdelta from common.rocketchathelper import getAllChannels, getAllMessages, Connection from common.savehelper import save def main(): print("Start chat info generation") crapauds_total = 0 crapauds_recent = 0 channels_total = 0 channels_recent = 0 channels_list = [] messages_total = 0 messages_recent = 0 cohortes = [] recent_date = datetime.now() - monthdelta() rocket = Connection() print("Check users") users = getAllActiveUsers(rocket) crapauds_total = len(users) print("Check channels") channels = getAllChannels(rocket) channels_total = len(channels) users = [] for channel in channels: if "lm" not in channel: continue messages_total += int(channel["msgs"]) date = channel["lm"] channel_date = datetime.strptime(date, "%Y-%m-%dT%H:%M:%S.%fZ") if channel["name"].startswith("cohorte-"): cohortes.append(channel["name"][8:]) if channel_date > recent_date: channels_recent += 1 messages = getAllMessages(rocket, channel["_id"], begindate= recent_date) nbMessages = len(messages) print("Check messages for channels {} ({})".format(channel['name'], nbMessages)) messages_recent += nbMessages if (channel["name"] != "general") and (channel["name"] != "accueil"): channels_list.append((channel["name"], nbMessages)) users.extend(map(lambda message: message["u"]["_id"], messages)) # Get the channels with the most number of message channels_list.sort(key=lambda channel: channel[1], reverse= True) channels_recentlist = list(map(lambda channel: channel[0], channels_list)) crapauds_recent = len(set(users)) info = { "crapauds": { "total": crapauds_total, "recent": crapauds_recent }, "canaux": { "total": channels_total, "recent": channels_recent, # Get only the 10 first channels "liste": channels_recentlist[0:10] }, "messages": { "total": messages_total, "recent": messages_recent }, "cohortes": cohortes } save(info, "chat") print("End chat info generation") def getAllActiveUsers(rocket): index = 0 allUsers = [] while True: users = rocket.users_list(offset = index).json() allUsers.extend(users["users"]) if users['count'] + users['offset'] >= users['total']: break index += users['count'] return list(filter( lambda user: user["active"] ,allUsers)) if __name__ == "__main__": main()