43 lines
1.8 KiB
Python
43 lines
1.8 KiB
Python
"""colletcion of callback functions for passive events, like user joined or photo sent"""
|
|
|
|
from telegram import Chat, ChatMember, Message, MessageEntity, Update, User
|
|
from telegram.ext import CommandHandler, Updater, PicklePersistence, Filters, CallbackContext
|
|
|
|
import helpers as h
|
|
|
|
from telegram.utils.helpers import escape_markdown
|
|
|
|
from constants import USERS, GET_ADMIN_FROM_API_REQUEST_COUNTDOWN
|
|
|
|
|
|
def keep_user_register(update: Update, context: CallbackContext) -> None:
|
|
"""sync username and user object on any action
|
|
|
|
do not use in very large chats as there is no deleting from the register"""
|
|
message = update.message
|
|
users = set()
|
|
# get user from every possible source
|
|
if hasattr(update, "effective_user"): users |= set(update.effective_user)
|
|
if hasattr(message, "new_chat_members"): users |= set(*message.new_chat_members)
|
|
if hasattr(message, "left_chat_member"): users |= set(message.left_chat_member)
|
|
if hasattr(message, "forward_from"): users |= set(message.forward_from)
|
|
if hasattr(update, "edited_message"):
|
|
if hasattr(update.edited_message, "from_user"): users |= set(message.edited_message.from_user)
|
|
try:
|
|
record = GET_ADMIN_FROM_API_REQUEST_COUNTDOWN
|
|
get_administrators_frequency = 10 # request this data with low frequency
|
|
try:
|
|
if context.chat_data[record] >= get_administrators_frequency:
|
|
context.chat_data[record]
|
|
users |= set(message.chat.get_administrators)
|
|
else:
|
|
context.chat_data[record] += 1
|
|
except KeyError: # no record set if first time
|
|
context.chat_data[record] = 0
|
|
except Exception as e: pass
|
|
|
|
users.discard(None)
|
|
|
|
registered_users: set[User] = context.bot_data[USERS]
|
|
registered_users |= users
|