Advertisement
UniQuet0p1

Untitled

Oct 12th, 2020
122
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.58 KB | None | 0 0
  1. """Messenger."""
  2.  
  3.  
  4. class User:
  5. """User class."""
  6.  
  7. def __init__(self, name):
  8. """
  9. User constructor.
  10.  
  11. :param name: Name of the user.
  12. """
  13. self.name = name
  14.  
  15.  
  16. class Chat:
  17. """Chat class."""
  18.  
  19. def __init__(self, name, users):
  20. """
  21. Chat constructor.
  22.  
  23. :param name: Name of the chat.
  24. :param users: Users in the chat.
  25. """
  26. self.name = name
  27. self.users = users
  28. self.messages = []
  29.  
  30.  
  31. class Message:
  32. """Message class."""
  33.  
  34. def __init__(self, user, content):
  35. """
  36. Message constructor.
  37.  
  38. :param user: Author of the message.
  39. :param content: Content of the message.
  40. """
  41. self.user = user
  42. self.content = content
  43. self.reactions = 0
  44.  
  45.  
  46. def write_message(user: User, chat: Chat, content: str) -> None:
  47. """
  48. Write a message to given chat.
  49.  
  50. Create a message with given values and then add it to the chat's messages.
  51.  
  52. :param user: Author of the message.
  53. :param chat: Chat to write the message to.
  54. :param content: Content of the message.
  55. """
  56. message = Message(user, content)
  57. if message.user in chat.users:
  58. chat.messages.append(message)
  59. else:
  60. pass
  61. pass
  62.  
  63.  
  64. def delete_message(chat: Chat, message: Message) -> None:
  65. """
  66. Delete message from chat.
  67.  
  68. :param chat: Chat to delete message from.
  69. :param message: Message to delete from chat.
  70. """
  71. for each in chat.messages:
  72. if message == each.content:
  73. del (each.content)
  74. else:
  75. pass
  76. pass
  77.  
  78.  
  79. def get_messages_by_user(user: User, chat: Chat) -> list:
  80. """
  81. Get messages by user in chat.
  82.  
  83. :param user: User whose messages to get.
  84. :param chat: Chat from where to get user's messages.
  85. :return: A list of messages.
  86. """
  87. messages = []
  88. for each in chat.messages:
  89. if each.user == user:
  90. messages.append(each)
  91. return messages
  92.  
  93.  
  94. def react_to_last_message(chat: Chat) -> None:
  95. """
  96. Add reaction to last message in chat.
  97.  
  98. :param chat: Chat in which the message is.
  99. """
  100. if len(chat.messages) >= 1:
  101. chat.messages[-1].reactions += 1
  102. pass
  103.  
  104.  
  105. def find_most_reacted_message(chat: Chat) -> Message:
  106. """
  107. Find the most reacted message in chat.
  108.  
  109. :param chat: Chat to get the message from.
  110. :return: Most reacted message.
  111. """
  112. most = 0
  113. message = ""
  114. for each in chat.messages:
  115. if each.reactions >= most:
  116. message = each.content
  117. most = each.reactions
  118. else:
  119. pass
  120. return message
  121.  
  122.  
  123. def count_reactions_in_chat(chat: Chat) -> int:
  124. """
  125. Count all reactions in chat.
  126.  
  127. :param chat: Said chat.
  128. :return: The amount of reactions.
  129. """
  130. count = 0
  131. for each in chat.messages:
  132. count += each.reactions
  133. return count
  134.  
  135.  
  136. def count_reactions_by_chat(chats: list) -> dict:
  137. """
  138. Count reactions in every chat.
  139.  
  140. The function should return a dict where the key is the name of a chat and the value is the amount of reactions.
  141.  
  142. :param chats: The chats in question.
  143. :return: A dictionary as described.
  144. """
  145. d = {}
  146. count = 0
  147. for each in chats:
  148. for every in each.messages:
  149. count += every.reactions
  150. d[each.name] = count
  151. count = 0
  152. return d
  153.  
  154.  
  155. if __name__ == '__main__':
  156. user1 = User("Alma")
  157. user2 = User("Ago")
  158. chat = Chat("Python 2020", [user1, user2])
  159.  
  160. write_message(user1, chat, "Parim kohvipiim")
  161. write_message(user2, chat, "Eestimaa farmidest")
  162. write_message(user2, chat, "Piim")
  163. write_message(user1, chat, "Farmi")
  164. for message in chat.messages:
  165. print(f"{message.user.name}: {message.content}")
  166. # Alma: Parim kohvipiim
  167. # Ago: Eestimaa farmidest
  168. # Ago: Piim
  169. # Alma: Farmi
  170.  
  171. to_be_deleted = get_messages_by_user(user2, chat)
  172. for message in to_be_deleted:
  173. delete_message(chat, message)
  174. for message in chat.messages:
  175. print(f"{message.user.name}: {message.content}")
  176. # Alma: Parim kohvipiim
  177. # Alma: Farmi
  178.  
  179. react_to_last_message(chat)
  180. print(chat.messages[0].reactions) # 0
  181. print(chat.messages[-1].reactions) # 1
  182.  
  183. most_reacted = find_most_reacted_message(chat)
  184. print(f"{most_reacted.content}: {most_reacted.reactions}") # Farmi: 1
  185.  
  186. print(count_reactions_in_chat(chat)) # 1
  187. print(count_reactions_by_chat([chat])) # {"Python 2020": 1}
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement