Data export, warnings' improvements, bug fixes #35
@ -37,6 +37,7 @@ from modules.callbacks.spoiler import *
|
|||||||
from modules.callbacks.sponsorship import *
|
from modules.callbacks.sponsorship import *
|
||||||
from modules.callbacks.sub import *
|
from modules.callbacks.sub import *
|
||||||
from modules.callbacks.sus import *
|
from modules.callbacks.sus import *
|
||||||
|
from modules.callbacks.warnings import *
|
||||||
|
|
||||||
from modules.handlers.confirmation import *
|
from modules.handlers.confirmation import *
|
||||||
from modules.handlers.contact import *
|
from modules.handlers.contact import *
|
||||||
|
@ -76,10 +76,12 @@
|
|||||||
"application_invalid_syntax": "Неправильний синтаксис!\nТреба: `/application ID/NAME/USERNAME`",
|
"application_invalid_syntax": "Неправильний синтаксис!\nТреба: `/application ID/NAME/USERNAME`",
|
||||||
"warned": "Попереджено **{0}** (`{1}`) про порушення правил",
|
"warned": "Попереджено **{0}** (`{1}`) про порушення правил",
|
||||||
"warned_reason": "Попереджено **{0}** (`{1}`)\n\n**Причина:**\n{2}",
|
"warned_reason": "Попереджено **{0}** (`{1}`)\n\n**Причина:**\n{2}",
|
||||||
"warnings_1": "Користувач **{0}** (`{1}`) має **{2}** попередження",
|
"warnings_1": "Користувач **{0}** (`{1}`) має **{2}** попередження\n\nОбрати та зняти попередження:\n`/warnings {3} revoke`",
|
||||||
"warnings_2": "Користувач **{0}** (`{1}`) має **{2}** попереджень",
|
"warnings_2": "Користувач **{0}** (`{1}`) має **{2}** попереджень\n\nОбрати та зняти попередження:\n`/warnings {3} revoke`",
|
||||||
"warnings_all": "**Список попереджень**\n\n{0}\n\nДля перегляду попереджень окремо взятого користувача слід використовувати `/warnings ID/NAME/USERNAME`",
|
"warnings_all": "**Список попереджень**\n\n{0}\n\nДля перегляду попереджень окремо взятого користувача слід використовувати `/warnings ID/NAME/USERNAME`",
|
||||||
"warnings_entry": "• {0} (`{1}`)\n Попереджень: {2}",
|
"warnings_entry": "• {0} (`{1}`)\n Попереджень: {2}",
|
||||||
|
"warnings_empty": "Щось тут порожньо...\nЗ іншого боку, це добре!",
|
||||||
|
"warnings_revoke": "**Попередження {0}:**\n\n{1}\n\nБудь ласка, користуйтесь клавіатурою щоб зняти попередження з відповідним номером.",
|
||||||
"no_warnings": "Користувач **{0}** (`{1}`) не має попереджень",
|
"no_warnings": "Користувач **{0}** (`{1}`) не має попереджень",
|
||||||
"no_user_warnings": "Не знайдено користувачів за запитом **{0}**",
|
"no_user_warnings": "Не знайдено користувачів за запитом **{0}**",
|
||||||
"syntax_warnings": "Неправильний синтаксис!\nТреба: `/warnings ID/NAME/USERNAME`",
|
"syntax_warnings": "Неправильний синтаксис!\nТреба: `/warnings ID/NAME/USERNAME`",
|
||||||
@ -259,7 +261,9 @@
|
|||||||
"sponsor_accepted": "✅ Форму {0} схвалено",
|
"sponsor_accepted": "✅ Форму {0} схвалено",
|
||||||
"sponsor_rejected": "❌ Форму {0} відхилено",
|
"sponsor_rejected": "❌ Форму {0} відхилено",
|
||||||
"spoiler_sent": "✅ Повідомлення надіслано в холо-чат",
|
"spoiler_sent": "✅ Повідомлення надіслано в холо-чат",
|
||||||
"spoiler_forbidden": "❌ Треба бути учасником чату"
|
"spoiler_forbidden": "❌ Треба бути учасником чату",
|
||||||
|
"warning_revoked": "✅ Попередження скасовано",
|
||||||
|
"warning_not_found": "❌ Попередження вже скасовано або не існує"
|
||||||
},
|
},
|
||||||
"inline": {
|
"inline": {
|
||||||
"forbidden": {
|
"forbidden": {
|
||||||
|
27
modules/callbacks/warnings.py
Normal file
27
modules/callbacks/warnings.py
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
from datetime import datetime
|
||||||
|
from app import app
|
||||||
|
from pyrogram import filters
|
||||||
|
from pyrogram.types import CallbackQuery
|
||||||
|
from pyrogram.client import Client
|
||||||
|
from modules.utils import locale
|
||||||
|
from modules.database import col_warnings
|
||||||
|
from bson import ObjectId
|
||||||
|
|
||||||
|
|
||||||
|
@app.on_callback_query(filters.regex("w_rev_[\s\S]*"))
|
||||||
|
async def callback_query_warning_revoke(app: Client, clb: CallbackQuery):
|
||||||
|
warning = col_warnings.find_one({"_id": ObjectId(str(clb.data).split("_")[2])})
|
||||||
|
if warning is None:
|
||||||
|
await clb.answer(
|
||||||
|
text=locale("warning_not_found", "callback", locale=clb.from_user),
|
||||||
|
show_alert=True,
|
||||||
|
)
|
||||||
|
return
|
||||||
|
col_warnings.update_one(
|
||||||
|
{"_id": warning["_id"]},
|
||||||
|
{"$set": {"active": False, "revoke_date": datetime.now()}},
|
||||||
|
)
|
||||||
|
await clb.answer(
|
||||||
|
text=locale("warning_revoked", "callback", locale=clb.from_user).format(),
|
||||||
|
show_alert=True,
|
||||||
|
)
|
@ -7,6 +7,7 @@ from pyrogram.enums.chat_members_filter import ChatMembersFilter
|
|||||||
from modules.utils import configGet, jsonLoad, locale, should_quote
|
from modules.utils import configGet, jsonLoad, locale, should_quote
|
||||||
from modules.database import col_users, col_warnings
|
from modules.database import col_users, col_warnings
|
||||||
from modules import custom_filters
|
from modules import custom_filters
|
||||||
|
from pykeyboard import InlineKeyboard, InlineButton
|
||||||
|
|
||||||
|
|
||||||
@app.on_message(
|
@app.on_message(
|
||||||
@ -38,15 +39,20 @@ async def cmd_warnings(app: Client, msg: Message):
|
|||||||
warnings[warning]["name"], warning, warnings[warning]["warns"]
|
warnings[warning]["name"], warning, warnings[warning]["warns"]
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
warnings_output = (
|
||||||
|
locale("warnings_empty", "message", locale=msg.from_user)
|
||||||
|
if len(warnings_output) == 0
|
||||||
|
else "\n".join(warnings_output)
|
||||||
|
)
|
||||||
await msg.reply_text(
|
await msg.reply_text(
|
||||||
locale("warnings_all", "message", locale=msg.from_user).format(
|
locale("warnings_all", "message", locale=msg.from_user).format(
|
||||||
"\n".join(warnings_output)
|
warnings_output
|
||||||
),
|
),
|
||||||
quote=should_quote(msg),
|
quote=should_quote(msg),
|
||||||
)
|
)
|
||||||
return
|
return
|
||||||
|
|
||||||
if len(msg.command) > 2:
|
if len(msg.command) > 3:
|
||||||
await msg.reply_text(
|
await msg.reply_text(
|
||||||
locale("syntax_warnings", "message", locale=msg.from_user),
|
locale("syntax_warnings", "message", locale=msg.from_user),
|
||||||
quote=should_quote(msg),
|
quote=should_quote(msg),
|
||||||
@ -78,6 +84,35 @@ async def cmd_warnings(app: Client, msg: Message):
|
|||||||
)
|
)
|
||||||
return
|
return
|
||||||
|
|
||||||
|
if len(msg.command) == 3 and msg.command[2].lower() == "revoke":
|
||||||
|
if col_warnings.count_documents({"user": target_id, "active": True}) == 0:
|
||||||
|
await msg.reply_text(
|
||||||
|
locale("no_warnings", "message", locale=msg.from_user).format(
|
||||||
|
target_name, target_id
|
||||||
|
),
|
||||||
|
quote=should_quote(msg),
|
||||||
|
)
|
||||||
|
return
|
||||||
|
keyboard = InlineKeyboard()
|
||||||
|
buttons = []
|
||||||
|
warnings = []
|
||||||
|
for index, warning in enumerate(
|
||||||
|
list(col_warnings.find({"user": target_id, "active": True}))
|
||||||
|
):
|
||||||
|
warnings.append(
|
||||||
|
f'{index+1}. {warning["date"].strftime("%d.%m.%Y, %H:%M")}\n Адмін: {warning["admin"]}\n Причина: {warning["reason"]}'
|
||||||
|
)
|
||||||
|
buttons.append(InlineButton(str(index + 1), f'w_rev_{str(warning["_id"])}'))
|
||||||
|
keyboard.add(*buttons)
|
||||||
|
await msg.reply_text(
|
||||||
|
locale("warnings_revoke", "message", locale=msg.from_user).format(
|
||||||
|
target_name, "\n".join(warnings)
|
||||||
|
),
|
||||||
|
reply_markup=keyboard,
|
||||||
|
quote=should_quote(msg),
|
||||||
|
)
|
||||||
|
return
|
||||||
|
|
||||||
warns = col_warnings.count_documents({"user": target_id, "active": True})
|
warns = col_warnings.count_documents({"user": target_id, "active": True})
|
||||||
|
|
||||||
if warns == 0:
|
if warns == 0:
|
||||||
@ -91,14 +126,14 @@ async def cmd_warnings(app: Client, msg: Message):
|
|||||||
if warns <= 5:
|
if warns <= 5:
|
||||||
await msg.reply_text(
|
await msg.reply_text(
|
||||||
locale("warnings_1", "message", locale=msg.from_user).format(
|
locale("warnings_1", "message", locale=msg.from_user).format(
|
||||||
target_name, target_id, warns
|
target_name, target_id, warns, target_id
|
||||||
),
|
),
|
||||||
quote=should_quote(msg),
|
quote=should_quote(msg),
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
await msg.reply_text(
|
await msg.reply_text(
|
||||||
locale("warnings_2", "message", locale=msg.from_user).format(
|
locale("warnings_2", "message", locale=msg.from_user).format(
|
||||||
target_name, target_id, warns
|
target_name, target_id, warns, target_id
|
||||||
),
|
),
|
||||||
quote=should_quote(msg),
|
quote=should_quote(msg),
|
||||||
)
|
)
|
||||||
|
@ -8,6 +8,7 @@ psutil==5.9.4
|
|||||||
pymongo==4.3.3
|
pymongo==4.3.3
|
||||||
Pyrogram~=2.0.102
|
Pyrogram~=2.0.102
|
||||||
python_dateutil==2.8.2
|
python_dateutil==2.8.2
|
||||||
|
pykeyboard==0.1.5
|
||||||
requests==2.28.2
|
requests==2.28.2
|
||||||
starlette==0.26.1
|
starlette==0.26.1
|
||||||
tgcrypto==1.2.5
|
tgcrypto==1.2.5
|
||||||
|
Reference in New Issue
Block a user