sukuinote/sukuinote/plugins/user_joins.py

53 lines
2.7 KiB
Python

import html
import asyncio
from pyrogram import Client, ContinuePropagation
from pyrogram.raw.types import UpdateNewChannelMessage, UpdateNewMessage, MessageService, PeerChat, PeerChannel, MessageActionChatAddUser, MessageActionChatJoinedByLink
from .. import config, log_errors, slave
def sexy_user_name(user):
text = user.first_name
if user.last_name:
text += ' ' + user.last_name
return f'{"<code>[DELETED]</code>" if user.deleted else html.escape(text or "Empty???")} [<code>{user.id}</code>]'
handled = set()
lock = asyncio.Lock()
@Client.on_raw_update()
@log_errors
async def log_user_joins(client, update, users, chats):
if isinstance(update, (UpdateNewChannelMessage, UpdateNewMessage)):
message = update.message
if isinstance(message, MessageService):
action = message.action
if isinstance(action, (MessageActionChatAddUser, MessageActionChatJoinedByLink)):
if isinstance(message.to_id, PeerChannel):
chat_id = message.to_id.channel_id
sexy_chat_id = int('-100' + str(chat_id))
elif isinstance(message.to_id, PeerChat):
chat_id = message.to_id.chat_id
sexy_chat_id = -chat_id
else:
return
is_join = isinstance(action, MessageActionChatJoinedByLink)
if not is_join:
is_join = action.users == [message.from_id]
if is_join and not config['config']['log_user_joins']:
raise ContinuePropagation
if not is_join and not config['config']['log_user_adds']:
raise ContinuePropagation
text = f"<b>{'User Join Event' if is_join else 'User Add Event'}</b>\n- <b>Chat:</b> {html.escape(chats[chat_id].title)} [<code>{sexy_chat_id}</code>]\n"
async with lock:
if (sexy_chat_id, message.id) not in handled:
if is_join:
text += f'- <b>User:</b> {sexy_user_name(users[message.from_id])}\n'
if isinstance(action, MessageActionChatJoinedByLink):
text += f'- <b>Inviter:</b> {sexy_user_name(users[action.inviter_id])}'
else:
text += f'- <b>Adder:</b> {sexy_user_name(users[message.from_id])}\n- <b>Added Users:</b>\n'
for user in action.users:
text += f'--- {sexy_user_name(users[user])}\n'
await slave.send_message(config['config']['log_chat'], text)
handled.add((sexy_chat_id, message.id))
return
raise ContinuePropagation