Rubka 7.1.12__py3-none-any.whl → 7.1.13__py3-none-any.whl

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.
rubka/api.py CHANGED
@@ -54,16 +54,8 @@ def get_latest_version(package_name: str) -> str:
54
54
  data = resp.json()
55
55
  return data["info"]["version"]
56
56
  except Exception:return None
57
- def check_rubka_version():
58
- package_name = "rubka"
59
- installed_version = get_installed_version(package_name)
60
- if installed_version is None:return
61
- latest_version = get_latest_version(package_name)
62
- if latest_version is None:return
63
- if installed_version != latest_version:
64
- print(f"\npip install {package_name}=={latest_version}\n")
65
-
66
- check_rubka_version()
57
+
58
+
67
59
  def show_last_six_words(text):
68
60
  text = text.strip()
69
61
  return text[-6:]
rubka/asynco.py CHANGED
@@ -200,7 +200,7 @@ async def check_rubka_version():
200
200
  print(f"- Latest version : {latest_version}")
201
201
  print("\nImmediate action is required.")
202
202
  print(f"Run the following command to update safely:")
203
- print(f"\n pip install {package_name}=={latest_version}\n")
203
+ print(f"\npip install {package_name}=={latest_version}\n")
204
204
  print("Delaying this update may result in unexpected crashes, data loss, or broken functionality.")
205
205
  print("Stay up-to-date to ensure full support and access to the latest improvements.")
206
206
  print("For new methods and updates, visit: @rubka_library\n")
rubka/filters.py CHANGED
@@ -110,6 +110,9 @@ def text_length(min_len: int = 0, max_len: int = None):
110
110
  def text_regex(pattern: str):
111
111
  regex = re.compile(pattern)
112
112
  return Filter(lambda m: getattr(m, "text", "") and regex.search(m.text))
113
+ def regex(pattern: str):
114
+ regex = re.compile(pattern)
115
+ return Filter(lambda m: getattr(m, "text", "") and regex.search(m.text))
113
116
  def text_startswith(prefix: str):
114
117
  return Filter(lambda m: getattr(m, "text", "").startswith(prefix) if getattr(m, "text", None) else False)
115
118
  def text_endswith(suffix: str):
@@ -149,6 +152,19 @@ def sticker_id_is(sid: str):
149
152
  return Filter(lambda m: m.sticker and getattr(m.sticker, "sticker_id", None) == sid)
150
153
  def sticker_emoji_is(emoji: str):
151
154
  return Filter(lambda m: m.sticker and getattr(m.sticker, "emoji", None) == emoji)
155
+ is_bold = Filter(lambda m: getattr(m, "is_bold", False))
156
+ is_italic = Filter(lambda m: getattr(m, "is_italic", False))
157
+ is_strike = Filter(lambda m: getattr(m, "is_strike", False))
158
+ is_underline = Filter(lambda m: getattr(m, "is_underline", False))
159
+ is_quote = Filter(lambda m: getattr(m, "is_quote", False))
160
+ is_spoiler = Filter(lambda m: getattr(m, "is_spoiler", False))
161
+ is_pre = Filter(lambda m: getattr(m, "is_pre", False))
162
+ is_mono = Filter(lambda m: getattr(m, "is_mono", False))
163
+ is_link_meta = Filter(lambda m: getattr(m, "is_link_meta", False))
164
+ has_metadata = Filter(lambda m: getattr(m, "has_metadata", False))
165
+ meta_links_contain = lambda keyword: Filter(lambda m: any(keyword in link for link in getattr(m, "meta_links", [])))
166
+ meta_link_positions_contain = lambda keyword: Filter(lambda m: any(keyword in link.get("url", "") for link in getattr(m, "meta_link_positions", [])))
167
+ meta_types_include = lambda types: Filter(lambda m: any(t in getattr(m, "meta_types", []) for t in types))
152
168
  def poll_question_contains(keyword: str):
153
169
  return Filter(lambda m: m.poll and keyword in getattr(m.poll, "question", ""))
154
170
  def poll_option_count(min_options: int = 1, max_options: int = None):
rubka/metadata.py CHANGED
@@ -1,6 +1,20 @@
1
1
  import re
2
2
  from typing import Any, Dict, List
3
3
  import markdownify
4
+ def _normalize_multiline_quote(text: str) -> str:
5
+ lines = text.splitlines()
6
+ normalized_lines = []
7
+ quote_block = []
8
+
9
+ for line in lines + [""]:
10
+ if line.startswith(">"):quote_block.append(line[1:].strip())
11
+ else:
12
+ if quote_block:
13
+ normalized_lines.append("$" + "\n".join(quote_block) + "$")
14
+ quote_block = []
15
+ normalized_lines.append(line)
16
+ return "\n".join(normalized_lines).strip()
17
+
4
18
  class Track_parsed:
5
19
  _PATT = re.compile(
6
20
  r"(?P<pre>```(?P<pre_c>[\s\S]*?)```)"
@@ -10,13 +24,11 @@ class Track_parsed:
10
24
  r"|(?P<underline>--(?P<underline_c>.*?)--)"
11
25
  r"|(?P<link>\[(?P<link_text>.*?)\]\((?P<link_url>\S+?)\))"
12
26
  r"|(?P<quote>\$(?P<quote_c>[\s\S]*?)\$)"
27
+ r"|(?P<quote_md>^>(?P<quote_md_c>.*?)(?:\n|$))"
13
28
  r"|(?P<strike>~~(?P<strike_c>.*?)~~)"
14
29
  r"|(?P<spoiler>\|\|(?P<spoiler_c>.*?)\|\|)",
15
30
  flags=re.DOTALL,
16
31
  )
17
-
18
-
19
-
20
32
  _TYPE_MAP = {
21
33
  "pre": "Pre",
22
34
  "bold": "Bold",
@@ -26,6 +38,7 @@ class Track_parsed:
26
38
  "strike": "Strike",
27
39
  "spoiler": "Spoiler",
28
40
  "quote": "Quote",
41
+ "quote_md": "Quote",
29
42
  "link": "Link",
30
43
  }
31
44
 
@@ -42,7 +55,9 @@ class Track_parsed:
42
55
  return src
43
56
 
44
57
  def transcribe(self, src: str, mode: str = "MARKDOWN") -> Dict[str, Any]:
45
- if mode and mode.upper() == "HTML":src = self._html2md(src)
58
+ if mode and mode.upper() == "HTML":
59
+ src = self._html2md(src)
60
+ src = _normalize_multiline_quote(src)
46
61
 
47
62
  payload_parts: List[Dict[str, Any]] = []
48
63
 
@@ -67,7 +82,7 @@ class Track_parsed:
67
82
  else:
68
83
  inner = m.group(f"{gname}_c") or ""
69
84
  link_href = None
70
- if gname == "quote":
85
+ if gname in ["quote", "quote_md"]:
71
86
  inner_metadata = self.transcribe(inner, mode="MARKDOWN")
72
87
  inner = inner_metadata["text"]
73
88
  if "metadata" in inner_metadata:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: Rubka
3
- Version: 7.1.12
3
+ Version: 7.1.13
4
4
  Summary: Rubika: A Python library for interacting with the Rubika Bot API. This library provides an easy-to-use interface to send messages, polls, stickers, media files, manage groups and channels, handle inline keyboards, and implement advanced bot features like subscription management, user authentication, and message handling. Ideal for developers looking to automate and extend their Rubika bots with Python.
5
5
  Home-page: https://github.com/Mahdy-Ahmadi/Rubka
6
6
  Download-URL: https://github.com/Mahdy-Ahmadi/rubka/archive/refs/tags/v6.6.4.zip
@@ -1,18 +1,18 @@
1
1
  rubka/__init__.py,sha256=P6IBiORfp-GqKHe5LZ-5lldWyG7tnrUYUcAQDUgwXmY,1973
2
- rubka/api.py,sha256=b33Rbbfz5LdWBuRHdG-sxThDCHaIimJAJDQGWcMsF1Q,68477
3
- rubka/asynco.py,sha256=7bolbIoMqv3IQtQ07-DzNHgE027TYRETfV9GvJL9UhM,119357
2
+ rubka/api.py,sha256=71B10uy2iU3gP6yHQltjyTkq2mgkzWuV1TsE2kgHOZg,68092
3
+ rubka/asynco.py,sha256=WZ8P3fdnD5d-JoAsA8pEsMeARtjmupCEeIwFbf1y3-M,119353
4
4
  rubka/button.py,sha256=woSzZVd5MtTqOrP-YgkH5b0GS9y4DuKBsFSc9-KuLnk,13320
5
5
  rubka/config.py,sha256=Bck59xkOiqioLv0GkQ1qPGnBXVctz1hKk6LT4h2EPx0,78
6
6
  rubka/context.py,sha256=brl7WXe4nzpLpcaMiOLVMfOs8BFTU5z5Sw6AIecCtOA,42492
7
7
  rubka/decorators.py,sha256=hGwUoE4q2ImrunJIGJ_kzGYYxQf1ueE0isadqraKEts,1157
8
8
  rubka/exceptions.py,sha256=DDOGIHEMoliHNW5E7C_s38WZgqqMBv9812fcJGvj7TY,1173
9
- rubka/filters.py,sha256=DY1bdkpRKIiLtVcy6X3hOnlGPcVOK4HFb3QgmaPx6Oo,12116
9
+ rubka/filters.py,sha256=fQYgFKhXfq18pOzjkKc3BmOgoZqQKriid_SAQR5uVT4,13254
10
10
  rubka/helpers.py,sha256=QvK5lg4QDmycImxJia4m8HDpfacYzbKKZiOk536mafc,65161
11
11
  rubka/jobs.py,sha256=GvLMLsVhcSEzRTgkvnPISPEBN71suW2xXI0hUaUZPTo,378
12
12
  rubka/keyboards.py,sha256=7nr-dT2bQJVQnQ6RMWPTSjML6EEk6dsBx-4d8pab8xk,488
13
13
  rubka/keypad.py,sha256=yGsNt8W5HtUFBzVF1m_p7GySlu1hwIcSvXZ4BTdrlvg,9558
14
14
  rubka/logger.py,sha256=J2I6NiK1z32lrAzC4H1Et6WPMBXxXGCVUsW4jgcAofs,289
15
- rubka/metadata.py,sha256=c_JTGJHSGgslIttJsq7gQzo7C3m2f71jFz-bjTZHkH4,3647
15
+ rubka/metadata.py,sha256=7LKtFpZAGOvOHwsFcGds99vyHFmXVNNfdpyuUEKOHBI,4277
16
16
  rubka/rubino.py,sha256=HOILsm2zOIRe9EW1hxhLinhjwE_TvFrOAxBsg9T_L5E,61701
17
17
  rubka/tv.py,sha256=rBoyCadCH3I3YqQGrQYv_dLtTg1I63AzVf1orn-hbko,5724
18
18
  rubka/update.py,sha256=brl7WXe4nzpLpcaMiOLVMfOs8BFTU5z5Sw6AIecCtOA,42492
@@ -38,8 +38,8 @@ rubka/adaptorrubka/types/socket/message.py,sha256=0WgLMZh4eow8Zn7AiSX4C3GZjQTkIg
38
38
  rubka/adaptorrubka/utils/__init__.py,sha256=OgCFkXdNFh379quNwIVOAWY2NP5cIOxU5gDRRALTk4o,54
39
39
  rubka/adaptorrubka/utils/configs.py,sha256=nMUEOJh1NqDJsf9W9PurkN_DLYjO6kKPMm923i4Jj_A,492
40
40
  rubka/adaptorrubka/utils/utils.py,sha256=5-LioLNYX_TIbQGDeT50j7Sg9nAWH2LJUUs-iEXpsUY,8816
41
- rubka-7.1.12.dist-info/METADATA,sha256=ZFhfWy1OoC3WQvWLngq8W6q6xOq0d9j952FXJsjrDFY,34645
42
- rubka-7.1.12.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
43
- rubka-7.1.12.dist-info/entry_points.txt,sha256=4aESuUmuUOALMUy7Kucv_Gb5YlqhsJmTmdXLlZU9sJ0,46
44
- rubka-7.1.12.dist-info/top_level.txt,sha256=vy2A4lot11cRMdQS-F4HDCIXL3JK8RKfu7HMDkezJW4,6
45
- rubka-7.1.12.dist-info/RECORD,,
41
+ rubka-7.1.13.dist-info/METADATA,sha256=gfg_3nV10xDFmoJs4zuNw9h7u8Qsal422PerW4Hq3MM,34645
42
+ rubka-7.1.13.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
43
+ rubka-7.1.13.dist-info/entry_points.txt,sha256=4aESuUmuUOALMUy7Kucv_Gb5YlqhsJmTmdXLlZU9sJ0,46
44
+ rubka-7.1.13.dist-info/top_level.txt,sha256=vy2A4lot11cRMdQS-F4HDCIXL3JK8RKfu7HMDkezJW4,6
45
+ rubka-7.1.13.dist-info/RECORD,,
File without changes