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:
kittyneverdies 2023-12-19 23:36:10 +03:00
parent e7379cb8aa
commit 3ee2844ffc
11 changed files with 56 additions and 89 deletions

View File

@ -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

View File

@ -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

View File

@ -1 +1,2 @@
from .permissions import *
from .message_entities import *

View File

@ -1,8 +0,0 @@
from aiogram.filters import Filter
class IsChatType(Filter):
"""
"""

View File

@ -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

View File

@ -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

View File

@ -1 +0,0 @@
# Will be added soon

View File

@ -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)
'''

View File

@ -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)

View File

@ -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