mirror of
				https://gitflic.ru/project/alt-gnome/karkas.git
				synced 2025-11-03 23:12:27 +03:00 
			
		
		
		
	Merged with fix/add-limits-to-report
This commit is contained in:
		@@ -1,5 +1,6 @@
 | 
				
			|||||||
stages:
 | 
					stages:
 | 
				
			||||||
  - lint
 | 
					  - lint
 | 
				
			||||||
 | 
					  - build
 | 
				
			||||||
 | 
					
 | 
				
			||||||
lint-pre-commit:
 | 
					lint-pre-commit:
 | 
				
			||||||
  stage: lint
 | 
					  stage: lint
 | 
				
			||||||
@@ -12,3 +13,21 @@ lint-pre-commit:
 | 
				
			|||||||
    paths:
 | 
					    paths:
 | 
				
			||||||
      - .cache/pip
 | 
					      - .cache/pip
 | 
				
			||||||
      - .cache/pre-commit
 | 
					      - .cache/pre-commit
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					build-altlinux:
 | 
				
			||||||
 | 
					  stage: build
 | 
				
			||||||
 | 
					  image: docker:27.1.2
 | 
				
			||||||
 | 
					  variables:
 | 
				
			||||||
 | 
					    CI_REGISTRY: registry.gitflic.ru
 | 
				
			||||||
 | 
					    IMAGE_NAME: registry.gitflic.ru/project/alt-gnome/karkas/altlinux
 | 
				
			||||||
 | 
					  before_script:
 | 
				
			||||||
 | 
					    - docker info
 | 
				
			||||||
 | 
					    - docker login -u ${CI_REGISTRY_USER} -p ${CI_REGISTRY_PASSWORD} ${CI_REGISTRY}
 | 
				
			||||||
 | 
					  scripts:
 | 
				
			||||||
 | 
					    - |
 | 
				
			||||||
 | 
					      cd ./src/altlinux
 | 
				
			||||||
 | 
					      export IMAGE_COMMIT=${IMAGE_NAME}:${CI_COMMIT_SHA}
 | 
				
			||||||
 | 
					      export IMAGE_BRANCH=${IMAGE_NAME}:$(echo $CI_COMMIT_REF_NAME | sed 's/[^a-zA-Z0-9]/-/g')
 | 
				
			||||||
 | 
					      docker build -t ${IMAGE_COMMIT} -t ${IMAGE_BRANCH} -f Dockerfile ../..
 | 
				
			||||||
 | 
					      docker push ${IMAGE_COMMIT}
 | 
				
			||||||
 | 
					      docker push ${IMAGE_BRANCH}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -6,9 +6,18 @@
 | 
				
			|||||||
    "version": "1.0.0",
 | 
					    "version": "1.0.0",
 | 
				
			||||||
    "privileged": false,
 | 
					    "privileged": false,
 | 
				
			||||||
    "dependencies": {
 | 
					    "dependencies": {
 | 
				
			||||||
 | 
					        "required": {
 | 
				
			||||||
 | 
					            "standard.config": "^1.0.0"
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
        "optional": {
 | 
					        "optional": {
 | 
				
			||||||
            "standard.command_helper": "^1.0.0",
 | 
					            "standard.command_helper": "^1.0.0",
 | 
				
			||||||
            "standard.filters": "^1.0.0"
 | 
					            "standard.filters": "^1.0.0"
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "pythonDependencies": {
 | 
				
			||||||
 | 
					        "required": {
 | 
				
			||||||
 | 
					            "random": "*",
 | 
				
			||||||
 | 
					            "string": "*"
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,3 +1,5 @@
 | 
				
			|||||||
 | 
					import random
 | 
				
			||||||
 | 
					from string import Template
 | 
				
			||||||
from typing import TYPE_CHECKING
 | 
					from typing import TYPE_CHECKING
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from aiogram import Router
 | 
					from aiogram import Router
 | 
				
			||||||
@@ -7,8 +9,11 @@ from aiogram.types import ChatMemberAdministrator, ChatMemberOwner, Message
 | 
				
			|||||||
from ocab_core.modules_system.public_api import get_module, log, register_router
 | 
					from ocab_core.modules_system.public_api import get_module, log, register_router
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if TYPE_CHECKING:
 | 
					if TYPE_CHECKING:
 | 
				
			||||||
 | 
					    from ocab_modules.standard.config import IConfig
 | 
				
			||||||
    from ocab_modules.standard.filters import ChatIDFilter as IChatIDFilter
 | 
					    from ocab_modules.standard.filters import ChatIDFilter as IChatIDFilter
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					config: "IConfig" = get_module("standard.config", "config")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
try:
 | 
					try:
 | 
				
			||||||
    ChatIDFilter: "type[IChatIDFilter]" = get_module("standard.filters", "ChatIDFilter")
 | 
					    ChatIDFilter: "type[IChatIDFilter]" = get_module("standard.filters", "ChatIDFilter")
 | 
				
			||||||
    FILTERS_MODULE_LOADED = True
 | 
					    FILTERS_MODULE_LOADED = True
 | 
				
			||||||
@@ -36,25 +41,50 @@ def can_moderate(admin: ChatMemberOwner | ChatMemberAdministrator) -> bool:
 | 
				
			|||||||
async def report(message: Message):
 | 
					async def report(message: Message):
 | 
				
			||||||
    try:
 | 
					    try:
 | 
				
			||||||
        if message.reply_to_message is None:
 | 
					        if message.reply_to_message is None:
 | 
				
			||||||
            await message.reply(
 | 
					            await message.reply(config.get("report::errors::no_reply_message"))
 | 
				
			||||||
                "Пожалуйста, используйте команду /report в ответ на сообщение"
 | 
					 | 
				
			||||||
                ", которое вы хотите отметить как спам."
 | 
					 | 
				
			||||||
            )
 | 
					 | 
				
			||||||
            return
 | 
					            return
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        admins = await message.chat.get_administrators()
 | 
					        mention_list = config.get("report::mention::list")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        admin_usernames = [
 | 
					        if mention_list is None:
 | 
				
			||||||
            admin.user.mention_html() for admin in admins if can_moderate(admin)
 | 
					            admins = await message.chat.get_administrators()
 | 
				
			||||||
        ]
 | 
					            mention_list = [
 | 
				
			||||||
        if admin_usernames:
 | 
					                admin.user.mention_html() for admin in admins if can_moderate(admin)
 | 
				
			||||||
            ping_message = "⚠️ Внимание, жалоба на спам! " + ", ".join(admin_usernames)
 | 
					            ]
 | 
				
			||||||
            await message.reply_to_message.reply(ping_message, parse_mode="HTML")
 | 
					
 | 
				
			||||||
 | 
					        random.shuffle(mention_list)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        limit = config.get("report::mention::limit")
 | 
				
			||||||
 | 
					        if limit != -1:
 | 
				
			||||||
 | 
					            mention_list = mention_list[:limit]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if mention_list:
 | 
				
			||||||
 | 
					            await message.reply_to_message.reply(
 | 
				
			||||||
 | 
					                Template(config.get("report::mention::text")).substitute(
 | 
				
			||||||
 | 
					                    mention=", ".join(mention_list)
 | 
				
			||||||
 | 
					                ),
 | 
				
			||||||
 | 
					                parse_mode="HTML",
 | 
				
			||||||
 | 
					            )
 | 
				
			||||||
    except Exception as e:
 | 
					    except Exception as e:
 | 
				
			||||||
        log(e)
 | 
					        log(e)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
async def module_init():
 | 
					async def module_init():
 | 
				
			||||||
 | 
					    config.register("report::mention::limit", "int", default_value=5)
 | 
				
			||||||
 | 
					    config.register(
 | 
				
			||||||
 | 
					        "report::mention::list", "string", multiple=True, default_value=None
 | 
				
			||||||
 | 
					    )
 | 
				
			||||||
 | 
					    config.register(
 | 
				
			||||||
 | 
					        "report::mention::text",
 | 
				
			||||||
 | 
					        "string",
 | 
				
			||||||
 | 
					        default_value="⚠️ Внимание, жалоба на спам! $mention",
 | 
				
			||||||
 | 
					    )
 | 
				
			||||||
 | 
					    config.register(
 | 
				
			||||||
 | 
					        "report::errors::no_reply_message",
 | 
				
			||||||
 | 
					        "string",
 | 
				
			||||||
 | 
					        default_value="Пожалуйста, используйте команду в ответ на сообщение",
 | 
				
			||||||
 | 
					    )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    router = Router()
 | 
					    router = Router()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if FILTERS_MODULE_LOADED:
 | 
					    if FILTERS_MODULE_LOADED:
 | 
				
			||||||
@@ -65,5 +95,4 @@ async def module_init():
 | 
				
			|||||||
    register_router(router)
 | 
					    register_router(router)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if COMMAND_HELPER_MODULE_LOADED:
 | 
					    if COMMAND_HELPER_MODULE_LOADED:
 | 
				
			||||||
        register_command = get_module("standard.command_helper", "register_command")
 | 
					 | 
				
			||||||
        register_command("report", "Пожаловаться на спам")
 | 
					        register_command("report", "Пожаловаться на спам")
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user