diff --git a/example-config.yaml b/example-config.yaml index 05332b0..c57d535 100644 --- a/example-config.yaml +++ b/example-config.yaml @@ -14,3 +14,4 @@ config: log_user_joins: false log_user_adds: true log_reports: true + log_forwards: true diff --git a/sukuinote/plugins/log_forwards.py b/sukuinote/plugins/log_forwards.py new file mode 100644 index 0000000..21674d1 --- /dev/null +++ b/sukuinote/plugins/log_forwards.py @@ -0,0 +1,75 @@ +import html +import asyncio +from pyrogram import Client, filters +from .. import config, slave, log_errors, app_user_ids + +logged = set() +lock = asyncio.Lock() + +@Client.on_message(filters.forwarded & (filters.chat | filters.channel)) +@log_errors +async def log_reports(client, message): + if not config['config'].get('log_forwards'): + return + if message.from_user.id in app_user_ids: + return + for i in app_user_ids: + if message.forward_from: + if i == message.forward_from.id: + forwardee = app_user_ids[i] + break + j = app_user_ids[i].first_name + if app_user_ids[i].last_name: + j += f' {app_user_ids[i].last_name}' + if j == message.forward_sender_name: + forwardee = app_user_ids[i] + break + else: + return + identifier = (message.chat.id, message.message_id) + async with lock: + if identifier in logged: + return + chat_text = html.escape(message.chat.title) + if message.chat.username: + chat_text = f'{chat_text}' + text = f'Forwarded Event\n- Chat: {chat_text} ' + if message.chat.is_verified: + chat_text += '[VERIFIED] ' + if message.chat.is_support: + chat_text += '[SUPPORT] ' + if message.chat.is_scam: + chat_text += '[SCAM] ' + text += f'[{message.chat.id}]\n- Forwarder: ' + user_text = message.from_user.first_name + if message.from_user.last_name: + user_text += f' {message.from_user.last_name}' + user_text = '[DELETED]' if message.from_user.is_deleted else html.escape(user_text or 'Empty???') + if message.from_user.is_verified: + user_text += ' [VERIFIED]' + if message.from_user.is_support: + user_text += ' [SUPPORT]' + if message.from_user.is_scam: + user_text += ' [SCAM]' + text += f'{user_text} [{message.from_user.id}]\n' + text += f'- Message' + mtext = (message.text or message.caption or '').strip() + if mtext: + text += ':' + text += '' + if mtext: + text += f' {html.escape(mtext.strip()[:2000])}' + text += '- Forwardee: ' + user_text = forwardee.first_name + if forwardee.last_name: + user_text += f' {forwardee.last_name}' + user_text = '[DELETED]' if forwardee.is_deleted else html.escape(user_text or 'Empty???') + if forwardee.is_verified: + user_text += ' [VERIFIED]' + if forwardee.is_support: + user_text += ' [SUPPORT]' + if forwardee.is_scam: + user_text += ' [SCAM]' + text += f'{user_text} [{forwardee.id}]' + await slave.send_message(config['config']['log_chat'], text, disable_web_page_preview=True) + logged.add(identifier)