Skip to content

Commit

Permalink
[test]
Browse files Browse the repository at this point in the history
  • Loading branch information
gmankab committed Jul 23, 2024
1 parent bd4de1d commit cafc0d1
Show file tree
Hide file tree
Showing 10 changed files with 179 additions and 63 deletions.
4 changes: 3 additions & 1 deletion reposter/core/common.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,10 @@ class path:
app_dir = src_dir.parent.resolve()
pyproject_toml: Path = app_dir / 'pyproject.toml'
config_json: Path
data_dir: Path
errors_dir: Path
data_dir: Path
session: Path
db_path: Path


class app:
Expand All @@ -28,6 +29,7 @@ class app:
console: rich.console.Console = rich.console.Console()
progress: rich.progress.Progress
exit_code: int = 0
db_url: str


class tg:
Expand Down
12 changes: 12 additions & 0 deletions reposter/db/init.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
import reposter.core.common
import tortoise


async def init():
await tortoise.Tortoise.init(
#db_url=reposter.core.common.app.db_url,
db_url='sqlite://:memory:',
modules={'models': ['reposter.db.models']}
)
await tortoise.Tortoise.generate_schemas()

25 changes: 25 additions & 0 deletions reposter/db/models.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
import reposter.core.common
from tortoise.models import Model
from tortoise import fields


class Msg(Model):
src_msg = fields.IntField()
src_chat = fields.IntField()
target_msg = fields.IntField()
target_chat = fields.IntField()


async def create():
await Msg.create(
src_msg=1,
src_chat=2,
target_msg=3,
target_chat=4,
)
reposter.core.common.log(
await Msg.all().first().values()
)
import os
os._exit(0)

4 changes: 3 additions & 1 deletion reposter/funcs/other.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
from reposter.core import common, config
import reposter.funcs.parse_conf
import reposter.core.config
import reposter.tg.save_file
import pyrogram.client
import reposter.tg.save_file
import reposter.db.init
import types
import sys
import io
Expand All @@ -16,6 +17,7 @@ async def init():
reposter.funcs.parse_conf.check_env()
reposter.funcs.parse_conf.read_config()
reposter.funcs.parse_conf.check_config()
await reposter.db.init.init()
get_client()
await common.tg.client.start()
await start_log()
Expand Down
2 changes: 2 additions & 0 deletions reposter/funcs/parse_conf.py
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,8 @@ def read_env() -> None:
if not config.env.session_name:
config.env.session_name = 'tg_bot'
common.path.session = common.path.data_dir / f'{config.env.session_name}.session'
common.path.db_path = common.path.data_dir / 'db.sqlite'
common.app.db_url = f'sqlite://{common.path.db_path}'


def check_env():
Expand Down
15 changes: 12 additions & 3 deletions reposter/handlers/forward_unrestricted.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,22 +3,25 @@
import reposter.funcs.handle
import reposter.core.config
import reposter.core.types
import reposter.db.models
import pyrogram.types


class ForwardUnrestricted:
def __init__(
self,
target_any: reposter.core.types.target,
src_msg: pyrogram.types.Message,
src_to_forward: pyrogram.types.Message,
src_in_db: pyrogram.types.Message,
) -> None:
self.target_any: reposter.core.types.target = target_any
self.src_msg = src_msg
self.src_msg = src_to_forward
self.src_in_db: pyrogram.types.Message = src_in_db
assert isinstance(self.target_any, (str, int, list))

async def forward_all(
self,
):
) -> None:
await reposter.handlers.other.parse_targets(
target_any=self.target_any,
to_call=self.forward_one,
Expand All @@ -34,6 +37,12 @@ async def forward_one(
drop_author=reposter.core.config.json.drop_author,
)
assert isinstance(target_msg, pyrogram.types.Message)
await reposter.db.models.Msg.create(
src_msg=self.src_in_db.id,
src_chat=self.src_in_db.chat.id,
target_msg=target_msg.id,
target_chat=target_msg.chat.id
)
reposter.funcs.logging.log_msg(
to_log='[green]\\[forward][/]',
source_msg=self.src_msg,
Expand Down
46 changes: 0 additions & 46 deletions reposter/handlers/on_message.py

This file was deleted.

98 changes: 98 additions & 0 deletions reposter/handlers/on_msg.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
import reposter.handlers.forward_unrestricted
import reposter.handlers.resend_restricted
import reposter.handlers.stream_notify
import reposter.handlers.service
import reposter.funcs.other
import reposter.core.common
import reposter.core.types
import reposter.db.models
import pyrogram.types


class OnMsg:
def __init__(
self,
target_any: reposter.core.types.target
) -> None:
self.target_any: reposter.core.types.target = target_any
assert isinstance(self.target_any, (str, int, list))

async def on_new_msg(
self,
_,
src_msg: pyrogram.types.Message,
) -> None:
link = reposter.funcs.other.single_link(src_msg)
reposter.core.common.log(
f'[green]\\[new msg] [blue]{link}'
)
if src_msg.service:
service = reposter.handlers.service.Service(
target_any=self.target_any,
src_msg=src_msg,
)
await service.service_all()
if src_msg.service == pyrogram.enums.MessageServiceType.VIDEO_CHAT_STARTED:
stream_notify = reposter.handlers.stream_notify.StreamNotify(
target_any=self.target_any,
)
await stream_notify.notify_all()
return
if src_msg.has_protected_content or src_msg.chat.has_protected_content:
real_time_resend = reposter.handlers.resend_restricted.ResendRestricted(
src_msg=src_msg,
target_any=self.target_any,
)
await real_time_resend.resend_all()
else:
real_time_forward = reposter.handlers.forward_unrestricted.ForwardUnrestricted(
target_any=self.target_any,
src_to_forward=src_msg,
src_in_db=src_msg,
)
await real_time_forward.forward_all()

async def on_edited_msg(
self,
_,
src_msg: pyrogram.types.Message,
) -> None:
link = reposter.funcs.other.single_link(src_msg)
reposter.core.common.log(
f'[bright_cyan]\\[edited msg] [blue]{link}'
)
loaded = await reposter.db.models.Msg.get_or_none(
src_msg=src_msg.id,
src_chat=src_msg.chat.id
)
if loaded:
reposter.core.common.log(
loaded
)
else:
reposter.core.common.log(
f'[yellow]\\[warn] [blue]{link} edited but was never saved in db'
)

async def on_deleted_msg(
self,
_,
src_msg: pyrogram.types.Message,
) -> None:
link = reposter.funcs.other.single_link(src_msg)
reposter.core.common.log(
f'[red]\\[deleted msg] [blue]{link}'
)
loaded = await reposter.db.models.Msg.get_or_none(
src_msg=src_msg.id,
src_chat=src_msg.chat.id
)
if loaded:
reposter.core.common.log(
loaded
)
else:
reposter.core.common.log(
f'[yellow]\\[warn] [blue]{link} deleted but was never saved in db'
)

14 changes: 11 additions & 3 deletions reposter/handlers/resend_restricted.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import reposter.core.config
import reposter.core.types
import reposter.tg.restricted
import reposter.db.models
import pyrogram.types


Expand All @@ -26,15 +27,22 @@ async def resend_all(self) -> None:
target=reposter.core.config.json.logs_chat,
)
real_time_forward = reposter.handlers.forward_unrestricted.ForwardUnrestricted(
src_msg=resent_to_log_chat,
target_any=self.target_any,
src_to_forward=resent_to_log_chat,
src_in_db=self.src_msg,
)
await real_time_forward.forward_all()
return await real_time_forward.forward_all()
elif isinstance(self.target_any, (str, int)):
await self.resend_one(
target_msg = await self.resend_one(
src_msg=self.src_msg,
target=self.target_any,
)
await reposter.db.models.Msg.create(
src_msg=self.src_msg.id,
src_chat=self.src_msg.chat,
target_msg=target_msg.id,
target_chat=target_msg.chat.id
)
else:
raise AssertionError

Expand Down
22 changes: 13 additions & 9 deletions reposter/handlers/set.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
import reposter.handlers.on_message
import reposter.handlers.on_msg
import reposter.funcs.handle
import reposter.funcs.other
import reposter.core.common
import reposter.core.config
import pyrogram.raw.functions
import pyrogram.handlers
import asyncio
import sys

Expand Down Expand Up @@ -58,21 +59,24 @@ def set_handlers():
reposter.core.config.json.stream_notify_chats = notify
for source_to_fix, target_to_fix in reposter.core.config.json.chats.items():
source = chat_str_fix(source_to_fix)
source_filter = pyrogram.filters.chat(source)
if isinstance(target_to_fix, list):
target = []
for i in target_to_fix:
target.append(chat_str_fix(i))
else:
target = chat_str_fix(target_to_fix)
on_message = reposter.handlers.on_message.OnMessage(target_any=target)
reposter.core.common.tg.client.add_handler(
pyrogram.handlers.message_handler.MessageHandler(
callback=on_message.handler,
filters=pyrogram.filters.chat(source),
)
)
on_msg = reposter.handlers.on_msg.OnMsg(target_any=target)
for handler, to_run in {
pyrogram.handlers.edited_message_handler.EditedMessageHandler: on_msg.on_edited_msg,
pyrogram.handlers.message_handler.MessageHandler: on_msg.on_new_msg,
pyrogram.handlers.deleted_messages_handler.DeletedMessagesHandler: on_msg.on_deleted_msg,
}.items():
reposter.core.common.tg.client.add_handler(handler(
callback=to_run,
filters=source_filter,
))
reposter.core.common.log(
f'[green]\\[added handler][/] [blue]{source}[/] -> [yellow]{target}'
)


0 comments on commit cafc0d1

Please sign in to comment.