diff --git a/config_example.json b/config_example.json index 5d06ffc..a562bc3 100644 --- a/config_example.json +++ b/config_example.json @@ -51,7 +51,8 @@ "enabled": false }, "spoilers": { - "enabled": true + "enabled": true, + "allow_external": true } }, "scheduler": { diff --git a/holochecker.py b/holochecker.py index da72662..c816c26 100644 --- a/holochecker.py +++ b/holochecker.py @@ -31,7 +31,7 @@ from modules.commands.warnings import * from modules.callbacks.nothing import * from modules.callbacks.reapply import * from modules.callbacks.rules import * -from modules.callbacks.sid import * +from modules.callbacks.spoiler import * from modules.callbacks.sponsorship import * from modules.callbacks.sub import * from modules.callbacks.sus import * diff --git a/locale/uk.json b/locale/uk.json index bf71dec..5be5fc5 100644 --- a/locale/uk.json +++ b/locale/uk.json @@ -109,7 +109,9 @@ "spoiler_unfinished": "У вас ще є незавершений спойлер. Надішліть /cancel щоб зупинити його створення", "spoiler_cancel": "Створення спойлера було припинено", "spoiler_empty": "Спойлер категорії \"{0}\" без опису", + "spoiler_empty_named": "Спойлер категорії \"{0}\" без опису від **{1}**", "spoiler_described": "Спойлер категорії \"{0}\": {1}", + "spoiler_described_named": "Спойлер категорії \"{0}\" від **{1}**: {2}", "spoiler_description_enter": "Добре, введіть бажаний опис спойлера", "spoiler_description_too_long": "Текст занадто довгий. Будь ласка, умісти опис у 1024 символи.", "spoiler_using_description": "Встановлено опис спойлера: {0}\n\nЗалишилось додати вміст самого спойлера. Бот приймає текстове повідомлення, фото, відео, файл а також гіф зображення (1 шт.)", @@ -226,8 +228,10 @@ "done": "✅ Готово", "sponsor_apply": "Заповнити форму", "sponsor_started": "Форму розпочато", - "spoiler_send": "Надіслати", - "spoiler_view": "Переглянути" + "spoiler_view": "Переглянути", + "spoiler_preview": "Попередній перегляд", + "spoiler_send_chat": "Надіслати в холо-чат", + "spoiler_send_other": "Надіслати в інший чат" }, "callback": { "sub_accepted": "✅ Анкету {0} схвалено", @@ -243,7 +247,8 @@ "reapply_stopped": "ℹ️ Перервано заповнення анкети", "sponsor_started": "ℹ️ Заповнення форми розпочато", "sponsor_accepted": "✅ Форму {0} схвалено", - "sponsor_rejected": "❌ Форму {0} відхилено" + "sponsor_rejected": "❌ Форму {0} відхилено", + "spoiler_sent": "✅ Повідомлення надіслано в холо-чат" }, "inline": { "forbidden": { diff --git a/modules/callbacks/sid.py b/modules/callbacks/sid.py deleted file mode 100644 index 434690e..0000000 --- a/modules/callbacks/sid.py +++ /dev/null @@ -1,10 +0,0 @@ -from app import app -from pyrogram.types import CallbackQuery -from pyrogram.client import Client -from pyrogram import filters - -# Callback rule ================================================================================================================ -@app.on_callback_query(filters.regex("sid_[\s\S]*")) -async def callback_query_rule(app: Client, clb: CallbackQuery): - await clb.answer(url=f'https://t.me/{(await app.get_me()).username}?start={clb.data.split("_")[1]}') -# ============================================================================================================================== \ No newline at end of file diff --git a/modules/callbacks/spoiler.py b/modules/callbacks/spoiler.py new file mode 100644 index 0000000..8118a34 --- /dev/null +++ b/modules/callbacks/spoiler.py @@ -0,0 +1,31 @@ +from app import app +from pyrogram.types import CallbackQuery, InlineKeyboardMarkup, InlineKeyboardButton +from pyrogram.client import Client +from pyrogram import filters +from modules.database import col_spoilers +from bson.objectid import ObjectId + +from modules.utils import configGet, locale + +# Callback sid ================================================================================================================= +@app.on_callback_query(filters.regex("sid_[\s\S]*")) +async def callback_query_sid(app: Client, clb: CallbackQuery): + await clb.answer(url=f'https://t.me/{(await app.get_me()).username}?start={clb.data.split("_")[1]}') +# ============================================================================================================================== + +# Callback shc ================================================================================================================= +@app.on_callback_query(filters.regex("shc_[\s\S]*")) +async def callback_query_shc(app: Client, clb: CallbackQuery): + + spoil = col_spoilers.find_one( {"_id": ObjectId(clb.data.split("_")[1])} ) + + if spoil["description"] == "": + desc = locale("spoiler_empty_named", "message", locale=clb.from_user).format(locale(spoil["category"], "message", "spoiler_categories"), clb.from_user.first_name) + else: + desc = locale("spoiler_described_named", "message", locale=clb.from_user).format(locale(spoil["category"], "message", "spoiler_categories"), clb.from_user.first_name, spoil["description"]) + + await app.send_message(configGet("users", "groups"), desc, reply_markup=InlineKeyboardMarkup([[InlineKeyboardButton(locale("spoiler_view", "button", locale=clb.from_user), callback_data=f'sid_{clb.data.split("_")[1]}')]])) + await app.send_message(configGet("admin", "groups"), desc, reply_markup=InlineKeyboardMarkup([[InlineKeyboardButton(locale("spoiler_view", "button", locale=clb.from_user), callback_data=f'sid_{clb.data.split("_")[1]}')]])) + + await clb.answer(locale("spoiler_sent", "callback", locale=clb.from_user), show_alert=True) +# ============================================================================================================================== \ No newline at end of file diff --git a/modules/handlers/everything.py b/modules/handlers/everything.py index eaf83cb..e899f19 100644 --- a/modules/handlers/everything.py +++ b/modules/handlers/everything.py @@ -146,7 +146,37 @@ async def any_stage(app: Client, msg: Message): ready = True if ready is True: - await msg.reply_text(locale("spoiler_ready", "message", locale=msg.from_user), reply_markup=InlineKeyboardMarkup([[InlineKeyboardButton(locale("spoiler_send", "button", locale=msg.from_user), switch_inline_query=f"spoiler:{spoiler['_id'].__str__()}")]])) + if configGet("allow_external", "features", "spoilers") is True: + await msg.reply_text( + locale("spoiler_ready", "message", locale=msg.from_user), + reply_markup=InlineKeyboardMarkup( + [ + [ + InlineKeyboardButton(locale("spoiler_preview", "button", locale=msg.from_user), callback_data=f"sid_{spoiler['_id'].__str__()}") + ], + [ + InlineKeyboardButton(locale("spoiler_send_chat", "button", locale=msg.from_user), callback_data=f"shc_{spoiler['_id'].__str__()}") + ], + [ + InlineKeyboardButton(locale("spoiler_send_other", "button", locale=msg.from_user), switch_inline_query=f"spoiler:{spoiler['_id'].__str__()}") + ] + ] + ) + ) + else: + await msg.reply_text( + locale("spoiler_ready", "message", locale=msg.from_user), + reply_markup=InlineKeyboardMarkup( + [ + [ + InlineKeyboardButton(locale("spoiler_preview", "button", locale=msg.from_user), callback_data=f"sid_{spoiler['_id'].__str__()}") + ], + [ + InlineKeyboardButton(locale("spoiler_send_chat", "button", locale=msg.from_user), callback_data=f"shc_{spoiler['_id'].__str__()}") + ] + ] + ) + ) else: await msg.reply_text(locale("spoiler_incorrect_content", "message", locale=msg.from_user)) diff --git a/modules/inline.py b/modules/inline.py index ce25f7b..c8ba27a 100644 --- a/modules/inline.py +++ b/modules/inline.py @@ -22,34 +22,36 @@ async def inline_answer(client: Client, inline_query: InlineQuery): results = [] - if inline_query.query.startswith("spoiler:"): + if configGet("allow_external", "features", "spoilers") is True: - try: + if inline_query.query.startswith("spoiler:"): + + try: - spoil = col_spoilers.find_one( {"_id": ObjectId(inline_query.query.removeprefix("spoiler:"))} ) + spoil = col_spoilers.find_one( {"_id": ObjectId(inline_query.query.removeprefix("spoiler:"))} ) - if spoil is not None: + if spoil is not None: - desc = locale("spoiler_empty", "message", locale=inline_query.from_user).format(locale(spoil["category"], "message", "spoiler_categories")) if spoil["description"] == "" else locale("spoiler_described", "message", locale=inline_query.from_user).format(locale(spoil["category"], "message", "spoiler_categories"), spoil["description"]) + desc = locale("spoiler_empty", "message", locale=inline_query.from_user).format(locale(spoil["category"], "message", "spoiler_categories")) if spoil["description"] == "" else locale("spoiler_described", "message", locale=inline_query.from_user).format(locale(spoil["category"], "message", "spoiler_categories"), spoil["description"]) - results = [ - InlineQueryResultArticle( - title=locale("title", "inline", "spoiler", locale=inline_query.from_user), - description=locale("description", "inline", "spoiler", locale=inline_query.from_user), - input_message_content=InputTextMessageContent(desc, disable_web_page_preview=True), - reply_markup=InlineKeyboardMarkup([[InlineKeyboardButton(locale("spoiler_view", "button", locale=inline_query.from_user), callback_data=f'sid_{inline_query.query.removeprefix("spoiler:")}')]]) - ) - ] + results = [ + InlineQueryResultArticle( + title=locale("title", "inline", "spoiler", locale=inline_query.from_user), + description=locale("description", "inline", "spoiler", locale=inline_query.from_user), + input_message_content=InputTextMessageContent(desc, disable_web_page_preview=True), + reply_markup=InlineKeyboardMarkup([[InlineKeyboardButton(locale("spoiler_view", "button", locale=inline_query.from_user), callback_data=f'sid_{inline_query.query.removeprefix("spoiler:")}')]]) + ) + ] - except InvalidId: - results = [] + except InvalidId: + results = [] - - await inline_query.answer( - results=results - ) + + await inline_query.answer( + results=results + ) - return + return if inline_query.chat_type in [ChatType.CHANNEL]: await inline_query.answer(