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.
- {reposter-24.2.0 → reposter-24.2.1}/PKG-INFO +3 -2
- {reposter-24.2.0 → reposter-24.2.1}/pyproject.toml +1 -1
- {reposter-24.2.0 → reposter-24.2.1}/readme.md +2 -1
- {reposter-24.2.0 → reposter-24.2.1}/reposter/core/config.py +9 -2
- {reposter-24.2.0 → reposter-24.2.1}/reposter/db/models.py +1 -0
- {reposter-24.2.0 → reposter-24.2.1}/reposter/funcs/other.py +15 -0
- {reposter-24.2.0 → reposter-24.2.1}/reposter/funcs/parse_conf.py +13 -0
- {reposter-24.2.0 → reposter-24.2.1}/reposter/handlers/edit.py +25 -6
- {reposter-24.2.0 → reposter-24.2.1}/reposter/handlers/forward_unrestricted.py +3 -1
- {reposter-24.2.0 → reposter-24.2.1}/reposter/handlers/on_msg.py +12 -1
- {reposter-24.2.0 → reposter-24.2.1}/reposter/handlers/resend_restricted.py +3 -1
- {reposter-24.2.0 → reposter-24.2.1}/reposter/handlers/service.py +1 -1
- {reposter-24.2.0 → reposter-24.2.1}/reposter.egg-info/PKG-INFO +3 -2
- {reposter-24.2.0 → reposter-24.2.1}/reposter/__main__.py +0 -0
- {reposter-24.2.0 → reposter-24.2.1}/reposter/autotests/msgs.py +0 -0
- {reposter-24.2.0 → reposter-24.2.1}/reposter/autotests/pyright.py +0 -0
- {reposter-24.2.0 → reposter-24.2.1}/reposter/autotests/restricted.py +0 -0
- {reposter-24.2.0 → reposter-24.2.1}/reposter/autotests/ruff.py +0 -0
- {reposter-24.2.0 → reposter-24.2.1}/reposter/autotests/run.py +0 -0
- {reposter-24.2.0 → reposter-24.2.1}/reposter/autotests/timer.py +0 -0
- {reposter-24.2.0 → reposter-24.2.1}/reposter/autotests/unrestricted.py +0 -0
- {reposter-24.2.0 → reposter-24.2.1}/reposter/core/common.py +0 -0
- {reposter-24.2.0 → reposter-24.2.1}/reposter/core/types.py +0 -0
- {reposter-24.2.0 → reposter-24.2.1}/reposter/db/init.py +0 -0
- {reposter-24.2.0 → reposter-24.2.1}/reposter/funcs/handle.py +0 -0
- {reposter-24.2.0 → reposter-24.2.1}/reposter/funcs/logging.py +0 -0
- {reposter-24.2.0 → reposter-24.2.1}/reposter/funcs/status.py +0 -0
- {reposter-24.2.0 → reposter-24.2.1}/reposter/funcs/suppress.py +0 -0
- {reposter-24.2.0 → reposter-24.2.1}/reposter/handlers/other.py +0 -0
- {reposter-24.2.0 → reposter-24.2.1}/reposter/handlers/set.py +0 -0
- {reposter-24.2.0 → reposter-24.2.1}/reposter/handlers/stream_notify.py +0 -0
- {reposter-24.2.0 → reposter-24.2.1}/reposter/tg/chunk_gen.py +0 -0
- {reposter-24.2.0 → reposter-24.2.1}/reposter/tg/history.py +0 -0
- {reposter-24.2.0 → reposter-24.2.1}/reposter/tg/restricted.py +0 -0
- {reposter-24.2.0 → reposter-24.2.1}/reposter/tg/save_file.py +0 -0
- {reposter-24.2.0 → reposter-24.2.1}/reposter.egg-info/SOURCES.txt +0 -0
- {reposter-24.2.0 → reposter-24.2.1}/reposter.egg-info/dependency_links.txt +0 -0
- {reposter-24.2.0 → reposter-24.2.1}/reposter.egg-info/entry_points.txt +0 -0
- {reposter-24.2.0 → reposter-24.2.1}/reposter.egg-info/requires.txt +0 -0
- {reposter-24.2.0 → reposter-24.2.1}/reposter.egg-info/top_level.txt +0 -0
- {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.
|
|
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
|
|
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
|
|
|
@@ -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
|
|
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
|
}
|
|
@@ -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
|
|
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='[
|
|
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.
|
|
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.
|
|
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.
|
|
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]\\[
|
|
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.
|
|
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
|
|
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
|
|
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
|
|
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
|