!bot stats rewrite

- Only count users once
- Report total homeserver count
- Nicer format of top ten
This commit is contained in:
gammafn 2021-04-28 13:13:21 -05:00
parent c4d075a97f
commit 40b810bec8
1 changed files with 15 additions and 11 deletions

View File

@ -98,22 +98,26 @@ class MatrixModule(BotModule):
async def stats(self, bot, room): async def stats(self, bot, room):
roomcount = len(bot.client.rooms) roomcount = len(bot.client.rooms)
usercount = 0
homeservers = dict() homeservers = dict()
for croomid in bot.client.rooms: for croomid in bot.client.rooms:
roomobj = bot.client.rooms[croomid] try:
usercount = usercount + len(roomobj.users) users = bot.client.rooms[croomid].users
for user in roomobj.users: except (KeyError, ValueError) as e:
hs = user.split(':')[1] self.logger.warning(f"Couldn't get user list in room with id {croomid}, skipping: {repr(e)}")
continue
for user in users:
user, hs = user.split(':', 1)
if homeservers.get(hs): if homeservers.get(hs):
homeservers[hs] = homeservers[hs] + 1 homeservers[hs].add(user)
else: else:
homeservers[hs] = 1 homeservers[hs] = {user}
homeservers = {k: len(v) for k, v in homeservers.items()}
usercount = sum(homeservers.values())
hscount = len(homeservers)
homeservers = sorted(homeservers.items(), key=lambda kv: (kv[1], kv[0]), reverse=True) homeservers = sorted(homeservers.items(), key=lambda kv: (kv[1], kv[0]), reverse=True)
if len(homeservers) > 10: homeservers = ', '.join(['{} ({})'.format(*hs) for hs in homeservers[:10]])
homeservers = homeservers[0:10] await bot.send_text(room, f'I\'m seeing {usercount} users in {roomcount} rooms.'
await bot.send_text(room, f' Top ten homeservers (out of {hscount}): {homeservers}')
f'I\'m seeing {usercount} users in {roomcount} rooms. Top ten homeservers: {homeservers}')
async def status(self, bot, room): async def status(self, bot, room):
systime = time.time() systime = time.time()