from rocketchat_API.rocketchat import RocketChat import os import json from datetime import datetime from monthdelta import monthdelta 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 = RocketChat(None, None, auth_token= os.environ['ROCKETCHAT_AUTH'], user_id= os.environ['ROCKETCHAT_USERID'], server_url=os.environ['ROCKETCHAT_SERVER']) 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 print("Check messages for channels {}".format(channel['name'])) messages = rocket.channels_history(channel["_id"], oldest= recent_date, count= 10000).json() if messages["success"]: messages = list(filter(lambda message: "t" not in message, messages["messages"])) nbMessages = len(messages) 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)) else: print("Error : {}".format(messages["error"])) # 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) print("End chat info generation") def save(info): # Récupération du répertoire racine du repo rootFolder = os.path.join(os.path.dirname(__file__), '..') # Répertoire pour stocker le fichier de sortie dataFolder = os.path.join(rootFolder, 'site', 'data') statsFilePath = os.path.abspath( os.path.join(dataFolder, 'chat.json')) with open(statsFilePath, "w") as file_write: json.dump(info, file_write) def getAllChannels(rocket): index = 0 allChannels = [] while True: channels = rocket.channels_list(offset = index).json() allChannels.extend([ channel for channel in channels['channels'] if 'archived' not in channel]) if channels['count'] + channels['offset'] >= channels['total']: break index += channels['count'] return allChannels 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)) def getAllMessages(rocket, roomid, begindate): index = 0 allMessages = [] while True: messages = rocket.channels_history(roomid, offset = index, oldest= begindate).json() allMessages.extend(messages["m"]) if messages['count'] + messages['offset'] >= messages['total']: break index += messages['count'] return allMessages if __name__ == "__main__": main()