ADD: join and leave handler

- добавлено отслеживание входа и выхода юзеров
- удаляем оба сообщения
- логируем при входе основную инфу юзера включая его био, на этой основе можно тоже добавить фильтр
- добавлены тесты на новую функцию
This commit is contained in:
kotolex
2023-12-24 13:16:55 +05:00
parent e9cb03814f
commit d9ea26381c
4 changed files with 70 additions and 17 deletions
+7
View File
@@ -82,6 +82,13 @@ def me(message: types.Message):
return msg
def short_user_data(from_user: types.User) -> dict:
info = {'first_name': from_user.first_name, 'last_name': from_user.last_name, 'username': from_user.username,
'full_name': from_user.full_name, 'id': from_user.id, 'code': from_user.language_code,
'is_bot': from_user.is_bot, 'is_premium': from_user.is_premium}
return info
def represent_as_get(message: types.Message):
return parse.quote_plus(detect_args(message))
+21 -2
View File
@@ -1,12 +1,13 @@
""" Stan's commands and reactions. """
import asyncio
import html
import logging
import random
from telebot import types
from telebot import types, util
from .filters import is_white_id
from .helpers import is_nongrata
from .helpers import is_nongrata, short_user_data
from .models import all_chat_quotes, add_quote, is_quote_in_chat, delete_quote_in_chat
from .robot import bot
@@ -63,3 +64,21 @@ async def remove_stan_quote(message: types.Message):
async def tease_nongrata(message: types.Message):
"""Reply to non grata mentions."""
await bot.reply_to(message, "у нас тут таких не любят")
@bot.message_handler(content_types=util.content_type_service)
async def check_new_members(message: types.Message):
if message.content_type == "new_chat_members":
from_user = message.from_user
info = short_user_data(from_user)
await bot.delete_message(message.chat.id, message.id)
# мы не знаем как быстро получим инфу о био, потому сначала удаляем сообщение, потом запрашиваем био/логируем
more_data = await bot.get_chat(from_user.id)
info['bio'] = more_data.bio
info['photo'] = more_data.photo.big_file_id
logging.info("[JOIN] User join chat: %s", info)
if message.content_type == "left_chat_member":
from_user = message.from_user
info = short_user_data(from_user)
logging.debug("[LEAVE] User left chat: %s", info)
await bot.delete_message(message.chat.id, message.id)