Подскажите, какие фильтры хэндлеры, отвечают за удаление урл, хочу чтобы от пользователя удалялся урл, а от администратор нет.
Файл bot.py
import filters, handlers
import logging
import asyncio
import math
import os
import time
from aiogram import executor
from aiogram import Bot, Dispatcher, types
from aiogram.contrib.fsm_storage.memory import MemoryStorage
from aiogram.dispatcher.filters import BoundFilter
from aiogram.types.message import Message
import re
from aiogram import types
from aiogram.dispatcher.filters import AdminFilter
import datetime
import typing
API_TOKEN = 'moy_token'
logging.basicConfig(level=logging.INFO)
logging.getLogger('asyncio').setLevel(logging.WARNING)
bot = Bot(token=API_TOKEN, parse_mode=types.ParseMode.HTML)
dp = Dispatcher(bot)
@dp.message_handler()
async def delete_links(message):
if message.chat.type != "supergroup":
return
member = await bot.get_chat_member(message.chat.id, message.from_user.id)
if isinstance(member, types.ChatMemberAdministrator):
for entity in message.entities:
if entity.type in ["url", "text_link"]:
return await bot.delete_message(message.chat.id, message.message_id)
if __name__ == '__main__':
executor.start_polling(dp, skip_updates=True)
Библиотека Aiogram и подкажите как примерно подключаются import и from, если в одном файле, я все подключу, или в отдельной папке/файле, нужно сделать проверку, является ли пользователь телеграм группы, администратором или нет.
Нужно определить class ChatMemberStatus и class ChatMemberAdministrator(ChatMember)
Но получается так, что от админа без анонимности удаляются и от пользователя тоже, а от админа с анонимностью, не удаляется ссылка, классы добавлял в отдельную папку и файл.
class ChatMemberStatus(helper.Helper):
"""
Chat member status
"""
mode = helper.HelperMode.lowercase
CREATOR = helper.Item() # creator
OWNER = CREATOR # creator
ADMINISTRATOR = helper.Item() # administrator
MEMBER = helper.Item() # member
RESTRICTED = helper.Item() # restricted
LEFT = helper.Item() # left
KICKED = helper.Item() # kicked
BANNED = KICKED # kicked
@classmethod
def is_chat_creator(cls, role: str) -> bool:
return role == cls.CREATOR
is_chat_owner = is_chat_creator
@classmethod
def is_chat_admin(cls, role: str) -> bool:
return role in (cls.ADMINISTRATOR, cls.CREATOR)
@classmethod
def is_chat_member(cls, role: str) -> bool:
return role in (cls.MEMBER, cls.ADMINISTRATOR, cls.CREATOR, cls.RESTRICTED)
@classmethod
def get_class_by_status(cls, status: str) -> typing.Optional[typing.Type["ChatMember"]]:
return {
cls.OWNER: ChatMemberOwner,
cls.ADMINISTRATOR: ChatMemberAdministrator,
cls.MEMBER: ChatMemberMember,
cls.RESTRICTED: ChatMemberRestricted,
cls.LEFT: ChatMemberLeft,
cls.BANNED: ChatMemberBanned,
}.get(status)
class ChatMemberAdministrator(ChatMember):
"""
Represents a chat member that has some additional privileges.
https://core.telegram.org/bots/api#chatmemberadministrator
"""
status: base.String = fields.Field(default=ChatMemberStatus.ADMINISTRATOR)
user: User = fields.Field(base=User)
can_be_edited: base.Boolean = fields.Field()
custom_title: base.String = fields.Field()
is_anonymous: base.Boolean = fields.Field()
can_manage_chat: base.Boolean = fields.Field()
can_post_messages: base.Boolean = fields.Field()
can_edit_messages: base.Boolean = fields.Field()
can_delete_messages: base.Boolean = fields.Field()
can_manage_voice_chats: base.Boolean = fields.Field()
can_restrict_members: base.Boolean = fields.Field()
can_promote_members: base.Boolean = fields.Field()
can_change_info: base.Boolean = fields.Field()
can_invite_users: base.Boolean = fields.Field()
can_pin_messages: base.Boolean = fields.Field()