spluspy 2.1.3__tar.gz → 2.1.4__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (307) hide show
  1. {spluspy-2.1.3 → spluspy-2.1.4}/PKG-INFO +1 -1
  2. {spluspy-2.1.3 → spluspy-2.1.4}/pyproject.toml +1 -1
  3. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/__version__.py +1 -1
  4. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/_engine/version.py +1 -1
  5. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/admin.py +44 -0
  6. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/client/client.py +72 -16
  7. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/models/message.py +73 -16
  8. {spluspy-2.1.3 → spluspy-2.1.4}/.gitignore +0 -0
  9. {spluspy-2.1.3 → spluspy-2.1.4}/CHANGELOG.md +0 -0
  10. {spluspy-2.1.3 → spluspy-2.1.4}/CONTRIBUTING.md +0 -0
  11. {spluspy-2.1.3 → spluspy-2.1.4}/Dockerfile +0 -0
  12. {spluspy-2.1.3 → spluspy-2.1.4}/LICENSE +0 -0
  13. {spluspy-2.1.3 → spluspy-2.1.4}/MANIFEST.in +0 -0
  14. {spluspy-2.1.3 → spluspy-2.1.4}/README.md +0 -0
  15. {spluspy-2.1.3 → spluspy-2.1.4}/README.rst +0 -0
  16. {spluspy-2.1.3 → spluspy-2.1.4}/examples/01_hello_bot.py +0 -0
  17. {spluspy-2.1.3 → spluspy-2.1.4}/examples/02_echo_bot.py +0 -0
  18. {spluspy-2.1.3 → spluspy-2.1.4}/examples/03_command_bot.py +0 -0
  19. {spluspy-2.1.3 → spluspy-2.1.4}/examples/04_private_only.py +0 -0
  20. {spluspy-2.1.3 → spluspy-2.1.4}/examples/05_group_only.py +0 -0
  21. {spluspy-2.1.3 → spluspy-2.1.4}/examples/06_regex_bot.py +0 -0
  22. {spluspy-2.1.3 → spluspy-2.1.4}/examples/07_user_filter.py +0 -0
  23. {spluspy-2.1.3 → spluspy-2.1.4}/examples/08_combined_filters.py +0 -0
  24. {spluspy-2.1.3 → spluspy-2.1.4}/examples/09_inline_keyboard.py +0 -0
  25. {spluspy-2.1.3 → spluspy-2.1.4}/examples/10_reply_keyboard.py +0 -0
  26. {spluspy-2.1.3 → spluspy-2.1.4}/examples/11_message_actions.py +0 -0
  27. {spluspy-2.1.3 → spluspy-2.1.4}/examples/12_media_bot.py +0 -0
  28. {spluspy-2.1.3 → spluspy-2.1.4}/examples/13_fsm_bot.py +0 -0
  29. {spluspy-2.1.3 → spluspy-2.1.4}/examples/14_plugin_bot.py +0 -0
  30. {spluspy-2.1.3 → spluspy-2.1.4}/examples/15_middleware_bot.py +0 -0
  31. {spluspy-2.1.3 → spluspy-2.1.4}/examples/16_scheduler_bot.py +0 -0
  32. {spluspy-2.1.3 → spluspy-2.1.4}/examples/17_conversation.py +0 -0
  33. {spluspy-2.1.3 → spluspy-2.1.4}/examples/18_chat_management.py +0 -0
  34. {spluspy-2.1.3 → spluspy-2.1.4}/examples/19_event_types.py +0 -0
  35. {spluspy-2.1.3 → spluspy-2.1.4}/examples/20_sync_bot.py +0 -0
  36. {spluspy-2.1.3 → spluspy-2.1.4}/examples/21_album_handler.py +0 -0
  37. {spluspy-2.1.3 → spluspy-2.1.4}/examples/22_download_bot.py +0 -0
  38. {spluspy-2.1.3 → spluspy-2.1.4}/examples/23_url_button.py +0 -0
  39. {spluspy-2.1.3 → spluspy-2.1.4}/examples/24_string_session.py +0 -0
  40. {spluspy-2.1.3 → spluspy-2.1.4}/examples/25_error_handling.py +0 -0
  41. {spluspy-2.1.3 → spluspy-2.1.4}/examples/25_working_bot.py +0 -0
  42. {spluspy-2.1.3 → spluspy-2.1.4}/examples/26_message_entities.py +0 -0
  43. {spluspy-2.1.3 → spluspy-2.1.4}/examples/27_search_messages.py +0 -0
  44. {spluspy-2.1.3 → spluspy-2.1.4}/examples/28_poll_bot.py +0 -0
  45. {spluspy-2.1.3 → spluspy-2.1.4}/examples/29_dice_bot.py +0 -0
  46. {spluspy-2.1.3 → spluspy-2.1.4}/examples/30_cache_bot.py +0 -0
  47. {spluspy-2.1.3 → spluspy-2.1.4}/examples/31_reaction_bot.py +0 -0
  48. {spluspy-2.1.3 → spluspy-2.1.4}/examples/32_mark_read_bot.py +0 -0
  49. {spluspy-2.1.3 → spluspy-2.1.4}/examples/33_context_manager.py +0 -0
  50. {spluspy-2.1.3 → spluspy-2.1.4}/examples/34_user_info.py +0 -0
  51. {spluspy-2.1.3 → spluspy-2.1.4}/examples/35_chat_info.py +0 -0
  52. {spluspy-2.1.3 → spluspy-2.1.4}/examples/36_forward_copy.py +0 -0
  53. {spluspy-2.1.3 → spluspy-2.1.4}/examples/37_admin_bot.py +0 -0
  54. {spluspy-2.1.3 → spluspy-2.1.4}/examples/38_media_filters.py +0 -0
  55. {spluspy-2.1.3 → spluspy-2.1.4}/examples/39_status_bot.py +0 -0
  56. {spluspy-2.1.3 → spluspy-2.1.4}/examples/40_delete_detection.py +0 -0
  57. {spluspy-2.1.3 → spluspy-2.1.4}/examples/41_read_detection.py +0 -0
  58. {spluspy-2.1.3 → spluspy-2.1.4}/examples/42_raw_events.py +0 -0
  59. {spluspy-2.1.3 → spluspy-2.1.4}/examples/43_poll_handler.py +0 -0
  60. {spluspy-2.1.3 → spluspy-2.1.4}/examples/44_reaction_handler.py +0 -0
  61. {spluspy-2.1.3 → spluspy-2.1.4}/examples/45_typing_handler.py +0 -0
  62. {spluspy-2.1.3 → spluspy-2.1.4}/examples/46_get_messages.py +0 -0
  63. {spluspy-2.1.3 → spluspy-2.1.4}/examples/47_iter_messages.py +0 -0
  64. {spluspy-2.1.3 → spluspy-2.1.4}/examples/48_get_members.py +0 -0
  65. {spluspy-2.1.3 → spluspy-2.1.4}/examples/49_resolve_username.py +0 -0
  66. {spluspy-2.1.3 → spluspy-2.1.4}/examples/50_invoke.py +0 -0
  67. {spluspy-2.1.3 → spluspy-2.1.4}/setup.py +0 -0
  68. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/__init__.py +0 -0
  69. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/_engine/__init__.py +0 -0
  70. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/_engine/_updates/__init__.py +0 -0
  71. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/_engine/_updates/entitycache.py +0 -0
  72. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/_engine/_updates/messagebox.py +0 -0
  73. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/_engine/_updates/session.py +0 -0
  74. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/_engine/client/__init__.py +0 -0
  75. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/_engine/client/account.py +0 -0
  76. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/_engine/client/auth.py +0 -0
  77. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/_engine/client/bots.py +0 -0
  78. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/_engine/client/buttons.py +0 -0
  79. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/_engine/client/chats.py +0 -0
  80. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/_engine/client/dialogs.py +0 -0
  81. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/_engine/client/downloads.py +0 -0
  82. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/_engine/client/messageparse.py +0 -0
  83. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/_engine/client/messages.py +0 -0
  84. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/_engine/client/soroushclient.py +0 -0
  85. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/_engine/client/telegrambaseclient.py +0 -0
  86. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/_engine/client/updates.py +0 -0
  87. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/_engine/client/uploads.py +0 -0
  88. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/_engine/client/users.py +0 -0
  89. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/_engine/crypto/__init__.py +0 -0
  90. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/_engine/crypto/aes.py +0 -0
  91. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/_engine/crypto/aesctr.py +0 -0
  92. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/_engine/crypto/authkey.py +0 -0
  93. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/_engine/crypto/cdndecrypter.py +0 -0
  94. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/_engine/crypto/factorization.py +0 -0
  95. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/_engine/crypto/fast_aes.pyx +0 -0
  96. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/_engine/crypto/fast_rsa.pyx +0 -0
  97. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/_engine/crypto/libssl.py +0 -0
  98. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/_engine/crypto/rsa.py +0 -0
  99. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/_engine/custom.py +0 -0
  100. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/_engine/errors/__init__.py +0 -0
  101. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/_engine/errors/common.py +0 -0
  102. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/_engine/errors/rpcbaseerrors.py +0 -0
  103. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/_engine/errors/rpcerrorlist.py +0 -0
  104. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/_engine/events/__init__.py +0 -0
  105. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/_engine/events/album.py +0 -0
  106. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/_engine/events/callbackquery.py +0 -0
  107. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/_engine/events/chataction.py +0 -0
  108. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/_engine/events/common.py +0 -0
  109. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/_engine/events/inlinequery.py +0 -0
  110. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/_engine/events/messagedeleted.py +0 -0
  111. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/_engine/events/messageedited.py +0 -0
  112. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/_engine/events/messageread.py +0 -0
  113. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/_engine/events/newmessage.py +0 -0
  114. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/_engine/events/raw.py +0 -0
  115. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/_engine/events/userupdate.py +0 -0
  116. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/_engine/extensions/__init__.py +0 -0
  117. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/_engine/extensions/binaryreader.py +0 -0
  118. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/_engine/extensions/html.py +0 -0
  119. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/_engine/extensions/markdown.py +0 -0
  120. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/_engine/extensions/messagepacker.py +0 -0
  121. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/_engine/functions.py +0 -0
  122. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/_engine/helpers.py +0 -0
  123. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/_engine/hints.py +0 -0
  124. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/_engine/network/__init__.py +0 -0
  125. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/_engine/network/authenticator.py +0 -0
  126. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/_engine/network/connection/__init__.py +0 -0
  127. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/_engine/network/connection/connection.py +0 -0
  128. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/_engine/network/connection/http.py +0 -0
  129. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/_engine/network/connection/tcpabridged.py +0 -0
  130. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/_engine/network/connection/tcpfull.py +0 -0
  131. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/_engine/network/connection/tcpintermediate.py +0 -0
  132. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/_engine/network/connection/tcpmtproxy.py +0 -0
  133. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/_engine/network/connection/tcpobfuscated.py +0 -0
  134. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/_engine/network/connection/websocket.py +0 -0
  135. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/_engine/network/mtprotoplainsender.py +0 -0
  136. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/_engine/network/mtprotosender.py +0 -0
  137. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/_engine/network/mtprotostate.py +0 -0
  138. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/_engine/network/requeststate.py +0 -0
  139. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/_engine/password.py +0 -0
  140. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/_engine/requestiter.py +0 -0
  141. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/_engine/sessions/__init__.py +0 -0
  142. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/_engine/sessions/abstract.py +0 -0
  143. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/_engine/sessions/memory.py +0 -0
  144. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/_engine/sessions/sqlite.py +0 -0
  145. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/_engine/sessions/string.py +0 -0
  146. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/_engine/sync.py +0 -0
  147. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/_engine/tl/__init__.py +0 -0
  148. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/_engine/tl/alltlobjects.py +0 -0
  149. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/_engine/tl/core/__init__.py +0 -0
  150. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/_engine/tl/core/gzippacked.py +0 -0
  151. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/_engine/tl/core/messagecontainer.py +0 -0
  152. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/_engine/tl/core/rpcresult.py +0 -0
  153. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/_engine/tl/core/tlmessage.py +0 -0
  154. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/_engine/tl/custom/__init__.py +0 -0
  155. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/_engine/tl/custom/adminlogevent.py +0 -0
  156. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/_engine/tl/custom/button.py +0 -0
  157. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/_engine/tl/custom/chatgetter.py +0 -0
  158. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/_engine/tl/custom/conversation.py +0 -0
  159. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/_engine/tl/custom/dialog.py +0 -0
  160. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/_engine/tl/custom/draft.py +0 -0
  161. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/_engine/tl/custom/file.py +0 -0
  162. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/_engine/tl/custom/forward.py +0 -0
  163. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/_engine/tl/custom/inlinebuilder.py +0 -0
  164. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/_engine/tl/custom/inlineresult.py +0 -0
  165. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/_engine/tl/custom/inlineresults.py +0 -0
  166. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/_engine/tl/custom/inputsizedfile.py +0 -0
  167. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/_engine/tl/custom/message.py +0 -0
  168. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/_engine/tl/custom/messagebutton.py +0 -0
  169. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/_engine/tl/custom/participantpermissions.py +0 -0
  170. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/_engine/tl/custom/qrlogin.py +0 -0
  171. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/_engine/tl/custom/sendergetter.py +0 -0
  172. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/_engine/tl/custom/types.py +0 -0
  173. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/_engine/tl/functions/__init__.py +0 -0
  174. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/_engine/tl/functions/account.py +0 -0
  175. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/_engine/tl/functions/auth.py +0 -0
  176. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/_engine/tl/functions/bots.py +0 -0
  177. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/_engine/tl/functions/channels.py +0 -0
  178. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/_engine/tl/functions/chatlists.py +0 -0
  179. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/_engine/tl/functions/conference.py +0 -0
  180. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/_engine/tl/functions/contacts.py +0 -0
  181. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/_engine/tl/functions/folders.py +0 -0
  182. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/_engine/tl/functions/help.py +0 -0
  183. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/_engine/tl/functions/langpack.py +0 -0
  184. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/_engine/tl/functions/messages.py +0 -0
  185. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/_engine/tl/functions/payments.py +0 -0
  186. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/_engine/tl/functions/phone.py +0 -0
  187. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/_engine/tl/functions/photos.py +0 -0
  188. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/_engine/tl/functions/premium.py +0 -0
  189. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/_engine/tl/functions/stats.py +0 -0
  190. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/_engine/tl/functions/stories.py +0 -0
  191. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/_engine/tl/functions/thirdParty.py +0 -0
  192. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/_engine/tl/functions/updates.py +0 -0
  193. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/_engine/tl/functions/upload.py +0 -0
  194. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/_engine/tl/functions/users.py +0 -0
  195. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/_engine/tl/patched/__init__.py +0 -0
  196. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/_engine/tl/tlobject.py +0 -0
  197. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/_engine/tl/types/__init__.py +0 -0
  198. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/_engine/tl/types/account.py +0 -0
  199. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/_engine/tl/types/auth.py +0 -0
  200. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/_engine/tl/types/bots.py +0 -0
  201. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/_engine/tl/types/channels.py +0 -0
  202. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/_engine/tl/types/chatlists.py +0 -0
  203. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/_engine/tl/types/conference.py +0 -0
  204. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/_engine/tl/types/contacts.py +0 -0
  205. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/_engine/tl/types/help.py +0 -0
  206. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/_engine/tl/types/messages.py +0 -0
  207. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/_engine/tl/types/payments.py +0 -0
  208. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/_engine/tl/types/phone.py +0 -0
  209. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/_engine/tl/types/photos.py +0 -0
  210. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/_engine/tl/types/premium.py +0 -0
  211. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/_engine/tl/types/stats.py +0 -0
  212. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/_engine/tl/types/stickers.py +0 -0
  213. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/_engine/tl/types/storage.py +0 -0
  214. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/_engine/tl/types/stories.py +0 -0
  215. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/_engine/tl/types/thirdParty.py +0 -0
  216. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/_engine/tl/types/update.py +0 -0
  217. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/_engine/tl/types/updates.py +0 -0
  218. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/_engine/tl/types/upload.py +0 -0
  219. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/_engine/tl/types/users.py +0 -0
  220. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/_engine/types.py +0 -0
  221. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/_engine/utils.py +0 -0
  222. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/afk.py +0 -0
  223. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/cli.py +0 -0
  224. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/client/__init__.py +0 -0
  225. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/client/chat_mixin.py +0 -0
  226. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/client/conversation.py +0 -0
  227. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/client/media_mixin.py +0 -0
  228. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/compat.py +0 -0
  229. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/config.py +0 -0
  230. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/errors/__init__.py +0 -0
  231. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/errors/exceptions.py +0 -0
  232. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/events/__init__.py +0 -0
  233. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/events/album.py +0 -0
  234. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/events/base.py +0 -0
  235. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/events/callback.py +0 -0
  236. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/events/chat_action.py +0 -0
  237. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/events/edited.py +0 -0
  238. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/events/inline.py +0 -0
  239. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/events/message.py +0 -0
  240. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/events/message_deleted.py +0 -0
  241. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/events/message_read.py +0 -0
  242. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/events/user_update.py +0 -0
  243. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/filters/__init__.py +0 -0
  244. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/filters/filters.py +0 -0
  245. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/fsm/__init__.py +0 -0
  246. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/fsm/state.py +0 -0
  247. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/middleware/__init__.py +0 -0
  248. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/middleware/base.py +0 -0
  249. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/middleware/rate_limit.py +0 -0
  250. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/mirror.py +0 -0
  251. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/models/__init__.py +0 -0
  252. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/models/bot.py +0 -0
  253. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/models/chat.py +0 -0
  254. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/models/enums.py +0 -0
  255. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/models/media.py +0 -0
  256. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/models/objects.py +0 -0
  257. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/models/user.py +0 -0
  258. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/network/__init__.py +0 -0
  259. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/network/client.py +0 -0
  260. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/network/connection.py +0 -0
  261. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/network/http_client.py +0 -0
  262. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/network/mtproto.py +0 -0
  263. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/network/protocols.py +0 -0
  264. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/network/spluspy_adapter.py +0 -0
  265. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/network/transport.py +0 -0
  266. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/plugins/__init__.py +0 -0
  267. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/plugins/loader.py +0 -0
  268. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/py.typed +0 -0
  269. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/scheduler/__init__.py +0 -0
  270. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/scheduler/scheduler.py +0 -0
  271. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/session/__init__.py +0 -0
  272. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/session/base.py +0 -0
  273. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/session/memory.py +0 -0
  274. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/session/sqlite.py +0 -0
  275. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/session/string.py +0 -0
  276. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/storage/__init__.py +0 -0
  277. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/storage/base.py +0 -0
  278. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/storage/entity_cache.py +0 -0
  279. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/storage/memory.py +0 -0
  280. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/storage/postgres.py +0 -0
  281. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/storage/redis.py +0 -0
  282. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/storage/sqlite.py +0 -0
  283. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/sync/__init__.py +0 -0
  284. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/sync/client.py +0 -0
  285. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/utils/__init__.py +0 -0
  286. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/utils/batch.py +0 -0
  287. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/utils/cache.py +0 -0
  288. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/utils/chat_lock.py +0 -0
  289. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/utils/file_transfer.py +0 -0
  290. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/utils/helpers.py +0 -0
  291. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/utils/logger.py +0 -0
  292. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/utils/rate_limiter.py +0 -0
  293. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/utils/resolver.py +0 -0
  294. {spluspy-2.1.3 → spluspy-2.1.4}/spluspy/utils/version_check.py +0 -0
  295. {spluspy-2.1.3 → spluspy-2.1.4}/tests/__init__.py +0 -0
  296. {spluspy-2.1.3 → spluspy-2.1.4}/tests/test_client.py +0 -0
  297. {spluspy-2.1.3 → spluspy-2.1.4}/tests/test_filters.py +0 -0
  298. {spluspy-2.1.3 → spluspy-2.1.4}/tests/test_fsm.py +0 -0
  299. {spluspy-2.1.3 → spluspy-2.1.4}/tests/test_fsm_enhanced.py +0 -0
  300. {spluspy-2.1.3 → spluspy-2.1.4}/tests/test_middleware.py +0 -0
  301. {spluspy-2.1.3 → spluspy-2.1.4}/tests/test_rate_limiter.py +0 -0
  302. {spluspy-2.1.3 → spluspy-2.1.4}/tests/test_resolver.py +0 -0
  303. {spluspy-2.1.3 → spluspy-2.1.4}/tests/test_scheduler.py +0 -0
  304. {spluspy-2.1.3 → spluspy-2.1.4}/tests/test_session.py +0 -0
  305. {spluspy-2.1.3 → spluspy-2.1.4}/tests/test_storage.py +0 -0
  306. {spluspy-2.1.3 → spluspy-2.1.4}/tests/test_types.py +0 -0
  307. {spluspy-2.1.3 → spluspy-2.1.4}/tests/test_utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: spluspy
3
- Version: 2.1.3
3
+ Version: 2.1.4
4
4
  Summary: A modern async Python library for interacting with Soroush Plus
5
5
  Project-URL: Homepage, https://github.com/Itskillmaster/spluspy
6
6
  Project-URL: Documentation, https://github.com/Itskillmaster/spluspy#readme
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "spluspy"
7
- version = "2.1.3"
7
+ version = "2.1.4"
8
8
  description = "A modern async Python library for interacting with Soroush Plus"
9
9
  readme = "README.md"
10
10
  license = "MIT"
@@ -1,6 +1,6 @@
1
1
  """SplusPy version information."""
2
2
 
3
- __version__ = "2.1.3"
3
+ __version__ = "2.1.4"
4
4
  __author__ = "Ali Mirshekari"
5
5
  __license__ = "MIT"
6
6
  __url__ = "https://github.com/Itskillmaster/spluspy"
@@ -1,3 +1,3 @@
1
1
  # Versions should comply with PEP440.
2
2
  # This line is parsed in setup.py:
3
- __version__ = '2.1.3'
3
+ __version__ = '2.1.4'
@@ -157,6 +157,50 @@ class ChatAdmin:
157
157
  logger.error("unmute_user(chat=%s, user=%s) failed: %s", chat_id, user_id, exc)
158
158
  return False
159
159
 
160
+ async def pin_chat_message(
161
+ self,
162
+ chat_id: int,
163
+ message_id: Union[int, str],
164
+ notify: bool = True,
165
+ ) -> bool:
166
+ """Pin a specific message in a chat.
167
+
168
+ Args:
169
+ chat_id: Target chat.
170
+ message_id: Message identifier to pin.
171
+ notify: If ``True``, notify all members.
172
+
173
+ Returns:
174
+ ``True`` on success, ``False`` on failure.
175
+ """
176
+ try:
177
+ return await self._client.pin_chat_message(
178
+ chat_id, message_id, notify=notify,
179
+ )
180
+ except Exception as exc:
181
+ logger.error("pin_chat_message(chat=%s, msg=%s) failed: %s", chat_id, message_id, exc)
182
+ return False
183
+
184
+ async def unpin_chat_message(
185
+ self,
186
+ chat_id: int,
187
+ message_id: Union[int, str],
188
+ ) -> bool:
189
+ """Unpin a specific message in a chat.
190
+
191
+ Args:
192
+ chat_id: Target chat.
193
+ message_id: Message identifier to unpin.
194
+
195
+ Returns:
196
+ ``True`` on success, ``False`` on failure.
197
+ """
198
+ try:
199
+ return await self._client.unpin_chat_message(chat_id, message_id)
200
+ except Exception as exc:
201
+ logger.error("unpin_chat_message(chat=%s, msg=%s) failed: %s", chat_id, message_id, exc)
202
+ return False
203
+
160
204
  async def pin_message(
161
205
  self,
162
206
  chat_id: int,
@@ -2120,12 +2120,17 @@ class Client(MediaMixin, ChatManagementMixin):
2120
2120
  on_progress=on_progress,
2121
2121
  )
2122
2122
 
2123
- async def pin_message(self, chat_id: int, message: Union[Message, int], *, notify: bool = False) -> bool:
2124
- """Pin a message in a chat.
2123
+ async def pin_chat_message(
2124
+ self,
2125
+ chat_id: Union[int, str],
2126
+ message_id: Union[int, str],
2127
+ notify: bool = True,
2128
+ ) -> bool:
2129
+ """Pin a specific message in a chat.
2125
2130
 
2126
2131
  Args:
2127
- chat_id: Target chat identifier.
2128
- message: :class:`Message` object or message ID to pin.
2132
+ chat_id: Target chat identifier (int ID, ``@username``, etc.).
2133
+ message_id: Message identifier to pin (int or str).
2129
2134
  notify: If ``True``, notify all members about the pin.
2130
2135
 
2131
2136
  Returns:
@@ -2133,38 +2138,89 @@ class Client(MediaMixin, ChatManagementMixin):
2133
2138
  """
2134
2139
  client = self._get_client()
2135
2140
  if not client:
2136
- logger.warning("pin_message skipped: client not connected")
2141
+ logger.warning("pin_chat_message skipped: client not connected")
2137
2142
  return False
2138
- msg_id = message.id if isinstance(message, Message) else message
2143
+ msg_id = int(message_id)
2139
2144
  try:
2140
- await client.pin_message(chat_id, msg_id, notify=notify)
2145
+ try:
2146
+ from spluspy._engine import functions
2147
+ except ImportError:
2148
+ from telethon import functions # type: ignore[import-untyped]
2149
+
2150
+ input_peer = await client.get_input_entity(int(chat_id))
2151
+ await client(functions.messages.UpdatePinnedMessageRequest(
2152
+ peer=input_peer,
2153
+ id=msg_id,
2154
+ silent=not notify,
2155
+ ))
2141
2156
  return True
2142
2157
  except Exception as exc:
2143
- logger.error("pin_message(chat=%s, msg=%s) failed: %s", chat_id, msg_id, exc)
2158
+ logger.error("pin_chat_message(chat=%s, msg=%s) failed: %s", chat_id, msg_id, exc)
2144
2159
  return False
2145
2160
 
2146
- async def unpin_message(self, chat_id: int, message: Union[Message, int]) -> bool:
2147
- """Unpin a message in a chat.
2161
+ async def unpin_chat_message(
2162
+ self,
2163
+ chat_id: Union[int, str],
2164
+ message_id: Union[int, str],
2165
+ ) -> bool:
2166
+ """Unpin a specific message in a chat.
2148
2167
 
2149
2168
  Args:
2150
- chat_id: Target chat identifier.
2151
- message: :class:`Message` object or message ID to unpin.
2169
+ chat_id: Target chat identifier (int ID, ``@username``, etc.).
2170
+ message_id: Message identifier to unpin (int or str).
2152
2171
 
2153
2172
  Returns:
2154
2173
  ``True`` on success, ``False`` on failure.
2155
2174
  """
2156
2175
  client = self._get_client()
2157
2176
  if not client:
2158
- logger.warning("unpin_message skipped: client not connected")
2177
+ logger.warning("unpin_chat_message skipped: client not connected")
2159
2178
  return False
2160
- msg_id = message.id if isinstance(message, Message) else message
2179
+ msg_id = int(message_id)
2161
2180
  try:
2162
- await client.unpin_message(chat_id, msg_id)
2181
+ try:
2182
+ from spluspy._engine import functions
2183
+ except ImportError:
2184
+ from telethon import functions # type: ignore[import-untyped]
2185
+
2186
+ input_peer = await client.get_input_entity(int(chat_id))
2187
+ await client(functions.messages.UpdatePinnedMessageRequest(
2188
+ peer=input_peer,
2189
+ id=msg_id,
2190
+ unpin=True,
2191
+ ))
2163
2192
  return True
2164
2193
  except Exception as exc:
2165
- logger.error("unpin_message(chat=%s, msg=%s) failed: %s", chat_id, msg_id, exc)
2194
+ logger.error("unpin_chat_message(chat=%s, msg=%s) failed: %s", chat_id, msg_id, exc)
2166
2195
  return False
2167
2196
 
2197
+ async def pin_message(self, chat_id: int, message: Union[Message, int], *, notify: bool = False) -> bool:
2198
+ """Pin a message in a chat.
2199
+
2200
+ Args:
2201
+ chat_id: Target chat identifier.
2202
+ message: :class:`Message` object or message ID to pin.
2203
+ notify: If ``True``, notify all members about the pin.
2204
+
2205
+ Returns:
2206
+ ``True`` on success, ``False`` on failure.
2207
+ """
2208
+ msg_id = message.id if isinstance(message, Message) else message
2209
+ return await self.pin_chat_message(chat_id, msg_id, notify=notify)
2210
+
2211
+ async def unpin_message(self, chat_id: int, message: Union[Message, int]) -> bool:
2212
+ """Unpin a message in a chat.
2213
+
2214
+ Args:
2215
+ chat_id: Target chat identifier.
2216
+ message: :class:`Message` object or message ID to unpin.
2217
+
2218
+ Returns:
2219
+ ``True`` on success, ``False`` on failure.
2220
+ """
2221
+ msg_id = message.id if isinstance(message, Message) else message
2222
+ return await self.unpin_chat_message(chat_id, msg_id)
2223
+
2168
2224
  async def unpin_all_messages(self, chat_id: int) -> bool:
2169
2225
  client = self._get_client()
2170
2226
  if not client:
@@ -2,6 +2,7 @@
2
2
 
3
3
  from __future__ import annotations
4
4
 
5
+ import logging
5
6
  from dataclasses import dataclass, field
6
7
  from datetime import datetime
7
8
  from typing import TYPE_CHECKING, Any, Optional, Union
@@ -19,6 +20,8 @@ if TYPE_CHECKING:
19
20
  from spluspy.models.media import Media
20
21
  from spluspy.models.user import User
21
22
 
23
+ logger = logging.getLogger("message")
24
+
22
25
 
23
26
  @dataclass(slots=True)
24
27
  class Message:
@@ -166,36 +169,90 @@ class Message:
166
169
  async def get_reply_message(self) -> Optional["Message"]:
167
170
  """Get the message this message is replying to.
168
171
 
172
+ Validates that this message is actually a reply by checking
173
+ :attr:`is_reply` / :attr:`reply_to`, then fetches the parent
174
+ message from the server via the bound client.
175
+
169
176
  Returns:
170
- The replied-to Message, or None if not available.
177
+ The replied-to :class:`Message`, or ``None`` if this is
178
+ not a reply, the message is not bound, or the fetch fails.
171
179
  """
172
180
  if self._client is None:
173
- raise RuntimeError("Message is not bound to a client")
174
- if not self.reply_to:
181
+ logger.warning("get_reply_message: message not bound to a client")
182
+ return None
183
+ if not self.is_reply or not self.reply_to:
175
184
  return None
176
185
  if self.reply_to_message is not None:
177
186
  return self.reply_to_message
178
- messages = await self._client.get_messages(
179
- self.chat_id, limit=1, offset_id=self.reply_to - 1,
180
- )
181
- if messages and messages[0].id == self.reply_to:
182
- self.reply_to_message = messages[0]
183
- return messages[0]
184
- return None
187
+ try:
188
+ client = self._client._get_client()
189
+ if client is None:
190
+ logger.warning("get_reply_message: underlying client not connected")
191
+ return None
192
+ raw_msg = await client.get_messages(self.chat_id, ids=self.reply_to)
193
+ if raw_msg is None:
194
+ logger.warning(
195
+ "get_reply_message: could not fetch message %s from chat %s",
196
+ self.reply_to, self.chat_id,
197
+ )
198
+ return None
199
+ from spluspy.client.client import _extract_reply_fields
200
+
201
+ sender_id = getattr(raw_msg, "sender_id", None)
202
+ if sender_id is None and hasattr(raw_msg, "from_id") and raw_msg.from_id:
203
+ fid = raw_msg.from_id
204
+ sender_id = (
205
+ getattr(fid, "user_id", None)
206
+ if hasattr(fid, "user_id")
207
+ else (fid if isinstance(fid, int) else None)
208
+ )
209
+ reply_to, reply_to_sender_id = _extract_reply_fields(raw_msg)
210
+
211
+ self.reply_to_message = Message(
212
+ id=raw_msg.id,
213
+ text=getattr(raw_msg, "message", "") or "",
214
+ chat_id=self.chat_id,
215
+ sender_id=sender_id,
216
+ reply_to=reply_to,
217
+ reply_to_sender_id=reply_to_sender_id,
218
+ is_private=getattr(raw_msg, "is_private", True),
219
+ is_group=getattr(raw_msg, "is_group", False),
220
+ is_channel=getattr(raw_msg, "is_channel", False),
221
+ media=getattr(raw_msg, "media", None),
222
+ forward_origin=getattr(raw_msg, "fwd_from", None),
223
+ )
224
+ self.reply_to_message._client = self._client
225
+ return self.reply_to_message
226
+ except Exception as exc:
227
+ logger.warning("get_reply_message failed: %s", exc)
228
+ return None
229
+
230
+ async def pin(self, notify: bool = True) -> bool:
231
+ """Pin this message in its chat.
185
232
 
186
- async def pin(self, notify: bool = False) -> bool:
187
- """Pin this message in its chat."""
233
+ Args:
234
+ notify: If ``True``, notify all members about the pin.
235
+
236
+ Returns:
237
+ ``True`` on success, ``False`` on failure.
238
+ """
188
239
  if self._client is None:
189
240
  raise RuntimeError("Message is not bound to a client")
190
- return await self._client.pin_message(
191
- self.chat_id, self, notify=notify
241
+ return await self._client.pin_chat_message(
242
+ self.chat_id, self.id, notify=notify,
192
243
  )
193
244
 
194
245
  async def unpin(self) -> bool:
195
- """Unpin this message."""
246
+ """Unpin this message.
247
+
248
+ Returns:
249
+ ``True`` on success, ``False`` on failure.
250
+ """
196
251
  if self._client is None:
197
252
  raise RuntimeError("Message is not bound to a client")
198
- return await self._client.unpin_message(self.chat_id, self)
253
+ return await self._client.unpin_chat_message(
254
+ self.chat_id, self.id,
255
+ )
199
256
 
200
257
  async def react(self, emoji: str) -> bool:
201
258
  """Add a reaction to this message."""
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes