mirror of
https://gitflic.ru/project/maks1ms/ocab.git
synced 2024-12-23 16:23:01 +03:00
Начало разработки модуля модерации
This commit is contained in:
parent
fb6da3d627
commit
ca9834206b
0
src/modules/standard/moderation/__init__.py
Normal file
0
src/modules/standard/moderation/__init__.py
Normal file
6
src/modules/standard/moderation/info.json
Normal file
6
src/modules/standard/moderation/info.json
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"name": "Moderation",
|
||||||
|
"description": "Moderation commands for OCAB",
|
||||||
|
"author": "OCAB Team",
|
||||||
|
"version": "1.0"
|
||||||
|
}
|
113
src/modules/standard/moderation/moderation.py
Normal file
113
src/modules/standard/moderation/moderation.py
Normal file
@ -0,0 +1,113 @@
|
|||||||
|
import asyncio
|
||||||
|
import aiohttp
|
||||||
|
import aiogram
|
||||||
|
import time
|
||||||
|
from ...standard.config.config import *
|
||||||
|
from ...standard.roles.roles import *
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
class Moderation:
|
||||||
|
def __init__(self):
|
||||||
|
access_rights = get_access_rights()
|
||||||
|
bot_check_message = bool(self.access_rights["BOT_CHECK_MESSAGE"])
|
||||||
|
bot_ban_user = bool(self.access_rights["BOT_BAN_USER"])
|
||||||
|
bot_mute_user = bool(self.access_rights["BOT_MUTE_USER"])
|
||||||
|
moderator_rights = self.access_rights["MODERATOR_RIGHTS"]
|
||||||
|
ai_check_message = bool(self.access_rights["AI_CHECK_MESSAGE"])
|
||||||
|
beta_ai_check_message = bool(self.access_rights["BETA_AI_CHECK_MESSAGE"])
|
||||||
|
|
||||||
|
async def time_to_seconds(time):
|
||||||
|
# Конвертация текстового указания времени по типу 3h, 5m, 10s в минуты
|
||||||
|
if time[-1] == 'd':
|
||||||
|
return int(time[:-1]) * 86400
|
||||||
|
elif time[-1] == 'h':
|
||||||
|
return int(time[:-1]) * 3600
|
||||||
|
elif time[-1] == 'm':
|
||||||
|
return int(time[:-1]) * 60
|
||||||
|
elif time[-1] == 's':
|
||||||
|
return int(time[:-1])
|
||||||
|
|
||||||
|
async def short_time_to_time(self, time):
|
||||||
|
# Конвертация времени в длинное название
|
||||||
|
if time[-1] == 'd':
|
||||||
|
return str(f"{time[0:-1]} дней")
|
||||||
|
elif time[-1] == 'h':
|
||||||
|
return str(f"{time[0:-1]} часов")
|
||||||
|
elif time[-1] == 'm':
|
||||||
|
return str(f"{time[0:-1]} минут")
|
||||||
|
elif time[-1] == 's':
|
||||||
|
return str(f"{time[0:-1]} секунд")
|
||||||
|
|
||||||
|
async def delete_message(self, chat_id, message_id, bot: aiogram.Bot):
|
||||||
|
await bot.delete_message(chat_id, message_id)
|
||||||
|
|
||||||
|
async def ban_user(self, chat_id, user_id, bot: aiogram.Bot):
|
||||||
|
await bot.ban_chat_member(chat_id, user_id)
|
||||||
|
|
||||||
|
async def mute_user(self, message, chat_id, user_id, bot: aiogram.Bot, time=0):
|
||||||
|
# Проверка что отправитель является администратором чата
|
||||||
|
# Проверяем мин
|
||||||
|
try:
|
||||||
|
if check_admin_permission(message.from_user.id):
|
||||||
|
# Проверка отвечает ли сообщение на другое сообщение
|
||||||
|
if message.reply_to_message is not None:
|
||||||
|
time = message.text.split(' ')[1]
|
||||||
|
# получаем id отправителя сообщение на которое отвечает message
|
||||||
|
target_id = message.reply_to_message.from_user.id
|
||||||
|
target_name = \
|
||||||
|
cursor.execute("SELECT user_name FROM user_list WHERE user_id = ?", (target_id,)).fetchone()[0]
|
||||||
|
# Проверка, что человек пользователь
|
||||||
|
if cursor.execute("SELECT user_role FROM user_list WHERE user_id = ?", (target_id,)).fetchone()[
|
||||||
|
0] == 0:
|
||||||
|
# ограничения прав пользователя по отправке сообщений на time секунд
|
||||||
|
time_sec = await time_to_seconds(message.text.split(' ')[1])
|
||||||
|
if time_sec <= 30 or time_sec >= 31536000:
|
||||||
|
await message.reply("Время мута должно быть больше 30 секунд и меньше 365 дней")
|
||||||
|
return
|
||||||
|
date_string = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
|
||||||
|
date_time = datetime.datetime.strptime(date_string, "%Y-%m-%d %H:%M:%S")
|
||||||
|
unix_time = int(mktime(date_time.timetuple()))
|
||||||
|
await bot.restrict_chat_member(message.chat.id, target_id, until_date=unix_time + time_sec,
|
||||||
|
permissions=types.ChatPermissions(can_send_messages=False))
|
||||||
|
await message.reply(
|
||||||
|
f"Пользователь {target_name} замьючен на {await short_time_to_time(time)}")
|
||||||
|
else:
|
||||||
|
await message.reply(
|
||||||
|
f"Пользователь [{target_name}](tg://user?id={target_id}) является {await get_role(target_id)} и не может быть замьючен",
|
||||||
|
parse_mode='Markdown')
|
||||||
|
return
|
||||||
|
else:
|
||||||
|
target_tag = message.text.split(' ')[1]
|
||||||
|
target_tag = target_tag[1:]
|
||||||
|
target_id = int(
|
||||||
|
cursor.execute("SELECT user_id FROM user_list WHERE user_name = ?", (target_tag,)).fetchone()[
|
||||||
|
0])
|
||||||
|
target_name = \
|
||||||
|
cursor.execute("SELECT user_name FROM user_list WHERE user_id = ?", (target_id,)).fetchone()[0]
|
||||||
|
# ограничения прав пользователя по отправке сообщений на time секунд
|
||||||
|
time_mute = message.text.split(' ')[2]
|
||||||
|
|
||||||
|
if cursor.execute("SELECT user_role FROM user_list WHERE user_id = ?", (target_id,)).fetchone()[
|
||||||
|
0] == 0:
|
||||||
|
# ограничения прав пользователя по отправке сообщений на time секунд
|
||||||
|
time_sec = await time_to_seconds(message.text.split(' ')[2])
|
||||||
|
if time_sec <= 30 or time_sec >= 31536000:
|
||||||
|
await message.reply("Время мута должно быть больше 30 секунд и меньше 365 дней")
|
||||||
|
return
|
||||||
|
date_string = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
|
||||||
|
date_time = datetime.datetime.strptime(date_string, "%Y-%m-%d %H:%M:%S")
|
||||||
|
unix_time = int(mktime(date_time.timetuple()))
|
||||||
|
await bot.restrict_chat_member(message.chat.id, target_id, until_date=unix_time + time_sec,
|
||||||
|
permissions=types.ChatPermissions(can_send_messages=False))
|
||||||
|
await message.reply(
|
||||||
|
f"Пользователь {target_name} замьючен на {await short_time_to_time(time_mute)}.")
|
||||||
|
else:
|
||||||
|
await message.reply(
|
||||||
|
f"Пользователь [{target_name}](tg://user?id={target_id}) является {await get_role(target_id)} и не может быть замьючен",
|
||||||
|
parse_mode="Markdown")
|
||||||
|
return
|
||||||
|
except:
|
||||||
|
await message.reply("Ошибка данных. Возможно пользователь ещё ничего не написал.")
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user