텔레그램 채팅을 위한 봇 중재자. 필터
필터는 무엇입니까? 💭
핸들러를 등록할 때 응답해야 하는 명령, 수락할 메시지 유형 등을 지정합니다. 예를 들면 다음과 같습니다.
@dp.message_handler(is_admin=True, commands=['kick'], commands_prefix='!/',
chat_type=[ChatType.GROUP, ChatType.SUPERGROUP])
async def kick_user(message: Message):
보시다시피 여기서 핸들러는 다음과 같은 경우에만 실행됩니다.
모두 필터라고 합니다. 라이브러리의 깊숙한 곳에서 처리기 등록이 이루어지며 각 처리기에 대한 필터가 등록됩니다.
def register(self, handler, filters=None, index=None):
"""
Register callback
Filters can be awaitable or not.
:param handler: coroutine
:param filters: list of filters
:param index: you can reorder handlers
"""
from .filters import get_filters_spec
spec = _get_spec(handler)
if filters and not isinstance(filters, (list, tuple, set)):
filters = [filters]
filters = get_filters_spec(self.dispatcher, filters)
record = Handler.HandlerObj(handler=handler, spec=spec, filters=filters)
if index is None:
self.handlers.append(record)
else:
self.handlers.insert(index, record)
핸들 데코레이터가 허용하는 것을 보면 다음을 볼 수 있습니다.
오늘은 맞춤 필터를 만드는 방법을 배웁니다.
나만의 필터 만들기✍️
먼저 필터 폴더에
admin.py
와 같은 파일을 만들어야 합니다.📦tgbot
┣ 📂필터
┃ ┣ 📜admin.py
┃ ┗ 📜init.py
내부에 다음 코드를 추가합니다.
from aiogram import types
from aiogram.dispatcher.filters import BoundFilter
class IsAdminFilter(BoundFilter):
key = 'is_admin'
def __init__(self, is_admin):
self.is_admin = is_admin
async def check(self, message: types.Message) -> bool:
member = await message.bot.get_chat_member(message.chat.id, message.from_user.id)
return member.is_chat_admin()
보시다시피 필터는 자체 필터를 만들 수 있는 BoundFilter 클래스를 상속하는 간단한 Python 클래스입니다. 처리기에서 필터를 설명하는 방법을 보여주는 필드
key = 'is_admin'
가 있습니다. 구조 외에도 기본 메서드async def check()
가 있습니다. 그 안에 논리를 설명할 수 있지만 이 메서드는 부울 값(True 또는 False)을 반환해야 합니다.자체 필터 연결하기 ⛓️
단순히 클래스를 만드는 것만으로는 충분하지 않습니다. 다음으로
bot.py
파일로 이동하여 필터를 가져와 디스패처에 바인딩해야 합니다....
from tgbot.config import load_config
from tgbot.services.setting_commands import set_default_commands
from tgbot.filters.admin import IsAdminFilter
...
def register_all_filters(dispatcher: Dispatcher) -> None:
logger.info('Registering filters')
dispatcher.filters_factory.bind(IsAdminFilter)
이제 첫 번째 그림에서 보여준 것처럼 핸들러에 필터를 추가할 수 있습니다. 이 문서에서는 채팅 관리를 위한 핸들러를 아직 작성하지 않습니다.
추가부분 😺
지금은
/start
및 /help
두 명령에 대한 처리기를 프로그래밍해 보겠습니다.tgbot/handlers/start.py
:from aiogram.types import Message
from aiogram.dispatcher.filters.builtin import CommandStart
from loader import dp
@dp.message_handler(CommandStart())
async def start_command(message: Message) -> Message:
return await message.answer('Add a bot to the chat, give the administrator permissions and use it')
tgbot/handlers/help.py
:from aiogram.types import Message
from aiogram.dispatcher.filters.builtin import CommandHelp
from loader import dp
@dp.message_handler(CommandHelp())
async def help_command(message: Message) -> Message:
"""
This handler will be called when a user sends `/help` command
"""
return await message.answer("""
User's command:
/help - get commands
/admins - get chat admins
/dice - roll a dice
Administrator's command:
!kick - kick a user
!ban - ban a user
!mute - mute a user
!unmute, !unban - opposite commands
""")
여기서 데코레이터는 이미 아이오그램에 내장된 필터를 사용했습니다. 이러한 필터의 전체 목록을 찾을 수 있습니다here.
참고문헌 🔗
읽어 주셔서 감사합니다! ❤️ ❤️ ❤️
Reference
이 문제에 관하여(텔레그램 채팅을 위한 봇 중재자. 필터), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/mezgoodle/bot-moderator-for-telegram-chats-filters-1a5d텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)