taskbot/app/event_handlers.py

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