From eb78a75a887f48e540fc5be37a0ceb3d783b520d Mon Sep 17 00:00:00 2001 From: profitroll Date: Mon, 26 Jun 2023 23:02:38 +0200 Subject: [PATCH] WIP: /report command --- config_example.json | 9 +++++++++ locale/en.json | 4 +++- locale/uk.json | 4 +++- plugins/commands/report.py | 28 ++++++++++++++++++++++++++++ plugins/handlers/submission.py | 3 +++ 5 files changed, 46 insertions(+), 2 deletions(-) create mode 100644 plugins/commands/report.py diff --git a/config_example.json b/config_example.json index 0d0f248..c91d8bd 100644 --- a/config_example.json +++ b/config_example.json @@ -46,6 +46,7 @@ "disabled_plugins": [], "posting": { "channel": 0, + "comments": 0, "silent": false, "move_sent": false, "use_interval": false, @@ -142,6 +143,14 @@ } ] }, + "report": { + "scopes": [ + { + "name": "BotCommandScopeChat", + "chat_id": "comments" + } + ] + }, "forwards": { "scopes": [ { diff --git a/locale/en.json b/locale/en.json index cd12fb2..533bd33 100644 --- a/locale/en.json +++ b/locale/en.json @@ -60,7 +60,9 @@ "remove_success": "Removed media with ID `{0}`.", "remove_failure": "Could not remove media with ID `{0}`. Check if provided ID is correct and if it is - you can also check bot's log for details.", "update_available": "**New version found**\nThere's a newer version of a bot found. You can update your bot to [{0}]({1}) using command line of your host.\n\n**Release notes**\n{2}\n\nRead more about updating you bot on the [wiki page](https://git.end-play.xyz/profitroll/TelegramPoster/wiki/Updating-Instance).\n\nPlease not that you can also disable this notification by editing `reports.update` key of the config.", - "shutdown_confirm": "There are {0} unfinished users' contexts. If you turn off the bot, those will be lost. Please confirm shutdown using a button below." + "shutdown_confirm": "There are {0} unfinished users' contexts. If you turn off the bot, those will be lost. Please confirm shutdown using a button below.", + "report_sent": "We've notified admins about presumable violation. Thank you for cooperation.", + "report_received": "This message has been reported by {0} (@{1}, `{2}`)" }, "button": { "sub_yes": "✅ Accept", diff --git a/locale/uk.json b/locale/uk.json index 39ce5fc..84a0371 100644 --- a/locale/uk.json +++ b/locale/uk.json @@ -60,7 +60,9 @@ "remove_success": "Видалено медіа з ID `{0}`.", "remove_failure": "Не вдалося видалити медіа з ID `{0}`. Перевірте, чи вказано правильний ID, і якщо він правильний, ви також можете переглянути логи бота для отримання більш детальної інформації.", "update_available": "**Знайдено нову версію**\nЗнайдено нову версію бота. Ви можете оновити бота до [{0}]({1}) за допомогою командного рядка вашого хосту.\n\n**Примітки до релізу**\n{2}\n\nДетальніше про оновлення бота можна знайти на [вікі-сторінці](https://git.end-play.xyz/profitroll/TelegramPoster/wiki/Updating-Instance).\n\nЗверніть увагу, що ви також можете вимкнути це сповіщення, відредагувавши ключ `reports.update` у конфігурації.", - "shutdown_confirm": "Існує {0} незавершених контекстів користувачів. Якщо ви вимкнете бота, вони будуть втрачені. Будь ласка, підтвердіть вимкнення за допомогою кнопки нижче." + "shutdown_confirm": "Існує {0} незавершених контекстів користувачів. Якщо ви вимкнете бота, вони будуть втрачені. Будь ласка, підтвердіть вимкнення за допомогою кнопки нижче.", + "report_sent": "Ми повідомили адміністрацію про потенційне порушення. Дякую за співпрацю.", + "report_received": "На це повідомлення було отримано скаргу від {0} (@{1}, `{2}`)" }, "button": { "sub_yes": "✅ Прийняти", diff --git a/plugins/commands/report.py b/plugins/commands/report.py new file mode 100644 index 0000000..2f88752 --- /dev/null +++ b/plugins/commands/report.py @@ -0,0 +1,28 @@ +from pyrogram.client import Client +from pyrogram import filters +from pyrogram.types import Message +from libbot import sync +from classes.pyroclient import PyroClient + + +@Client.on_message( + ~filters.scheduled + & filters.chat(sync.config_get("comments", "posting")) + & filters.reply + & filters.command(["report"], prefixes=["", "/"]) +) +async def command_report(app: PyroClient, msg: Message): + if msg.reply_to_message.forward_from_chat.id == app.config["posting"]["channel"]: + await msg.reply_text(app._("report_send", "message", locale=msg.from_user.language_code)) + + report_sent = await msg.reply_to_message.forward(app.owner) + sender = msg.from_user if msg.from_user is not None else msg.sender_chat + + sender_name = sender.first_name if hasattr(sender, "first_name") else sender.title + + # ACTION NEEDED + # Name and username are somehow None + await report_sent.reply_text( + app._("report_received", "message").format(sender_name, sender.username, sender.id), + quote=True, + ) \ No newline at end of file diff --git a/plugins/handlers/submission.py b/plugins/handlers/submission.py index a7b1faf..8dcb270 100644 --- a/plugins/handlers/submission.py +++ b/plugins/handlers/submission.py @@ -29,6 +29,9 @@ logger = logging.getLogger(__name__) async def get_submission(app: PyroClient, msg: Message): global USERS_WITH_CONTEXT + if not hasattr(msg.from_user, "id"): + return + if msg.from_user.id in USERS_WITH_CONTEXT: return