refactor: redesigned the filters for groups and supergroups

This commit is contained in:
Danil 2024-12-08 16:22:45 +03:00
parent 098b520138
commit 0986edac22
4 changed files with 19 additions and 10 deletions

View file

@ -3,12 +3,12 @@ from aiogram.filters import Command
from aiogram.types import Message from aiogram.types import Message
from database.database import pg_con from database.database import pg_con
from filters.chat_type import ChatTypeFilter
router = Router() router = Router()
@router.message(Command('set_channel')) @router.message(Command('set_channel'), ChatTypeFilter(chat_type=["group", "supergroup"]))
async def set_channel(message: Message): async def set_channel(message: Message):
print(message)
args = message.text.split() args = message.text.split()
if len(args) < 2: if len(args) < 2:

View file

@ -2,15 +2,13 @@ from aiogram import types, Router
from aiogram.filters import ChatMemberUpdatedFilter, IS_MEMBER from aiogram.filters import ChatMemberUpdatedFilter, IS_MEMBER
from database.database import pg_con from database.database import pg_con
from filters.chat_type import ChatTypeFilter
router = Router() router = Router()
@router.my_chat_member(ChatMemberUpdatedFilter(IS_MEMBER)) @router.my_chat_member(ChatMemberUpdatedFilter(IS_MEMBER), ChatTypeFilter(chat_type=["group", "supergroup"]))
async def join_chat(event: types.Message): async def join_chat(event: types.Message):
if event.chat.type not in {'group', 'supergroup'}:
return
conn = await pg_con() conn = await pg_con()
data = await conn.fetch('SELECT emoji_list FROM chat WHERE chat_id = $1', event.chat.id) data = await conn.fetch('SELECT emoji_list FROM chat WHERE chat_id = $1', event.chat.id)

View file

@ -3,6 +3,7 @@ from aiogram.exceptions import TelegramBadRequest
from bot import bot from bot import bot
from database.database import pg_con from database.database import pg_con
from filters.chat_type import ChatTypeFilter
router = Router() router = Router()
@ -25,11 +26,8 @@ async def update_reaction_count(conn, chat_id, message_id, delta):
) )
@router.message_reaction() @router.message_reaction(ChatTypeFilter(chat_type=["group", "supergroup"]))
async def register_message_reaction(event: types.MessageReactionUpdated): async def register_message_reaction(event: types.MessageReactionUpdated):
if event.chat.type not in {'group', 'supergroup'}:
return
conn = await pg_con() conn = await pg_con()
data_reaction = await conn.fetchval('SELECT emoji_list FROM chat WHERE chat_id = $1', event.chat.id) data_reaction = await conn.fetchval('SELECT emoji_list FROM chat WHERE chat_id = $1', event.chat.id)

13
filters/chat_type.py Normal file
View file

@ -0,0 +1,13 @@
from aiogram.filters import BaseFilter
from aiogram.types import Message
# https://stackoverflow.com/a/78272229/20781634
class ChatTypeFilter(BaseFilter):
def __init__(self, chat_type: str | list):
self.chat_type = chat_type
async def __call__(self, message: Message) -> bool:
if isinstance(self.chat_type, str):
return message.chat.type == self.chat_type
else:
return message.chat.type in self.chat_type