diff --git a/data.py b/data.py index b559006..a920293 100644 --- a/data.py +++ b/data.py @@ -83,7 +83,8 @@ class MsgData: LOGGER.warning(e) if (new := await reaction_series(msg=msg)) is not None: - self.reactions = pd.concat([self.reactions, new.set_index(['msg id', 'emoji'])]) + new = new.set_index(['msg id', 'emoji']) + self.reactions = pd.concat([self.reactions, new]) LOGGER.info(f'\n{str(new)}') def emoji_messages(self, emoji_name: str, days: int): diff --git a/msg.py b/msg.py index df2e986..15920ef 100644 --- a/msg.py +++ b/msg.py @@ -84,24 +84,28 @@ def emoji_messages(msg_df, react_df, emoji_name: str, days: int = 10) -> pd.Data if emoji_name in cached_emojis: reactions = react_df.loc[pd.IndexSlice[:, emoji_name], :] reacted_msgs = msg_df.loc[reactions.index.get_level_values(0).to_list()] + reacted_msgs = reacted_msgs[~reacted_msgs.index.duplicated()].sort_index() if reacted_msgs.shape[0] == 0: LOGGER.error(f'No messages found with {emoji_name} reactions') else: LOGGER.info( - f'Found {reacted_msgs.shape[0]} messages for the leaderboard, {reactions["count"].sum():.0f} reactions total') + f'Found {reacted_msgs.shape[0]} messages for the leaderboard, ' + \ + f'{reactions["count"].sum():.0f} reactions total' + ) try: reacted_msgs['count'] = reacted_msgs.index.to_series().apply( lambda idx: reactions.loc[pd.IndexSlice[idx, emoji_name], 'count']) except pandas.errors.InvalidIndexError as e: LOGGER.error(f'{e}\n{reacted_msgs[reacted_msgs.index.duplicated()]}') + raise + else: + reacted_msgs = reacted_msgs[ + reacted_msgs['created'] >= (datetime.today() - timedelta(days=days)).astimezone()] - reacted_msgs = reacted_msgs[ - reacted_msgs['created'] >= (datetime.today() - timedelta(days=days)).astimezone()] + reacted_msgs = reacted_msgs.sort_values('count', ascending=False) - reacted_msgs = reacted_msgs.sort_values('count', ascending=False) - - return reacted_msgs + return reacted_msgs else: LOGGER.error(f'Emoji not found in reactions DataFrame: {emoji_name}') diff --git a/robopage.py b/robopage.py index 7cafebe..384d96e 100644 --- a/robopage.py +++ b/robopage.py @@ -39,7 +39,7 @@ class RoboPage(discord.Client): self.data: data.MsgData = await data.MsgData.create( client=self, - limit=3000, + limit=5000, # limit=20, days=30, ) @@ -48,20 +48,22 @@ class RoboPage(discord.Client): # await alive() async def handle_message(self, message): - await self.data.add_msg(message) + if hasattr(self, 'data'): + await self.data.add_msg(message) if message.author != self.user: if (m := self.leaderboard_regex.match(message.content)) is not None: try: - await message.reply(self.data.emoji_leaderboard(emoji_name=m.group('emoji'), days=14)) + await message.reply(self.data.emoji_leaderboard(emoji_name=m.group('emoji').lower(), days=14)) except KeyError as e: + LOGGER.exception(e) await message.reply(f"I couldn't find any {m.group('emoji')} reactions. Leave me alone!") elif (m := self.most_regex.match(message.content)) is not None: days = m.group('days') or 14 try: await message.reply( - await self.data.biggest_single(client=self, emoji=m.group('emoji'), days=int(days)) + await self.data.biggest_single(client=self, emoji=m.group('emoji').lower(), days=int(days)) ) except IndexError as e: await message.reply('NObody')