def create_message_from_dict(message_data) -> Message: message = Message( id=message_data["id"], content=message_data["content"], guild_id=message_data["guild_id"], author_id=message_data["author_id"], channel_id=message_data["channel_id"], ) message.is_duplicate = message_data["is_duplicate"] message.creation_time = datetime.datetime.strptime( message_data["creation_time"], "%f:%S:%M:%H:%d:%m:%Y") log.info("Created Message(id=%s) from dict", message.id) return message
def _calculate_ratios( self, message: Message, member: Member, ) -> None: """ Calculates a messages relation to other messages """ for message_obj in member.messages: # This calculates the relation to each other if message == message_obj: raise DuplicateObject elif ( self.options.per_channel_spam and message.channel_id != message_obj.channel_id ): # This user's spam should only be counted per channel # and these messages are in different channel continue elif ( fuzz.token_sort_ratio(message.content, message_obj.content) >= self.options.message_duplicate_accuracy ): """ The handler works off an internal message duplicate counter so just increment that and then let our logic process it later """ self._increment_duplicate_count(member, channel_id=message.channel_id) message.is_duplicate = True message_obj.is_duplicate = True if ( self._get_duplicate_count( member, channel_id=message.channel_id, ) >= self.options.message_duplicate_count ): break