Reverting and saving
- Turned antispam.py into retry.py, need redis storage for better work. - Reverted /ban recode - Removed registration.py middleware - Removed using in perms ru_cmds (outdated)
This commit is contained in:
parent
e7379cb8aa
commit
3ee2844ffc
|
@ -10,10 +10,7 @@ from bozenka.instances.telegram.handlers.chat_admin.mutes import mute, unmute
|
|||
from bozenka.instances.telegram.handlers.chat_admin.pins import pin, unpin, unpin_all
|
||||
from bozenka.instances.telegram.handlers.chat_admin.topics import *
|
||||
from bozenka.instances.telegram.handlers.chat_admin.bans import ban, unban
|
||||
from bozenka.instances.telegram.utils.filters import (
|
||||
IsAdminFilter,
|
||||
UserHasPermissions, BotHasPermissions
|
||||
)
|
||||
from bozenka.instances.telegram.utils.filters import *
|
||||
|
||||
|
||||
def register_admin_cmd(router: Router) -> None:
|
||||
|
@ -33,7 +30,9 @@ def register_admin_cmd(router: Router) -> None:
|
|||
router.message.register(help_unpin, Command(commands=["unpin"]))
|
||||
# Ban / Unban commands handler
|
||||
router.message.register(ban, Command(commands="ban"),
|
||||
IsAdminFilter(True), F.reply_to_message.text or [entity for entity in F.entities if entity.type == 'mention'])
|
||||
IsAdminFilter(True))
|
||||
router.message.register(ban, Command(commands="ban"),
|
||||
IsAdminFilter(True), F.reply_to_message.text)
|
||||
router.message.register(unban, Command(commands="unban"),
|
||||
IsAdminFilter(True), F.reply_to_message.text)
|
||||
# Mute / Unmute commands handler
|
||||
|
|
|
@ -1,22 +0,0 @@
|
|||
import logging
|
||||
|
||||
from aiogram import Router, F
|
||||
from aiogram.filters import Command
|
||||
|
||||
|
||||
from bozenka.instances.telegram.utils.filters import (
|
||||
IsAdminFilter,
|
||||
UserHasPermissions, BotHasPermissions
|
||||
)
|
||||
|
||||
|
||||
def register_admin_cmd(router: Router) -> None:
|
||||
"""
|
||||
Registers all commands related to administrators in group.
|
||||
All commands there require access to some group perms.
|
||||
:param router:
|
||||
:return:
|
||||
"""
|
||||
logging.log(msg="Registering administrator commands", level=logging.INFO)
|
||||
# Helpig handlers
|
||||
|
|
@ -1 +1,2 @@
|
|||
from .permissions import *
|
||||
from .message_entities import *
|
||||
|
|
|
@ -1,8 +0,0 @@
|
|||
from aiogram.filters import Filter
|
||||
|
||||
|
||||
class IsChatType(Filter):
|
||||
"""
|
||||
|
||||
"""
|
||||
|
|
@ -45,7 +45,8 @@ class UserHasPermissions(Filter):
|
|||
:return:
|
||||
"""
|
||||
if permission.count(False) > 0 or permission.count(None) > 0:
|
||||
await msg.answer(ru_cmds["no_perms"])
|
||||
await msg.answer("Ошибка ❌\n"
|
||||
"У вас нет прав на использование этой комманды 🚫")
|
||||
return False
|
||||
return True
|
||||
|
||||
|
|
|
@ -1,5 +1,3 @@
|
|||
__all__ = ["registration"]
|
||||
|
||||
import logging
|
||||
|
||||
from aiogram import Router, Dispatcher
|
||||
|
@ -12,4 +10,4 @@ def register_middlewares(dp: Dispatcher):
|
|||
:return:
|
||||
"""
|
||||
logging.log(msg=f"Registering middlewares of bot", level=logging.INFO)
|
||||
# dp.message.middleware(Registration)
|
||||
# SOON
|
||||
|
|
|
@ -1 +0,0 @@
|
|||
# Will be added soon
|
|
@ -1,39 +0,0 @@
|
|||
|
||||
'''
|
||||
import logging
|
||||
from typing import Callable, Dict, Any, Awaitable
|
||||
|
||||
from aiogram import BaseMiddleware
|
||||
from aiogram.types import Message, ContentType
|
||||
from sqlalchemy import select
|
||||
from sqlalchemy.orm import sessionmaker
|
||||
|
||||
from bozenka.db import Users
|
||||
|
||||
class Registration(BaseMiddleware):
|
||||
"""
|
||||
Checks, is user & group registered.
|
||||
"""
|
||||
async def __call__(
|
||||
self,
|
||||
handler: Callable[[Message, Dict[str, Any]], Awaitable[Any]],
|
||||
event: Message,
|
||||
data: Dict[str, Any]
|
||||
) -> Any:
|
||||
session_maker: sessionmaker = data["session_maker"]
|
||||
async with session_maker() as session:
|
||||
async with session.begin():
|
||||
result = await session.execute(select(Users).where(Users.user_id == event.from_user.id and Users.chat_id == event.chat.id))
|
||||
user = result.one_or_none()
|
||||
logging.log(msg=f"Checking user registration with id={event.from_user.id}", level=logging.INFO)
|
||||
if user is None:
|
||||
logging.log(msg=f"Registering user into database with id={event.from_user.id}", level=logging.INFO)
|
||||
user = Users(
|
||||
user_id=event.from_user.id,
|
||||
chat_id=event.chat.id
|
||||
)
|
||||
await session.merge(user)
|
||||
|
||||
if not data:
|
||||
return await handler(event, None)
|
||||
'''
|
|
@ -0,0 +1,40 @@
|
|||
import time
|
||||
from typing import Callable, Dict, Awaitable, Any
|
||||
|
||||
from aiogram import BaseMiddleware
|
||||
from aiogram.exceptions import TelegramRetryAfter
|
||||
from aiogram.types import Message, ErrorEvent, Update, CallbackQuery
|
||||
|
||||
|
||||
class RetryMessageMiddleware(BaseMiddleware):
|
||||
"""
|
||||
Protects from user don't get update by message
|
||||
"""
|
||||
def __init__(self) -> None:
|
||||
self.counter = 0
|
||||
|
||||
async def __call__(
|
||||
self,
|
||||
handler: Callable[[Message, Dict[str, Any]], Awaitable[Any]],
|
||||
event: ErrorEvent[TelegramRetryAfter, Update],
|
||||
data: Dict[str, Any]
|
||||
) -> Any:
|
||||
time.sleep(event.exception.retry_after)
|
||||
return await handler(event.update.message, data)
|
||||
|
||||
|
||||
class RetryCallbackMiddleware(BaseMiddleware):
|
||||
"""
|
||||
Protects from user don't get update by callbackquery
|
||||
"""
|
||||
def __init__(self) -> None:
|
||||
self.counter = 0
|
||||
|
||||
async def __call__(
|
||||
self,
|
||||
handler: Callable[[CallbackQuery, Dict[str, Any]], Awaitable[Any]],
|
||||
event: ErrorEvent[TelegramRetryAfter, Update],
|
||||
data: Dict[str, Any]
|
||||
) -> Any:
|
||||
time.sleep(event.exception.retry_after)
|
||||
return await handler(event.update.callback_query, data)
|
|
@ -132,9 +132,6 @@ class SolutionSimpler:
|
|||
config["ban_time"] = datetime.utcfromtimestamp(count_time(item)).strftime('%Y-%m-%d %H:%M:%S')
|
||||
else:
|
||||
config["reason"] += item + " "
|
||||
if msg.entities and (mentions := [entity for entity in msg.entities if entity.type == 'mention']):
|
||||
for banned in mentions:
|
||||
await basic_ban(msg, banned.user, config, session)
|
||||
if msg.reply_to_message.text:
|
||||
await basic_ban(msg, msg.reply_to_message.from_user, config, session)
|
||||
return config
|
||||
|
@ -151,13 +148,14 @@ class SolutionSimpler:
|
|||
logging.log(
|
||||
msg=f"Unbanned user @{msg.reply_to_message.from_user.full_name} id={msg.reply_to_message.from_user.id}",
|
||||
level=logging.INFO)
|
||||
async with session() as session:
|
||||
async with session.begin():
|
||||
await session.execute(
|
||||
Update(Users)
|
||||
.values(is_banned=False, ban_reason=None)
|
||||
.where(Users.user_id == msg.from_user.id and Users.chat_id == msg.chat.id)
|
||||
)
|
||||
if await get_user(user_id=msg.from_user.id, chat_id=msg.chat.id, session=session):
|
||||
async with session() as session:
|
||||
async with session.begin():
|
||||
await session.execute(
|
||||
Update(Users)
|
||||
.values(is_banned=False, ban_reason=None)
|
||||
.where(Users.user_id == msg.from_user.id and Users.chat_id == msg.chat.id)
|
||||
)
|
||||
|
||||
@staticmethod
|
||||
async def get_status(msg: types.Message, session: async_sessionmaker) -> dict[str, bool | None | Any]:
|
||||
|
|
Binary file not shown.
Before Width: | Height: | Size: 398 KiB After Width: | Height: | Size: 504 KiB |
Loading…
Reference in New Issue