reposter 24.2.0__tar.gz → 24.2.1__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 (41) hide show
  1. {reposter-24.2.0 → reposter-24.2.1}/PKG-INFO +3 -2
  2. {reposter-24.2.0 → reposter-24.2.1}/pyproject.toml +1 -1
  3. {reposter-24.2.0 → reposter-24.2.1}/readme.md +2 -1
  4. {reposter-24.2.0 → reposter-24.2.1}/reposter/core/config.py +9 -2
  5. {reposter-24.2.0 → reposter-24.2.1}/reposter/db/models.py +1 -0
  6. {reposter-24.2.0 → reposter-24.2.1}/reposter/funcs/other.py +15 -0
  7. {reposter-24.2.0 → reposter-24.2.1}/reposter/funcs/parse_conf.py +13 -0
  8. {reposter-24.2.0 → reposter-24.2.1}/reposter/handlers/edit.py +25 -6
  9. {reposter-24.2.0 → reposter-24.2.1}/reposter/handlers/forward_unrestricted.py +3 -1
  10. {reposter-24.2.0 → reposter-24.2.1}/reposter/handlers/on_msg.py +12 -1
  11. {reposter-24.2.0 → reposter-24.2.1}/reposter/handlers/resend_restricted.py +3 -1
  12. {reposter-24.2.0 → reposter-24.2.1}/reposter/handlers/service.py +1 -1
  13. {reposter-24.2.0 → reposter-24.2.1}/reposter.egg-info/PKG-INFO +3 -2
  14. {reposter-24.2.0 → reposter-24.2.1}/reposter/__main__.py +0 -0
  15. {reposter-24.2.0 → reposter-24.2.1}/reposter/autotests/msgs.py +0 -0
  16. {reposter-24.2.0 → reposter-24.2.1}/reposter/autotests/pyright.py +0 -0
  17. {reposter-24.2.0 → reposter-24.2.1}/reposter/autotests/restricted.py +0 -0
  18. {reposter-24.2.0 → reposter-24.2.1}/reposter/autotests/ruff.py +0 -0
  19. {reposter-24.2.0 → reposter-24.2.1}/reposter/autotests/run.py +0 -0
  20. {reposter-24.2.0 → reposter-24.2.1}/reposter/autotests/timer.py +0 -0
  21. {reposter-24.2.0 → reposter-24.2.1}/reposter/autotests/unrestricted.py +0 -0
  22. {reposter-24.2.0 → reposter-24.2.1}/reposter/core/common.py +0 -0
  23. {reposter-24.2.0 → reposter-24.2.1}/reposter/core/types.py +0 -0
  24. {reposter-24.2.0 → reposter-24.2.1}/reposter/db/init.py +0 -0
  25. {reposter-24.2.0 → reposter-24.2.1}/reposter/funcs/handle.py +0 -0
  26. {reposter-24.2.0 → reposter-24.2.1}/reposter/funcs/logging.py +0 -0
  27. {reposter-24.2.0 → reposter-24.2.1}/reposter/funcs/status.py +0 -0
  28. {reposter-24.2.0 → reposter-24.2.1}/reposter/funcs/suppress.py +0 -0
  29. {reposter-24.2.0 → reposter-24.2.1}/reposter/handlers/other.py +0 -0
  30. {reposter-24.2.0 → reposter-24.2.1}/reposter/handlers/set.py +0 -0
  31. {reposter-24.2.0 → reposter-24.2.1}/reposter/handlers/stream_notify.py +0 -0
  32. {reposter-24.2.0 → reposter-24.2.1}/reposter/tg/chunk_gen.py +0 -0
  33. {reposter-24.2.0 → reposter-24.2.1}/reposter/tg/history.py +0 -0
  34. {reposter-24.2.0 → reposter-24.2.1}/reposter/tg/restricted.py +0 -0
  35. {reposter-24.2.0 → reposter-24.2.1}/reposter/tg/save_file.py +0 -0
  36. {reposter-24.2.0 → reposter-24.2.1}/reposter.egg-info/SOURCES.txt +0 -0
  37. {reposter-24.2.0 → reposter-24.2.1}/reposter.egg-info/dependency_links.txt +0 -0
  38. {reposter-24.2.0 → reposter-24.2.1}/reposter.egg-info/entry_points.txt +0 -0
  39. {reposter-24.2.0 → reposter-24.2.1}/reposter.egg-info/requires.txt +0 -0
  40. {reposter-24.2.0 → reposter-24.2.1}/reposter.egg-info/top_level.txt +0 -0
  41. {reposter-24.2.0 → reposter-24.2.1}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: reposter
3
- Version: 24.2.0
3
+ Version: 24.2.1
4
4
  Summary: python script for reposting telegram messages
5
5
  Project-URL: repo, https://github.com/gmankab/reposter
6
6
  Classifier: License :: OSI Approved :: GNU General Public License v3 (GPLv3)
@@ -29,7 +29,8 @@ userbot that forwards messages from telegram channels others in real time
29
29
  - [repo](https://github.com/gmankab/reposter)
30
30
  - [how to run](https://github.com/gmankab/reposter/blob/main/other/docs/run.md)
31
31
  - [how to build](https://github.com/gmankab/reposter/blob/main/other/docs/build.md)
32
- - [config and env](https://github.com/gmankab/reposter/blob/main/other/docs/config.md)
32
+ - [config](https://github.com/gmankab/reposter/blob/main/other/docs/config.md)
33
+ - [env](https://github.com/gmankab/reposter/blob/main/other/docs/env.md)
33
34
  - [pypi](https://pypi.org/project/reposter)
34
35
 
35
36
 
@@ -6,7 +6,7 @@ dependencies = [
6
6
  'rich',
7
7
  ]
8
8
  name = 'reposter'
9
- version = '24.2.0'
9
+ version = '24.2.1'
10
10
  description = 'python script for reposting telegram messages'
11
11
  readme = 'readme.md'
12
12
  requires-python = '>=3.11'
@@ -9,7 +9,8 @@ userbot that forwards messages from telegram channels others in real time
9
9
  - [repo](https://github.com/gmankab/reposter)
10
10
  - [how to run](https://github.com/gmankab/reposter/blob/main/other/docs/run.md)
11
11
  - [how to build](https://github.com/gmankab/reposter/blob/main/other/docs/build.md)
12
- - [config and env](https://github.com/gmankab/reposter/blob/main/other/docs/config.md)
12
+ - [config](https://github.com/gmankab/reposter/blob/main/other/docs/config.md)
13
+ - [env](https://github.com/gmankab/reposter/blob/main/other/docs/env.md)
13
14
  - [pypi](https://pypi.org/project/reposter)
14
15
 
15
16
 
@@ -1,3 +1,6 @@
1
+ import reposter.core.common
2
+
3
+
1
4
  class tests:
2
5
  source: str = '@autotests_source'
3
6
  target: str = '@autotests_target'
@@ -17,24 +20,28 @@ class env:
17
20
 
18
21
 
19
22
  class json:
23
+ app_version: str
20
24
  api_id: int
21
25
  api_hash: str
22
26
  tg_session: str
23
27
  drop_author: bool
24
28
  logs_chat: str | int
25
- online_status_every_seconds: int
26
29
  stream_notify_chats: list
30
+ edit_timeout_seconds: int
31
+ online_status_every_seconds: int
27
32
  chats: dict
28
33
 
29
34
 
30
35
  default = {
36
+ 'app_version': reposter.core.common.app.version,
31
37
  'api_id': 0,
32
38
  'api_hash': '',
33
39
  'tg_session': '',
34
40
  'drop_author': True,
35
41
  'logs_chat': 'me',
36
- 'online_status_every_seconds': 0,
37
42
  'stream_notify_chats': [],
43
+ 'edit_timeout_seconds': 0,
44
+ 'online_status_every_seconds': 0,
38
45
  'chats': {
39
46
  tests.source: tests.target,
40
47
  }
@@ -3,6 +3,7 @@ from tortoise import fields
3
3
 
4
4
 
5
5
  class Msg(Model):
6
+ hash = fields.TextField()
6
7
  src_msg = fields.IntField()
7
8
  src_chat = fields.IntField()
8
9
  target_msg = fields.IntField()
@@ -4,6 +4,7 @@ import reposter.core.config
4
4
  import pyrogram.client
5
5
  import reposter.tg.save_file
6
6
  import reposter.db.init
7
+ import hashlib
7
8
  import types
8
9
  import sys
9
10
  import io
@@ -79,3 +80,17 @@ def double_links(
79
80
  ) -> str:
80
81
  return f'[blue]{single_link(src_msg)}[/] -> [yellow]{single_link(target_msg)}[/]'
81
82
 
83
+
84
+ def get_hash(
85
+ msg: pyrogram.types.Message,
86
+ ) -> str:
87
+ hash = hashlib.new('sha256')
88
+ if msg.text:
89
+ to_hash = msg.text.markdown.encode()
90
+ elif msg.caption:
91
+ to_hash = msg.caption.markdown.encode()
92
+ else:
93
+ return ''
94
+ hash.update(to_hash)
95
+ return hash.hexdigest()
96
+
@@ -4,6 +4,15 @@ import json
4
4
  import os
5
5
 
6
6
 
7
+ def compatibility_from_24_2_0_to_24_2_1(
8
+ db_path: Path,
9
+ ):
10
+ common.log(
11
+ f'removing {db_path} for compatibility'
12
+ )
13
+ db_path.unlink(missing_ok=True)
14
+
15
+
7
16
  def write_config(
8
17
  dict_to_write: dict,
9
18
  ) -> None:
@@ -25,6 +34,10 @@ def read_config() -> None:
25
34
  common.path.config_json.read_text()
26
35
  )
27
36
  assert isinstance(loaded_config, dict)
37
+ if 'app_version' not in loaded_config:
38
+ compatibility_from_24_2_0_to_24_2_1(
39
+ db_path=common.path.db_path,
40
+ )
28
41
  for key, value in config.default.items():
29
42
  if key not in loaded_config:
30
43
  loaded_config[key] = value
@@ -1,6 +1,7 @@
1
1
  import reposter.funcs.logging
2
2
  import reposter.funcs.other
3
3
  import reposter.core.common
4
+ import reposter.db.models
4
5
  import pyrogram.types
5
6
 
6
7
 
@@ -9,36 +10,54 @@ class Edit:
9
10
  self,
10
11
  src_msg: pyrogram.types.Message,
11
12
  target_msg: pyrogram.types.Message,
13
+ db_msg: reposter.db.models.Msg,
12
14
  ) -> None:
13
15
  self.src_msg = src_msg
14
16
  self.target_msg = target_msg
17
+ self.db_msg = db_msg
15
18
  self.links = reposter.funcs.other.double_links(
16
19
  src_msg=src_msg,
17
20
  target_msg=target_msg,
18
21
  )
19
22
 
20
- def log(self) -> None:
23
+ async def log_and_save(self) -> None:
24
+ self.db_msg.hash = self.new_hash
25
+ await self.db_msg.save()
21
26
  reposter.funcs.logging.log_msg(
22
- to_log='[green]\\[edit][/]',
27
+ to_log='[bright_cyan]\\[success edit][/]',
23
28
  src_msg=self.src_msg,
24
29
  target_msg=self.target_msg,
25
30
  )
31
+ '''
32
+ reposter.core.common.log('new', self.db_msg)
33
+ '''
26
34
 
27
35
  async def edit(self) -> None:
36
+ self.new_hash = reposter.funcs.other.get_hash(self.src_msg)
37
+ '''
38
+ reposter.core.common.log('got', self.db_msg.__dict__)
39
+ reposter.core.common.log('old', self.db_msg.hash)
40
+ reposter.core.common.log('new', self.new_hash)
41
+ '''
42
+ if self.db_msg.hash == self.new_hash:
43
+ reposter.core.common.log(
44
+ f'[yellow]\\[warn][/] can\'t see changes between {self.links}'
45
+ )
46
+ return
28
47
  if self.src_msg.text or self.target_msg.text:
29
48
  if self.src_msg.text.markdown != self.target_msg.text.markdown:
30
49
  await self.target_msg.edit_text(self.src_msg.text.markdown)
31
- return
50
+ return await self.log_and_save()
32
51
  if self.src_msg.caption or self.target_msg.caption:
33
52
  if not self.src_msg.caption:
34
53
  await self.target_msg.edit_caption('')
35
- return self.log()
54
+ return await self.log_and_save()
36
55
  if not self.target_msg.caption:
37
56
  await self.target_msg.edit_caption(self.src_msg.caption.markdown)
38
- return self.log()
57
+ return await self.log_and_save()
39
58
  if self.src_msg.caption.markdown != self.target_msg.caption.markdown:
40
59
  await self.target_msg.edit_caption(self.src_msg.caption.markdown)
41
- return self.log()
60
+ return await self.log_and_save()
42
61
  reposter.core.common.log(
43
62
  f'[yellow]\\[warn][/] can\'t see changes between {self.links}'
44
63
  )
@@ -1,6 +1,7 @@
1
1
  import reposter.handlers.other
2
2
  import reposter.funcs.logging
3
3
  import reposter.funcs.handle
4
+ import reposter.funcs.other
4
5
  import reposter.core.config
5
6
  import reposter.core.types
6
7
  import reposter.db.models
@@ -38,13 +39,14 @@ class ForwardUnrestricted:
38
39
  )
39
40
  assert isinstance(target_msg, pyrogram.types.Message)
40
41
  await reposter.db.models.Msg.create(
42
+ hash = reposter.funcs.other.get_hash(self.src_msg),
41
43
  src_msg=self.src_in_db.id,
42
44
  src_chat=self.src_in_db.chat.id,
43
45
  target_msg=target_msg.id,
44
46
  target_chat=target_msg.chat.id
45
47
  )
46
48
  reposter.funcs.logging.log_msg(
47
- to_log='[green]\\[forward][/]',
49
+ to_log='[green]\\[success forward][/]',
48
50
  src_msg=self.src_msg,
49
51
  target_msg=target_msg,
50
52
  )
@@ -5,9 +5,11 @@ import reposter.handlers.service
5
5
  import reposter.handlers.edit
6
6
  import reposter.funcs.other
7
7
  import reposter.core.common
8
+ import reposter.core.config
8
9
  import reposter.core.types
9
10
  import reposter.db.models
10
11
  import pyrogram.types
12
+ import datetime
11
13
 
12
14
 
13
15
  class OnMsg:
@@ -60,8 +62,16 @@ class OnMsg:
60
62
  ) -> None:
61
63
  link = reposter.funcs.other.single_link(src_msg)
62
64
  reposter.core.common.log(
63
- f'[bright_cyan]\\[edited msg] [blue]{link}'
65
+ f'[bright_cyan]\\[new edit] [blue]{link}'
64
66
  )
67
+ if reposter.core.config.json.edit_timeout_seconds:
68
+ send_how_long_ago = src_msg.edit_date - src_msg.date
69
+ timeout = datetime.timedelta(seconds=reposter.core.config.json.edit_timeout_seconds)
70
+ if send_how_long_ago > timeout:
71
+ reposter.core.common.log(
72
+ f'[yellow]\\[warn] [blue]{link} edited but send too long ago'
73
+ )
74
+ return
65
75
  db_msgs = await reposter.db.models.Msg.filter(
66
76
  src_msg=src_msg.id,
67
77
  src_chat=src_msg.chat.id
@@ -83,6 +93,7 @@ class OnMsg:
83
93
  edit = reposter.handlers.edit.Edit(
84
94
  target_msg=target_msg,
85
95
  src_msg=src_msg,
96
+ db_msg=db_msg,
86
97
  )
87
98
  await edit.edit()
88
99
 
@@ -1,6 +1,7 @@
1
1
  import reposter.handlers.forward_unrestricted
2
2
  import reposter.funcs.handle
3
3
  import reposter.funcs.logging
4
+ import reposter.funcs.other
4
5
  import reposter.core.config
5
6
  import reposter.core.types
6
7
  import reposter.tg.restricted
@@ -38,6 +39,7 @@ class ResendRestricted:
38
39
  target=self.target_any,
39
40
  )
40
41
  await reposter.db.models.Msg.create(
42
+ hash = reposter.funcs.other.get_hash(self.src_msg),
41
43
  src_msg=self.src_msg.id,
42
44
  src_chat=self.src_msg.chat,
43
45
  target_msg=target_msg.id,
@@ -60,7 +62,7 @@ class ResendRestricted:
60
62
  )
61
63
  assert target_msg
62
64
  reposter.funcs.logging.log_msg(
63
- to_log='[green]\\[resend][/]',
65
+ to_log='[green]\\[success resend][/]',
64
66
  src_msg=src_msg,
65
67
  target_msg=target_msg,
66
68
  )
@@ -37,7 +37,7 @@ class Service:
37
37
  )
38
38
  assert isinstance(target_msg, pyrogram.types.Message)
39
39
  reposter.funcs.logging.log_msg(
40
- to_log=f'[green]\\[service][/] {text}',
40
+ to_log=f'[green]\\[success service][/] {text}',
41
41
  src_msg=self.src_msg,
42
42
  target_msg=target_msg,
43
43
  )
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: reposter
3
- Version: 24.2.0
3
+ Version: 24.2.1
4
4
  Summary: python script for reposting telegram messages
5
5
  Project-URL: repo, https://github.com/gmankab/reposter
6
6
  Classifier: License :: OSI Approved :: GNU General Public License v3 (GPLv3)
@@ -29,7 +29,8 @@ userbot that forwards messages from telegram channels others in real time
29
29
  - [repo](https://github.com/gmankab/reposter)
30
30
  - [how to run](https://github.com/gmankab/reposter/blob/main/other/docs/run.md)
31
31
  - [how to build](https://github.com/gmankab/reposter/blob/main/other/docs/build.md)
32
- - [config and env](https://github.com/gmankab/reposter/blob/main/other/docs/config.md)
32
+ - [config](https://github.com/gmankab/reposter/blob/main/other/docs/config.md)
33
+ - [env](https://github.com/gmankab/reposter/blob/main/other/docs/env.md)
33
34
  - [pypi](https://pypi.org/project/reposter)
34
35
 
35
36
 
File without changes
File without changes