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.pins import pin, unpin, unpin_all
|
||||||
from bozenka.instances.telegram.handlers.chat_admin.topics import *
|
from bozenka.instances.telegram.handlers.chat_admin.topics import *
|
||||||
from bozenka.instances.telegram.handlers.chat_admin.bans import ban, unban
|
from bozenka.instances.telegram.handlers.chat_admin.bans import ban, unban
|
||||||
from bozenka.instances.telegram.utils.filters import (
|
from bozenka.instances.telegram.utils.filters import *
|
||||||
IsAdminFilter,
|
|
||||||
UserHasPermissions, BotHasPermissions
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
def register_admin_cmd(router: Router) -> None:
|
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"]))
|
router.message.register(help_unpin, Command(commands=["unpin"]))
|
||||||
# Ban / Unban commands handler
|
# Ban / Unban commands handler
|
||||||
router.message.register(ban, Command(commands="ban"),
|
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"),
|
router.message.register(unban, Command(commands="unban"),
|
||||||
IsAdminFilter(True), F.reply_to_message.text)
|
IsAdminFilter(True), F.reply_to_message.text)
|
||||||
# Mute / Unmute commands handler
|
# 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 .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:
|
:return:
|
||||||
"""
|
"""
|
||||||
if permission.count(False) > 0 or permission.count(None) > 0:
|
if permission.count(False) > 0 or permission.count(None) > 0:
|
||||||
await msg.answer(ru_cmds["no_perms"])
|
await msg.answer("Ошибка ❌\n"
|
||||||
|
"У вас нет прав на использование этой комманды 🚫")
|
||||||
return False
|
return False
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,3 @@
|
||||||
__all__ = ["registration"]
|
|
||||||
|
|
||||||
import logging
|
import logging
|
||||||
|
|
||||||
from aiogram import Router, Dispatcher
|
from aiogram import Router, Dispatcher
|
||||||
|
@ -12,4 +10,4 @@ def register_middlewares(dp: Dispatcher):
|
||||||
:return:
|
:return:
|
||||||
"""
|
"""
|
||||||
logging.log(msg=f"Registering middlewares of bot", level=logging.INFO)
|
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')
|
config["ban_time"] = datetime.utcfromtimestamp(count_time(item)).strftime('%Y-%m-%d %H:%M:%S')
|
||||||
else:
|
else:
|
||||||
config["reason"] += item + " "
|
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:
|
if msg.reply_to_message.text:
|
||||||
await basic_ban(msg, msg.reply_to_message.from_user, config, session)
|
await basic_ban(msg, msg.reply_to_message.from_user, config, session)
|
||||||
return config
|
return config
|
||||||
|
@ -151,13 +148,14 @@ class SolutionSimpler:
|
||||||
logging.log(
|
logging.log(
|
||||||
msg=f"Unbanned user @{msg.reply_to_message.from_user.full_name} id={msg.reply_to_message.from_user.id}",
|
msg=f"Unbanned user @{msg.reply_to_message.from_user.full_name} id={msg.reply_to_message.from_user.id}",
|
||||||
level=logging.INFO)
|
level=logging.INFO)
|
||||||
async with session() as session:
|
if await get_user(user_id=msg.from_user.id, chat_id=msg.chat.id, session=session):
|
||||||
async with session.begin():
|
async with session() as session:
|
||||||
await session.execute(
|
async with session.begin():
|
||||||
Update(Users)
|
await session.execute(
|
||||||
.values(is_banned=False, ban_reason=None)
|
Update(Users)
|
||||||
.where(Users.user_id == msg.from_user.id and Users.chat_id == msg.chat.id)
|
.values(is_banned=False, ban_reason=None)
|
||||||
)
|
.where(Users.user_id == msg.from_user.id and Users.chat_id == msg.chat.id)
|
||||||
|
)
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
async def get_status(msg: types.Message, session: async_sessionmaker) -> dict[str, bool | None | Any]:
|
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